--- a/.hgignore Mon Jan 14 12:34:47 2019 -0500
+++ b/.hgignore Mon Jan 14 12:35:32 2019 -0500
@@ -20,6 +20,7 @@
cmake_install.cmake
QTfrontend/hwconsts.cpp
QTfrontend/servermessages.h
+QTfrontend/creditsmessages.h
CPackConfig.cmake
CPackSourceConfig.cmake
tools/cmake_uninstall.cmake
@@ -89,3 +90,5 @@
*.user
*.iml
build-qmlfrontend*
+.cabal-sandbox
+cabal.sandbox.config
--- a/CMakeLists.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/CMakeLists.txt Mon Jan 14 12:35:32 2019 -0500
@@ -72,9 +72,6 @@
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4" AND UNIX AND NOT APPLE)
set(BUILD_ENGINE_C ON CACHE STRING "PAS2C force-enabled due to a freepascal 32 bit alignment bug" FORCE)
endif()
-if(BUILD_ENGINE_C)
- set(NOVIDEOREC ON CACHE STRING "PAS2C does not support video recording at present" FORCE)
-endif()
#system paths for finding required fonts (see share/hedgewars/Data/fonts)
#subdirectories will NOT be searched.
@@ -82,11 +79,15 @@
set(FONTS_DIRS "" CACHE STRING "Additional paths to folders where required fonts can be found ( ; is separator)")
#versioning
-set(CPACK_PACKAGE_VERSION_MAJOR 0)
-set(CPACK_PACKAGE_VERSION_MINOR 9)
-set(CPACK_PACKAGE_VERSION_PATCH 25)
-set(HEDGEWARS_PROTO_VER 57)
-set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+set(CPACK_PACKAGE_VERSION_MAJOR 1)
+set(CPACK_PACKAGE_VERSION_MINOR 0)
+set(CPACK_PACKAGE_VERSION_PATCH 0)
+set(HEDGEWARS_PROTO_VER 58)
+if((CMAKE_BUILD_TYPE MATCHES "RELEASE") OR (CMAKE_BUILD_TYPE MATCHES "RELWITHDEBUGINFO"))
+ set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+else()
+ set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-dev")
+endif()
include(${CMAKE_MODULE_PATH}/revinfo.cmake)
message(STATUS "Building ${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION} (${HEDGEWARS_HASH})")
--- a/CREDITS Mon Jan 14 12:34:47 2019 -0500
+++ b/CREDITS Mon Jan 14 12:35:32 2019 -0500
@@ -1,6 +1,7 @@
=============================
=== EXTENDED CREDITS LIST ===
=============================
+For the main credits, click on the Hedgewars logo in the main menu.
IF NOT OTHERWISE SPECIFIED, ALL OTHER CONTENT IS PROPERTY OF Andrey Korotaev <unC0Rr@gmail.com>.
IF NO LICENSE IS SPECIFIED, THE LICENSE IS THE SAME AS MENTIONED IN README.md.
@@ -12,26 +13,6 @@
==========
- see Fonts_LICENSE.txt
-=================
-= FRONTEND IMAGES
-=================
-(File name suffixes are omitted)
-
-- Tango Project and Wuzzy -> audio, home (CC0)
-- abustany and Wuzzy -> Videos (CC0)
-- Juliane Krug and Wuzzy -> Palette (CC0)
-- raseone and Wuzzy -> folder (CC0)
-
-==========
-= FORTS
-==========
-- Carlos Vives -> Tank (2010)
-- Dragonfly -> EvilChicken (2010)
-- Randy Broda -> SteelTower (2013)
-- Jon Dum and Wuzzy -> Snail (2017)
-- Maciej Mroziński (a.k.a. alzen) and Wuzzy -> Lonely_Island (2017)
-- Guillaume Englert and Wuzzy -> Olympic (2017)
-
==========
= HATS
==========
@@ -51,57 +32,32 @@
- Terrington_Snyde -> pirate_eyepatch (2013), jester (2013)
- Wohlstand -> policegirl [based on policecap and sm_daisy] (2014)
- TheMadCharles -> barrelhider (CC BY 3.0) (2015)
+- Trey Perry <perry.j@gmail.com> -> Other hats
==========
-= GRAVESTONES
+= GRAVES
==========
- Randy Broda -> dragonball (2012)
- CheezeMonkey -> pi (2011)
- rosenholz -> Whisky (2013)
-==========
-= MAPS
-==========
-- John Dum <fizzy@gmail.com> -> Bath (2008), Hedgelove (2008), Hedgewars (2008), Hydrant (2008), mushrooms (2008), Plane (2008)
-- Joshua Frese <joshfrese@gmail.com> -> Bamboo (2008), EarthRise (2008), Freeway (2008), BambooPlinko (2008)
-- Stanko Tadić <stanko@mfhinc.net> -> Castle (2008), PirateFlag (2008)
-- dctPL -> Sticks (2010)
-- wolfmarc & Dragonfly -> TrophyRace (2010), ShoppaKing (2010)
+=================
+= FRONTEND IMAGES
+=================
+(File name suffixes are omitted)
-==========
-= MUSIC
-==========
-- HSR ( http://elhombresinremedio.com ) -> (new) City theme, Rock theme and many other tracks
-- John Dum <fizzy@gmail.com> -> Nature theme
-- Jonatan Nilsson <jonatanfan@gmail.com> -> Pirate theme, EarthRise (former City) theme, Oriental theme, Snow theme)
-- yd - http://opengameart.org/users/yd -> "oriented", used as Olympics SD theme
-- Kevin MacLeod - http://incompetech.com/ -> "hitman", used as basis for preliminary default SD theme
-- Valentin Kraevskiy (alias alfadur) -> Jungle theme, Fruit theme
+- Tango Project and Wuzzy -> audio, home (CC0)
+- abustany and Wuzzy -> Videos (CC0)
+- Juliane Krug and Wuzzy -> Palette (CC0)
+- raseone and Wuzzy -> folder (CC0)
+
+==================
+= OTHER GRAPHICS =
+==================
+- Custom ammo images for Continental supplies: KarBoy2314PL
==========
-= THEMES
-==========
-- John Dum <fizzy@gmail.com> -> Nature (2008), Snow (2008), City
-- Joshua Frese <joshfrese@gmail.com> -> Bamboo (2008), EarthRise (2008), Freeway (2008), BambooPlinko (2008)
-- Stanko Tadić <stanko@mfhinc.net> -> Hell (2008)
-- Julien Koesten <julienkoesten@aol.com> -> Sheep (2008)
-- KoRn666 - Jungle (2010)
-- Randy Broda -> Fruit (2013), Cake (2014)
-
-==========
-= VOICES
-==========
-- Stephen Alexander <ArmagonNo1@gmail.com>
-- mtg90pl <mtg90pl@gmail.com>: Default_pl, Russian_pl
-
-==========
-= MISSIONS
-==========
-- Arkhnen -> Teamwork 2 (2012)
-- Wuzzy -> Big Armory (2016)
-
-==========
-= SOUNDS
+= SOUND EFFECTS
==========
- Mine impact sound from http://www.freesound.org/people/adcbicycle/sounds/13947/
- Hammer sound from http://www.freesound.org/people/Syna-Max/sounds/43586/
@@ -139,11 +95,6 @@
- Shoryuken hit: Based off sound by CGEffex (CC-BY 3.0), tweaked by alfadur
http://freesound.org/people/CGEffex/sounds/98341/
-==================
-= OTHER GRAPHICS =
-==================
-- Custom ammo images for Continental supplies: KarBoy2314PL
-
======================
= LICENSE REFERENCES =
======================
--- a/ChangeLog.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/ChangeLog.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,5 +1,84 @@
+ features
* bugfixes
+============== 1.0.0-dev (unreleased) ==============
+Gameplay:
+ + Hand-drawn maps can now be scaled with slider
+ + Slightly longer delays between turns to make it easier to follow the game
+ + Track high scores in singleplayer challenges
+ + Show check mark for completed scenarios, challenges and trainings
+ + Training/challenge/scenario menu now supports team selection
+ * Fix hedgehogs being pushed around (and other collision bugs) when they overlap
+ * Fix homing bee flying weird if passing wrap world edge or target was placed beyond it
+ * Fix poison damage not working in first round
+ * Use player-chosen team identity in campaigns and singleplayer missions
+ * Fix player-chosen teams ignoring custom team controls in campaigns
+ * Fix broken behaviour of airborne attacks when placed near bounce world edge
+ * Deny placement of airborne attack in “impossible” places in maps with bounce world edge
+ * Deny placement of piano beyond bounce world edge
+
+Styles and schemes:
+ + The Specialists: Unlock game scheme
+ + The Specialists: Add script parameter support to set custom specialists order
+ * Balanced Random Weapon: Fix Lua errors after using Time Box
+ * Racer: Fix racer ghost not getting reset after a skip
+ * King Mode: Fix team sometimes not being killed properly if king drowned
+ * King Mode: Kill resurrected minions if king is not alive
+
+A Classic Fairytale:
+ * First blood: Fix Lua error when hitting Attack after failing the rope challenge
+
+A Space Adventure:
+ + Show your current records at mission start when re-playing one of the challenges
+ + Spacetrip: Move flowers of desert planet above cactus
+ * Searching in the dust: Fix mission ending when all smugglers are dead
+ * Chasing the blue hog: Fix player not losing the race when timing out while still having the rope
+ * Chasing the blue hog: Fix player winning if Crazy Runner died
+ * Various minor tweaks and bugfixes
+
+Controls:
+ + Add control to unselect current weapon (no key chosen by default)
+ + Allow to leave a control unused
+ + New chat command: “/help room” (shows room chat commands within the game)
+
+Graphics:
+ + Show contour of flying saucer when in highly opaque water
+ * Fix speech bubbles overlapping in the wrong order
+ * Fix wrong ice beam angle if it goes diagonally up out of map through world wrap
+ * Fix double water splash when flying saucer drowns
+
+Game HUD:
+ + Colorize switching arrows, pointing arrow and target cross in clan color
+ + Skip ammo menu animation when playing with turn time of 10s or less
+ + Don't show crate spawn message for initial crates in missions
+ + Display player name of own teams in online games
+ * Fix last 2 characters in demo chat being missing
+ * Hide most HUD elements in cinematic mode
+ * Don't show "F1", "F2", etc. in ammo menu if these aren't the actual slot keys
+ * Fix wind bar animation not looping properly
+ * Fix airplane line being drawn above many HUD elements
+ * Suppress “<team> is gone.” message at end of game
+
+Frontend:
+ + Restructure credits
+ + Credits screen in main menu is now translatable
+ * Fix force-locked schemes getting unlocked when changing map types
+
+Lua API:
+ + New call: SaveMissionVar(varname, value): Save value to mission variable (variable for non-campaign mission)
+ + New call: GetMissionVar(varname): Get value of mission variable
+ + New call: SetTurnTimePaused(isPaused): Call with true to pause turn time, false to unpause
+ + New call: GetTurnTimePaused(): Returns true if turn time is paused due to Lua
+ + New call: AddMissionTeam(color): Add mission team, i.e. the team selected by player in campaign/mission page
+ + New call: AddMissionHog(health): Add a hedgehog for the mission team
+ + New return value: AddTeam/AddMissionTeam return <real team name>, <team index>
+ + Utils library: New calls: getReadableChallengeRecord, updateChallengeRecord
+ + New callback: onGameResult(winningClan): Called when the game ends normally. winningClan = index of winning clan or -1 on draw
+ + SendStat extension: Option to use predefined modes with siPointType, like "!POINTS" or "!TIME"
+ + SimpleMission: Add isMissionTeam attribute for teams
+ + SpeedShoppa/TargetPractice libraries: Remove custom hog and team info settings
+ + Params explode, poison in the SpawnFake*Crate functions now optional and default to false
+ + New global: InitHealth: Initial hog health value from game scheme (read-only)
+
====================== 0.9.25 ======================
HIGHLIGHTS:
+ Complete overhaul of Continental supplies
--- a/QTfrontend/CMakeLists.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/CMakeLists.txt Mon Jan 14 12:35:32 2019 -0500
@@ -45,6 +45,37 @@
list(APPEND locsout ${firstline} "\n}\\;\n")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/servermessages.h ${locsout})
+
+# Credits localization
+file(GLOB CreditsCSV ${CMAKE_SOURCE_DIR}/QTfrontend/res/credits.csv)
+foreach(csvfile ${CreditsCSV})
+ # Load credits.csv
+ file(READ ${csvfile} csv)
+
+ # Match first line of CSV file
+ string(REGEX MATCH "(E|S|U),\"[^\n\"]+\"" loc_top ${csv})
+ string(REGEX REPLACE "(E|S|U),\"([^\n\"]+)\"" "\nQT_TRANSLATE_NOOP(\"credits\", \"\\2\")" s ${loc_top})
+ list(APPEND csvlocs ${s})
+
+ # Match remaining lines of CSV file
+ string(REGEX MATCHALL "\n(E|S|U),\"[^\n\"]+\"" locs ${csv})
+ foreach(str ${locs})
+ string(REGEX REPLACE "(E|S|U),\"([^\n\"]+)\"" "QT_TRANSLATE_NOOP(\"credits\", \"\\2\")" s ${str})
+ list(APPEND csvlocs ${s})
+ endforeach(str)
+endforeach(csvfile)
+
+list(REMOVE_DUPLICATES csvlocs)
+list(GET csvlocs 0 firstline)
+list(REMOVE_AT csvlocs 0)
+set(locsout "const char * creditsMessages[] = {")
+foreach(l ${csvlocs})
+ list(APPEND locsout ${l} ",")
+endforeach(l)
+list(APPEND locsout ${firstline} "\n}\\;\n")
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/creditsmessages.h ${locsout})
+
+
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/model)
@@ -92,6 +123,7 @@
main.cpp
team.cpp
campaign.cpp
+ mission.cpp
ui_hwform.cpp
${CMAKE_CURRENT_BINARY_DIR}/hwconsts.cpp
${CMAKE_CURRENT_SOURCE_DIR}/sdlkeys.cpp
@@ -137,7 +169,9 @@
hwconsts.h
sdlkeys.h
campaign.h
+ mission.h
${CMAKE_CURRENT_BINARY_DIR}/servermessages.h
+ ${CMAKE_CURRENT_BINARY_DIR}/creditsmessages.h
)
set(hwfr_rez hedgewars.qrc)
--- a/QTfrontend/binds.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/binds.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -39,6 +39,7 @@
{"slot 8", "f8", QT_TRANSLATE_NOOP("binds", "slot 8"), NULL, NULL},
{"slot 9", "f9", QT_TRANSLATE_NOOP("binds", "slot 9"), NULL, NULL},
{"slot :", "f10", QT_TRANSLATE_NOOP("binds", "slot 10"), NULL, NULL},
+ {"setweap ~", "none", QT_TRANSLATE_NOOP("binds", "unselect weapon"), NULL, NULL},
{"timer 1", "1", QT_TRANSLATE_NOOP("binds", "timer 1 sec"), NULL, QT_TRANSLATE_NOOP("binds (descriptions)", "Set the timer on bombs and timed weapons:")},
{"timer 2", "2", QT_TRANSLATE_NOOP("binds", "timer 2 sec"), NULL, NULL},
{"timer 3", "3", QT_TRANSLATE_NOOP("binds", "timer 3 sec"), NULL, NULL},
--- a/QTfrontend/binds.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/binds.h Mon Jan 14 12:35:32 2019 -0500
@@ -22,9 +22,9 @@
#include <QString>
#ifdef VIDEOREC
-#define BINDS_NUMBER 51
+#define BINDS_NUMBER 52
#else
-#define BINDS_NUMBER 50
+#define BINDS_NUMBER 51
#endif
struct BindAction
--- a/QTfrontend/campaign.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/campaign.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -52,7 +52,7 @@
missionInList: QComboBox index of the mission as selected in the mission widget
teamName: Name of the playing team
*/
-bool isMissionWon(QString & campaignName, int missionInList, QString & teamName)
+bool isCampMissionWon(QString & campaignName, int missionInList, QString & teamName)
{
QSettings* teamfile = getCampTeamFile(campaignName, teamName);
int progress = teamfile->value("Campaign " + campaignName + "/Progress", 0).toInt();
--- a/QTfrontend/campaign.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/campaign.h Mon Jan 14 12:35:32 2019 -0500
@@ -36,7 +36,7 @@
QSettings* getCampTeamFile(QString & campaignName, QString & teamName);
QSettings* getCampMetaInfo();
bool isCampWon(QString & campaignName, QString & teamName);
-bool isMissionWon(QString & campaignName, int missionInList, QString & teamName);
+bool isCampMissionWon(QString & campaignName, int missionInList, QString & teamName);
QString getRealCampName(const QString & campaignName);
QList<MissionInfo> getCampMissionList(QString & campaignName, QString & teamName);
--- a/QTfrontend/game.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/game.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -29,6 +29,8 @@
#include "hwform.h"
#include "ui/page/pageoptions.h"
+#include "ui/page/pagetraining.h"
+#include "ui/page/pagecampaign.h"
#include "game.h"
#include "hwconsts.h"
#include "gameuiconfig.h"
@@ -44,12 +46,11 @@
// last game info
QList<QVariant> lastGameStartArgs = QList<QVariant>();
GameType lastGameType = gtNone;
-QString lastTrainingSubFolder = NULL;
GameCFGWidget * lastGameCfg = NULL;
QString lastGameAmmo = NULL;
TeamSelWidget * lastGameTeamSel = NULL;
-QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
+QString trainingName, trainingScript, trainingTeam, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
TCPBase(true, 0),
@@ -184,8 +185,16 @@
{
QByteArray traincfg;
HWProto::addStringToBuffer(traincfg, "TL");
+
+ HWTeam missionTeam = HWTeam();
+ missionTeam.setName(config->Form->ui.pageTraining->CBTeam->currentText());
+ missionTeam.loadFromFile();
+ missionTeam.setNumHedgehogs(HEDGEHOGS_PER_TEAM);
+ missionTeam.setMissionTeam(true);
+ HWProto::addStringListToBuffer(traincfg, missionTeam.teamGameConfig(100));
+
HWProto::addStringToBuffer(traincfg, "eseed " + QUuid::createUuid().toString());
- HWProto::addStringToBuffer(traincfg, "escript " + training);
+ HWProto::addStringToBuffer(traincfg, "escript " + trainingScript);
RawSendIPC(traincfg);
}
@@ -194,8 +203,15 @@
{
QByteArray campaigncfg;
HWProto::addStringToBuffer(campaigncfg, "TL");
+
+ HWTeam missionTeam = HWTeam();
+ missionTeam.setName(config->Form->ui.pageCampaign->CBTeam->currentText());
+ missionTeam.loadFromFile();
+ missionTeam.setNumHedgehogs(HEDGEHOGS_PER_TEAM);
+ missionTeam.setMissionTeam(true);
+ HWProto::addStringListToBuffer(campaigncfg, missionTeam.teamGameConfig(100));
+
HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString());
-
HWProto::addStringToBuffer(campaigncfg, "escript " + campaignScript);
RawSendIPC(campaigncfg);
@@ -288,7 +304,7 @@
QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
emit SendChat(msgbody);
QByteArray buf;
- HWProto::addStringToBuffer(buf, "s" + HWProto::formatChatMsg(config->netNick(), msgbody));
+ HWProto::addStringToBuffer(buf, "s" + HWProto::formatChatMsg(config->netNick(), msgbody) + "\x20\x20");
demo.append(buf);
break;
}
@@ -307,6 +323,14 @@
writeCampaignVar(msg.right(msg.size() - 3));
break;
}
+ case 'v':
+ {
+ if (msg.at(2) == '?')
+ sendMissionVar(msg.right(msg.size() - 3));
+ else if (msg.at(2) == '!')
+ writeMissionVar(msg.right(msg.size() - 3));
+ break;
+ }
case 'W':
{
// fetch new window resolution via IPC and save it in the settings
@@ -342,21 +366,21 @@
void HWGame::FromNetChat(const QString & msg)
{
QByteArray buf;
- HWProto::addStringToBuffer(buf, 's' + msg);
+ HWProto::addStringToBuffer(buf, 's' + msg + "\x20\x20");
RawSendIPC(buf);
}
void HWGame::FromNetWarning(const QString & msg)
{
QByteArray buf;
- HWProto::addStringToBuffer(buf, "s\x00" + msg);
+ HWProto::addStringToBuffer(buf, "s\x00" + msg + "\x20\x20");
RawSendIPC(buf);
}
void HWGame::FromNetError(const QString & msg)
{
QByteArray buf;
- HWProto::addStringToBuffer(buf, "s\x05" + msg);
+ HWProto::addStringToBuffer(buf, "s\x05" + msg + "\x20\x20");
RawSendIPC(buf);
}
@@ -500,16 +524,19 @@
SetGameState(gsStarted);
}
-void HWGame::StartTraining(const QString & file, const QString & subFolder)
+void HWGame::StartTraining(const QString & file, const QString & subFolder, const QString & trainTeam)
{
lastGameStartArgs.clear();
lastGameStartArgs.append(file);
+ lastGameStartArgs.append(subFolder);
+ lastGameStartArgs.append(trainTeam);
lastGameType = gtTraining;
- lastTrainingSubFolder = subFolder;
gameType = gtTraining;
- training = "Missions/" + subFolder + "/" + file + ".lua";
+ trainingScript = "Missions/" + subFolder + "/" + file + ".lua";
+ trainingName = file;
+ trainingTeam = trainTeam;
demo.clear();
Start(false);
SetGameState(gsStarted);
@@ -538,7 +565,11 @@
emit GameStateChanged(state);
if (gameType == gtCampaign)
{
- emit CampStateChanged(1);
+ emit CampStateChanged(1);
+ }
+ else if (gameType == gtTraining)
+ {
+ emit TrainingStateChanged(1);
}
}
@@ -574,3 +605,28 @@
teamfile.setValue("Campaign " + campaign + "/" + varToWrite, varValue);
}
+void HWGame::sendMissionVar(const QByteArray &varToSend)
+{
+ QString varToFind = QString::fromUtf8(varToSend);
+ QSettings teamfile(QString(cfgdir->absolutePath() + "/Teams/%1.hwt").arg(trainingTeam), QSettings::IniFormat, 0);
+ teamfile.setIniCodec("UTF-8");
+ QString varValue = teamfile.value("Mission " + trainingName + "/" + varToFind, "").toString();
+ QByteArray command;
+ HWProto::addStringToBuffer(command, "v." + varValue);
+ RawSendIPC(command);
+}
+
+void HWGame::writeMissionVar(const QByteArray & varVal)
+{
+ int i = varVal.indexOf(" ");
+ if(i < 0)
+ return;
+
+ QString varToWrite = QString::fromUtf8(varVal.left(i));
+ QString varValue = QString::fromUtf8(varVal.mid(i + 1));
+
+ QSettings teamfile(QString(cfgdir->absolutePath() + "/Teams/%1.hwt").arg(trainingTeam), QSettings::IniFormat, 0);
+ teamfile.setIniCodec("UTF-8");
+ teamfile.setValue("Mission " + trainingName + "/" + varToWrite, varValue);
+}
+
--- a/QTfrontend/game.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/game.h Mon Jan 14 12:35:32 2019 -0500
@@ -64,7 +64,6 @@
// last game info
extern QList<QVariant> lastGameStartArgs;
extern GameType lastGameType;
-extern QString lastTrainingSubFolder;
extern GameCFGWidget * lastGameCfg;
extern QString lastGameAmmo;
extern TeamSelWidget * lastGameTeamSel;
@@ -80,7 +79,7 @@
void StartLocal();
void StartQuick();
void StartNet();
- void StartTraining(const QString & file, const QString & subFolder);
+ void StartTraining(const QString & file, const QString & subFolder, const QString & trainTeam);
void StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam);
void abort();
GameState gameState;
@@ -100,6 +99,7 @@
void HaveRecord(RecordType type, const QByteArray & record);
void ErrorMessage(const QString &);
void CampStateChanged(int);
+ void TrainingStateChanged(int);
void SendConsoleCommand(const QString & command);
public slots:
@@ -127,6 +127,8 @@
void SetGameState(GameState state);
void sendCampaignVar(const QByteArray & varToSend);
void writeCampaignVar(const QByteArray &varVal);
+ void sendMissionVar(const QByteArray & varToSend);
+ void writeMissionVar(const QByteArray &varVal);
void flushNetBuffer();
};
--- a/QTfrontend/hedgewars.qrc Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/hedgewars.qrc Mon Jan 14 12:35:32 2019 -0500
@@ -44,6 +44,8 @@
<file>res/CampaignDefault.png</file>
<file>res/Multiplayer.png</file>
<file>res/Trainings.png</file>
+ <file>res/Challenges.png</file>
+ <file>res/Scenarios.png</file>
<file>res/Background.png</file>
<file>res/BackgroundChristmas.png</file>
<file>res/BackgroundEaster.png</file>
@@ -206,10 +208,13 @@
<file>res/chat/lamp_off.png</file>
<file>res/chat/ingame.png</file>
<file>res/splash.png</file>
- <file>res/html/about.html</file>
+ <file>res/credits.csv</file>
<file>res/chat/hedgehogcontributor.png</file>
<file>res/chat/hedgehogcontributor_gray.png</file>
<file>res/chat/roomadmincontributor.png</file>
<file>res/chat/roomadmincontributor_gray.png</file>
</qresource>
+ <qresource lang="en">
+ <file alias="res/Trainings.png">res/Trainings_en.png</file>
+ </qresource>
</RCC>
--- a/QTfrontend/hwform.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/hwform.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -57,6 +57,7 @@
#include "hwform.h"
#include "game.h"
#include "team.h"
+#include "mission.h"
#include "campaign.h"
#include "teamselect.h"
#include "selectWeapon.h"
@@ -218,6 +219,7 @@
previousTeamName = "";
UpdateTeamsLists();
InitCampaignPage();
+ RestoreSingleplayerTeamSelection();
UpdateCampaignPage(0);
UpdateCampaignPageTeam(0);
UpdateCampaignPageMission(0);
@@ -330,6 +332,9 @@
connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPageTeam(int)));
connect(ui.pageCampaign->CBCampaign, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int)));
connect(ui.pageCampaign->CBMission, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPageMission(int)));
+ connect(ui.pageTraining->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateTrainingPageTeam(int)));
+ connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), ui.pageTraining->CBTeam, SLOT(setCurrentIndex(int)));
+ connect(ui.pageTraining->CBTeam, SIGNAL(currentIndexChanged(int)), ui.pageCampaign->CBTeam, SLOT(setCurrentIndex(int)));
connect(ui.pageSelectWeapon->pWeapons, SIGNAL(weaponsDeleted(QString)),
this, SLOT(DeleteWeapons(QString)));
@@ -572,7 +577,8 @@
ui.pageOptions->CBTeamName->clear();
ui.pageOptions->CBTeamName->addItems(teamslist);
ui.pageCampaign->CBTeam->clear();
- /* Only show human teams in campaign page */
+ ui.pageTraining->CBTeam->clear();
+ /* Only show human teams in campaign/training page */
for(int i=0; i<teamslist.length(); i++)
{
HWTeam testTeam = HWTeam(teamslist[i]);
@@ -580,8 +586,10 @@
if(testTeam.difficulty() == 0)
{
ui.pageCampaign->CBTeam->addItem(teamslist[i]);
+ ui.pageTraining->CBTeam->addItem(teamslist[i]);
}
}
+ UpdateTrainingPageTeam(0);
}
void HWForm::GoToNewWeapons()
@@ -921,6 +929,11 @@
GoBack();
}
+ if (curid == ID_PAGE_CAMPAIGN)
+ config->setValue("frontend/lastSingleplayerTeam", ui.pageCampaign->CBTeam->currentText());
+ if (curid == ID_PAGE_TRAINING)
+ config->setValue("frontend/lastSingleplayerTeam", ui.pageTraining->CBTeam->currentText());
+
if (curid == ID_PAGE_ROOMSLIST || curid == ID_PAGE_CONNECTING) NetDisconnect();
if (curid == ID_PAGE_NETGAME && hwnet && hwnet->isInRoom()) hwnet->partRoom();
// need to work on this, can cause invalid state for admin quit trying to prevent bad state message on kick
@@ -1790,6 +1803,7 @@
{
game = new HWGame(config, gamecfg, ammo, pTeamSelWidget);
connect(game, SIGNAL(CampStateChanged(int)), this, SLOT(UpdateCampaignPageProgress(int)));
+ connect(game, SIGNAL(TrainingStateChanged(int)), this, SLOT(UpdateTrainingPageTeam(int)));
connect(game, SIGNAL(GameStateChanged(GameState)), this, SLOT(GameStateChanged(GameState)));
connect(game, SIGNAL(GameStats(char, const QString &)), ui.pageGameStats, SLOT(GameStats(char, const QString &)));
connect(game, SIGNAL(ErrorMessage(const QString &)), this, SLOT(ShowFatalErrorMessage(const QString &)), Qt::QueuedConnection);
@@ -1842,7 +1856,8 @@
{
CreateGame(0, 0, 0);
- game->StartTraining(scriptName, subFolder);
+ QString trainTeam = ui.pageTraining->CBTeam->currentText();
+ game->StartTraining(scriptName, subFolder, trainTeam);
}
void HWForm::StartCampaign()
@@ -1997,6 +2012,36 @@
}
}
+void HWForm::UpdateTrainingPageTeam(int index)
+{
+ Q_UNUSED(index);
+ HWTeam team(ui.pageTraining->CBTeam->currentText());
+ QString tName = team.name();
+
+ QListWidget* listWidget;
+ for(int w = 0; w < 3; w++)
+ {
+ switch(w) {
+ case 0: listWidget = ui.pageTraining->lstTrainings; break;
+ case 1: listWidget = ui.pageTraining->lstChallenges; break;
+ case 2: listWidget = ui.pageTraining->lstScenarios; break;
+ default: listWidget = ui.pageTraining->lstTrainings; break;
+ }
+ unsigned int n = listWidget->count();
+
+ for(unsigned int i = 0; i < n; i++)
+ {
+ QListWidgetItem* item = listWidget->item(i);
+ QString missionName = QString(item->data(Qt::UserRole).toString()).replace(QString(" "),QString("_"));
+ if(isMissionWon(missionName, tName))
+ item->setIcon(finishedIcon);
+ else
+ item->setIcon(notFinishedIcon);
+ }
+ }
+ ui.pageTraining->updateInfo();
+}
+
void HWForm::InitCampaignPage()
{
ui.pageCampaign->CBCampaign->clear();
@@ -2016,6 +2061,27 @@
QString tName = team.name();
ui.pageCampaign->CBCampaign->addItem(getRealCampName(campaignName), campaignName);
}
+
+}
+
+void HWForm::RestoreSingleplayerTeamSelection()
+{
+ QString lastTeam = config->value("frontend/lastSingleplayerTeam", QString()).toString();
+ if (!lastTeam.isNull() && !lastTeam.isEmpty())
+ {
+ int index = ui.pageCampaign->CBTeam->findData(lastTeam, Qt::DisplayRole);
+ if(index != -1)
+ {
+ ui.pageCampaign->CBTeam->setCurrentIndex(index);
+ UpdateCampaignPageTeam(index);
+ }
+ index = ui.pageTraining->CBTeam->findData(lastTeam, Qt::DisplayRole);
+ if(index != -1)
+ {
+ ui.pageTraining->CBTeam->setCurrentIndex(index);
+ UpdateTrainingPageTeam(index);
+ }
+ }
}
void HWForm::UpdateCampaignPage(int index)
@@ -2031,7 +2097,7 @@
for(int i=0;i<campaignMissionInfo.size();i++)
{
ui.pageCampaign->CBMission->addItem(QString(campaignMissionInfo[i].realName), QString(campaignMissionInfo[i].name));
- if(isMissionWon(campaignName, i, tName))
+ if(isCampMissionWon(campaignName, i, tName))
ui.pageCampaign->CBMission->setItemIcon(i, finishedIcon);
else
ui.pageCampaign->CBMission->setItemIcon(i, notFinishedIcon);
@@ -2235,7 +2301,7 @@
switch(lastGameType) {
case gtTraining:
- game->StartTraining(lastGameStartArgs.at(0).toString(), lastTrainingSubFolder);
+ game->StartTraining(lastGameStartArgs.at(0).toString(), lastGameStartArgs.at(1).toString(), lastGameStartArgs.at(2).toString());
break;
case gtQLocal:
game->StartQuick();
--- a/QTfrontend/hwform.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/hwform.h Mon Jan 14 12:35:32 2019 -0500
@@ -135,7 +135,9 @@
void UpdateCampaignPageTeam(int index);
void UpdateCampaignPageProgress(int index);
void UpdateCampaignPageMission(int index);
+ void UpdateTrainingPageTeam(int index);
void InitCampaignPage();
+ void RestoreSingleplayerTeamSelection();
void showFeedbackDialog();
void showFeedbackDialogNetChecked();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/mission.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,79 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2018 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "mission.h"
+#include "hwconsts.h"
+#include "DataManager.h"
+#include <QSettings>
+#include <QObject>
+#include <QLocale>
+
+QSettings* getMissionTeamFile(QString & missionName, QString & teamName)
+{
+ QSettings* teamfile = new QSettings(cfgdir->absolutePath() + "/Teams/" + teamName + ".hwt", QSettings::IniFormat, 0);
+ teamfile->setIniCodec("UTF-8");
+ if (!teamfile->childGroups().contains("Mission " + missionName) &&
+ teamfile->childGroups().contains("Mission " + missionName)){
+ teamfile->beginGroup("Mission " + missionName);
+ QStringList keys = teamfile->childKeys();
+ teamfile->endGroup();
+ for (int i=0;i<keys.size();i++) {
+ QVariant value = teamfile->value("Mission " + missionName + "/" + keys[i]);
+ teamfile->setValue("Mission " + missionName + "/" + keys[i], value);
+ }
+ teamfile->remove("Mission " + missionName);
+ }
+
+ return teamfile;
+}
+
+/**
+ Returns true if the specified mission has been completed
+ missionName: Name of the mission in question
+ teamName: Name of the playing team
+*/
+bool isMissionWon(QString & missionName, QString & teamName)
+{
+ QSettings* teamfile = getMissionTeamFile(missionName, teamName);
+ bool won = teamfile->value("Mission " + missionName + "/Won", false).toBool();
+ return won;
+}
+
+/**
+ Returns true if the mission value adressed with the provided
+ missionName: Name of the mission in question
+ teamName: Name of the playing team
+ key: name of key to check
+*/
+bool missionValueExists(QString & missionName, QString & teamName, QString key)
+{
+ QSettings* teamfile = getMissionTeamFile(missionName, teamName);
+ return teamfile->contains("Mission " + missionName + "/" + key);
+}
+/**
+ Returns a mission value.
+ NOTE: Check whether the mission value exists first, using missionValueExists.
+ missionName: Name of the mission in question
+ teamName: Name of the playing team
+ key: name of key to read its value from
+*/
+QVariant getMissionValue(QString & missionName, QString & teamName, QString key)
+{
+ QSettings* teamfile = getMissionTeamFile(missionName, teamName);
+ return teamfile->value("Mission " + missionName + "/" + key);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/mission.h Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,30 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2018 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef MISSION_H
+#define MISSION_H
+
+#include <QString>
+#include <QSettings>
+
+QSettings* getMissionTeamFile(QString & missionName, QString & teamName);
+bool isMissionWon(QString & missionName, QString & teamName);
+bool missionValueExists(QString & missionName, QString & teamName, QString key);
+QVariant getMissionValue(QString & missionName, QString & teamName, QString key);
+
+#endif
--- a/QTfrontend/model/gameSchemeModel.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/model/gameSchemeModel.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -89,6 +89,7 @@
<< "King Mode"
<< "Mutant"
<< "Construction Mode"
+ << "The Specialists"
<< "Space Invasion"
<< "HedgeEditor"
;
@@ -671,9 +672,58 @@
<< QVariant("initialenergy=550, energyperround=50, maxenergy=1000, cratesperround=5") // scriptparam 43
;
+ QList<QVariant> specialists;
+ specialists
+ << predefSchemesNames[12] // name 0
+ << QVariant(true) // switchhog 1
+ << QVariant(false) // team divide 2
+ << QVariant(false) // solid land 3
+ << QVariant(false) // border 4
+ << QVariant(false) // low gravity 5
+ << QVariant(false) // laser sight 6
+ << QVariant(false) // invulnerable 7
+ << QVariant(false) // reset health 8
+ << QVariant(false) // vampiric 9
+ << QVariant(false) // karma 10
+ << QVariant(false) // artillery 11
+ << QVariant(false) // random order 12
+ << QVariant(false) // king 13
+ << QVariant(true) // place hog 14
+ << QVariant(false) // shared ammo 15
+ << QVariant(false) // disable girders 16
+ << QVariant(false) // disable land objects 17
+ << QVariant(false) // AI survival 18
+ << QVariant(true) // inf. attack 19
+ << QVariant(true) // reset weps 20
+ << QVariant(true) // per hog ammo 21
+ << QVariant(false) // no wind 22
+ << QVariant(false) // more wind 23
+ << QVariant(false) // tag team 24
+ << QVariant(false) // bottom border 25
+ << QVariant(100) // damage modfier 26
+ << QVariant(45) // turn time 27
+ << QVariant(100) // init health 28
+ << QVariant(15) // sudden death 29
+ << QVariant(5) // case prob 30
+ << QVariant(3) // mines time 31
+ << QVariant(0) // mines number 32
+ << QVariant(0) // mine dud pct 33
+ << QVariant(0) // explosives 34
+ << QVariant(0) // air mines 35
+ << QVariant(100) // health case pct 36
+ << QVariant(25) // health case amt 37
+ << QVariant(47) // water rise amt 38
+ << QVariant(5) // health dec amt 39
+ << QVariant(100) // rope modfier 40
+ << QVariant(100) // get away time 41
+ << QVariant(0) // world edge 42
+ // NOTE: If you change this, also change the defaults in the The Specialists script
+ << QVariant("t=SENDXHPL") // scriptparam 43
+ ;
+
QList<QVariant> spaceinvasion;
spaceinvasion
- << predefSchemesNames[12] // name 0
+ << predefSchemesNames[13] // name 0
<< QVariant(false) // switchhog 1
<< QVariant(false) // team divide 2
<< QVariant(false) // solid land 3
@@ -722,7 +772,7 @@
QList<QVariant> hedgeeditor;
hedgeeditor
- << predefSchemesNames[13] // name 0
+ << predefSchemesNames[14] // name 0
<< QVariant(false) // switchhog 1
<< QVariant(false) // team divide 2
<< QVariant(false) // solid land 3
@@ -782,6 +832,7 @@
schemes.append(kingmode);
schemes.append(mutant);
schemes.append(construction);
+ schemes.append(specialists);
schemes.append(spaceinvasion);
schemes.append(hedgeeditor);
Binary file QTfrontend/res/Challenges.png has changed
Binary file QTfrontend/res/Challenges.xcf has changed
Binary file QTfrontend/res/Scenarios.png has changed
Binary file QTfrontend/res/Trainings.png has changed
Binary file QTfrontend/res/Trainings_en.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/res/credits.csv Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,179 @@
+S,"Project founder",,,
+E,,"Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+S,"Programming",,,
+U,"Game engine",,,
+E,"Creator","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+E,"Many engine improvements","Derek Pomery","nemo@m8y.org","nemo"
+E,"Many engine improvements","Carlos Vives","mail@carlosvives.es",
+E,"Many engine improvements","Richard Karolyi","sheepluva@ercatec.net","sheepluva"
+E,,,"Wuzzy2@mail.ru","Wuzzy"
+E,,"Henrik Rostedt","henrik.rostedt@gmail.com",
+E,"Gamepad and Lua integration","Mario Liebisch","mario.liebisch@gmail.com",
+E,"Campaign support","Szabolcs Orbàn","szabibibi@gmail.com",
+E,"Theme customization improvements",,,"KoBeWi"
+E,"Some Pas2C and GLES2 work","Meng Xiangyun","xymengxy@gmail.com",
+E,"Video recording","Stepan Podoskin","stepik-777@mail.ru",
+E,"Other improvements","Valentin Kraevskiy",,"alfadur"
+U,"Map generation",,,
+E,"Core map generators","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+E,"Perlin maps and other improvements","Derek Pomery","nemo@m8y.org","nemo"
+E,"Maze maps","Henning Kühn","prg@cooco.de",
+U,"Weapons",,,
+E,"Most core weapons","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+E,"Air mine, rubber, others","Derek Pomery","nemo@m8y.org","nemo"
+E,"Drill rocket, ballgun, RC plane","Martin Boze","afffect@gmail.com",
+E,"Freezer","Julia Struchenko","urbertar@gmail.com",
+E,"Mine number and time game settings","David A. Cuadrado","krawek@gmail.com",
+M,,,,
+U,"Frontend / main menu",,,
+E,"Creator","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+E,"Many frontend improvements","Derek Pomery","nemo@m8y.org","nemo"
+E,"Many frontend improvements","Richard Karolyi","sheepluva@ercatec.net","sheepluva"
+E,"Many frontend improvements","Igor Ulyanov","disinbox@gmail.com",
+E,"Keybinds, feedback, maps and hats interfaces","Drew Gottlieb","gottlieb.drew@gmail.com",
+E,"Login dialogs, other improvements","Ondrej Skopek","skopekondrej@gmail.com",
+E,,,"Wuzzy2@mail.ru","Wuzzy"
+E,,"Martin Minarik","ttsmj@pokec.sk",
+E,,"Kristian Lehmann","email@thexception.net",
+E,,"Henrik Rostedt","henrik.rostedt@gmail.com",
+E,,"Mayur Pawashe","zorgiepoo@gmail.com",
+E,,"Valentin Kraevskiy",,"alfadur"
+U,"Missions and styles",,,
+E,"A Classic Fairytale","Szabolcs Orbàn","szabibibi@gmail.com",
+E,"A Space Adventure",,,"Master_ex"
+E,"Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW",,,"mikade"
+E,"Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance",,"Wuzzy2@mail.ru","Wuzzy"
+E,"Some styles and missions","John Lambert","redgrinner@gmail.com","redgrinner"
+E,"Battalion",,"Anachron14@gmx.de","Anachron"
+E,"Continental supplies",,,"Vatten"
+E,"Teamwork 2",,,"Arkhnen"
+E,"Climb Home","Derek Pomery","nemo@m8y.org","nemo"
+E,"Portal Mind Challenge",,,"sphrix"
+M,,,,
+U,"Game server",,,
+E,"Creator","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+M,,,,
+U,"Ports",,,
+E,"macOS/iPhone port, OpenGL-ES conversion","Vittorio Giovara","vittorio.giovara@gmail.com",
+E,"Android port","Richard Deurwaarder","xeli@xelification.com","xeli"
+E,"Android netplay, portability abstraction","Simeon Maxein","smaxein@googlemail.com",
+E,"WebGL port","Meng Xiangyun","xymengxy@gmail.com",
+E,"iPhone/iPad ports","Anton Malmygina","antonc27@mail.ru",
+S,"Graphics",,,
+U,"General",,,
+E,,"John Dum","fizzy@gmail.com",
+E,,"Joshua Frese","joshfrese@gmail.com",
+E,,"Stanko Tadić","stanko@mfhinc.net",
+E,,"Julien Koesten","julienkoesten@aol.com",
+E,,"Joshua O'Sullivan","coheedftw@hotmail.co.uk",
+E,,"Nils Lück","nils.luck.design@gmail.com",
+E,,"Guillaume Englert","genglert@hybird.org",
+E,,,"ppicondo.cvac@gmail.com","CopherNeue"
+E,,"Valentin Kraevskiy",,"alfadur"
+E,,"Carlos Vives","mail@carlosvives.es",
+U,"Themes",,,
+E,"Nature, Snow, City, Castle, Halloween, Island","John Dum","fizzy@gmail.com",
+E,"Bamboo, EarthRise, BambooPlinko","Joshua Frese","joshfrese@gmail.com",
+E,"Golf, Hoggywood, Stage",,,"RoFra"
+E,"Hoggywood",,"Wuzzy2@mail.ru","Wuzzy"
+E,"Cave, Olympics","Guillaume Englert","genglert@hybird.org",
+E,"Fruit, Cake","Randy Broda",,"Randy"
+E,"Art",,,"Zippy"
+E,"Beach",,"ppicondo.cvac@gmail.com","CopherNeue"
+E,"Beach",,,"Miguelac"
+E,"Brick",,,"AlexYeCu"
+E,"Hell","Stanko Tadić","stanko@mfhinc.net",
+E,"Jungle",,,"KoRn666"
+E,"Sheep","Julien Koesten","julienkoesten@aol.com",
+M,,,,
+U,"Maps",,,
+E,"Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree","John Dum","fizzy@gmail.com",
+E,"SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle","Chucklefish, Ltd",,
+E,"Bamboo, Blox, Cake, Cogs, EarthRise, Freeway","Joshua Frese","joshfrese@gmail.com",
+E,"Castle, PirateFlag","Stanko Tadić","stanko@mfhinc.net",
+E,"ShoppaKing, TrophyRace",,,"wolfmarc & Dragonfly"
+E,"Battlefield",,,"nickstu"
+E,"CTF_Blizzard",,,"Palewolf"
+E,"Cheese",,"ppicondo.cvac@gmail.com","CopherNeue"
+E,"ClimbHome","Derek Pomery","nemo@m8y.org","nemo"
+E,"Lonely_Island","Maciej Mrozinski","mynick2@o2.pl","alzen"
+E,"Octorama",,,"jessor"
+E,"portal",,,"sphrix"
+E,"Ruler","Guillaume Englert","genglert@hybrid.org",
+E,"Sticks",,,"dctPL"
+M,,,,
+U,"Forts",,,
+E,"EvilChicken",,,"Dragonfly"
+E,"Lonely_Island","Maciej Mrozinski","mynick2@o2.pl","alzen"
+E,"Olympic","Guillaume Englert","genglert@hybird.org",
+E,"Olympic",,"Wuzzy2@mail.ru","Wuzzy"
+E,"Tank","Carlos Vives","mail@carlosvives.es",
+E,"Snail","John Dum","fizzy@gmail.com",
+E,"Snail",,"Wuzzy2@mail.ru","Wuzzy"
+E,"SteelTower","Randy Broda",,"Randy"
+M,,,,
+U,"Hats, graves, other",,,
+E,"See CREDITS text file",,,
+S,"Sounds",,,
+E,"Hedgehogs voice","Stephen Alexander","ArmagonNo1@gmail.com","Armagon"
+E,"Default_pl, Russian_pl voices",,"mtg90pl@gmail.com","mtg90pl"
+E,,"John Dum","fizzy@gmail.com",
+E,,"Jonatan Nilsson","jonatanfan@gmail.com",
+E,,"Daniel Martin","elhombresinremedio@gmail.com","HSR"
+E,"Various authors from www.freesound.org (see CREDITS text file)",,
+S,"Music",,,
+E,"City, Rock, others","Daniel Martin","elhombresinremedio@gmail.com","HSR"
+E,"Compost",,,"HG"
+E,"EarthRise, oriental, Pirate, snow","Jonatan Nilsson","jonatanfan@gmail.com",
+E,"Fruit, Jungle","Valentin Kraevskiy",,"alfadur"
+E,"Nature","John Dum","fizzy@gmail.com",
+E,"olympics_sd",,,"yd <http://opengameart.org/users/yd>"
+E,"sdmusic (Hitman [sheepluva edit])","Kevin MacLeod",,
+M,,,,
+S,"Translations",,,
+E,"Brazilian Portuguese","Romulo Fernandes Machado","abra185@gmail.com",
+E,"Bulgarian","Svetoslav Stefanov",,
+E,"Czech","Petr Řezáček","rezacek@gmail.com",
+E,"Chinese","Jie Luo","lililjlj@gmail.com",
+E,"Finnish","Nina Kuisma","ninnnu@gmail.com",
+E,"Finnish","Janne Uusitupa",,
+E,"French","Antoine Turmel","geekshadow@gmail.com",
+E,"French","Clement Woitrain","sphrixclement@gmail.com",
+E,"French",,,"Matisumi"
+E,"French",,,"Case_Of"
+E,"German","Peter Hüwe","PeterHuewe@gmx.de",
+E,"German","Mario Liebisch","mario.liebisch@gmail.com",
+E,"German","Richard Karolyi","sheepluva@ercatec.net","sheepluva"
+E,"German",,"Wuzzy2@mail.ru","Wuzzy"
+E,"Greek",,"talos_kriti@yahoo.gr",
+E,"Italian","Luca Bonora","bonora.luca@gmail.com",
+E,"Italian","Marco Bresciani","m.bresciani@email.it",
+E,"Italian","Gianfranco Costamagna","costamagnagianfranco@yahoo.it",
+E,"Italian",,"enricobe@hotmail.com","Enrico"
+E,"Japanese","ADAM Etienne","etienne.adam@gmail.com",
+E,"Japanese","Marco Bresciani","m.bresciani@email.it",
+E,"Korean","Anthony Bellew","anthonyreflected@gmail.com",
+E,"Lithuanian","Lukas Urbonas","lukasu08@gmail.com",
+E,"Polish","Maciej Mroziński","mynick2@o2.pl","alzen"
+E,"Polish","Wojciech Latkowski","magik17l@gmail.com",
+E,"Polish","Piotr Mitana",,
+E,"Polish","Maciej Górny",,
+E,"Polish",,,"KoBeWi"
+E,"Portuguese","Fábio Canário","inufabie@gmail.com",
+E,"Russian","Andrey Korotaev","unC0Rr@gmail.com","unC0Rr"
+E,"Russian","Vitaly Novichkov","admin@wohlnet.ru",
+E,"Russian","Anton Malmygina","antonc27@mail.ru",
+E,"Russian","Grigory Ustinov","grenka@altlinux.org","grenka"
+E,"Scottish Gaelic",,,"GunChleoc"
+E,"Slovak","Jose Riha",,
+E,"Spanish","Carlos Vives","mail@carlosvives.es",
+E,"Swedish","Niklas Grahn","raewolusjoon@yaoo.com",
+E,"Swedish","Henrik Rostedt","henrik.rostedt@gmail.com",
+E,"Ukrainian","Eugene V. Lyubimkin","jackyf.devel@gmail.com",
+E,"Ukrainian","Igor Paliychuk","mansonigor@gmail.com",
+E,"Ukrainian","Eugene Sakara","eresid@gmail.com",
+S,"Special thanks",,,
+E,,"Aleksey Andreev","blaknayabr@gmail.com",,
+E,,"Aleksander Rudalev","alexv@pomorsu.ru",,
+E,,"Natasha Korotaeva","layout@pisem.net",,
+E,,"Adam Higerd",,"ahigerd"
--- a/QTfrontend/res/css/april1.css Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/res/css/april1.css Mon Jan 14 12:35:32 2019 -0500
@@ -442,7 +442,7 @@
background-color: #150A61;
}
-QDialogButtonBox QPushButton {
+.QPushButton, .QPushButtonWithSound {
padding: 3px 5px;
}
--- a/QTfrontend/res/css/birthday.css Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/res/css/birthday.css Mon Jan 14 12:35:32 2019 -0500
@@ -446,7 +446,7 @@
background-color: #150A61;
}
-QDialogButtonBox QPushButton {
+.QPushButton, .QPushButtonWithSound {
padding: 3px 5px;
}
--- a/QTfrontend/res/css/christmas.css Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/res/css/christmas.css Mon Jan 14 12:35:32 2019 -0500
@@ -441,7 +441,7 @@
background-color: #150A61;
}
-QDialogButtonBox QPushButton {
+.QPushButton, .QPushButtonWithSound {
padding: 3px 5px;
}
--- a/QTfrontend/res/css/easter.css Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/res/css/easter.css Mon Jan 14 12:35:32 2019 -0500
@@ -438,7 +438,7 @@
background-color: #150A61;
}
-QDialogButtonBox QPushButton {
+.QPushButton, .QPushButtonWithSound {
padding: 3px 5px;
}
--- a/QTfrontend/res/css/qt.css Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/res/css/qt.css Mon Jan 14 12:35:32 2019 -0500
@@ -433,7 +433,7 @@
background-color: #150A61;
}
-QDialogButtonBox QPushButton {
+.QPushButton, .QPushButtonWithSound {
padding: 3px 5px;
}
--- a/QTfrontend/res/html/about.html Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-<!DOCTYPE HTML>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<title>Hedgewars - Authors</title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<style type="text/css">
- body { color: orange; }
- a { color: #ffe270; }
- a:hover { color: yellow; }
-</style>
-</head>
-<body>
- <h2>Developers:</h2>
- <p>
- Engine, frontend, net server: Andrey Korotaev <<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>><br />
- Many frontend improvements: Igor Ulyanov <<a href="mailto:disinbox@gmail.com">disinbox@gmail.com</a>><br />
- Many engine and frontend improvements: Derek Pomery <<a href="mailto:nemo@m8y.org">nemo@m8y.org</a>><br />
- Drill rocket, Ballgun, RC Plane weapons: Martin Boze <<a href="mailto:afffect@gmail.com">afffect@gmail.com</a>><br />
- Mine number and time game settings: David A. Cuadrado <<a href="mailto:krawek@gmail.com">krawek@gmail.com</a>><br />
- Frontend improvements: Martin Minarik <<a href="mailto:ttsmj@pokec.sk">ttsmj@pokec.sk</a>><br />
- Frontend improvements: Kristian Lehmann <<a href="mailto:email@thexception.net">email@thexception.net</a>><br />
- Mac OS X/iPhone port, OpenGL-ES conversion: Vittorio Giovara <<a href="mailto:vittorio.giovara@gmail.com">vittorio.giovara@gmail.com</a>><br />
- Many engine and frontend improvements (and bugs): Richard Karolyi <<a href="mailto:sheepluva@ercatec.net">sheepluva@ercatec.net</a>><br />
- Gamepad and Lua integration: Mario Liebisch <<a href="mailto:mario.liebisch@gmail.com">mario.liebisch@gmail.com</a>><br />
- Many engine improvements and graphics: Carlos Vives <<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>><br />
- Maze maps: Henning Kühn <<a href="mailto:prg@cooco.de">prg@cooco.de</a>><br />
- Engine and frontend improvements: Henrik Rostedt <<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>><br />
- Lua game modes and missions: John Lambert <<a href="mailto:redgrinner@gmail.com">redgrinner@gmail.com</a>><br />
- Frontend improvements: Mayur Pawashe <<a href="mailto:zorgiepoo@gmail.com">zorgiepoo@gmail.com</a>><br />
- Android port: Richard Deurwaarder <<a href="mailto:xeli@xelification.com">xeli@xelification.com</a>><br />
- Android netplay, portability abstraction: Simeon Maxein <<a href="mailto:smaxein@googlemail.com">smaxein@googlemail.com</a>><br />
- WebGL port, some pas2c and GLES2 work: Meng Xiangyun <<a href="mailto:xymengxy@gmail.com">xymengxy@gmail.com</a>><br />
- Video recording: Stepan Podoskin <<a href="mailto:stepik-777@mail.ru">stepik-777@mail.ru</a>><br />
- Campaign support, first campaign: Szabolcs Orbàn <<a href="mailto:szabibibi@gmail.com">szabibibi@gmail.com</a>><br />
- Keybinds, feedback, maps and hats interfaces: Drew Gottlieb <<a href="mailto:gottlieb.drew@gmail.com">gottlieb.drew@gmail.com</a>><br />
- Login dialogs, frontend improvements: Ondrej Skopek <<a href="mailto:skopekondrej@gmail.com">skopekondrej@gmail.com</a>><br />
- Icegun weapon: Julia Struchenko <<a href="mailto:urbertar@gmail.com">urbertar@gmail.com</a>><br />
- iPhone/iPad ports: Anton Malmygin <<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>><br />
- Battalion style: Anachron <<a href="mailto:Anachron14@gmx.de">Anachron14@gmx.de</a>><br />
- Scripting, engine, frontend improvements, some missions: Wuzzy <<a href="mailto:Wuzzy2@mail.ru">Wuzzy2@mail.ru</a>><br />
- Theme customization improvements: KoBeWi<br />
- Theme music, engine and frontend improvements, graphics: Valentin Kraevskiy <!--<<a href="mailto:foo@bar.com">foo@bar.com</a>>--><br />
- </p>
-
- <h2>Art:</h2>
- <p>John Dum <<a href="mailto:fizzy@gmail.com">fizzy@gmail.com</a>>
- <br />
- Joshua Frese <<a href="mailto:joshfrese@gmail.com">joshfrese@gmail.com</a>>
- <br />
- Stanko Tadić <<a href="mailto:stanko@mfhinc.net">stanko@mfhinc.net</a>>
- <br />
- Julien Koesten <<a href="mailto:julienkoesten@aol.com">julienkoesten@aol.com</a>>
- <br />
- Joshua O'Sullivan <<a href="mailto:coheedftw@hotmail.co.uk">coheedftw@hotmail.co.uk</a>>
- <br />
- Nils Lück <<a href="mailto:nils.luck.design@gmail.com">nils.luck.design@gmail.com</a>>
- <br />
- Guillaume Englert <<a href="mailto:genglert@hybird.org">genglert@hybird.org</a>>
- <br />
- <p>CopherNeue <<a href="mailto:ppicondo.cvac@gmail.com">ppicondo.cvac@gmail.com</a>>
- <br />
- Hats: Trey Perry <<a href="mailto:tx.perry.j@gmail.com">tx.perry.j@gmail.com</a>>
- </p>
-
- <h2>Sounds:</h2>
- <p>
- Hedgehogs voice: Stephen Alexander <<a href="mailto:ArmagonNo1@gmail.com">ArmagonNo1@gmail.com</a>>
- <br />
- John Dum <<a href="mailto:fizzy@gmail.com">fizzy@gmail.com</a>>
- <br />
- Jonatan Nilsson <<a href="mailto:jonatanfan@gmail.com">jonatanfan@gmail.com</a>>
- <br />
- Daniel Martin <<a href="mailto:elhombresinremedio@gmail.com">elhombresinremedio@gmail.com</a>>
- </p>
-
- <h2>Translations:</h2><p>
- Brazilian Portuguese: Romulo Fernandes Machado <<a href="mailto:abra185@gmail.com">abra185@gmail.com</a>><br />
- Bulgarian: Svetoslav Stefanov<br />
- Czech: Petr Řezáček <<a href="mailto:rezacek@gmail.com">rezacek@gmail.com</a>><br />
- Chinese: Jie Luo <<a href="mailto:lililjlj@gmail.com">lililjlj@gmail.com</a>><br />
- English: Andrey Korotaev <<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>><br />
- Finnish: Nina Kuisma <<a href="mailto:ninnnu@gmail.com">ninnnu@gmail.com</a>>, Janne Uusitupa<br />
- French: Antoine Turmel <<a href="mailto:geekshadow@gmail.com">geekshadow@gmail.com</a>>, Clement Woitrain <<a href="mailto:sphrixclement@gmail.com">sphrixclement@gmail.com</a>>, Matisumi, Case_Of<br />
- German: Peter Hüwe <<a href="mailto:PeterHuewe@gmx.de">PeterHuewe@gmx.de</a>>, Mario Liebisch <<a href="mailto:mario.liebisch@gmail.com">mario.liebisch@gmail.com</a>>, Richard Karolyi <<a href="mailto:sheepluva@ercatec.net">sheepluva@ercatec.net</a>>, Wuzzy <<a href="mailto:Wuzzy2@mail.ru">Wuzzy2@mail.ru</a>><br />
- Greek: <<a href="mailto:talos_kriti@yahoo.gr">talos_kriti@yahoo.gr</a>><br />
- Italian: Luca Bonora <<a href="mailto:bonora.luca@gmail.com">bonora.luca@gmail.com</a>>, Marco Bresciani <<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>>, Gianfranco Costamagna <<a href="mailto:costamagnagianfranco@yahoo.it">costamagnagianfranco@yahoo.it</a>>, Enrico <<a href="mailto:enricobe@hotmail.com">enricobe@hotmail.com</a>><br />
- Japanese: ADAM Etienne <<a href="mailto:etienne.adam@gmail.com">etienne.adam@gmail.com</a>>, Marco Bresciani <<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>><br />
- Korean: Anthony Bellew <<a href="mailto:anthonyreflected@gmail.com">anthonyreflected@gmail.com</a>><br />
- Lithuanian: Lukas Urbonas <<a href="mailto:lukasu08@gmail.com">lukasu08@gmail.com</a>><br />
- Polish: Maciej Mroziński <<a href="mailto:mynick2@o2.pl">mynick2@o2.pl</a>>, Wojciech Latkowski <<a href="mailto:magik17l@gmail.com">magik17l@gmail.com</a>>, Piotr Mitana, Maciej Górny, KoBeWi<br />
- Portuguese: Fábio Canário <<a href="mailto:inufabie@gmail.com">inufabie@gmail.com</a>><br />
- Russian: Andrey Korotaev <<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>>, Vitaly Novichkov <<a href="mailto:admin@wohlnet.ru">admin@wohlnet.ru</a>>, Anton Malmygin <<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>>, greno4ka, Grigory Ustinov <<a href="mailto:grenka@altlinux.org">grenka@altlinux.org</a>><br />
- Scottish Gaelic: GunChleoc<br />
- Slovak: Jose Riha<br />
- Spanish: Carlos Vives <<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>><br />
- Swedish: Niklas Grahn <<a href="mailto:raewolusjoon@yaoo.com">raewolusjoon@yaoo.com</a>>, Henrik Rostedt <<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>><br />
- Ukrainian: Eugene V. Lyubimkin <<a href="mailto:jackyf.devel@gmail.com">jackyf.devel@gmail.com</a>>, Igor Paliychuk <<a href="mailto:mansonigor@gmail.com">mansonigor@gmail.com</a>>, Eugene Sakara <<a href="mailto:eresid@gmail.com">eresid@gmail.com</a>>
- </p>
-
- <h2>Special thanks:</h2><p>
- Aleksey Andreev <<a href="mailto:blaknayabr@gmail.com">blaknayabr@gmail.com</a>><br />
- Aleksander Rudalev <<a href="mailto:alexv@pomorsu.ru">alexv@pomorsu.ru</a>><br />
- Natasha Korotaeva <<a href="mailto:layout@pisem.net">layout@pisem.net</a>><br />
- Adam Higerd (aka ahigerd at FreeNode)
- </p>
-</body>
-</html>
--- a/QTfrontend/sdlkeys.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/sdlkeys.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -197,3 +197,6 @@
char controllerleft[128] = QT_TRANSLATE_NOOP("binds (keys)", "Left");
char controllerright[128] = QT_TRANSLATE_NOOP("binds (keys)", "Right");
+//: When a control has no key binding
+char unboundcontrol[128] = QT_TRANSLATE_NOOP("binds (keys)", "(Unused)");
+
--- a/QTfrontend/sdlkeys.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/sdlkeys.h Mon Jan 14 12:35:32 2019 -0500
@@ -30,5 +30,6 @@
extern char controllerdown[128];
extern char controllerleft[128];
extern char controllerright[128];
+extern char unboundcontrol[128];
#endif
--- a/QTfrontend/team.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/team.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -35,6 +35,7 @@
, m_difficulty(0)
, m_numHedgehogs(4)
, m_isNetTeam(false)
+ , m_isMissionTeam(false)
{
m_name = teamname;
OldTeamName = m_name;
@@ -61,6 +62,7 @@
QObject(0)
, m_numHedgehogs(4)
, m_isNetTeam(true)
+ , m_isMissionTeam(false)
{
// net teams are configured from QStringList
if(strLst.size() != 23) throw HWTeamConstructException();
@@ -88,6 +90,7 @@
, m_difficulty(0)
, m_numHedgehogs(4)
, m_isNetTeam(false)
+ , m_isMissionTeam(false)
{
m_name = QString("Team");
for (int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
@@ -125,6 +128,7 @@
, m_numHedgehogs(other.m_numHedgehogs)
, m_color(other.m_color)
, m_isNetTeam(other.m_isNetTeam)
+ , m_isMissionTeam(other.m_isMissionTeam)
, m_owner(other.m_owner)
// , AchievementProgress(other.AchievementProgress)
{
@@ -149,6 +153,7 @@
m_isNetTeam = other.m_isNetTeam;
m_owner = other.m_owner;
m_color = other.m_color;
+ m_isMissionTeam = other.m_isMissionTeam;
}
return *this;
@@ -243,12 +248,25 @@
QStringList HWTeam::teamGameConfig(quint32 InitHealth) const
{
QStringList sl;
+ QString cmdAddHog = "eaddhh";
+
if (m_isNetTeam)
{
sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(QString(QCryptographicHash::hash(m_owner.toUtf8(), QCryptographicHash::Md5).toHex())));
sl.push_back("erdriven");
}
- else sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(playerHash));
+ else
+ {
+ if (m_isMissionTeam)
+ {
+ sl.push_back(QString("esetmissteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(playerHash));
+ cmdAddHog = "eaddmisshh";
+ }
+ else
+ {
+ sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(playerHash));
+ }
+ }
sl.push_back(QString("egrave " + m_grave));
sl.push_back(QString("efort " + m_fort));
@@ -260,7 +278,7 @@
for (int t = 0; t < m_numHedgehogs; t++)
{
- sl.push_back(QString("eaddhh %1 %2 %3")
+ sl.push_back(QString(cmdAddHog + " %1 %2 %3")
.arg(QString::number(m_difficulty),
QString::number(InitHealth),
m_hedgehogs[t].Name));
@@ -281,6 +299,15 @@
return m_isNetTeam;
}
+void HWTeam::setMissionTeam(bool isMissionTeam)
+{
+ m_isMissionTeam = isMissionTeam;
+}
+
+bool HWTeam::isMissionTeam() const
+{
+ return m_isMissionTeam;
+}
bool HWTeam::operator==(const HWTeam& t1) const
{
@@ -322,6 +349,10 @@
return m_owner;
}
+void HWTeam::setOwner(const QString & owner)
+{
+ m_owner = owner;
+}
// difficulty
--- a/QTfrontend/team.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/team.h Mon Jan 14 12:35:32 2019 -0500
@@ -72,10 +72,12 @@
QString grave() const;
const HWHog & hedgehog(unsigned int idx) const;
bool isNetTeam() const;
+ bool isMissionTeam() const;
QString keyBind(unsigned int idx) const;
QString name() const;
unsigned char numHedgehogs() const;
QString owner() const;
+ void setOwner(const QString & owner);
QString voicepack() const;
// attribute setters
@@ -89,6 +91,7 @@
void setNumHedgehogs(unsigned char num);
void setVoicepack(const QString & voicepack);
void setNetTeam(bool isNetTeam);
+ void setMissionTeam(bool isMissionTeam);
// convert team info into strings for further computation
QStringList teamGameConfig(quint32 InitHealth) const;
@@ -119,6 +122,7 @@
quint8 m_numHedgehogs;
int m_color;
bool m_isNetTeam;
+ bool m_isMissionTeam;
QString m_owner;
// class members that contain statistics, etc.
--- a/QTfrontend/ui/page/pagegamestats.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagegamestats.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -320,7 +320,8 @@
i = playerinfo.indexOf(' ');
- int kills = playerinfo.left(i).toInt();
+ QString killsString = playerinfo.left(i);
+ int kills = killsString.toInt();
QString playername = playerinfo.mid(i + 1);
QString image;
@@ -351,14 +352,30 @@
QString message;
QString killstring;
- if(kindOfPoints.compare("") == 0) {
+ if(kindOfPoints.isEmpty()) {
//: Number of kills in stats screen, written after the team name
killstring = PageGameStats::tr("(%1 kill)", "", kills).arg(kills);
+ } else if (kindOfPoints == "!POINTS") {
+ //: Number of points in stats screen, written after the team name
+ killstring = PageGameStats::tr("(%1 point(s))", "", kills).arg(kills);
+ } else if (kindOfPoints == "!TIME") {
+ //: Time in seconds
+ killstring = PageGameStats::tr("(%L1 second(s))", "", kills).arg((double) kills/1000, 0, 'g', 3);
+ } else if (kindOfPoints.startsWith("!TIME") && kindOfPoints.length() == 6) {
+ int len = kindOfPoints.at(6).digitValue();
+ if(len != -1)
+ killstring = PageGameStats::tr("(%L1 second(s))", "", kills).arg((double) kills/1000, 0, 'g', len);
+ else
+ qWarning("SendStat: siPointType received with !TIME and invalid number length!");
+ } else if (kindOfPoints == "!CRATES") {
+ killstring = PageGameStats::tr("(%1 crate(s))", "", kills).arg(kills);
+ } else if (kindOfPoints == "!EMPTY") {
+ killstring = QString("");
} else {
//: 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”
killstring = PageGameStats::tr("(%1 %2)", "", kills).arg(kills).arg(kindOfPoints);
- kindOfPoints = QString("");
}
+ kindOfPoints = QString("");
message = QString("<p><h2>%1 %2. <font color=\"%4\">%3</font> ").arg(image, QString::number(realPlayerPosition), playername, clanColor.name()) + killstring + "</h2></p>";
--- a/QTfrontend/ui/page/pagenet.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagenet.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -47,6 +47,7 @@
BtnNetConnect = new QPushButton(ConnGroupBox);
BtnNetConnect->setFont(*font14);
BtnNetConnect->setText(QPushButton::tr("Connect"));
+ BtnNetConnect->setWhatsThis(tr("Connect to the selected server"));
GBClayout->addWidget(BtnNetConnect, 2, 2);
tvServersList = new QTableView(ConnGroupBox);
@@ -56,11 +57,13 @@
BtnUpdateSList = new QPushButton(ConnGroupBox);
BtnUpdateSList->setFont(*font14);
BtnUpdateSList->setText(QPushButton::tr("Update"));
+ BtnUpdateSList->setWhatsThis(tr("Update the list of servers"));
GBClayout->addWidget(BtnUpdateSList, 2, 0);
BtnSpecifyServer = new QPushButton(ConnGroupBox);
BtnSpecifyServer->setFont(*font14);
- BtnSpecifyServer->setText(QPushButton::tr("Specify"));
+ BtnSpecifyServer->setText(QPushButton::tr("Specify address"));
+ BtnSpecifyServer->setWhatsThis(tr("Specify the address and port number of a known server and connect to it directly"));
GBClayout->addWidget(BtnSpecifyServer, 2, 1);
return pageLayout;
@@ -71,6 +74,7 @@
QHBoxLayout * footerLayout = new QHBoxLayout();
BtnNetSvrStart = formattedButton(QPushButton::tr("Start server"));
+ BtnNetSvrStart->setWhatsThis(tr("Start private server"));
BtnNetSvrStart->setMinimumSize(180, 50);
QString serverPath = bindir->absolutePath() + "/hedgewars-server";
#ifdef Q_OS_WIN
--- a/QTfrontend/ui/page/pageoptions.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pageoptions.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -142,6 +142,7 @@
BtnNewTeam->setIconSize(pmNew.size());
BtnNewTeam->setIcon(pmNew);
BtnNewTeam->setMaximumWidth(pmNew.width() + 6);
+ BtnNewTeam->setStyleSheet("padding: 0px;");
connect(BtnNewTeam, SIGNAL(clicked()), this, SIGNAL(newTeamRequested()));
groupTeams->layout()->addWidget(BtnNewTeam, 0, 1);
@@ -150,6 +151,7 @@
BtnEditTeam->setIconSize(pmEdit.size());
BtnEditTeam->setIcon(pmEdit);
BtnEditTeam->setMaximumWidth(pmEdit.width() + 6);
+ BtnEditTeam->setStyleSheet("padding: 0px;");
connect(BtnEditTeam, SIGNAL(clicked()), this, SLOT(requestEditSelectedTeam()));
groupTeams->layout()->addWidget(BtnEditTeam, 0, 2);
@@ -158,6 +160,7 @@
BtnDeleteTeam->setIconSize(pmDelete.size());
BtnDeleteTeam->setIcon(pmDelete);
BtnDeleteTeam->setMaximumWidth(pmDelete.width() + 6);
+ BtnDeleteTeam->setStyleSheet("padding: 0px;");
connect(BtnDeleteTeam, SIGNAL(clicked()), this, SLOT(requestDeleteSelectedTeam()));
groupTeams->layout()->addWidget(BtnDeleteTeam, 0, 3);
@@ -184,6 +187,7 @@
SchemeNew->setIconSize(pmNew.size());
SchemeNew->setIcon(pmNew);
SchemeNew->setMaximumWidth(pmNew.width() + 6);
+ SchemeNew->setStyleSheet("padding: 0px;");
groupSchemes->layout()->addWidget(SchemeNew, 0, 1);
SchemeEdit = new QPushButton(groupSchemes);
@@ -191,6 +195,7 @@
SchemeEdit->setIconSize(pmEdit.size());
SchemeEdit->setIcon(pmEdit);
SchemeEdit->setMaximumWidth(pmEdit.width() + 6);
+ SchemeEdit->setStyleSheet("padding: 0px;");
groupSchemes->layout()->addWidget(SchemeEdit, 0, 2);
SchemeDelete = new QPushButton(groupSchemes);
@@ -198,6 +203,7 @@
SchemeDelete->setIconSize(pmDelete.size());
SchemeDelete->setIcon(pmDelete);
SchemeDelete->setMaximumWidth(pmDelete.width() + 6);
+ SchemeDelete->setStyleSheet("padding: 0px;");
groupSchemes->layout()->addWidget(SchemeDelete, 0, 3);
}
@@ -217,6 +223,7 @@
WeaponNew->setIconSize(pmNew.size());
WeaponNew->setIcon(pmNew);
WeaponNew->setMaximumWidth(pmNew.width() + 6);
+ WeaponNew->setStyleSheet("padding: 0px;");
groupWeapons->layout()->addWidget(WeaponNew, 0, 1);
WeaponEdit = new QPushButton(groupWeapons);
@@ -224,6 +231,7 @@
WeaponEdit->setIconSize(pmEdit.size());
WeaponEdit->setIcon(pmEdit);
WeaponEdit->setMaximumWidth(pmEdit.width() + 6);
+ WeaponEdit->setStyleSheet("padding: 0px;");
groupWeapons->layout()->addWidget(WeaponEdit, 0, 2);
WeaponDelete = new QPushButton(groupWeapons);
@@ -231,6 +239,7 @@
WeaponDelete->setIconSize(pmDelete.size());
WeaponDelete->setIcon(pmDelete);
WeaponDelete->setMaximumWidth(pmDelete.width() + 6);
+ WeaponDelete->setStyleSheet("padding: 0px;");
groupWeapons->layout()->addWidget(WeaponDelete, 0, 3);
}
--- a/QTfrontend/ui/page/pagescheme.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagescheme.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -533,8 +533,11 @@
bottomLayout->addWidget(selectScheme, 0);
BtnCopy = addButton(tr("Copy"), bottomLayout, 1);
+ BtnCopy->setStyleSheet("padding: 5px;");
BtnNew = addButton(tr("New"), bottomLayout, 2);
+ BtnNew->setStyleSheet("padding: 5px;");
BtnDelete = addButton(tr("Delete"), bottomLayout, 3);
+ BtnDelete->setStyleSheet("padding: 5px;");
bottomLayout->setStretch(1,1);
bottomLayout->setStretch(2,1);
--- a/QTfrontend/ui/page/pageselectweapon.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pageselectweapon.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -46,11 +46,15 @@
// first row
BtnNew = addButton(tr("New"), bottomLayout, 0, 1);
+ BtnNew->setStyleSheet("padding: 3px;");
BtnDefault = addButton(tr("Default"), bottomLayout, 0, 2);
+ BtnDefault->setStyleSheet("padding: 3px;");
// second row
BtnCopy = addButton(tr("Copy"), bottomLayout, 1, 1);
+ BtnCopy->setStyleSheet("padding: 3px;");
BtnDelete = addButton(tr("Delete"), bottomLayout, 1, 2);
+ BtnDelete->setStyleSheet("padding: 3px;");
bottomLayout->setColumnStretch(1,1);
bottomLayout->setColumnStretch(2,1);
--- a/QTfrontend/ui/page/pagesingleplayer.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagesingleplayer.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -48,7 +48,7 @@
BtnCampaignPage->setVisible(true);
BtnTrainPage = addButton(":/res/Trainings.png", middleLine, 1, true);
- BtnTrainPage->setWhatsThis(tr("Practice your skills in a range of training missions"));
+ BtnTrainPage->setWhatsThis(tr("Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios."));
return vLayout;
}
--- a/QTfrontend/ui/page/pagetraining.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagetraining.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -28,6 +28,7 @@
#include <QLocale>
#include <QSettings>
+#include "mission.h"
#include "hwconsts.h"
#include "DataManager.h"
@@ -37,29 +38,32 @@
{
QGridLayout * pageLayout = new QGridLayout();
-// left column
-
// declare start button, caption and description
btnPreview = formattedButton(":/res/Trainings.png", true);
- // make both rows equal height
+ // tweak widget spacing
pageLayout->setRowStretch(0, 1);
pageLayout->setRowStretch(1, 1);
+ pageLayout->setRowStretch(2, 1);
+ pageLayout->setColumnStretch(0, 5);
+ pageLayout->setColumnStretch(1, 1);
+ pageLayout->setColumnStretch(2, 9);
+ pageLayout->setColumnStretch(3, 5);
- // add start button, caption and description to 3 different rows
- pageLayout->addWidget(btnPreview, 0, 0);
+ QWidget * infoWidget = new QWidget();
+ QHBoxLayout * infoLayout = new QHBoxLayout();
+ // add preview, caption and description
+ infoWidget->setLayout(infoLayout);
+ infoLayout->addWidget(btnPreview);
// center preview
- pageLayout->setAlignment(btnPreview, Qt::AlignRight | Qt::AlignVCenter);
-
-
-// right column
+ infoLayout->setAlignment(btnPreview, Qt::AlignRight | Qt::AlignVCenter);
// info area (caption on top, description below)
- QWidget * infoWidget = new QWidget();
- QVBoxLayout * infoLayout = new QVBoxLayout();
- infoWidget->setObjectName("trainingInfo");
- infoWidget->setLayout(infoLayout);
+ QWidget * infoTextWidget = new QWidget();
+ QVBoxLayout * infoTextLayout = new QVBoxLayout();
+ infoTextWidget->setObjectName("trainingInfo");
+ infoTextWidget->setLayout(infoTextLayout);
lblCaption = new QLabel();
lblCaption->setMinimumWidth(360);
@@ -69,21 +73,27 @@
lblDescription->setMinimumWidth(360);
lblDescription->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
lblDescription->setWordWrap(true);
+ lblHighscores = new QLabel();
+ lblHighscores->setMinimumWidth(360);
+ lblHighscores->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
- infoLayout->addWidget(lblCaption);
- infoLayout->addWidget(lblDescription);
+ infoTextLayout->addWidget(lblCaption);
+ infoTextLayout->addWidget(lblDescription);
+ infoTextLayout->addWidget(lblHighscores);
- pageLayout->addWidget(infoWidget, 0, 1);
- pageLayout->setAlignment(infoWidget, Qt::AlignLeft);
+ infoLayout->addWidget(infoTextWidget);
+
+ pageLayout->addWidget(infoWidget, 0, 1, 1, 2); // span 2 columns
+ pageLayout->setAlignment(infoTextWidget, Qt::AlignLeft);
// tab widget containing all lists
tbw = new QTabWidget(this);
- pageLayout->addWidget(tbw, 1, 0, 1, 2); // span 2 columns
+ pageLayout->addWidget(tbw, 1, 0, 1, 4); // span 4 columns
// let's not make the tab widget use more space than needed
tbw->setFixedWidth(400);
pageLayout->setAlignment(tbw, Qt::AlignHCenter);
-
+
tbw->setStyleSheet("QListWidget { border-style: none; padding-top: 6px; }");
// training/challenge/scenario lists
@@ -101,6 +111,12 @@
tbw->addTab(lstScenarios, tr("Scenarios"));
tbw->setCurrentWidget(lstTrainings);
+ QLabel* lblteam = new QLabel(tr("Team"));
+ CBTeam = new QComboBox(this);
+ CBTeam->setMaxVisibleItems(30);
+ pageLayout->addWidget(lblteam, 2, 1);
+ pageLayout->addWidget(CBTeam, 2, 2);
+
return pageLayout;
}
@@ -200,6 +216,7 @@
// first, load scripts in order specified in order.cfg (if present)
QFile orderFile(QString("physfs://Missions/%1/order.cfg").arg(subFolder));
QStringList orderedMissions;
+
if (orderFile.open(QFile::ReadOnly))
{
QString m_id;
@@ -302,36 +319,65 @@
list = (QListWidget*) tbw->currentWidget();
if (list->currentItem())
{
+ QString missionName = list->currentItem()->data(Qt::UserRole).toString();
QString thumbFile = "physfs://Graphics/Missions/" +
subFolder + "/" +
- list->currentItem()->data(Qt::UserRole).toString() +
+ missionName +
"@2x.png";
if (QFile::exists(thumbFile))
btnPreview->setIcon(QIcon(thumbFile));
+ else if (tbw->currentWidget() == lstChallenges)
+ btnPreview->setIcon(QIcon(":/res/Challenges.png"));
+ else if (tbw->currentWidget() == lstScenarios)
+ // TODO: Prettier scenario fallback image
+ btnPreview->setIcon(QIcon(":/res/Scenarios.png"));
else
btnPreview->setIcon(QIcon(":/res/Trainings.png"));
btnPreview->setWhatsThis(tr("Start fighting"));
- QString realName = list->currentItem()->data(
- Qt::UserRole).toString();
-
- QString caption = m_info->value(realName + ".name",
+ QString caption = m_info->value(missionName + ".name",
list->currentItem()->text()).toString();
- QString description = m_info->value(realName + ".desc",
+ QString description = m_info->value(missionName + ".desc",
tr("No description available")).toString();
lblCaption->setText("<h2>" + caption +"</h2>");
lblDescription->setText(description);
+
+ // Challenge highscores
+ QString highscoreText = QString("");
+ QString teamName = CBTeam->currentText();
+ if (missionValueExists(missionName, teamName, "Highscore"))
+ highscoreText = highscoreText +
+ //: Highest score of a team
+ tr("Team highscore: %1")
+ .arg(getMissionValue(missionName, teamName, "Highscore").toString()) + "\n";
+ if (missionValueExists(missionName, teamName, "Lowscore"))
+ highscoreText = highscoreText +
+ //: Lowest score of a team
+ tr("Team lowscore: %1")
+ .arg(getMissionValue(missionName, teamName, "Lowscore").toString()) + "\n";
+ if (missionValueExists(missionName, teamName, "TimeRecord"))
+ {
+ double time = ((double) getMissionValue(missionName, teamName, "TimeRecord").toInt()) / 1000.0;
+ highscoreText = highscoreText + tr("Team's best time: %L1 s").arg(time, 0, 'f', 3) + "\n";
+ }
+ if (missionValueExists(missionName, teamName, "TimeRecordHigh"))
+ {
+ double time = ((double) getMissionValue(missionName, teamName, "TimeRecordHigh").toInt()) / 1000.0;
+ highscoreText = highscoreText + tr("Team's longest time: %L1 s").arg(time, 0, 'f', 3) + "\n";
+ }
+
+ lblHighscores->setText(highscoreText);
}
else
{
btnPreview->setIcon(QIcon(":/res/Trainings.png"));
lblCaption->setText(tr("Select a mission!"));
- // TODO better text and tr()
lblDescription->setText("");
+ lblHighscores->setText("");
}
}
}
--- a/QTfrontend/ui/page/pagetraining.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/page/pagetraining.h Mon Jan 14 12:35:32 2019 -0500
@@ -27,7 +27,13 @@
public:
PageTraining(QWidget* parent = 0);
+ QListWidget * lstTrainings;
+ QListWidget * lstChallenges;
+ QListWidget * lstScenarios;
+ QComboBox * CBTeam;
+ public slots:
+ void updateInfo();
signals:
void startMission(const QString & scriptName, const QString & subFolder);
@@ -44,17 +50,14 @@
QPushButton * btnStart;
QLabel * lblCaption;
QLabel * lblDescription;
+ QLabel * lblHighscores;
QTabWidget * tbw;
- QListWidget * lstTrainings;
- QListWidget * lstChallenges;
- QListWidget * lstScenarios;
QSettings * m_info;
QString getSubFolderOfSelected();
private slots:
void startSelected();
- void updateInfo();
};
--- a/QTfrontend/ui/widget/about.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/about.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -32,6 +32,8 @@
#include "SDL.h"
#include "SDL_version.h"
#include "physfs.h"
+#include "creditsmessages.h"
+#include "HWApplication.h"
#ifdef VIDEOREC
extern "C"
@@ -53,6 +55,193 @@
#include "about.h"
+QString About::getCreditsHtml()
+{
+ // Open the credits file
+
+ /* *** FILE FORMAT OF CREDITS FILE ***
+ The credits file is an RFC-4180-compliant CSV file with 5 columns.
+ The first column (column 1) is always 1 letter long and is the row type.
+ The row type determines the meaning of the other columns.
+
+ The following row types are supported:
+
+ * E: Credits entry
+ * Column 2: Task/contribution
+ * Column 3: Contributor name
+ * Column 4: Contributor e-mail
+ * Column 5: Contributor nickname
+ * M: Alternative credits entry that is a placeholder for other or unknown authors
+ * Columns 2-5: Unused
+ * S: Section
+ * Column 2: Section name
+ * Columns 3-5: Unused
+ * U: Subsection
+ * Column 2: Subsection name
+ * Columns 3-5: Unused
+
+ Columns 2, 3 and 5 MUST be in US-ASCII.
+ */
+ QFile creditsFile(":/res/credits.csv");
+ if (!creditsFile.open(QIODevice::ReadOnly))
+ {
+ qWarning("ERROR: Credits file could not be opened!");
+ return "<p>ERROR: Credits file could not be opened!</p>";
+ }
+ QString creditsString = creditsFile.readAll();
+ QString out = QString("<h1>" + tr("Credits") + "</h1>\n");
+ QStringList cells = QStringList() << QString("") << QString("") << QString("") << QString("") << QString("");
+ bool firstSection = true;
+ unsigned long int column = 0;
+ unsigned long int charInCell = 0;
+ bool isInQuote = false;
+ bool ignoreChar = false;
+ bool lineComplete = false;
+ QChar currChar;
+ QChar prevChar;
+ for(long long int i = 0; i<creditsString.length(); i++)
+ {
+ currChar = creditsString.at(i);
+ QString type, task, name, mail, nick;
+ if(currChar == '"')
+ {
+ if(charInCell == 0)
+ {
+ isInQuote = true;
+ ignoreChar = true;
+ }
+ else if(isInQuote && prevChar != '"')
+ {
+ ignoreChar = true;
+ }
+ }
+ else if(isInQuote && charInCell > 0 && prevChar == '"' && (currChar == '\r' || currChar == ','))
+ {
+ isInQuote = false;
+ ignoreChar = true;
+ }
+
+ charInCell++;
+ if(!isInQuote && currChar == ',')
+ {
+ column++;
+ charInCell = 0;
+ }
+ else if(!isInQuote && currChar == '\n' && prevChar == '\r')
+ {
+ lineComplete = true;
+ }
+ if(!isInQuote && (currChar == '\r' || currChar == '\n' || currChar == ','))
+ {
+ ignoreChar = true;
+ }
+
+
+ if(!ignoreChar)
+ {
+ cells[column].append(currChar);
+ }
+ ignoreChar = false;
+
+ if(lineComplete)
+ {
+ type = cells[0];
+ task = cells[1];
+ name = cells[2];
+ mail = cells[3];
+ nick = cells[4];
+
+ if(type == "S")
+ {
+ // section
+ if (!firstSection)
+ out = out + "</ul>\n";
+ out = out + "<h2>" + HWApplication::translate("credits", task.toLatin1().constData()) + "</h2>\n<ul>\n";
+ firstSection = false;
+ }
+ else if(type == "U")
+ {
+ // subsection
+ out = out + "</ul>\n";
+ out = out + "<h3>" + HWApplication::translate("credits", task.toLatin1().constData()) + "</h3>\n<ul>\n";
+ }
+ else if(type == "M")
+ {
+ // other people
+ out = out + "<li>" + tr("Other people") + "</li>" + "\n";
+ }
+ else if(type == "E")
+ {
+ QString showName = QString("");
+ if(!name.isEmpty())
+ name = "<span class=\"name\">"+name+"</span>";
+ if(!nick.isEmpty())
+ nick= "<span class=\"nick\">"+nick+"</span>";
+ if(!name.isEmpty() && !nick.isEmpty())
+ showName = tr("%1 (alias %2)").arg(name).arg(nick);
+ else if(name.isEmpty() && !nick.isEmpty())
+ showName = nick;
+ else if(!name.isEmpty() && nick.isEmpty())
+ showName = name;
+ // credits list entry
+ QString mailLink = QString("<a href=\"mailto:%1\">%1</a>").arg(mail);
+ if(task.isEmpty() && mail.isEmpty() && !showName.isEmpty())
+ {
+ // Name only
+ out = out + "<li>" + showName + "</li>\n";
+ }
+ else if(showName.isEmpty() && mail.isEmpty() && !task.isEmpty())
+ {
+ // Task only
+ out = out + "<li>" + HWApplication::translate("credits", task.toLatin1().constData()) + "</li>\n";
+ }
+ else if(task.isEmpty())
+ {
+ // Name and e-mail
+ //: Part of credits. %1: Contributor name. %2: E-mail address
+ out = out + "<li>" + tr("%1 <%2>").arg(showName).arg(mailLink) + "</li>\n";
+ }
+ else if(mail.isEmpty())
+ {
+ // Contribution and name
+ //: Part of credits. %1: Description of contribution. %2: Contributor name
+ out = out + "<li>" + tr("%1: %2")
+ .arg(HWApplication::translate("credits", task.toLatin1().constData()))
+ .arg(showName)
+ + "</li>\n";
+ }
+ else
+ {
+ // Contribution, name and e-mail
+ //: Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address
+ out = out + "<li>" + tr("%1: %2 <%3>")
+ .arg(HWApplication::translate("credits", task.toLatin1().constData()))
+ .arg(showName)
+ .arg(mailLink)
+ + "</li>\n";
+ }
+ }
+ else
+ {
+ qWarning("Invalid row type in credits.csv: %s", qPrintable(type));
+ }
+ lineComplete = false;
+ column = 0;
+ cells[0] = "";
+ cells[1] = "";
+ cells[2] = "";
+ cells[3] = "";
+ cells[4] = "";
+ charInCell = 0;
+ }
+
+ prevChar = currChar;
+ }
+ creditsFile.close();
+ out = out + "</ul>";
+ return out;
+}
+
About::About(QWidget * parent) :
QWidget(parent)
{
@@ -89,11 +278,35 @@
lbl1->setWordWrap(true);
mainLayout->addWidget(lbl1, 0, 1);
- lbl2 = new QTextBrowser(this);
- lbl2->setOpenExternalLinks(true);
- QUrl localpage = QUrl::fromLocalFile(":/res/html/about.html");
- lbl2->setSource(localpage); //sets the source of the label from the file above
- mainLayout->addWidget(lbl2, 1, 1);
+ /* Credits */
+ creditsBrowser = new QTextBrowser(this);
+ creditsBrowser->setOpenExternalLinks(true);
+ QString credits = getCreditsHtml();
+
+ QString header =
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">"
+ "<head>"
+ "<title>Hedgewars Credits</title>"
+ "<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />"
+ "<style type=\"text/css\">"
+ " body { color: orange; }"
+ " a { color: #ffe270; }"
+ " ul { list-style-type: none; }"
+ " .name { color: #ffffff; font-weight: bold; }"
+ " .nick { color: #ffff00; font-weight: bold; }"
+ "</style>"
+ "</head>"
+ "<body>"
+ "";
+ QString footer =
+ ""
+ "<h2>" + tr("Extended Credits") + "</h2>"
+ "<p>" + tr("An extended credits list can be found in the CREDITS text file.") + "</p>"
+ "</body></html>";
+
+ creditsBrowser->setHtml(header + credits + footer);
+ mainLayout->addWidget(creditsBrowser, 1, 1);
/* Library information */
@@ -102,6 +315,10 @@
#if defined(__GNUC__)
libinfo.append(QString(tr("<a href=\"https://gcc.gnu.org\">GCC</a>: %1")).arg(__VERSION__));
+#elif defined(WIN32_VCPKG)
+ libinfo.append(QString(tr("<a href=\"https://visualstudio.microsoft.com\">VC++</a>: %1")).arg(_MSC_FULL_VER));
+#elif defined(__VERSION__)
+ libinfo.append(QString(tr("Unknown Compiler: %1")).arg(__VERSION__));
#else
libinfo.append(QString(tr("Unknown Compiler")));
#endif
--- a/QTfrontend/ui/widget/about.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/about.h Mon Jan 14 12:35:32 2019 -0500
@@ -35,7 +35,8 @@
virtual void dropEvent(QDropEvent * event);
private:
- QTextBrowser * lbl2;
+ QString getCreditsHtml();
+ QTextBrowser * creditsBrowser;
};
#endif // _ABOUT_H
--- a/QTfrontend/ui/widget/gamecfgwidget.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/gamecfgwidget.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -150,6 +150,7 @@
goToSchemePage->setIconSize(pmEdit.size());
goToSchemePage->setIcon(iconEdit);
goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
+ goToSchemePage->setStyleSheet("padding: 0px;");
SchemeWidgetLayout->addWidget(goToSchemePage, 0, 3);
connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
@@ -172,6 +173,7 @@
goToWeaponPage->setIconSize(pmEdit.size());
goToWeaponPage->setIcon(pmEdit);
goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
+ goToWeaponPage->setStyleSheet("padding: 0px;");
SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3);
connect(goToWeaponPage, SIGNAL(clicked()), this, SLOT(jumpToWeapons()));
@@ -336,6 +338,7 @@
bcfg << QString("e$gmflags %1").arg(getGameFlags()).toUtf8();
bcfg << QString("e$damagepct %1").arg(schemeData(26).toInt()).toUtf8();
bcfg << QString("e$turntime %1").arg(schemeData(27).toInt() * 1000).toUtf8();
+ bcfg << QString("e$inithealth %1").arg(schemeData(28).toInt()).toUtf8();
bcfg << QString("e$sd_turns %1").arg(schemeData(29).toInt()).toUtf8();
bcfg << QString("e$casefreq %1").arg(schemeData(30).toInt()).toUtf8();
bcfg << QString("e$minestime %1").arg(schemeData(31).toInt() * 1000).toUtf8();
@@ -545,6 +548,60 @@
}
}
+void GameCFGWidget::updateSchemeEnabledStates(int scriptIndex)
+{
+ QString scheme;
+ QString weapons;
+ if(scriptIndex > 0)
+ {
+ scheme = Scripts->itemData(scriptIndex, GameStyleModel::SchemeRole).toString();
+ weapons = Scripts->itemData(scriptIndex, GameStyleModel::WeaponsRole).toString();
+ }
+ else
+ {
+ scheme = pMapContainer->getCurrentScheme();
+ weapons = pMapContainer->getCurrentWeapons();
+ }
+ if (scheme == "locked")
+ {
+ GameSchemes->setEnabled(false);
+ goToSchemePage->setEnabled(false);
+ lblScheme->setEnabled(false);
+ GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
+ }
+ else if(m_master)
+ {
+ GameSchemes->setEnabled(true);
+ goToSchemePage->setEnabled(true);
+ lblScheme->setEnabled(true);
+ int num = GameSchemes->findText(scheme);
+ if (num != -1)
+ GameSchemes->setCurrentIndex(num);
+ }
+
+ if (weapons == "locked")
+ {
+ WeaponsName->setEnabled(false);
+ goToWeaponPage->setEnabled(false);
+ lblWeapons->setEnabled(false);
+ WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
+ }
+ else if(m_master)
+ {
+ WeaponsName->setEnabled(true);
+ goToWeaponPage->setEnabled(true);
+ lblWeapons->setEnabled(true);
+ int num = WeaponsName->findText(weapons);
+ if (num != -1)
+ WeaponsName->setCurrentIndex(num);
+ }
+
+ if (scheme != "locked" && weapons != "locked")
+ bindEntries->setEnabled(true);
+ else
+ bindEntries->setEnabled(false);
+}
+
void GameCFGWidget::mapChanged(const QString & value)
{
if(isEnabled() && pMapContainer->getCurrentIsMission())
@@ -552,49 +609,7 @@
Scripts->setEnabled(false);
lblScript->setEnabled(false);
Scripts->setCurrentIndex(0);
-
- if (pMapContainer->getCurrentScheme() == "locked")
- {
- GameSchemes->setEnabled(false);
- goToSchemePage->setEnabled(false);
- lblScheme->setEnabled(false);
- GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
- }
- else
- {
- GameSchemes->setEnabled(true);
- goToSchemePage->setEnabled(true);
- lblScheme->setEnabled(true);
- int num = GameSchemes->findText(pMapContainer->getCurrentScheme());
- if (num != -1)
- GameSchemes->setCurrentIndex(num);
- //else
- // GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
- }
-
- if (pMapContainer->getCurrentWeapons() == "locked")
- {
- WeaponsName->setEnabled(false);
- goToWeaponPage->setEnabled(false);
- lblWeapons->setEnabled(false);
- WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
- }
- else
- {
- WeaponsName->setEnabled(true);
- goToWeaponPage->setEnabled(true);
- lblWeapons->setEnabled(true);
- int num = WeaponsName->findText(pMapContainer->getCurrentWeapons());
- if (num != -1)
- WeaponsName->setCurrentIndex(num);
- //else
- // WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
- }
-
- if (pMapContainer->getCurrentScheme() != "locked" && pMapContainer->getCurrentWeapons() != "locked")
- bindEntries->setEnabled(true);
- else
- bindEntries->setEnabled(false);
+ updateSchemeEnabledStates(0);
}
else
{
@@ -671,51 +686,7 @@
if(isEnabled() && index > 0)
{
- QString scheme = Scripts->itemData(index, GameStyleModel::SchemeRole).toString();
- QString weapons = Scripts->itemData(index, GameStyleModel::WeaponsRole).toString();
-
- if (scheme == "locked")
- {
- GameSchemes->setEnabled(false);
- goToSchemePage->setEnabled(false);
- lblScheme->setEnabled(false);
- GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
- }
- else if (m_master)
- {
- GameSchemes->setEnabled(true);
- goToSchemePage->setEnabled(true);
- lblScheme->setEnabled(true);
- int num = GameSchemes->findText(scheme);
- if (num != -1)
- GameSchemes->setCurrentIndex(num);
- //else
- // GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
- }
-
- if (weapons == "locked")
- {
- WeaponsName->setEnabled(false);
- goToWeaponPage->setEnabled(false);
- lblWeapons->setEnabled(false);
- WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
- }
- else if (m_master)
- {
- WeaponsName->setEnabled(true);
- goToWeaponPage->setEnabled(true);
- lblWeapons->setEnabled(true);
- int num = WeaponsName->findText(weapons);
- if (num != -1)
- WeaponsName->setCurrentIndex(num);
- //else
- // WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
- }
-
- if (scheme != "locked" && weapons != "locked")
- bindEntries->setEnabled(true);
- else
- bindEntries->setEnabled(false);
+ updateSchemeEnabledStates(index);
}
else
{
@@ -744,6 +715,8 @@
void GameCFGWidget::mapgenChanged(MapGenerator m)
{
+ int scriptIndex = Scripts->currentIndex();
+ updateSchemeEnabledStates(scriptIndex);
emit paramChanged("MAPGEN", QStringList(QString::number(m)));
}
--- a/QTfrontend/ui/widget/gamecfgwidget.h Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/gamecfgwidget.h Mon Jan 14 12:35:32 2019 -0500
@@ -81,6 +81,7 @@
void jumpToSchemes();
void jumpToWeapons();
void mapgenChanged(MapGenerator m);
+ void updateSchemeEnabledStates(int scriptIndex);
void maze_sizeChanged(int s);
void slMapFeatureSizeChanged(int s);
void onDrawnMapChanged(const QByteArray & data);
--- a/QTfrontend/ui/widget/mapContainer.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/mapContainer.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -426,7 +426,7 @@
getDrawnMapData(),
m_script,
m_scriptparam,
- m_mapFeatureSize
+ m_mapFeatureSize
);
setHHLimit(0);
@@ -921,6 +921,7 @@
QString randomNoMapPrev = tr("Click to randomize the theme and seed");
QString mfsComplex = QString(tr("Adjust the complexity of the generated map"));
QString mfsFortsDistance = QString(tr("Adjust the distance between forts"));
+ QString mfsDrawnMap = QString(tr("Scale size of the drawn map"));
switch (type)
{
case MapModel::GeneratedMap:
@@ -938,6 +939,7 @@
case MapModel::HandDrawnMap:
mapPreview->setWhatsThis(tr("Click to edit"));
btnRandomize->setWhatsThis(randomSeed);
+ mapFeatureSize->setWhatsThis(mfsDrawnMap);
break;
case MapModel::FortsMap:
mapPreview->setWhatsThis(randomNoMapPrev);
@@ -990,7 +992,7 @@
mapgen = MAPGEN_DRAWN;
setMapInfo(MapModel::MapInfoDrawn);
btnLoadMap->show();
- mapFeatureSize->hide();
+ //mapFeatureSize->hide();
btnEditMap->show();
break;
case MapModel::MissionMap:
@@ -1075,14 +1077,15 @@
//if (qAbs(m_prevMapFeatureSize-m_mapFeatureSize) > 4)
{
m_prevMapFeatureSize = m_mapFeatureSize;
- updatePreview();
+ if(m_mapInfo.type!= MapModel::HandDrawnMap || m_script.length() > 0)
+ updatePreview();
}
}
// unused because I needed the space for the slider
void HWMapContainer::updateThemeButtonSize()
{
- if (m_mapInfo.type != MapModel::StaticMap && m_mapInfo.type != MapModel::HandDrawnMap)
+ if (m_mapInfo.type != MapModel::StaticMap)
{
btnTheme->setIconSize(QSize(30, 30));
btnTheme->setFixedHeight(30);
--- a/QTfrontend/ui/widget/teamselect.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/ui/widget/teamselect.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -215,8 +215,9 @@
// dont playing team => playing
itDontPlay->setColor(framePlaying->getNextColor());
team=*itDontPlay; // for net team info saving in framePlaying (we have only name with netID from network)
- curPlayingTeams.push_back(*itDontPlay);
- if(!m_acceptOuter) emit teamWillPlay(*itDontPlay);
+ team.setOwner(m_curUser);
+ curPlayingTeams.push_back(team);
+ if(!m_acceptOuter) emit teamWillPlay(team);
m_curNotPlayingTeams.erase(itDontPlay);
// Hide team notice if at least two teams.
--- a/QTfrontend/util/DataManager.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/util/DataManager.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -159,7 +159,9 @@
for(int j = 0; sdlkeys[j][1][0] != '\0'; j++)
{
QStandardItem * item = new QStandardItem();
- item->setData(HWApplication::translate("binds (keys)", sdlkeys[j][1]).contains(": ") ? HWApplication::translate("binds (keys)", sdlkeys[j][1]) : HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + HWApplication::translate("binds (keys)", sdlkeys[j][1]), Qt::DisplayRole);
+ QString keyId = QString(sdlkeys[j][0]);
+ QString keyTr = HWApplication::translate("binds (keys)", sdlkeys[j][1]);
+ item->setData((keyId == "none" || keyTr.contains(": ")) ? keyTr : HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + keyTr, Qt::DisplayRole);
item->setData(sdlkeys[j][0], Qt::UserRole + 1);
m_bindsModel->appendRow(item);
}
--- a/QTfrontend/util/SDLInteraction.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/QTfrontend/util/SDLInteraction.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -52,6 +52,13 @@
lastchannel = 0;
if(SDL_NumJoysticks())
addGameControllerKeys();
+
+ int i = 0;
+ while(i < 1024 && sdlkeys[i][1][0] != '\0')
+ i++;
+ sprintf(sdlkeys[i][0], "none");
+ sprintf(sdlkeys[i++][1], "%s", HWApplication::translate("binds (keys)", unboundcontrol).toUtf8().constData());
+
SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
m_soundMap = new QMap<QString,Mix_Chunk*>();
--- a/README.md Mon Jan 14 12:34:47 2019 -0500
+++ b/README.md Mon Jan 14 12:35:32 2019 -0500
@@ -155,8 +155,8 @@
Licence version 1.2. See the `COPYING` file for the full text of the licenses.
Copyright 2004-2018 Andrey Korotaev <unC0Rr@gmail.com> and others.
-See `QTfrontend/res/html/about.html` and `CREDITS` for a more complete list of
-authors.
+Click on the Hedgewars logo in the main menu and read the `CREDITS` text file
+for a more complete list of authors.
Contact
-------
--- a/gameServer/Actions.hs Mon Jan 14 12:34:47 2019 -0500
+++ b/gameServer/Actions.hs Mon Jan 14 12:35:32 2019 -0500
@@ -885,3 +885,13 @@
processAction CheckVotes =
checkVotes >>= mapM_ processAction
+
+processAction (ShowRegisteredOnlyState chans) = do
+ si <- gets serverInfo
+ processAction $ AnswerClients chans
+ ["CHAT", nickServer,
+ if isRegisteredUsersOnly si then
+ loc "This server no longer allows unregistered players to join."
+ else
+ loc "This server now allows unregistered players to join."
+ ]
--- a/gameServer/CoreTypes.hs Mon Jan 14 12:34:47 2019 -0500
+++ b/gameServer/CoreTypes.hs Mon Jan 14 12:35:32 2019 -0500
@@ -103,6 +103,7 @@
| ReactCmd [B.ByteString]
| CheckVotes
| SetRandomSeed
+ | ShowRegisteredOnlyState [ClientChan]
data Event = LobbyChatMessage
--- a/gameServer/HWProtoCore.hs Mon Jan 14 12:34:47 2019 -0500
+++ b/gameServer/HWProtoCore.hs Mon Jan 14 12:35:32 2019 -0500
@@ -107,7 +107,7 @@
-- lobby-only commands
h "STATS" _ = handleCmd_lobbyOnly ["STATS"]
- h "RESTART_SERVER" "YES" = handleCmd_lobbyOnly ["RESTART_SERVER"]
+ h "RESTART_SERVER" p = handleCmd_lobbyOnly ["RESTART_SERVER", upperCase p]
-- room and lobby commands
h "QUIT" _ = handleCmd ["QUIT"]
@@ -120,11 +120,11 @@
h "INFO" n | not $ B.null n = handleCmd ["INFO", n]
h "HELP" _ = handleCmd ["HELP"]
h "REGISTERED_ONLY" _ = serverAdminOnly $ do
- cl <- thisClient
+ rnc <- liftM snd ask
+ let chans = map (sendChan . client rnc) $ allClients rnc
return
[ModifyServerInfo(\s -> s{isRegisteredUsersOnly = not $ isRegisteredUsersOnly s})
- -- TODO: Say whether 'registered only' state is on or off
- , AnswerClients [sendChan cl] ["CHAT", nickServer, loc "'Registered only' state toggled."]
+ , ShowRegisteredOnlyState chans
]
h "SUPER_POWER" _ = serverAdminOnly $ do
cl <- thisClient
--- a/gameServer/HWProtoInRoomState.hs Mon Jan 14 12:34:47 2019 -0500
+++ b/gameServer/HWProtoInRoomState.hs Mon Jan 14 12:35:32 2019 -0500
@@ -382,7 +382,7 @@
where
-- This is formatted in a way so it can parsed by engine to make it translatable
-- Format: b<PLAYER NAME>]<MESSAGE>
- engineMsg cl = toEngineMsg $ B.concat ["b", nick cl, "]", msg]
+ engineMsg cl = toEngineMsg $ B.concat ["b", nick cl, "]", msg, "\x20\x20"]
handleCmd_inRoom ["BAN", banNick] = do
@@ -452,7 +452,7 @@
handleCmd_inRoom ["CALLVOTE"] = do
cl <- thisClient
return [AnswerClients [sendChan cl]
- ["CHAT", nickServer, loc "Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs"]
+ ["CHAT", nickServer, loc "Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player>"]
]
handleCmd_inRoom ["CALLVOTE", "KICK"] = do
--- a/gameServer/HWProtoLobbyState.hs Mon Jan 14 12:34:47 2019 -0500
+++ b/gameServer/HWProtoLobbyState.hs Mon Jan 14 12:35:32 2019 -0500
@@ -220,12 +220,18 @@
handleCmd_lobby ["CLEAR_ACCOUNTS_CACHE"] = serverAdminOnly $
return [ClearAccountsCache]
+handleCmd_lobby ["RESTART_SERVER", "YES"] = serverAdminOnly $
+ return [RestartServer]
+
handleCmd_lobby ["RESTART_SERVER"] = serverAdminOnly $
- return [RestartServer]
+ return [Warning $ loc "Please confirm server restart with '/restart_server yes'."]
+
+handleCmd_lobby ["RESTART_SERVER", _] = handleCmd_lobby ["RESTART_SERVER"]
+
handleCmd_lobby ["STATS"] = serverAdminOnly $
return [Stats]
handleCmd_lobby (s:_) = return [ProtocolError $ "Incorrect command '" `B.append` s `B.append` "' (state: in lobby)"]
-handleCmd_lobby [] = return [ProtocolError "Empty command (state: in lobby)"]
\ No newline at end of file
+handleCmd_lobby [] = return [ProtocolError "Empty command (state: in lobby)"]
--- a/gameServer2/Cargo.toml Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-[package]
-edition = "2018"
-name = "hedgewars-server"
-version = "0.0.1"
-authors = [ "Andrey Korotaev <a.korotaev@hedgewars.org>" ]
-
-[features]
-official-server = ["openssl"]
-tls-connections = ["openssl"]
-default = []
-
-[dependencies]
-rand = "0.5"
-mio = "0.6"
-slab = "0.4"
-netbuf = "0.4"
-nom = "4.1"
-env_logger = "0.6"
-log = "0.4"
-base64 = "0.10"
-bitflags = "1.0"
-serde = "1.0"
-serde_yaml = "0.8"
-serde_derive = "1.0"
-openssl = { version = "0.10", optional = true }
-
-[dev-dependencies]
-proptest = "0.8"
\ No newline at end of file
--- a/gameServer2/src/main.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-#![allow(unused_imports)]
-#![deny(bare_trait_objects)]
-
-//use std::io::*;
-//use rand::Rng;
-//use std::cmp::Ordering;
-use mio::net::*;
-use mio::*;
-use log::*;
-
-mod utils;
-mod server;
-mod protocol;
-
-use crate::server::network::NetworkLayer;
-use std::time::Duration;
-
-fn main() {
- env_logger::init();
-
- info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION);
-
- let address = "0.0.0.0:46631".parse().unwrap();
- let listener = TcpListener::bind(&address).unwrap();
-
- let poll = Poll::new().unwrap();
- let mut hw_network = NetworkLayer::new(listener, 1024, 512);
- hw_network.register_server(&poll).unwrap();
-
- let mut events = Events::with_capacity(1024);
-
- loop {
- let timeout = if hw_network.has_pending_operations() {
- Some(Duration::from_millis(1))
- } else {
- None
- };
- poll.poll(&mut events, timeout).unwrap();
-
- for event in events.iter() {
- if event.readiness() & Ready::readable() == Ready::readable() {
- match event.token() {
- utils::SERVER => hw_network.accept_client(&poll).unwrap(),
- Token(tok) => hw_network.client_readable(&poll, tok).unwrap(),
- }
- }
- if event.readiness() & Ready::writable() == Ready::writable() {
- match event.token() {
- utils::SERVER => unreachable!(),
- Token(tok) => hw_network.client_writable(&poll, tok).unwrap(),
- }
- }
-// if event.kind().is_hup() || event.kind().is_error() {
-// match event.token() {
-// utils::SERVER => unreachable!(),
-// Token(tok) => server.client_error(&poll, tok).unwrap(),
-// }
-// }
- }
- hw_network.on_idle(&poll).unwrap();
- }
-}
--- a/gameServer2/src/protocol/messages.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-use crate::server::coretypes::{
- ServerVar, GameCfg, TeamInfo,
- HedgehogInfo, VoteType
-};
-use std::{ops, convert::From, iter::once};
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub enum HWProtocolMessage {
- // core
- Ping,
- Pong,
- Quit(Option<String>),
- //Cmd(String, Vec<String>),
- Global(String),
- Watch(String),
- ToggleServerRegisteredOnly,
- SuperPower,
- Info(String),
- // not entered state
- Nick(String),
- Proto(u16),
- Password(String, String),
- Checker(u16, String, String),
- // lobby
- List,
- Chat(String),
- CreateRoom(String, Option<String>),
- JoinRoom(String, Option<String>),
- Follow(String),
- Rnd(Vec<String>),
- Kick(String),
- Ban(String, String, u32),
- BanIP(String, String, u32),
- BanNick(String, String, u32),
- BanList,
- Unban(String),
- SetServerVar(ServerVar),
- GetServerVar,
- RestartServer,
- Stats,
- // in room
- Part(Option<String>),
- Cfg(GameCfg),
- AddTeam(Box<TeamInfo>),
- RemoveTeam(String),
- SetHedgehogsNumber(String, u8),
- SetTeamColor(String, u8),
- ToggleReady,
- StartGame,
- EngineMessage(String),
- RoundFinished,
- ToggleRestrictJoin,
- ToggleRestrictTeams,
- ToggleRegisteredOnly,
- RoomName(String),
- Delegate(String),
- TeamChat(String),
- MaxTeams(u8),
- Fix,
- Unfix,
- Greeting(String),
- CallVote(Option<VoteType>),
- Vote(bool),
- ForceVote(bool),
- Save(String, String),
- Delete(String),
- SaveRoom(String),
- LoadRoom(String),
- Malformed,
- Empty,
-}
-
-#[derive(Debug)]
-pub enum HWServerMessage {
- Ping,
- Pong,
- Bye(String),
- Nick(String),
- Proto(u16),
- ServerAuth(String),
- LobbyLeft(String, String),
- LobbyJoined(Vec<String>),
- ChatMsg {nick: String, msg: String},
- ClientFlags(String, Vec<String>),
- Rooms(Vec<String>),
- RoomAdd(Vec<String>),
- RoomJoined(Vec<String>),
- RoomLeft(String, String),
- RoomRemove(String),
- RoomUpdated(String, Vec<String>),
- TeamAdd(Vec<String>),
- TeamRemove(String),
- TeamAccepted(String),
- TeamColor(String, u8),
- HedgehogsNumber(String, u8),
- ConfigEntry(String, Vec<String>),
- Kicked,
- RunGame,
- ForwardEngineMessage(Vec<String>),
- RoundFinished,
-
- ServerMessage(String),
- Notice(String),
- Warning(String),
- Error(String),
- Connected(u32),
- Unreachable,
-
- //Deprecated messages
- LegacyReady(bool, Vec<String>)
-}
-
-pub fn server_chat(msg: String) -> HWServerMessage {
- HWServerMessage::ChatMsg{ nick: "[server]".to_string(), msg }
-}
-
-impl GameCfg {
- pub fn to_protocol(&self) -> (String, Vec<String>) {
- use crate::server::coretypes::GameCfg::*;
- match self {
- FeatureSize(s) => ("FEATURE_SIZE".to_string(), vec![s.to_string()]),
- MapType(t) => ("MAP".to_string(), vec![t.to_string()]),
- MapGenerator(g) => ("MAPGEN".to_string(), vec![g.to_string()]),
- MazeSize(s) => ("MAZE_SIZE".to_string(), vec![s.to_string()]),
- Seed(s) => ("SEED".to_string(), vec![s.to_string()]),
- Template(t) => ("TEMPLATE".to_string(), vec![t.to_string()]),
-
- Ammo(n, None) => ("AMMO".to_string(), vec![n.to_string()]),
- Ammo(n, Some(s)) => ("AMMO".to_string(), vec![n.to_string(), s.to_string()]),
- Scheme(n, s) if s.is_empty() => ("SCHEME".to_string(), vec![n.to_string()]),
- Scheme(n, s) => ("SCHEME".to_string(), {
- let mut v = vec![n.to_string()];
- v.extend(s.clone().into_iter());
- v
- }),
- Script(s) => ("SCRIPT".to_string(), vec![s.to_string()]),
- Theme(t) => ("THEME".to_string(), vec![t.to_string()]),
- DrawnMap(m) => ("DRAWNMAP".to_string(), vec![m.to_string()])
- }
- }
-
- pub fn to_server_msg(&self) -> HWServerMessage {
- use self::HWServerMessage::ConfigEntry;
- let (name, args) = self.to_protocol();
- HWServerMessage::ConfigEntry(name, args)
- }
-}
-
-macro_rules! const_braces {
- ($e: expr) => { "{}\n" }
-}
-
-macro_rules! msg {
- [$($part: expr),*] => {
- format!(concat!($(const_braces!($part)),*, "\n"), $($part),*);
- };
-}
-
-#[cfg(test)]
-macro_rules! several {
- [$part: expr] => { once($part) };
- [$part: expr, $($other: expr),*] => { once($part).chain(several![$($other),*]) };
-}
-
-impl HWProtocolMessage {
- /** Converts the message to a raw `String`, which can be sent over the network.
- *
- * This is the inverse of the `message` parser.
- */
- #[cfg(test)]
- pub(crate) fn to_raw_protocol(&self) -> String {
- use self::HWProtocolMessage::*;
- match self {
- Ping => msg!["PING"],
- Pong => msg!["PONG"],
- Quit(None) => msg!["QUIT"],
- Quit(Some(msg)) => msg!["QUIT", msg],
- Global(msg) => msg!["CMD", format!("GLOBAL {}", msg)],
- Watch(name) => msg!["CMD", format!("WATCH {}", name)],
- ToggleServerRegisteredOnly => msg!["CMD", "REGISTERED_ONLY"],
- SuperPower => msg!["CMD", "SUPER_POWER"],
- Info(info) => msg!["CMD", format!("INFO {}", info)],
- Nick(nick) => msg!("NICK", nick),
- Proto(version) => msg!["PROTO", version],
- Password(p, s) => msg!["PASSWORD", p, s],
- Checker(i, n, p) => msg!["CHECKER", i, n, p],
- List => msg!["LIST"],
- Chat(msg) => msg!["CHAT", msg],
- CreateRoom(name, None) => msg!["CREATE_ROOM", name],
- CreateRoom(name, Some(password)) =>
- msg!["CREATE_ROOM", name, password],
- JoinRoom(name, None) => msg!["JOIN_ROOM", name],
- JoinRoom(name, Some(password)) =>
- msg!["JOIN_ROOM", name, password],
- Follow(name) => msg!["FOLLOW", name],
- Rnd(args) => if args.is_empty() {
- msg!["CMD", "RND"]
- } else {
- msg!["CMD", format!("RND {}", args.join(" "))]
- },
- Kick(name) => msg!["KICK", name],
- Ban(name, reason, time) => msg!["BAN", name, reason, time],
- BanIP(ip, reason, time) => msg!["BAN_IP", ip, reason, time],
- BanNick(nick, reason, time) =>
- msg!("BAN_NICK", nick, reason, time),
- BanList => msg!["BANLIST"],
- Unban(name) => msg!["UNBAN", name],
- //SetServerVar(ServerVar), ???
- GetServerVar => msg!["GET_SERVER_VAR"],
- RestartServer => msg!["CMD", "RESTART_SERVER YES"],
- Stats => msg!["CMD", "STATS"],
- Part(None) => msg!["PART"],
- Part(Some(msg)) => msg!["PART", msg],
- Cfg(config) => {
- let (name, args) = config.to_protocol();
- msg!["CFG", name, args.join("\n")]
- },
- AddTeam(info) =>
- msg!["ADD_TEAM", info.name, info.color, info.grave, info.fort,
- info.voice_pack, info.flag, info.difficulty,
- info.hedgehogs.iter()
- .flat_map(|h| several![&h.name[..], &h.hat[..]])
- .collect::<Vec<_>>().join("\n")],
- RemoveTeam(name) => msg!["REMOVE_TEAM", name],
- SetHedgehogsNumber(team, number) => msg!["HH_NUM", team, number],
- SetTeamColor(team, color) => msg!["TEAM_COLOR", team, color],
- ToggleReady => msg!["TOGGLE_READY"],
- StartGame => msg!["START_GAME"],
- EngineMessage(msg) => msg!["EM", msg],
- RoundFinished => msg!["ROUNDFINISHED"],
- ToggleRestrictJoin => msg!["TOGGLE_RESTRICT_JOINS"],
- ToggleRestrictTeams => msg!["TOGGLE_RESTRICT_TEAMS"],
- ToggleRegisteredOnly => msg!["TOGGLE_REGISTERED_ONLY"],
- RoomName(name) => msg!["ROOM_NAME", name],
- Delegate(name) => msg!["CMD", format!("DELEGATE {}", name)],
- TeamChat(msg) => msg!["TEAMCHAT", msg],
- MaxTeams(count) => msg!["CMD", format!("MAXTEAMS {}", count)] ,
- Fix => msg!["CMD", "FIX"],
- Unfix => msg!["CMD", "UNFIX"],
- Greeting(msg) => msg!["CMD", format!("GREETING {}", msg)],
- //CallVote(Option<(String, Option<String>)>) =>, ??
- Vote(msg) => msg!["CMD", format!("VOTE {}", if *msg {"YES"} else {"NO"})],
- ForceVote(msg) => msg!["CMD", format!("FORCE {}", if *msg {"YES"} else {"NO"})],
- Save(name, location) => msg!["CMD", format!("SAVE {} {}", name, location)],
- Delete(name) => msg!["CMD", format!("DELETE {}", name)],
- SaveRoom(name) => msg!["CMD", format!("SAVEROOM {}", name)],
- LoadRoom(name) => msg!["CMD", format!("LOADROOM {}", name)],
- Malformed => msg!["A", "QUICK", "BROWN", "HOG", "JUMPS", "OVER", "THE", "LAZY", "DOG"],
- Empty => msg![""],
- _ => panic!("Protocol message not yet implemented")
- }
- }
-}
-
-fn construct_message(header: &[&str], msg: &[String]) -> String {
- let mut v: Vec<_> = header.iter().cloned().collect();
- v.extend(msg.iter().map(|s| &s[..]));
- v.push("\n");
- v.join("\n")
-}
-
-impl HWServerMessage {
- pub fn to_raw_protocol(&self) -> String {
- use self::HWServerMessage::*;
- match self {
- Ping => msg!["PING"],
- Pong => msg!["PONG"],
- Connected(protocol_version) => msg![
- "CONNECTED",
- "Hedgewars server https://www.hedgewars.org/",
- protocol_version],
- Bye(msg) => msg!["BYE", msg],
- Nick(nick) => msg!["NICK", nick],
- Proto(proto) => msg!["PROTO", proto],
- ServerAuth(hash) => msg!["SERVER_AUTH", hash],
- LobbyLeft(nick, msg) => msg!["LOBBY:LEFT", nick, msg],
- LobbyJoined(nicks) =>
- construct_message(&["LOBBY:JOINED"], &nicks),
- ClientFlags(flags, nicks) =>
- construct_message(&["CLIENT_FLAGS", flags], &nicks),
- Rooms(info) =>
- construct_message(&["ROOMS"], &info),
- RoomAdd(info) =>
- construct_message(&["ROOM", "ADD"], &info),
- RoomJoined(nicks) =>
- construct_message(&["JOINED"], &nicks),
- RoomLeft(nick, msg) => msg!["LEFT", nick, msg],
- RoomRemove(name) => msg!["ROOM", "DEL", name],
- RoomUpdated(name, info) =>
- construct_message(&["ROOM", "UPD", name], &info),
- TeamAdd(info) =>
- construct_message(&["ADD_TEAM"], &info),
- TeamRemove(name) => msg!["REMOVE_TEAM", name],
- TeamAccepted(name) => msg!["TEAM_ACCEPTED", name],
- TeamColor(name, color) => msg!["TEAM_COLOR", name, color],
- HedgehogsNumber(name, number) => msg!["HH_NUM", name, number],
- ConfigEntry(name, values) =>
- construct_message(&["CFG", name], &values),
- Kicked => msg!["KICKED"],
- RunGame => msg!["RUN_GAME"],
- ForwardEngineMessage(em) =>
- construct_message(&["EM"], &em),
- RoundFinished => msg!["ROUND_FINISHED"],
- ChatMsg {nick, msg} => msg!["CHAT", nick, msg],
- ServerMessage(msg) => msg!["SERVER_MESSAGE", msg],
- Notice(msg) => msg!["NOTICE", msg],
- Warning(msg) => msg!["WARNING", msg],
- Error(msg) => msg!["ERROR", msg],
-
- LegacyReady(is_ready, nicks) =>
- construct_message(&[if *is_ready {"READY"} else {"NOT_READY"}], &nicks),
-
- _ => msg!["ERROR", "UNIMPLEMENTED"],
- }
- }
-}
--- a/gameServer2/src/protocol/mod.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-use netbuf;
-use std::{
- io::{Read, Result}
-};
-use nom::{
- IResult, Err
-};
-
-pub mod messages;
-#[cfg(test)]
-pub mod test;
-mod parser;
-
-pub struct ProtocolDecoder {
- buf: netbuf::Buf,
- consumed: usize,
-}
-
-impl ProtocolDecoder {
- pub fn new() -> ProtocolDecoder {
- ProtocolDecoder {
- buf: netbuf::Buf::new(),
- consumed: 0,
- }
- }
-
- pub fn read_from<R: Read>(&mut self, stream: &mut R) -> Result<usize> {
- self.buf.read_from(stream)
- }
-
- pub fn extract_messages(&mut self) -> Vec<messages::HWProtocolMessage> {
- let parse_result = parser::extract_messages(&self.buf[..]);
- match parse_result {
- Ok((tail, msgs)) => {
- self.consumed = self.buf.len() - self.consumed - tail.len();
- msgs
- },
- Err(Err::Incomplete(_)) => unreachable!(),
- Err(Err::Error(_)) | Err(Err::Failure(_)) => unreachable!(),
- }
- }
-
- pub fn sweep(&mut self) {
- self.buf.consume(self.consumed);
- self.consumed = 0;
- }
-}
--- a/gameServer2/src/protocol/parser.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-/** The parsers for the chat and multiplayer protocol. The main parser is `message`.
- * # Protocol
- * All messages consist of `\n`-separated strings. The end of a message is
- * indicated by a double newline - `\n\n`.
- *
- * For example, a nullary command like PING will be actually sent as `PING\n\n`.
- * A unary command, such as `START_GAME nick` will be actually sent as `START_GAME\nnick\n\n`.
- */
-
-use nom::*;
-
-use std::{
- str, str::FromStr,
- ops::Range
-};
-use super::{
- messages::{HWProtocolMessage, HWProtocolMessage::*}
-};
-#[cfg(test)]
-use {
- super::test::gen_proto_msg,
- proptest::{proptest, proptest_helper}
-};
-use crate::server::coretypes::{
- HedgehogInfo, TeamInfo, GameCfg, VoteType, MAX_HEDGEHOGS_PER_TEAM
-};
-
-named!(end_of_message, tag!("\n\n"));
-named!(str_line<&[u8], &str>, map_res!(not_line_ending, str::from_utf8));
-named!( a_line<&[u8], String>, map!(str_line, String::from));
-named!(cmd_arg<&[u8], String>,
- map!(map_res!(take_until_either!(" \n"), str::from_utf8), String::from));
-named!( u8_line<&[u8], u8>, map_res!(str_line, FromStr::from_str));
-named!(u16_line<&[u8], u16>, map_res!(str_line, FromStr::from_str));
-named!(u32_line<&[u8], u32>, map_res!(str_line, FromStr::from_str));
-named!(yes_no_line<&[u8], bool>, alt!(
- do_parse!(tag_no_case!("YES") >> (true))
- | do_parse!(tag_no_case!("NO") >> (false))));
-named!(opt_param<&[u8], Option<String> >, alt!(
- do_parse!(peek!(tag!("\n\n")) >> (None))
- | do_parse!(tag!("\n") >> s: str_line >> (Some(s.to_string())))));
-named!(spaces<&[u8], &[u8]>, preceded!(tag!(" "), eat_separator!(" ")));
-named!(opt_space_param<&[u8], Option<String> >, alt!(
- do_parse!(peek!(tag!("\n\n")) >> (None))
- | do_parse!(spaces >> s: str_line >> (Some(s.to_string())))));
-named!(hog_line<&[u8], HedgehogInfo>,
- do_parse!(name: str_line >> eol >> hat: str_line >>
- (HedgehogInfo{name: name.to_string(), hat: hat.to_string()})));
-named!(_8_hogs<&[u8], [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize]>,
- do_parse!(h1: hog_line >> eol >> h2: hog_line >> eol >>
- h3: hog_line >> eol >> h4: hog_line >> eol >>
- h5: hog_line >> eol >> h6: hog_line >> eol >>
- h7: hog_line >> eol >> h8: hog_line >>
- ([h1, h2, h3, h4, h5, h6, h7, h8])));
-named!(voting<&[u8], VoteType>, alt!(
- do_parse!(tag_no_case!("KICK") >> spaces >> n: a_line >>
- (VoteType::Kick(n)))
- | do_parse!(tag_no_case!("MAP") >>
- n: opt!(preceded!(spaces, a_line)) >>
- (VoteType::Map(n)))
- | do_parse!(tag_no_case!("PAUSE") >>
- (VoteType::Pause))
- | do_parse!(tag_no_case!("NEWSEED") >>
- (VoteType::NewSeed))
- | do_parse!(tag_no_case!("HEDGEHOGS") >> spaces >> n: u8_line >>
- (VoteType::HedgehogsPerTeam(n)))));
-
-/** Recognizes messages which do not take any parameters */
-named!(basic_message<&[u8], HWProtocolMessage>, alt!(
- do_parse!(tag!("PING") >> (Ping))
- | do_parse!(tag!("PONG") >> (Pong))
- | do_parse!(tag!("LIST") >> (List))
- | do_parse!(tag!("BANLIST") >> (BanList))
- | do_parse!(tag!("GET_SERVER_VAR") >> (GetServerVar))
- | do_parse!(tag!("TOGGLE_READY") >> (ToggleReady))
- | do_parse!(tag!("START_GAME") >> (StartGame))
- | do_parse!(tag!("ROUNDFINISHED") >> _m: opt_param >> (RoundFinished))
- | do_parse!(tag!("TOGGLE_RESTRICT_JOINS") >> (ToggleRestrictJoin))
- | do_parse!(tag!("TOGGLE_RESTRICT_TEAMS") >> (ToggleRestrictTeams))
- | do_parse!(tag!("TOGGLE_REGISTERED_ONLY") >> (ToggleRegisteredOnly))
-));
-
-/** Recognizes messages which take exactly one parameter */
-named!(one_param_message<&[u8], HWProtocolMessage>, alt!(
- do_parse!(tag!("NICK") >> eol >> n: a_line >> (Nick(n)))
- | do_parse!(tag!("INFO") >> eol >> n: a_line >> (Info(n)))
- | do_parse!(tag!("CHAT") >> eol >> m: a_line >> (Chat(m)))
- | do_parse!(tag!("PART") >> msg: opt_param >> (Part(msg)))
- | do_parse!(tag!("FOLLOW") >> eol >> n: a_line >> (Follow(n)))
- | do_parse!(tag!("KICK") >> eol >> n: a_line >> (Kick(n)))
- | do_parse!(tag!("UNBAN") >> eol >> n: a_line >> (Unban(n)))
- | do_parse!(tag!("EM") >> eol >> m: a_line >> (EngineMessage(m)))
- | do_parse!(tag!("TEAMCHAT") >> eol >> m: a_line >> (TeamChat(m)))
- | do_parse!(tag!("ROOM_NAME") >> eol >> n: a_line >> (RoomName(n)))
- | do_parse!(tag!("REMOVE_TEAM") >> eol >> n: a_line >> (RemoveTeam(n)))
-
- | do_parse!(tag!("PROTO") >> eol >> d: u16_line >> (Proto(d)))
-
- | do_parse!(tag!("QUIT") >> msg: opt_param >> (Quit(msg)))
-));
-
-/** Recognizes messages preceded with CMD */
-named!(cmd_message<&[u8], HWProtocolMessage>, preceded!(tag!("CMD\n"), alt!(
- do_parse!(tag_no_case!("STATS") >> (Stats))
- | do_parse!(tag_no_case!("FIX") >> (Fix))
- | do_parse!(tag_no_case!("UNFIX") >> (Unfix))
- | do_parse!(tag_no_case!("RESTART_SERVER") >> spaces >> tag!("YES") >> (RestartServer))
- | do_parse!(tag_no_case!("REGISTERED_ONLY") >> (ToggleServerRegisteredOnly))
- | do_parse!(tag_no_case!("SUPER_POWER") >> (SuperPower))
- | do_parse!(tag_no_case!("PART") >> m: opt_space_param >> (Part(m)))
- | do_parse!(tag_no_case!("QUIT") >> m: opt_space_param >> (Quit(m)))
- | do_parse!(tag_no_case!("DELEGATE") >> spaces >> n: a_line >> (Delegate(n)))
- | do_parse!(tag_no_case!("SAVE") >> spaces >> n: cmd_arg >> spaces >> l: cmd_arg >> (Save(n, l)))
- | do_parse!(tag_no_case!("DELETE") >> spaces >> n: a_line >> (Delete(n)))
- | do_parse!(tag_no_case!("SAVEROOM") >> spaces >> r: a_line >> (SaveRoom(r)))
- | do_parse!(tag_no_case!("LOADROOM") >> spaces >> r: a_line >> (LoadRoom(r)))
- | do_parse!(tag_no_case!("GLOBAL") >> spaces >> m: a_line >> (Global(m)))
- | do_parse!(tag_no_case!("WATCH") >> spaces >> i: a_line >> (Watch(i)))
- | do_parse!(tag_no_case!("GREETING") >> spaces >> m: a_line >> (Greeting(m)))
- | do_parse!(tag_no_case!("VOTE") >> spaces >> m: yes_no_line >> (Vote(m)))
- | do_parse!(tag_no_case!("FORCE") >> spaces >> m: yes_no_line >> (ForceVote(m)))
- | do_parse!(tag_no_case!("INFO") >> spaces >> n: a_line >> (Info(n)))
- | do_parse!(tag_no_case!("MAXTEAMS") >> spaces >> n: u8_line >> (MaxTeams(n)))
- | do_parse!(tag_no_case!("CALLVOTE") >>
- v: opt!(preceded!(spaces, voting)) >> (CallVote(v)))
- | do_parse!(
- tag_no_case!("RND") >> alt!(spaces | peek!(end_of_message)) >>
- v: str_line >>
- (Rnd(v.split_whitespace().map(String::from).collect())))
-)));
-
-named!(complex_message<&[u8], HWProtocolMessage>, alt!(
- do_parse!(tag!("PASSWORD") >> eol >>
- p: a_line >> eol >>
- s: a_line >>
- (Password(p, s)))
- | do_parse!(tag!("CHECKER") >> eol >>
- i: u16_line >> eol >>
- n: a_line >> eol >>
- p: a_line >>
- (Checker(i, n, p)))
- | do_parse!(tag!("CREATE_ROOM") >> eol >>
- n: a_line >>
- p: opt_param >>
- (CreateRoom(n, p)))
- | do_parse!(tag!("JOIN_ROOM") >> eol >>
- n: a_line >>
- p: opt_param >>
- (JoinRoom(n, p)))
- | do_parse!(tag!("ADD_TEAM") >> eol >>
- name: a_line >> eol >>
- color: u8_line >> eol >>
- grave: a_line >> eol >>
- fort: a_line >> eol >>
- voice_pack: a_line >> eol >>
- flag: a_line >> eol >>
- difficulty: u8_line >> eol >>
- hedgehogs: _8_hogs >>
- (AddTeam(Box::new(TeamInfo{
- name, color, grave, fort,
- voice_pack, flag, difficulty,
- hedgehogs, hedgehogs_number: 0
- }))))
- | do_parse!(tag!("HH_NUM") >> eol >>
- n: a_line >> eol >>
- c: u8_line >>
- (SetHedgehogsNumber(n, c)))
- | do_parse!(tag!("TEAM_COLOR") >> eol >>
- n: a_line >> eol >>
- c: u8_line >>
- (SetTeamColor(n, c)))
- | do_parse!(tag!("BAN") >> eol >>
- n: a_line >> eol >>
- r: a_line >> eol >>
- t: u32_line >>
- (Ban(n, r, t)))
- | do_parse!(tag!("BAN_IP") >> eol >>
- n: a_line >> eol >>
- r: a_line >> eol >>
- t: u32_line >>
- (BanIP(n, r, t)))
- | do_parse!(tag!("BAN_NICK") >> eol >>
- n: a_line >> eol >>
- r: a_line >> eol >>
- t: u32_line >>
- (BanNick(n, r, t)))
-));
-
-named!(cfg_message<&[u8], HWProtocolMessage>, preceded!(tag!("CFG\n"), map!(alt!(
- do_parse!(tag!("THEME") >> eol >>
- name: a_line >>
- (GameCfg::Theme(name)))
- | do_parse!(tag!("SCRIPT") >> eol >>
- name: a_line >>
- (GameCfg::Script(name)))
- | do_parse!(tag!("AMMO") >> eol >>
- name: a_line >>
- value: opt_param >>
- (GameCfg::Ammo(name, value)))
- | do_parse!(tag!("SCHEME") >> eol >>
- name: a_line >>
- values: opt!(preceded!(eol, separated_list!(eol, a_line))) >>
- (GameCfg::Scheme(name, values.unwrap_or_default())))
- | do_parse!(tag!("FEATURE_SIZE") >> eol >>
- value: u32_line >>
- (GameCfg::FeatureSize(value)))
- | do_parse!(tag!("MAP") >> eol >>
- value: a_line >>
- (GameCfg::MapType(value)))
- | do_parse!(tag!("MAPGEN") >> eol >>
- value: u32_line >>
- (GameCfg::MapGenerator(value)))
- | do_parse!(tag!("MAZE_SIZE") >> eol >>
- value: u32_line >>
- (GameCfg::MazeSize(value)))
- | do_parse!(tag!("SEED") >> eol >>
- value: a_line >>
- (GameCfg::Seed(value)))
- | do_parse!(tag!("TEMPLATE") >> eol >>
- value: u32_line >>
- (GameCfg::Template(value)))
- | do_parse!(tag!("DRAWNMAP") >> eol >>
- value: a_line >>
- (GameCfg::DrawnMap(value)))
-), Cfg)));
-
-named!(malformed_message<&[u8], HWProtocolMessage>,
- do_parse!(separated_list!(eol, a_line) >> (Malformed)));
-
-named!(empty_message<&[u8], HWProtocolMessage>,
- do_parse!(alt!(end_of_message | eol) >> (Empty)));
-
-named!(message<&[u8], HWProtocolMessage>, alt!(terminated!(
- alt!(
- basic_message
- | one_param_message
- | cmd_message
- | complex_message
- | cfg_message
- ), end_of_message
- )
- | terminated!(malformed_message, end_of_message)
- | empty_message
- )
-);
-
-named!(pub extract_messages<&[u8], Vec<HWProtocolMessage> >, many0!(complete!(message)));
-
-#[cfg(test)]
-proptest! {
- #[test]
- fn is_parser_composition_idempotent(ref msg in gen_proto_msg()) {
- println!("!! Msg: {:?}, Bytes: {:?} !!", msg, msg.to_raw_protocol().as_bytes());
- assert_eq!(message(msg.to_raw_protocol().as_bytes()), Ok((&b""[..], msg.clone())))
- }
-}
-
-#[test]
-fn parse_test() {
- assert_eq!(message(b"PING\n\n"), Ok((&b""[..], Ping)));
- assert_eq!(message(b"START_GAME\n\n"), Ok((&b""[..], StartGame)));
- assert_eq!(message(b"NICK\nit's me\n\n"), Ok((&b""[..], Nick("it's me".to_string()))));
- assert_eq!(message(b"PROTO\n51\n\n"), Ok((&b""[..], Proto(51))));
- assert_eq!(message(b"QUIT\nbye-bye\n\n"), Ok((&b""[..], Quit(Some("bye-bye".to_string())))));
- assert_eq!(message(b"QUIT\n\n"), Ok((&b""[..], Quit(None))));
- assert_eq!(message(b"CMD\nwatch demo\n\n"), Ok((&b""[..], Watch("demo".to_string()))));
- assert_eq!(message(b"BAN\nme\nbad\n77\n\n"), Ok((&b""[..], Ban("me".to_string(), "bad".to_string(), 77))));
-
- assert_eq!(message(b"CMD\nPART\n\n"), Ok((&b""[..], Part(None))));
- assert_eq!(message(b"CMD\nPART _msg_\n\n"), Ok((&b""[..], Part(Some("_msg_".to_string())))));
-
- assert_eq!(message(b"CMD\nRND\n\n"), Ok((&b""[..], Rnd(vec![]))));
- assert_eq!(
- message(b"CMD\nRND A B\n\n"),
- Ok((&b""[..], Rnd(vec![String::from("A"), String::from("B")])))
- );
-
- assert_eq!(extract_messages(b"QUIT\n1\n2\n\n"), Ok((&b""[..], vec![Malformed])));
-
- assert_eq!(extract_messages(b"PING\n\nPING\n\nP"), Ok((&b"P"[..], vec![Ping, Ping])));
- assert_eq!(extract_messages(b"SING\n\nPING\n\n"), Ok((&b""[..], vec![Malformed, Ping])));
- assert_eq!(extract_messages(b"\n\n\n\nPING\n\n"), Ok((&b""[..], vec![Empty, Empty, Ping])));
- assert_eq!(extract_messages(b"\n\n\nPING\n\n"), Ok((&b""[..], vec![Empty, Empty, Ping])));
-}
--- a/gameServer2/src/protocol/test.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-use proptest::{
- test_runner::{TestRunner, Reason},
- arbitrary::{any, any_with, Arbitrary, StrategyFor},
- strategy::{Strategy, BoxedStrategy, Just, Map}
-};
-
-use crate::server::coretypes::{GameCfg, TeamInfo, HedgehogInfo};
-
-use super::messages::{
- HWProtocolMessage, HWProtocolMessage::*
-};
-
-// Due to inability to define From between Options
-trait Into2<T>: Sized { fn into2(self) -> T; }
-impl <T> Into2<T> for T { fn into2(self) -> T { self } }
-impl Into2<Vec<String>> for Vec<Ascii> {
- fn into2(self) -> Vec<String> {
- self.into_iter().map(|x| x.0).collect()
- }
-}
-impl Into2<String> for Ascii { fn into2(self) -> String { self.0 } }
-impl Into2<Option<String>> for Option<Ascii>{
- fn into2(self) -> Option<String> { self.map(|x| {x.0}) }
-}
-
-macro_rules! proto_msg_case {
- ($val: ident()) =>
- (Just($val));
- ($val: ident($arg: ty)) =>
- (any::<$arg>().prop_map(|v| {$val(v.into2())}));
- ($val: ident($arg1: ty, $arg2: ty)) =>
- (any::<($arg1, $arg2)>().prop_map(|v| {$val(v.0.into2(), v.1.into2())}));
- ($val: ident($arg1: ty, $arg2: ty, $arg3: ty)) =>
- (any::<($arg1, $arg2, $arg3)>().prop_map(|v| {$val(v.0.into2(), v.1.into2(), v.2.into2())}));
-}
-
-macro_rules! proto_msg_match {
- ($var: expr, def = $default: expr, $($num: expr => $constr: ident $res: tt),*) => (
- match $var {
- $($num => (proto_msg_case!($constr $res)).boxed()),*,
- _ => Just($default).boxed()
- }
- )
-}
-
-/// Wrapper type for generating non-empty strings
-#[derive(Debug)]
-struct Ascii(String);
-
-impl Arbitrary for Ascii {
- type Parameters = <String as Arbitrary>::Parameters;
-
- fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
- "[a-zA-Z0-9]+".prop_map(Ascii).boxed()
- }
-
- type Strategy = BoxedStrategy<Ascii>;
-}
-
-impl Arbitrary for GameCfg {
- type Parameters = ();
-
- fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
- use crate::server::coretypes::GameCfg::*;
- (0..10).no_shrink().prop_flat_map(|i| {
- proto_msg_match!(i, def = FeatureSize(0),
- 0 => FeatureSize(u32),
- 1 => MapType(Ascii),
- 2 => MapGenerator(u32),
- 3 => MazeSize(u32),
- 4 => Seed(Ascii),
- 5 => Template(u32),
- 6 => Ammo(Ascii, Option<Ascii>),
- 7 => Scheme(Ascii, Vec<Ascii>),
- 8 => Script(Ascii),
- 9 => Theme(Ascii),
- 10 => DrawnMap(Ascii))
- }).boxed()
- }
-
- type Strategy = BoxedStrategy<GameCfg>;
-}
-
-impl Arbitrary for TeamInfo {
- type Parameters = ();
-
- fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
- ("[a-z]+", 0u8..127u8, "[a-z]+", "[a-z]+", "[a-z]+", "[a-z]+", 0u8..127u8)
- .prop_map(|(name, color, grave, fort, voice_pack, flag, difficulty)| {
- fn hog(n: u8) -> HedgehogInfo {
- HedgehogInfo { name: format!("hog{}", n), hat: format!("hat{}", n)}
- }
- let hedgehogs = [hog(1), hog(2), hog(3), hog(4), hog(5), hog(6), hog(7), hog(8)];
- TeamInfo {
- name, color, grave, fort,
- voice_pack, flag,difficulty,
- hedgehogs, hedgehogs_number: 0
- }
- }).boxed()
- }
-
- type Strategy = BoxedStrategy<TeamInfo>;
-}
-
-pub fn gen_proto_msg() -> BoxedStrategy<HWProtocolMessage> where {
- let res = (0..58).no_shrink().prop_flat_map(|i| {
- proto_msg_match!(i, def = Malformed,
- 0 => Ping(),
- 1 => Pong(),
- 2 => Quit(Option<Ascii>),
- //3 => Cmd
- 4 => Global(Ascii),
- 5 => Watch(Ascii),
- 6 => ToggleServerRegisteredOnly(),
- 7 => SuperPower(),
- 8 => Info(Ascii),
- 9 => Nick(Ascii),
- 10 => Proto(u16),
- 11 => Password(Ascii, Ascii),
- 12 => Checker(u16, Ascii, Ascii),
- 13 => List(),
- 14 => Chat(Ascii),
- 15 => CreateRoom(Ascii, Option<Ascii>),
- 16 => JoinRoom(Ascii, Option<Ascii>),
- 17 => Follow(Ascii),
- 18 => Rnd(Vec<Ascii>),
- 19 => Kick(Ascii),
- 20 => Ban(Ascii, Ascii, u32),
- 21 => BanIP(Ascii, Ascii, u32),
- 22 => BanNick(Ascii, Ascii, u32),
- 23 => BanList(),
- 24 => Unban(Ascii),
- //25 => SetServerVar(ServerVar),
- 26 => GetServerVar(),
- 27 => RestartServer(),
- 28 => Stats(),
- 29 => Part(Option<Ascii>),
- 30 => Cfg(GameCfg),
- 31 => AddTeam(Box<TeamInfo>),
- 32 => RemoveTeam(Ascii),
- 33 => SetHedgehogsNumber(Ascii, u8),
- 34 => SetTeamColor(Ascii, u8),
- 35 => ToggleReady(),
- 36 => StartGame(),
- 37 => EngineMessage(Ascii),
- 38 => RoundFinished(),
- 39 => ToggleRestrictJoin(),
- 40 => ToggleRestrictTeams(),
- 41 => ToggleRegisteredOnly(),
- 42 => RoomName(Ascii),
- 43 => Delegate(Ascii),
- 44 => TeamChat(Ascii),
- 45 => MaxTeams(u8),
- 46 => Fix(),
- 47 => Unfix(),
- 48 => Greeting(Ascii),
- //49 => CallVote(Option<(String, Option<String>)>),
- 50 => Vote(bool),
- 51 => ForceVote(bool),
- 52 => Save(Ascii, Ascii),
- 53 => Delete(Ascii),
- 54 => SaveRoom(Ascii),
- 55 => LoadRoom(Ascii),
- 56 => Malformed(),
- 57 => Empty()
- )});
- res.boxed()
-}
--- a/gameServer2/src/server/actions.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,631 +0,0 @@
-use std::{
- io, io::Write,
- iter::once,
- mem::replace
-};
-use super::{
- server::HWServer,
- room::{GameInfo, RoomFlags},
- client::HWClient,
- coretypes::{ClientId, RoomId, GameCfg, VoteType},
- room::HWRoom,
- handlers
-};
-use crate::{
- protocol::messages::{
- HWProtocolMessage,
- HWServerMessage,
- HWServerMessage::*,
- server_chat
- },
- utils::to_engine_msg
-};
-use rand::{thread_rng, Rng, distributions::Uniform};
-
-pub enum Destination {
- ToId(ClientId),
- ToSelf,
- ToAll {
- room_id: Option<RoomId>,
- protocol: Option<u16>,
- skip_self: bool
- }
-}
-
-pub struct PendingMessage {
- pub destination: Destination,
- pub message: HWServerMessage
-}
-
-impl PendingMessage {
- pub fn send(message: HWServerMessage, client_id: ClientId) -> PendingMessage {
- PendingMessage{ destination: Destination::ToId(client_id), message}
- }
-
- pub fn send_self(message: HWServerMessage) -> PendingMessage {
- PendingMessage{ destination: Destination::ToSelf, message }
- }
-
- pub fn send_all(message: HWServerMessage) -> PendingMessage {
- let destination = Destination::ToAll {
- room_id: None,
- protocol: None,
- skip_self: false,
- };
- PendingMessage{ destination, message }
- }
-
- pub fn in_room(mut self, clients_room_id: RoomId) -> PendingMessage {
- if let Destination::ToAll {ref mut room_id, ..} = self.destination {
- *room_id = Some(clients_room_id)
- }
- self
- }
-
- pub fn with_protocol(mut self, protocol_number: u16) -> PendingMessage {
- if let Destination::ToAll {ref mut protocol, ..} = self.destination {
- *protocol = Some(protocol_number)
- }
- self
- }
-
- pub fn but_self(mut self) -> PendingMessage {
- if let Destination::ToAll {ref mut skip_self, ..} = self.destination {
- *skip_self = true
- }
- self
- }
-
- pub fn action(self) -> Action { Send(self) }
-}
-
-impl Into<Action> for PendingMessage {
- fn into(self) -> Action { self.action() }
-}
-
-impl HWServerMessage {
- pub fn send(self, client_id: ClientId) -> PendingMessage { PendingMessage::send(self, client_id) }
- pub fn send_self(self) -> PendingMessage { PendingMessage::send_self(self) }
- pub fn send_all(self) -> PendingMessage { PendingMessage::send_all(self) }
-}
-
-pub enum Action {
- Send(PendingMessage),
- RemoveClient,
- ByeClient(String),
- ReactProtocolMessage(HWProtocolMessage),
- CheckRegistered,
- JoinLobby,
- AddRoom(String, Option<String>),
- RemoveRoom(RoomId),
- MoveToRoom(RoomId),
- MoveToLobby(String),
- ChangeMaster(RoomId, Option<ClientId>),
- RemoveTeam(String),
- RemoveClientTeams,
- SendRoomUpdate(Option<String>),
- StartRoomGame(RoomId),
- SendTeamRemovalMessage(String),
- FinishRoomGame(RoomId),
- SendRoomData{to: ClientId, teams: bool, config: bool, flags: bool},
- AddVote{vote: bool, is_forced: bool},
- ApplyVoting(VoteType, RoomId),
- Warn(String),
- ProtocolError(String)
-}
-
-use self::Action::*;
-
-pub fn run_action(server: &mut HWServer, client_id: usize, action: Action) {
- match action {
- Send(msg) => server.send(client_id, &msg.destination, msg.message),
- ByeClient(msg) => {
- let c = &server.clients[client_id];
- let nick = c.nick.clone();
-
- if let Some(id) = c.room_id{
- if id != server.lobby_id {
- server.react(client_id, vec![
- MoveToLobby(format!("quit: {}", msg.clone()))]);
- }
- }
-
- server.react(client_id, vec![
- LobbyLeft(nick, msg.clone()).send_all().action(),
- Bye(msg).send_self().action(),
- RemoveClient]);
- },
- RemoveClient => {
- server.removed_clients.push(client_id);
- if server.clients.contains(client_id) {
- server.clients.remove(client_id);
- }
- },
- ReactProtocolMessage(msg) =>
- handlers::handle(server, client_id, msg),
- CheckRegistered => {
- let client = &server.clients[client_id];
- if client.protocol_number > 0 && client.nick != "" {
- let has_nick_clash = server.clients.iter().any(
- |(id, c)| id != client_id && c.nick == client.nick);
-
- let actions = if !client.is_checker() && has_nick_clash {
- if client.protocol_number < 38 {
- vec![ByeClient("Nickname is already in use".to_string())]
- } else {
- server.clients[client_id].nick.clear();
- vec![Notice("NickAlreadyInUse".to_string()).send_self().action()]
- }
- } else {
- vec![JoinLobby]
- };
- server.react(client_id, actions);
- }
- },
- JoinLobby => {
- server.clients[client_id].room_id = Some(server.lobby_id);
-
- let mut lobby_nicks = Vec::new();
- for (_, c) in server.clients.iter() {
- if c.room_id.is_some() {
- lobby_nicks.push(c.nick.clone());
- }
- }
- let joined_msg = LobbyJoined(lobby_nicks);
-
- let everyone_msg = LobbyJoined(vec![server.clients[client_id].nick.clone()]);
- let flags_msg = ClientFlags(
- "+i".to_string(),
- server.clients.iter()
- .filter(|(_, c)| c.room_id.is_some())
- .map(|(_, c)| c.nick.clone())
- .collect());
- let server_msg = ServerMessage("\u{1f994} is watching".to_string());
- let rooms_msg = Rooms(server.rooms.iter()
- .filter(|(id, _)| *id != server.lobby_id)
- .flat_map(|(_, r)|
- r.info(r.master_id.map(|id| &server.clients[id])))
- .collect());
- server.react(client_id, vec![
- everyone_msg.send_all().but_self().action(),
- joined_msg.send_self().action(),
- flags_msg.send_self().action(),
- server_msg.send_self().action(),
- rooms_msg.send_self().action(),
- ]);
- },
- AddRoom(name, password) => {
- let room_id = server.add_room();;
-
- let r = &mut server.rooms[room_id];
- let c = &mut server.clients[client_id];
- r.master_id = Some(c.id);
- r.name = name;
- r.password = password;
- r.protocol_number = c.protocol_number;
-
- let actions = vec![
- RoomAdd(r.info(Some(&c))).send_all()
- .with_protocol(r.protocol_number).action(),
- MoveToRoom(room_id)];
-
- server.react(client_id, actions);
- },
- RemoveRoom(room_id) => {
- let r = &mut server.rooms[room_id];
- let actions = vec![RoomRemove(r.name.clone()).send_all()
- .with_protocol(r.protocol_number).action()];
- server.rooms.remove(room_id);
- server.react(client_id, actions);
- }
- MoveToRoom(room_id) => {
- let r = &mut server.rooms[room_id];
- let c = &mut server.clients[client_id];
- r.players_number += 1;
- c.room_id = Some(room_id);
-
- let is_master = r.master_id == Some(c.id);
- c.set_is_master(is_master);
- c.set_is_ready(is_master);
- c.set_is_joined_mid_game(false);
-
- if is_master {
- r.ready_players_number += 1;
- }
-
- let mut v = vec![
- RoomJoined(vec![c.nick.clone()]).send_all().in_room(room_id).action(),
- ClientFlags("+i".to_string(), vec![c.nick.clone()]).send_all().action(),
- SendRoomUpdate(None)];
-
- if !r.greeting.is_empty() {
- v.push(ChatMsg {nick: "[greeting]".to_string(), msg: r.greeting.clone()}
- .send_self().action());
- }
-
- if !c.is_master() {
- let team_names: Vec<_>;
- if let Some(ref mut info) = r.game_info {
- c.set_is_in_game(true);
- c.set_is_joined_mid_game(true);
-
- {
- let teams = info.client_teams(c.id);
- c.teams_in_game = teams.clone().count() as u8;
- c.clan = teams.clone().next().map(|t| t.color);
- team_names = teams.map(|t| t.name.clone()).collect();
- }
-
- if !team_names.is_empty() {
- info.left_teams.retain(|name|
- !team_names.contains(&name));
- info.teams_in_game += team_names.len() as u8;
- r.teams = info.teams_at_start.iter()
- .filter(|(_, t)| !team_names.contains(&t.name))
- .cloned().collect();
- }
- } else {
- team_names = Vec::new();
- }
-
- v.push(SendRoomData{ to: client_id, teams: true, config: true, flags: true});
-
- if let Some(ref info) = r.game_info {
- v.push(RunGame.send_self().action());
- v.push(ClientFlags("+g".to_string(), vec![c.nick.clone()])
- .send_all().in_room(r.id).action());
- v.push(ForwardEngineMessage(
- vec![to_engine_msg("e$spectate 1".bytes())])
- .send_self().action());
- v.push(ForwardEngineMessage(info.msg_log.clone())
- .send_self().action());
-
- for name in &team_names {
- v.push(ForwardEngineMessage(
- vec![to_engine_msg(once(b'G').chain(name.bytes()))])
- .send_all().in_room(r.id).action());
- }
- if info.is_paused {
- v.push(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))])
- .send_all().in_room(r.id).action())
- }
- }
- }
- server.react(client_id, v);
- }
- SendRoomData {to, teams, config, flags} => {
- let mut actions = Vec::new();
- let room_id = server.clients[client_id].room_id;
- if let Some(r) = room_id.and_then(|id| server.rooms.get(id)) {
- if config {
- actions.push(ConfigEntry("FULLMAPCONFIG".to_string(), r.map_config())
- .send(to).action());
- for cfg in r.game_config() {
- actions.push(cfg.to_server_msg().send(to).action());
- }
- }
- if teams {
- let current_teams = match r.game_info {
- Some(ref info) => &info.teams_at_start,
- None => &r.teams
- };
- for (owner_id, team) in current_teams.iter() {
- actions.push(TeamAdd(HWRoom::team_info(&server.clients[*owner_id], &team))
- .send(to).action());
- actions.push(TeamColor(team.name.clone(), team.color)
- .send(to).action());
- actions.push(HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
- .send(to).action());
- }
- }
- if flags {
- if let Some(id) = r.master_id {
- actions.push(ClientFlags("+h".to_string(), vec![server.clients[id].nick.clone()])
- .send(to).action());
- }
- let nicks: Vec<_> = server.clients.iter()
- .filter(|(_, c)| c.room_id == Some(r.id) && c.is_ready())
- .map(|(_, c)| c.nick.clone()).collect();
- if !nicks.is_empty() {
- actions.push(ClientFlags("+r".to_string(), nicks)
- .send(to).action());
- }
- }
- }
- server.react(client_id, actions);
- }
- AddVote{vote, is_forced} => {
- let mut actions = Vec::new();
- if let Some(r) = server.room(client_id) {
- let mut result = None;
- if let Some(ref mut voting) = r.voting {
- if is_forced || voting.votes.iter().all(|(id, _)| client_id != *id) {
- actions.push(server_chat("Your vote has been counted.".to_string())
- .send_self().action());
- voting.votes.push((client_id, vote));
- let i = voting.votes.iter();
- let pro = i.clone().filter(|(_, v)| *v).count();
- let contra = i.filter(|(_, v)| !*v).count();
- let success_quota = voting.voters.len() / 2 + 1;
- if is_forced && vote || pro >= success_quota {
- result = Some(true);
- } else if is_forced && !vote || contra > voting.voters.len() - success_quota {
- result = Some(false);
- }
- } else {
- actions.push(server_chat("You already have voted.".to_string())
- .send_self().action());
- }
- } else {
- actions.push(server_chat("There's no voting going on.".to_string())
- .send_self().action());
- }
-
- if let Some(res) = result {
- actions.push(server_chat("Voting closed.".to_string())
- .send_all().in_room(r.id).action());
- let voting = replace(&mut r.voting, None).unwrap();
- if res {
- actions.push(ApplyVoting(voting.kind, r.id));
- }
- }
- }
-
- server.react(client_id, actions);
- }
- ApplyVoting(kind, room_id) => {
- let mut actions = Vec::new();
- let mut id = client_id;
- match kind {
- VoteType::Kick(nick) => {
- if let Some(c) = server.find_client(&nick) {
- if c.room_id == Some(room_id) {
- id = c.id;
- actions.push(Kicked.send_self().action());
- actions.push(MoveToLobby("kicked".to_string()));
- }
- }
- },
- VoteType::Map(None) => (),
- VoteType::Map(Some(name)) => {
- if let Some(location) = server.rooms[room_id].load_config(&name) {
- actions.push(server_chat(location.to_string())
- .send_all().in_room(room_id).action());
- actions.push(SendRoomUpdate(None));
- for (_, c) in server.clients.iter() {
- if c.room_id == Some(room_id) {
- actions.push(SendRoomData{
- to: c.id, teams: false,
- config: true, flags: false})
- }
- }
- }
- },
- VoteType::Pause => {
- if let Some(ref mut info) = server.rooms[room_id].game_info {
- info.is_paused = !info.is_paused;
- actions.push(server_chat("Pause toggled.".to_string())
- .send_all().in_room(room_id).action());
- actions.push(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))])
- .send_all().in_room(room_id).action());
- }
- },
- VoteType::NewSeed => {
- let seed = thread_rng().gen_range(0, 1_000_000_000).to_string();
- let cfg = GameCfg::Seed(seed);
- actions.push(cfg.to_server_msg().send_all().in_room(room_id).action());
- server.rooms[room_id].set_config(cfg);
- },
- VoteType::HedgehogsPerTeam(number) => {
- let r = &mut server.rooms[room_id];
- let nicks = r.set_hedgehogs_number(number);
- actions.extend(nicks.into_iter().map(|n|
- HedgehogsNumber(n, number).send_all().in_room(room_id).action()
- ));
- },
- }
- server.react(id, actions);
- }
- MoveToLobby(msg) => {
- let mut actions = Vec::new();
- let lobby_id = server.lobby_id;
- if let (c, Some(r)) = server.client_and_room(client_id) {
- r.players_number -= 1;
- if c.is_ready() && r.ready_players_number > 0 {
- r.ready_players_number -= 1;
- }
- if c.is_master() && (r.players_number > 0 || r.is_fixed()) {
- actions.push(ChangeMaster(r.id, None));
- }
- actions.push(ClientFlags("-i".to_string(), vec![c.nick.clone()])
- .send_all().action());
- }
- server.react(client_id, actions);
- actions = Vec::new();
-
- if let (c, Some(r)) = server.client_and_room(client_id) {
- c.room_id = Some(lobby_id);
- if r.players_number == 0 && !r.is_fixed() {
- actions.push(RemoveRoom(r.id));
- } else {
- actions.push(RemoveClientTeams);
- actions.push(RoomLeft(c.nick.clone(), msg)
- .send_all().in_room(r.id).but_self().action());
- actions.push(SendRoomUpdate(Some(r.name.clone())));
- }
- }
- server.react(client_id, actions)
- }
- ChangeMaster(room_id, new_id) => {
- let mut actions = Vec::new();
- let room_client_ids = server.room_clients(room_id);
- let new_id = if server.room(client_id).map(|r| r.is_fixed()).unwrap_or(false) {
- new_id
- } else {
- new_id.or_else(||
- room_client_ids.iter().find(|id| **id != client_id).cloned())
- };
- let new_nick = new_id.map(|id| server.clients[id].nick.clone());
-
- if let (c, Some(r)) = server.client_and_room(client_id) {
- match r.master_id {
- Some(id) if id == c.id => {
- c.set_is_master(false);
- r.master_id = None;
- actions.push(ClientFlags("-h".to_string(), vec![c.nick.clone()])
- .send_all().in_room(r.id).action());
- }
- Some(_) => unreachable!(),
- None => {}
- }
- r.master_id = new_id;
- if !r.is_fixed() && c.protocol_number < 42 {
- r.name.replace_range(.., new_nick.as_ref().map_or("[]", String::as_str));
- }
- r.set_join_restriction(false);
- r.set_team_add_restriction(false);
- let is_fixed = r.is_fixed();
- r.set_unregistered_players_restriction(is_fixed);
- if let Some(nick) = new_nick {
- actions.push(ClientFlags("+h".to_string(), vec![nick])
- .send_all().in_room(r.id).action());
- }
- }
- if let Some(id) = new_id {
- server.clients[id].set_is_master(true)
- }
- server.react(client_id, actions);
- }
- RemoveTeam(name) => {
- let mut actions = Vec::new();
- if let (c, Some(r)) = server.client_and_room(client_id) {
- r.remove_team(&name);
- if let Some(ref mut info) = r.game_info {
- info.left_teams.push(name.clone());
- }
- actions.push(TeamRemove(name.clone()).send_all().in_room(r.id).action());
- actions.push(SendRoomUpdate(None));
- if r.game_info.is_some() && c.is_in_game() {
- actions.push(SendTeamRemovalMessage(name));
- }
- }
- server.react(client_id, actions);
- },
- RemoveClientTeams => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let actions = r.client_teams(c.id).map(|t| RemoveTeam(t.name.clone())).collect();
- server.react(client_id, actions);
- }
- }
- SendRoomUpdate(old_name) => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let name = old_name.unwrap_or_else(|| r.name.clone());
- let actions = vec![RoomUpdated(name, r.info(Some(&c)))
- .send_all().with_protocol(r.protocol_number).action()];
- server.react(client_id, actions);
- }
- },
- StartRoomGame(room_id) => {
- let actions = {
- let (room_clients, room_nicks): (Vec<_>, Vec<_>) = server.clients.iter()
- .map(|(id, c)| (id, c.nick.clone())).unzip();
- let room = &mut server.rooms[room_id];
-
- if !room.has_multiple_clans() {
- vec![Warn("The game can't be started with less than two clans!".to_string())]
- } else if room.protocol_number <= 43 && room.players_number != room.ready_players_number {
- vec![Warn("Not all players are ready".to_string())]
- } else if room.game_info.is_some() {
- vec![Warn("The game is already in progress".to_string())]
- } else {
- room.start_round();
- for id in room_clients {
- let c = &mut server.clients[id];
- c.set_is_in_game(false);
- c.team_indices = room.client_team_indices(c.id);
- }
- vec![RunGame.send_all().in_room(room.id).action(),
- SendRoomUpdate(None),
- ClientFlags("+g".to_string(), room_nicks)
- .send_all().in_room(room.id).action()]
- }
- };
- server.react(client_id, actions);
- }
- SendTeamRemovalMessage(team_name) => {
- let mut actions = Vec::new();
- if let Some(r) = server.room(client_id) {
- if let Some(ref mut info) = r.game_info {
- let msg = once(b'F').chain(team_name.bytes());
- actions.push(ForwardEngineMessage(vec![to_engine_msg(msg)]).
- send_all().in_room(r.id).but_self().action());
- info.teams_in_game -= 1;
- if info.teams_in_game == 0 {
- actions.push(FinishRoomGame(r.id));
- }
- let remove_msg = to_engine_msg(once(b'F').chain(team_name.bytes()));
- if let Some(m) = &info.sync_msg {
- info.msg_log.push(m.clone());
- }
- if info.sync_msg.is_some() {
- info.sync_msg = None
- }
- info.msg_log.push(remove_msg.clone());
- actions.push(ForwardEngineMessage(vec![remove_msg])
- .send_all().in_room(r.id).but_self().action());
- }
- }
- server.react(client_id, actions);
- }
- FinishRoomGame(room_id) => {
- let mut actions = Vec::new();
-
- let r = &mut server.rooms[room_id];
- r.ready_players_number = 1;
- actions.push(SendRoomUpdate(None));
- actions.push(RoundFinished.send_all().in_room(r.id).action());
-
- if let Some(info) = replace(&mut r.game_info, None) {
- for (_, c) in server.clients.iter() {
- if c.room_id == Some(room_id) && c.is_joined_mid_game() {
- actions.push(SendRoomData{
- to: c.id, teams: false,
- config: true, flags: false});
- for name in &info.left_teams {
- actions.push(TeamRemove(name.clone())
- .send(c.id).action());
- }
- }
- }
- }
-
- let nicks: Vec<_> = server.clients.iter_mut()
- .filter(|(_, c)| c.room_id == Some(room_id))
- .map(|(_, c)| {
- c.set_is_ready(c.is_master());
- c.set_is_joined_mid_game(false);
- c
- }).filter_map(|c| if !c.is_master() {
- Some(c.nick.clone())
- } else {
- None
- }).collect();
-
- if !nicks.is_empty() {
- let msg = if r.protocol_number < 38 {
- LegacyReady(false, nicks)
- } else {
- ClientFlags("-r".to_string(), nicks)
- };
- actions.push(msg.send_all().in_room(room_id).action());
- }
- server.react(client_id, actions);
- }
- Warn(msg) => {
- run_action(server, client_id, Warning(msg).send_self().action());
- }
- ProtocolError(msg) => {
- run_action(server, client_id, Error(msg).send_self().action())
- }
- }
-}
--- a/gameServer2/src/server/client.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-use super::coretypes::ClientId;
-use bitflags::*;
-
-bitflags!{
- pub struct ClientFlags: u8 {
- const IS_ADMIN = 0b0000_0001;
- const IS_MASTER = 0b0000_0010;
- const IS_READY = 0b0000_0100;
- const IS_IN_GAME = 0b0000_1000;
- const IS_JOINED_MID_GAME = 0b0001_0000;
- const IS_CHECKER = 0b0010_0000;
-
- const NONE = 0b0000_0000;
- const DEFAULT = Self::NONE.bits;
- }
-}
-
-pub struct HWClient {
- pub id: ClientId,
- pub room_id: Option<usize>,
- pub nick: String,
- pub web_password: String,
- pub server_salt: String,
- pub protocol_number: u16,
- pub flags: ClientFlags,
- pub teams_in_game: u8,
- pub team_indices: Vec<u8>,
- pub clan: Option<u8>
-}
-
-impl HWClient {
- pub fn new(id: ClientId, salt: String) -> HWClient {
- HWClient {
- id,
- room_id: None,
- nick: String::new(),
- web_password: String::new(),
- server_salt: salt,
- protocol_number: 0,
- flags: ClientFlags::DEFAULT,
- teams_in_game: 0,
- team_indices: Vec::new(),
- clan: None,
- }
- }
-
- fn contains(& self, mask: ClientFlags) -> bool {
- self.flags.contains(mask)
- }
-
- fn set(&mut self, mask: ClientFlags, value: bool) {
- self.flags.set(mask, value);
- }
-
- pub fn is_admin(&self)-> bool { self.contains(ClientFlags::IS_ADMIN) }
- pub fn is_master(&self)-> bool { self.contains(ClientFlags::IS_MASTER) }
- pub fn is_ready(&self)-> bool { self.contains(ClientFlags::IS_READY) }
- pub fn is_in_game(&self)-> bool { self.contains(ClientFlags::IS_IN_GAME) }
- pub fn is_joined_mid_game(&self)-> bool { self.contains(ClientFlags::IS_JOINED_MID_GAME) }
- pub fn is_checker(&self)-> bool { self.contains(ClientFlags::IS_CHECKER) }
-
- pub fn set_is_admin(&mut self, value: bool) { self.set(ClientFlags::IS_ADMIN, value) }
- pub fn set_is_master(&mut self, value: bool) { self.set(ClientFlags::IS_MASTER, value) }
- pub fn set_is_ready(&mut self, value: bool) { self.set(ClientFlags::IS_READY, value) }
- pub fn set_is_in_game(&mut self, value: bool) { self.set(ClientFlags::IS_IN_GAME, value) }
- pub fn set_is_joined_mid_game(&mut self, value: bool) { self.set(ClientFlags::IS_JOINED_MID_GAME, value) }
- pub fn set_is_checker(&mut self, value: bool) { self.set(ClientFlags::IS_CHECKER, value) }
-}
\ No newline at end of file
--- a/gameServer2/src/server/coretypes.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-pub type ClientId = usize;
-pub type RoomId = usize;
-
-pub const MAX_HEDGEHOGS_PER_TEAM: u8 = 8;
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub enum ServerVar {
- MOTDNew(String),
- MOTDOld(String),
- LatestProto(u32),
-}
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub enum GameCfg {
- FeatureSize(u32),
- MapType(String),
- MapGenerator(u32),
- MazeSize(u32),
- Seed(String),
- Template(u32),
-
- Ammo(String, Option<String>),
- Scheme(String, Vec<String>),
- Script(String),
- Theme(String),
- DrawnMap(String)
-}
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub struct TeamInfo {
- pub name: String,
- pub color: u8,
- pub grave: String,
- pub fort: String,
- pub voice_pack: String,
- pub flag: String,
- pub difficulty: u8,
- pub hedgehogs_number: u8,
- pub hedgehogs: [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize],
-}
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub struct HedgehogInfo {
- pub name: String,
- pub hat: String,
-}
-
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub enum VoteType {
- Kick(String),
- Map(Option<String>),
- Pause,
- NewSeed,
- HedgehogsPerTeam(u8)
-}
-
-#[derive(Clone, Debug)]
-pub struct Voting {
- pub ttl: u32,
- pub voters: Vec<ClientId>,
- pub votes: Vec<(ClientId, bool)>,
- pub kind: VoteType
-}
-
-impl Voting {
- pub fn new(kind: VoteType, voters: Vec<ClientId>) -> Voting {
- Voting {
- kind, voters, ttl: 2,
- votes: Vec::new()
- }
- }
-}
\ No newline at end of file
--- a/gameServer2/src/server/handlers/checker.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-use mio;
-use log::*;
-
-use crate::{
- server::{
- server::HWServer,
- coretypes::ClientId,
- },
- protocol::messages::{
- HWProtocolMessage
- },
-};
-
-pub fn handle(server: & mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
- match message {
- _ => warn!("Unknown command"),
- }
-}
--- a/gameServer2/src/server/handlers/common.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-use crate::{
- server::{actions::Action, server::HWServer},
- protocol::messages::{
- HWProtocolMessage::{self, Rnd}, HWServerMessage::{self, ChatMsg},
- }
-};
-use rand::{self, Rng, thread_rng};
-
-pub fn rnd_reply(options: &[String]) -> HWServerMessage {
- let mut rng = thread_rng();
- let reply = if options.is_empty() {
- (*rng.choose(&["heads", "tails"]).unwrap()).to_owned()
- } else {
- rng.choose(&options).unwrap().clone()
- };
-
- ChatMsg {
- nick: "[random]".to_owned(),
- msg: reply.clone(),
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::protocol::messages::HWServerMessage::ChatMsg;
- use crate::server::actions::{
- Action::{self, Send}, PendingMessage,
- };
-
- fn reply2string(r: HWServerMessage) -> String {
- match r {
- ChatMsg { msg: p, .. } => String::from(p),
- _ => panic!("expected a ChatMsg"),
- }
- }
-
- fn run_handle_test(opts: Vec<String>) {
- let opts2 = opts.clone();
- for opt in opts {
- while reply2string(rnd_reply(&opts2)) != opt {}
- }
- }
-
- /// This test terminates almost surely.
- #[test]
- fn test_handle_rnd_empty() {
- run_handle_test(vec![])
- }
-
- /// This test terminates almost surely.
- #[test]
- fn test_handle_rnd_nonempty() {
- run_handle_test(vec!["A".to_owned(), "B".to_owned(), "C".to_owned()])
- }
-
- /// This test terminates almost surely (strong law of large numbers)
- #[test]
- fn test_distribution() {
- let eps = 0.000001;
- let lim = 0.5;
- let opts = vec![0.to_string(), 1.to_string()];
- let mut ones = 0;
- let mut tries = 0;
-
- while tries < 1000 || ((ones as f64 / tries as f64) - lim).abs() >= eps {
- tries += 1;
- if reply2string(rnd_reply(&opts)) == 1.to_string() {
- ones += 1;
- }
- }
- }
-}
--- a/gameServer2/src/server/handlers/inroom.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,499 +0,0 @@
-use mio;
-
-use crate::{
- server::{
- coretypes::{
- ClientId, RoomId, Voting, VoteType, GameCfg,
- MAX_HEDGEHOGS_PER_TEAM
- },
- server::HWServer,
- room::{HWRoom, RoomFlags},
- actions::{Action, Action::*}
- },
- protocol::messages::{
- HWProtocolMessage,
- HWServerMessage::*,
- server_chat
- },
- utils::is_name_illegal
-};
-use std::{
- mem::swap, fs::{File, OpenOptions},
- io::{Read, Write, Result, Error, ErrorKind}
-};
-use base64::{encode, decode};
-use super::common::rnd_reply;
-use log::*;
-
-#[derive(Clone)]
-struct ByMsg<'a> {
- messages: &'a[u8]
-}
-
-impl <'a> Iterator for ByMsg<'a> {
- type Item = &'a[u8];
-
- fn next(&mut self) -> Option<<Self as Iterator>::Item> {
- if let Some(size) = self.messages.get(0) {
- let (msg, next) = self.messages.split_at(*size as usize + 1);
- self.messages = next;
- Some(msg)
- } else {
- None
- }
- }
-}
-
-fn by_msg(source: &[u8]) -> ByMsg {
- ByMsg {messages: source}
-}
-
-const VALID_MESSAGES: &[u8] =
- b"M#+LlRrUuDdZzAaSjJ,NpPwtgfhbc12345\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A";
-const NON_TIMED_MESSAGES: &[u8] = b"M#hb";
-
-#[cfg(canhazslicepatterns)]
-fn is_msg_valid(msg: &[u8], team_indices: &[u8]) -> bool {
- match msg {
- [size, typ, body..] => VALID_MESSAGES.contains(typ)
- && match body {
- [1...MAX_HEDGEHOGS_PER_TEAM, team, ..] if *typ == b'h' =>
- team_indices.contains(team),
- _ => *typ != b'h'
- },
- _ => false
- }
-}
-
-fn is_msg_valid(msg: &[u8], _team_indices: &[u8]) -> bool {
- if let Some(typ) = msg.get(1) {
- VALID_MESSAGES.contains(typ)
- } else {
- false
- }
-}
-
-fn is_msg_empty(msg: &[u8]) -> bool {
- msg.get(1).filter(|t| **t == b'+').is_some()
-}
-
-fn is_msg_timed(msg: &[u8]) -> bool {
- msg.get(1).filter(|t| !NON_TIMED_MESSAGES.contains(t)).is_some()
-}
-
-fn voting_description(kind: &VoteType) -> String {
- format!("New voting started: {}", match kind {
- VoteType::Kick(nick) => format!("kick {}", nick),
- VoteType::Map(name) => format!("map {}", name.as_ref().unwrap()),
- VoteType::Pause => "pause".to_string(),
- VoteType::NewSeed => "new seed".to_string(),
- VoteType::HedgehogsPerTeam(number) => format!("hedgehogs per team: {}", number)
- })
-}
-
-fn room_message_flag(msg: &HWProtocolMessage) -> RoomFlags {
- use crate::protocol::messages::HWProtocolMessage::*;
- match msg {
- ToggleRestrictJoin => RoomFlags::RESTRICTED_JOIN,
- ToggleRestrictTeams => RoomFlags::RESTRICTED_TEAM_ADD,
- ToggleRegisteredOnly => RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS,
- _ => RoomFlags::empty()
- }
-}
-
-fn read_file(filename: &str) -> Result<String> {
- let mut reader = File::open(filename)?;
- let mut result = String::new();
- reader.read_to_string(&mut result)?;
- Ok(result)
-}
-
-fn write_file(filename: &str, content: &str) -> Result<()> {
- let mut writer = OpenOptions::new().create(true).write(true).open(filename)?;
- writer.write_all(content.as_bytes())
-}
-
-pub fn handle(server: &mut HWServer, client_id: ClientId, room_id: RoomId, message: HWProtocolMessage) {
- use crate::protocol::messages::HWProtocolMessage::*;
- match message {
- Part(None) => server.react(client_id, vec![
- MoveToLobby("part".to_string())]),
- Part(Some(msg)) => server.react(client_id, vec![
- MoveToLobby(format!("part: {}", msg))]),
- Chat(msg) => {
- let actions = {
- let c = &mut server.clients[client_id];
- let chat_msg = ChatMsg {nick: c.nick.clone(), msg};
- vec![chat_msg.send_all().in_room(room_id).but_self().action()]
- };
- server.react(client_id, actions);
- },
- Fix => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if c.is_admin() { r.set_is_fixed(true) }
- }
- }
- Unfix => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if c.is_admin() { r.set_is_fixed(false) }
- }
- }
- Greeting(text) => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if c.is_admin() || c.is_master() && !r.is_fixed() {
- r.greeting = text
- }
- }
- }
- RoomName(new_name) => {
- let actions =
- if is_name_illegal(&new_name) {
- vec![Warn("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: $()*+?[]^{|}".to_string())]
- } else if server.rooms[room_id].is_fixed() {
- vec![Warn("Access denied.".to_string())]
- } else if server.has_room(&new_name) {
- vec![Warn("A room with the same name already exists.".to_string())]
- } else {
- let mut old_name = new_name.clone();
- swap(&mut server.rooms[room_id].name, &mut old_name);
- vec![SendRoomUpdate(Some(old_name))]
- };
- server.react(client_id, actions);
- },
- ToggleReady => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let flags = if c.is_ready() {
- r.ready_players_number -= 1;
- "-r"
- } else {
- r.ready_players_number += 1;
- "+r"
- };
-
- let msg = if c.protocol_number < 38 {
- LegacyReady(c.is_ready(), vec![c.nick.clone()])
- } else {
- ClientFlags(flags.to_string(), vec![c.nick.clone()])
- };
-
- let mut v = vec![msg.send_all().in_room(r.id).action()];
-
- if r.is_fixed() && r.ready_players_number == r.players_number {
- v.push(StartRoomGame(r.id))
- }
-
- c.set_is_ready(!c.is_ready());
- server.react(client_id, v);
- }
- }
- AddTeam(info) => {
- let mut actions = Vec::new();
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if r.teams.len() >= r.team_limit as usize {
- actions.push(Warn("Too many teams!".to_string()))
- } else if r.addable_hedgehogs() == 0 {
- actions.push(Warn("Too many hedgehogs!".to_string()))
- } else if r.find_team(|t| t.name == info.name) != None {
- actions.push(Warn("There's already a team with same name in the list.".to_string()))
- } else if r.game_info.is_some() {
- actions.push(Warn("Joining not possible: Round is in progress.".to_string()))
- } else if r.is_team_add_restricted() {
- actions.push(Warn("This room currently does not allow adding new teams.".to_string()));
- } else {
- let team = r.add_team(c.id, *info, c.protocol_number < 42);
- c.teams_in_game += 1;
- c.clan = Some(team.color);
- actions.push(TeamAccepted(team.name.clone())
- .send_self().action());
- actions.push(TeamAdd(HWRoom::team_info(&c, team))
- .send_all().in_room(room_id).but_self().action());
- actions.push(TeamColor(team.name.clone(), team.color)
- .send_all().in_room(room_id).action());
- actions.push(HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
- .send_all().in_room(room_id).action());
- actions.push(SendRoomUpdate(None));
- }
- }
- server.react(client_id, actions);
- },
- RemoveTeam(name) => {
- let mut actions = Vec::new();
- if let (c, Some(r)) = server.client_and_room(client_id) {
- match r.find_team_owner(&name) {
- None =>
- actions.push(Warn("Error: The team you tried to remove does not exist.".to_string())),
- Some((id, _)) if id != client_id =>
- actions.push(Warn("You can't remove a team you don't own.".to_string())),
- Some((_, name)) => {
- c.teams_in_game -= 1;
- c.clan = r.find_team_color(c.id);
- actions.push(Action::RemoveTeam(name.to_string()));
- }
- }
- };
- server.react(client_id, actions);
- },
- SetHedgehogsNumber(team_name, number) => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let addable_hedgehogs = r.addable_hedgehogs();
- let actions = if let Some((_, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) {
- if !c.is_master() {
- vec![ProtocolError("You're not the room master!".to_string())]
- } else if number < 1 || number > MAX_HEDGEHOGS_PER_TEAM
- || number > addable_hedgehogs + team.hedgehogs_number {
- vec![HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
- .send_self().action()]
- } else {
- team.hedgehogs_number = number;
- vec![HedgehogsNumber(team.name.clone(), number)
- .send_all().in_room(room_id).but_self().action()]
- }
- } else {
- vec![(Warn("No such team.".to_string()))]
- };
- server.react(client_id, actions);
- }
- },
- SetTeamColor(team_name, color) => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let mut owner_id = None;
- let actions = if let Some((owner, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) {
- if !c.is_master() {
- vec![ProtocolError("You're not the room master!".to_string())]
- } else if false {
- Vec::new()
- } else {
- owner_id = Some(owner);
- team.color = color;
- vec![TeamColor(team.name.clone(), color)
- .send_all().in_room(room_id).but_self().action()]
- }
- } else {
- vec![(Warn("No such team.".to_string()))]
- };
-
- if let Some(id) = owner_id {
- server.clients[id].clan = Some(color);
- }
-
- server.react(client_id, actions);
- };
- },
- Cfg(cfg) => {
- if let (c, Some(r)) = server.client_and_room(client_id) {
- let actions = if r.is_fixed() {
- vec![Warn("Access denied.".to_string())]
- } else if !c.is_master() {
- vec![ProtocolError("You're not the room master!".to_string())]
- } else {
- let cfg = match cfg {
- GameCfg::Scheme(name, mut values) => {
- if c.protocol_number == 49 && values.len() >= 2 {
- let mut s = "X".repeat(50);
- s.push_str(&values.pop().unwrap());
- values.push(s);
- }
- GameCfg::Scheme(name, values)
- }
- cfg => cfg
- };
-
- let v = vec![cfg.to_server_msg()
- .send_all().in_room(r.id).but_self().action()];
- r.set_config(cfg);
- v
- };
- server.react(client_id, actions);
- }
- }
- Save(name, location) => {
- let actions = vec![server_chat(format!("Room config saved as {}", name))
- .send_all().in_room(room_id).action()];
- server.rooms[room_id].save_config(name, location);
- server.react(client_id, actions);
- }
- SaveRoom(filename) => {
- if server.clients[client_id].is_admin() {
- let actions = match server.rooms[room_id].get_saves() {
- Ok(text) => match write_file(&filename, &text) {
- Ok(_) => vec![server_chat("Room configs saved successfully.".to_string())
- .send_self().action()],
- Err(e) => {
- warn!("Error while writing the config file \"{}\": {}", filename, e);
- vec![Warn("Unable to save the room configs.".to_string())]
- }
- }
- Err(e) => {
- warn!("Error while serializing the room configs: {}", e);
- vec![Warn("Unable to serialize the room configs.".to_string())]
- }
- };
- server.react(client_id, actions);
- }
- }
- LoadRoom(filename) => {
- if server.clients[client_id].is_admin() {
- let actions = match read_file(&filename) {
- Ok(text) => match server.rooms[room_id].set_saves(&text) {
- Ok(_) => vec![server_chat("Room configs loaded successfully.".to_string())
- .send_self().action()],
- Err(e) => {
- warn!("Error while deserializing the room configs: {}", e);
- vec![Warn("Unable to deserialize the room configs.".to_string())]
- }
- }
- Err(e) => {
- warn!("Error while reading the config file \"{}\": {}", filename, e);
- vec![Warn("Unable to load the room configs.".to_string())]
- }
- };
- server.react(client_id, actions);
- }
- }
- Delete(name) => {
- let actions = if !server.rooms[room_id].delete_config(&name) {
- vec![Warn(format!("Save doesn't exist: {}", name))]
- } else {
- vec![server_chat(format!("Room config {} has been deleted", name))
- .send_all().in_room(room_id).action()]
- };
- server.react(client_id, actions);
- }
- CallVote(None) => {
- server.react(client_id, vec![
- server_chat("Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs <number>".to_string())
- .send_self().action()])
- }
- CallVote(Some(kind)) => {
- let is_in_game = server.rooms[room_id].game_info.is_some();
- let error = match &kind {
- VoteType::Kick(nick) => {
- if server.find_client(&nick).filter(|c| c.room_id == Some(room_id)).is_some() {
- None
- } else {
- Some("/callvote kick: No such user!".to_string())
- }
- },
- VoteType::Map(None) => {
- let names: Vec<_> = server.rooms[room_id].saves.keys().cloned().collect();
- if names.is_empty() {
- Some("/callvote map: No maps saved in this room!".to_string())
- } else {
- Some(format!("Available maps: {}", names.join(", ")))
- }
- },
- VoteType::Map(Some(name)) => {
- if server.rooms[room_id].saves.get(&name[..]).is_some() {
- None
- } else {
- Some("/callvote map: No such map!".to_string())
- }
- },
- VoteType::Pause => {
- if is_in_game {
- None
- } else {
- Some("/callvote pause: No game in progress!".to_string())
- }
- },
- VoteType::NewSeed => {
- None
- },
- VoteType::HedgehogsPerTeam(number) => {
- match number {
- 1...MAX_HEDGEHOGS_PER_TEAM => None,
- _ => Some("/callvote hedgehogs: Specify number from 1 to 8.".to_string())
- }
- },
- };
- match error {
- None => {
- let msg = voting_description(&kind);
- let voting = Voting::new(kind, server.room_clients(client_id));
- server.rooms[room_id].voting = Some(voting);
- server.react(client_id, vec![
- server_chat(msg).send_all().in_room(room_id).action(),
- AddVote{ vote: true, is_forced: false}]);
- }
- Some(msg) => {
- server.react(client_id, vec![
- server_chat(msg).send_self().action()])
- }
- }
- }
- Vote(vote) => {
- server.react(client_id, vec![AddVote{ vote, is_forced: false }]);
- }
- ForceVote(vote) => {
- let is_forced = server.clients[client_id].is_admin();
- server.react(client_id, vec![AddVote{ vote, is_forced }]);
- }
- ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => {
- if server.clients[client_id].is_master() {
- server.rooms[room_id].flags.toggle(room_message_flag(&message));
- }
- server.react(client_id, vec![SendRoomUpdate(None)]);
- }
- StartGame => {
- server.react(client_id, vec![StartRoomGame(room_id)]);
- }
- EngineMessage(em) => {
- let mut actions = Vec::new();
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if c.teams_in_game > 0 {
- let decoding = decode(&em[..]).unwrap();
- let messages = by_msg(&decoding);
- let valid = messages.filter(|m| is_msg_valid(m, &c.team_indices));
- let non_empty = valid.clone().filter(|m| !is_msg_empty(m));
- let sync_msg = valid.clone().filter(|m| is_msg_timed(m))
- .last().map(|m| if is_msg_empty(m) {Some(encode(m))} else {None});
-
- let em_response = encode(&valid.flat_map(|msg| msg).cloned().collect::<Vec<_>>());
- if !em_response.is_empty() {
- actions.push(ForwardEngineMessage(vec![em_response])
- .send_all().in_room(r.id).but_self().action());
- }
- let em_log = encode(&non_empty.flat_map(|msg| msg).cloned().collect::<Vec<_>>());
- if let Some(ref mut info) = r.game_info {
- if !em_log.is_empty() {
- info.msg_log.push(em_log);
- }
- if let Some(msg) = sync_msg {
- info.sync_msg = msg;
- }
- }
- }
- }
- server.react(client_id, actions)
- }
- RoundFinished => {
- let mut actions = Vec::new();
- if let (c, Some(r)) = server.client_and_room(client_id) {
- if c.is_in_game() {
- c.set_is_in_game(false);
- actions.push(ClientFlags("-g".to_string(), vec![c.nick.clone()]).
- send_all().in_room(r.id).action());
- if r.game_info.is_some() {
- for team in r.client_teams(c.id) {
- actions.push(SendTeamRemovalMessage(team.name.clone()));
- }
- }
- }
- }
- server.react(client_id, actions)
- },
- Rnd(v) => {
- let result = rnd_reply(&v);
- let mut echo = vec!["/rnd".to_string()];
- echo.extend(v.into_iter());
- let chat_msg = ChatMsg {
- nick: server.clients[client_id].nick.clone(),
- msg: echo.join(" ")
- };
- server.react(client_id, vec![
- chat_msg.send_all().in_room(room_id).action(),
- result.send_all().in_room(room_id).action()])
- },
- _ => warn!("Unimplemented!")
- }
-}
--- a/gameServer2/src/server/handlers/lobby.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-use mio;
-
-use crate::{
- server::{
- server::HWServer,
- coretypes::ClientId,
- actions::{Action, Action::*}
- },
- protocol::messages::{
- HWProtocolMessage,
- HWServerMessage::*
- },
- utils::is_name_illegal
-};
-use super::common::rnd_reply;
-use log::*;
-
-pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
- use crate::protocol::messages::HWProtocolMessage::*;
- match message {
- CreateRoom(name, password) => {
- let actions =
- if is_name_illegal(&name) {
- vec![Warn("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: $()*+?[]^{|}".to_string())]
- } else if server.has_room(&name) {
- vec![Warn("A room with the same name already exists.".to_string())]
- } else {
- let flags_msg = ClientFlags(
- "+hr".to_string(),
- vec![server.clients[client_id].nick.clone()]);
- vec![AddRoom(name, password),
- flags_msg.send_self().action()]
- };
- server.react(client_id, actions);
- },
- Chat(msg) => {
- let actions = vec![ChatMsg {nick: server.clients[client_id].nick.clone(), msg}
- .send_all().in_room(server.lobby_id).but_self().action()];
- server.react(client_id, actions);
- },
- JoinRoom(name, _password) => {
- let room = server.rooms.iter().find(|(_, r)| r.name == name);
- let room_id = room.map(|(_, r)| r.id);
- let nicks = server.clients.iter()
- .filter(|(_, c)| c.room_id == room_id)
- .map(|(_, c)| c.nick.clone())
- .collect();
- let c = &mut server.clients[client_id];
-
- let actions = if let Some((_, r)) = room {
- if c.protocol_number != r.protocol_number {
- vec![Warn("Room version incompatible to your Hedgewars version!".to_string())]
- } else if r.is_join_restricted() {
- vec![Warn("Access denied. This room currently doesn't allow joining.".to_string())]
- } else if r.players_number == u8::max_value() {
- vec![Warn("This room is already full".to_string())]
- } else {
- vec![MoveToRoom(r.id),
- RoomJoined(nicks).send_self().action()]
- }
- } else {
- vec![Warn("No such room.".to_string())]
- };
- server.react(client_id, actions);
- },
- Rnd(v) => {
- server.react(client_id, vec![rnd_reply(&v).send_self().action()]);
- },
- List => warn!("Deprecated LIST message received"),
- _ => warn!("Incorrect command in lobby state"),
- }
-}
--- a/gameServer2/src/server/handlers/loggingin.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-use mio;
-
-use crate::{
- server::{
- client::HWClient,
- server::HWServer,
- coretypes::ClientId,
- actions::{Action, Action::*}
- },
- protocol::messages::{
- HWProtocolMessage, HWServerMessage::*
- },
- utils::is_name_illegal
-};
-#[cfg(feature = "official-server")]
-use openssl::sha::sha1;
-use std::fmt::{Formatter, LowerHex};
-use log::*;
-
-#[derive(PartialEq)]
-struct Sha1Digest([u8; 20]);
-
-impl LowerHex for Sha1Digest {
- fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
- for byte in &self.0 {
- write!(f, "{:02x}", byte)?;
- }
- Ok(())
- }
-}
-
-#[cfg(feature = "official-server")]
-fn get_hash(client: &HWClient, salt1: &str, salt2: &str) -> Sha1Digest {
- let s = format!("{}{}{}{}{}", salt1, salt2,
- client.web_password, client.protocol_number, "!hedgewars");
- Sha1Digest(sha1(s.as_bytes()))
-}
-
-pub fn handle(server: & mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
- match message {
- HWProtocolMessage::Nick(nick) => {
- let client = &mut server.clients[client_id];
- debug!("{} {}", nick, is_name_illegal(&nick));
- let actions = if client.room_id != None {
- unreachable!()
- }
- else if !client.nick.is_empty() {
- vec![ProtocolError("Nickname already provided.".to_string())]
- }
- else if is_name_illegal(&nick) {
- vec![ByeClient("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: $()*+?[]^{|}".to_string())]
- }
- else {
- client.nick = nick.clone();
- vec![Nick(nick).send_self().action(),
- CheckRegistered]
- };
-
- server.react(client_id, actions);
- }
- HWProtocolMessage::Proto(proto) => {
- let client = &mut server.clients[client_id];
- let actions = if client.protocol_number != 0 {
- vec![ProtocolError("Protocol already known.".to_string())]
- }
- else if proto == 0 {
- vec![ProtocolError("Bad number.".to_string())]
- }
- else {
- client.protocol_number = proto;
- vec![Proto(proto).send_self().action(),
- CheckRegistered]
- };
- server.react(client_id, actions);
- }
- #[cfg(feature = "official-server")]
- HWProtocolMessage::Password(hash, salt) => {
- let c = &server.clients[client_id];
-
- let client_hash = get_hash(c, &salt, &c.server_salt);
- let server_hash = get_hash(c, &c.server_salt, &salt);
- let actions = if client_hash == server_hash {
- vec![ServerAuth(format!("{:x}", server_hash)).send_self().action(),
- JoinLobby]
- } else {
- vec![ByeClient("Authentication failed".to_string())]
- };
- server.react(client_id, actions);
- }
- #[cfg(feature = "official-server")]
- HWProtocolMessage::Checker(protocol, nick, password) => {
- let c = &mut server.clients[client_id];
- c.nick = nick;
- c.web_password = password;
- c.set_is_checker(true);
- }
- _ => warn!("Incorrect command in logging-in state"),
- }
-}
--- a/gameServer2/src/server/handlers/mod.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-use mio;
-use std::{io, io::Write};
-
-use super::{
- server::HWServer,
- actions::{Action, Action::*},
- coretypes::ClientId
-};
-use crate::{
- protocol::messages::{
- HWProtocolMessage,
- HWServerMessage::*
- }
-};
-use log::*;
-
-mod loggingin;
-mod lobby;
-mod inroom;
-mod common;
-mod checker;
-
-pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
- match message {
- HWProtocolMessage::Ping =>
- server.react(client_id, vec![Pong.send_self().action()]),
- HWProtocolMessage::Quit(Some(msg)) =>
- server.react(client_id, vec![ByeClient("User quit: ".to_string() + &msg)]),
- HWProtocolMessage::Quit(None) =>
- server.react(client_id, vec![ByeClient("User quit".to_string())]),
- HWProtocolMessage::Malformed => warn!("Malformed/unknown message"),
- HWProtocolMessage::Empty => warn!("Empty message"),
- _ => {
- match server.clients[client_id].room_id {
- None =>
- loggingin::handle(server, client_id, message),
- Some(id) if id == server.lobby_id =>
- lobby::handle(server, client_id, message),
- Some(id) =>
- inroom::handle(server, client_id, id, message)
- }
- },
- }
-}
--- a/gameServer2/src/server/mod.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-pub mod server;
-pub mod client;
-pub mod room;
-pub mod network;
-pub mod coretypes;
-mod actions;
-mod handlers;
--- a/gameServer2/src/server/network.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +0,0 @@
-extern crate slab;
-
-use std::{
- io, io::{Error, ErrorKind, Read, Write},
- net::{SocketAddr, IpAddr, Ipv4Addr},
- collections::HashSet,
- mem::{swap, replace}
-};
-
-use mio::{
- net::{TcpStream, TcpListener},
- Poll, PollOpt, Ready, Token
-};
-use netbuf;
-use slab::Slab;
-use log::*;
-
-use crate::{
- utils,
- protocol::{ProtocolDecoder, messages::*}
-};
-use super::{
- server::{HWServer},
- coretypes::ClientId
-};
-#[cfg(feature = "tls-connections")]
-use openssl::{
- ssl::{
- SslMethod, SslContext, Ssl, SslContextBuilder,
- SslVerifyMode, SslFiletype, SslOptions,
- SslStreamBuilder, HandshakeError, MidHandshakeSslStream, SslStream
- },
- error::ErrorStack
-};
-
-const MAX_BYTES_PER_READ: usize = 2048;
-
-#[derive(Hash, Eq, PartialEq, Copy, Clone)]
-pub enum NetworkClientState {
- Idle,
- NeedsWrite,
- NeedsRead,
- Closed,
-}
-
-type NetworkResult<T> = io::Result<(T, NetworkClientState)>;
-
-#[cfg(not(feature = "tls-connections"))]
-pub enum ClientSocket {
- Plain(TcpStream)
-}
-
-#[cfg(feature = "tls-connections")]
-pub enum ClientSocket {
- SslHandshake(Option<MidHandshakeSslStream<TcpStream>>),
- SslStream(SslStream<TcpStream>)
-}
-
-impl ClientSocket {
- fn inner(&self) -> &TcpStream {
- #[cfg(not(feature = "tls-connections"))]
- match self {
- ClientSocket::Plain(stream) => stream,
- }
-
- #[cfg(feature = "tls-connections")]
- match self {
- ClientSocket::SslHandshake(Some(builder)) => builder.get_ref(),
- ClientSocket::SslHandshake(None) => unreachable!(),
- ClientSocket::SslStream(ssl_stream) => ssl_stream.get_ref()
- }
- }
-}
-
-pub struct NetworkClient {
- id: ClientId,
- socket: ClientSocket,
- peer_addr: SocketAddr,
- decoder: ProtocolDecoder,
- buf_out: netbuf::Buf
-}
-
-impl NetworkClient {
- pub fn new(id: ClientId, socket: ClientSocket, peer_addr: SocketAddr) -> NetworkClient {
- NetworkClient {
- id, socket, peer_addr,
- decoder: ProtocolDecoder::new(),
- buf_out: netbuf::Buf::new()
- }
- }
-
- #[cfg(feature = "tls-connections")]
- fn handshake_impl(&mut self, handshake: MidHandshakeSslStream<TcpStream>) -> io::Result<NetworkClientState> {
- match handshake.handshake() {
- Ok(stream) => {
- self.socket = ClientSocket::SslStream(stream);
- debug!("TLS handshake with {} ({}) completed", self.id, self.peer_addr);
- Ok(NetworkClientState::Idle)
- }
- Err(HandshakeError::WouldBlock(new_handshake)) => {
- self.socket = ClientSocket::SslHandshake(Some(new_handshake));
- Ok(NetworkClientState::Idle)
- }
- Err(HandshakeError::Failure(new_handshake)) => {
- self.socket = ClientSocket::SslHandshake(Some(new_handshake));
- debug!("TLS handshake with {} ({}) failed", self.id, self.peer_addr);
- Err(Error::new(ErrorKind::Other, "Connection failure"))
- }
- Err(HandshakeError::SetupFailure(_)) => unreachable!()
- }
- }
-
- fn read_impl<R: Read>(decoder: &mut ProtocolDecoder, source: &mut R,
- id: ClientId, addr: &SocketAddr) -> NetworkResult<Vec<HWProtocolMessage>> {
- let mut bytes_read = 0;
- let result = loop {
- match decoder.read_from(source) {
- Ok(bytes) => {
- debug!("Client {}: read {} bytes", id, bytes);
- bytes_read += bytes;
- if bytes == 0 {
- let result = if bytes_read == 0 {
- info!("EOF for client {} ({})", id, addr);
- (Vec::new(), NetworkClientState::Closed)
- } else {
- (decoder.extract_messages(), NetworkClientState::NeedsRead)
- };
- break Ok(result);
- }
- else if bytes_read >= MAX_BYTES_PER_READ {
- break Ok((decoder.extract_messages(), NetworkClientState::NeedsRead))
- }
- }
- Err(ref error) if error.kind() == ErrorKind::WouldBlock => {
- let messages = if bytes_read == 0 {
- Vec::new()
- } else {
- decoder.extract_messages()
- };
- break Ok((messages, NetworkClientState::Idle));
- }
- Err(error) =>
- break Err(error)
- }
- };
- decoder.sweep();
- result
- }
-
- pub fn read(&mut self) -> NetworkResult<Vec<HWProtocolMessage>> {
- #[cfg(not(feature = "tls-connections"))]
- match self.socket {
- ClientSocket::Plain(ref mut stream) =>
- NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr),
- }
-
- #[cfg(feature = "tls-connections")]
- match self.socket {
- ClientSocket::SslHandshake(ref mut handshake_opt) => {
- let handshake = std::mem::replace(handshake_opt, None).unwrap();
- Ok((Vec::new(), self.handshake_impl(handshake)?))
- },
- ClientSocket::SslStream(ref mut stream) =>
- NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr)
- }
- }
-
- fn write_impl<W: Write>(buf_out: &mut netbuf::Buf, destination: &mut W) -> NetworkResult<()> {
- let result = loop {
- match buf_out.write_to(destination) {
- Ok(bytes) if buf_out.is_empty() || bytes == 0 =>
- break Ok(((), NetworkClientState::Idle)),
- Ok(_) => (),
- Err(ref error) if error.kind() == ErrorKind::Interrupted
- || error.kind() == ErrorKind::WouldBlock => {
- break Ok(((), NetworkClientState::NeedsWrite));
- },
- Err(error) =>
- break Err(error)
- }
- };
- result
- }
-
- pub fn write(&mut self) -> NetworkResult<()> {
- let result = {
- #[cfg(not(feature = "tls-connections"))]
- match self.socket {
- ClientSocket::Plain(ref mut stream) =>
- NetworkClient::write_impl(&mut self.buf_out, stream)
- }
-
- #[cfg(feature = "tls-connections")] {
- match self.socket {
- ClientSocket::SslHandshake(ref mut handshake_opt) => {
- let handshake = std::mem::replace(handshake_opt, None).unwrap();
- Ok(((), self.handshake_impl(handshake)?))
- }
- ClientSocket::SslStream(ref mut stream) =>
- NetworkClient::write_impl(&mut self.buf_out, stream)
- }
- }
- };
-
- self.socket.inner().flush()?;
- result
- }
-
- pub fn send_raw_msg(&mut self, msg: &[u8]) {
- self.buf_out.write_all(msg).unwrap();
- }
-
- pub fn send_string(&mut self, msg: &str) {
- self.send_raw_msg(&msg.as_bytes());
- }
-
- pub fn send_msg(&mut self, msg: &HWServerMessage) {
- self.send_string(&msg.to_raw_protocol());
- }
-}
-
-#[cfg(feature = "tls-connections")]
-struct ServerSsl {
- context: SslContext
-}
-
-pub struct NetworkLayer {
- listener: TcpListener,
- server: HWServer,
- clients: Slab<NetworkClient>,
- pending: HashSet<(ClientId, NetworkClientState)>,
- pending_cache: Vec<(ClientId, NetworkClientState)>,
- #[cfg(feature = "tls-connections")]
- ssl: ServerSsl
-}
-
-impl NetworkLayer {
- pub fn new(listener: TcpListener, clients_limit: usize, rooms_limit: usize) -> NetworkLayer {
- let server = HWServer::new(clients_limit, rooms_limit);
- let clients = Slab::with_capacity(clients_limit);
- let pending = HashSet::with_capacity(2 * clients_limit);
- let pending_cache = Vec::with_capacity(2 * clients_limit);
-
- NetworkLayer {
- listener, server, clients, pending, pending_cache,
- #[cfg(feature = "tls-connections")]
- ssl: NetworkLayer::create_ssl_context()
- }
- }
-
- #[cfg(feature = "tls-connections")]
- fn create_ssl_context() -> ServerSsl {
- let mut builder = SslContextBuilder::new(SslMethod::tls()).unwrap();
- builder.set_verify(SslVerifyMode::NONE);
- builder.set_read_ahead(true);
- builder.set_certificate_file("ssl/cert.pem", SslFiletype::PEM).unwrap();
- builder.set_private_key_file("ssl/key.pem", SslFiletype::PEM).unwrap();
- builder.set_options(SslOptions::NO_COMPRESSION);
- builder.set_cipher_list("DEFAULT:!LOW:!RC4:!EXP").unwrap();
- ServerSsl { context: builder.build() }
- }
-
- pub fn register_server(&self, poll: &Poll) -> io::Result<()> {
- poll.register(&self.listener, utils::SERVER, Ready::readable(),
- PollOpt::edge())
- }
-
- fn deregister_client(&mut self, poll: &Poll, id: ClientId) {
- let mut client_exists = false;
- if let Some(ref client) = self.clients.get(id) {
- poll.deregister(client.socket.inner())
- .expect("could not deregister socket");
- info!("client {} ({}) removed", client.id, client.peer_addr);
- client_exists = true;
- }
- if client_exists {
- self.clients.remove(id);
- }
- }
-
- fn register_client(&mut self, poll: &Poll, id: ClientId, client_socket: ClientSocket, addr: SocketAddr) {
- poll.register(client_socket.inner(), Token(id),
- Ready::readable() | Ready::writable(),
- PollOpt::edge())
- .expect("could not register socket with event loop");
-
- let entry = self.clients.vacant_entry();
- let client = NetworkClient::new(id, client_socket, addr);
- info!("client {} ({}) added", client.id, client.peer_addr);
- entry.insert(client);
- }
-
- fn flush_server_messages(&mut self) {
- debug!("{} pending server messages", self.server.output.len());
- for (clients, message) in self.server.output.drain(..) {
- debug!("Message {:?} to {:?}", message, clients);
- let msg_string = message.to_raw_protocol();
- for client_id in clients {
- if let Some(client) = self.clients.get_mut(client_id) {
- client.send_string(&msg_string);
- self.pending.insert((client_id, NetworkClientState::NeedsWrite));
- }
- }
- }
- }
-
- fn create_client_socket(&self, socket: TcpStream) -> io::Result<ClientSocket> {
- #[cfg(not(feature = "tls-connections"))] {
- Ok(ClientSocket::Plain(socket))
- }
-
- #[cfg(feature = "tls-connections")] {
- let ssl = Ssl::new(&self.ssl.context).unwrap();
- let mut builder = SslStreamBuilder::new(ssl, socket);
- builder.set_accept_state();
- match builder.handshake() {
- Ok(stream) =>
- Ok(ClientSocket::SslStream(stream)),
- Err(HandshakeError::WouldBlock(stream)) =>
- Ok(ClientSocket::SslHandshake(Some(stream))),
- Err(e) => {
- debug!("OpenSSL handshake failed: {}", e);
- Err(Error::new(ErrorKind::Other, "Connection failure"))
- }
- }
- }
- }
-
- pub fn accept_client(&mut self, poll: &Poll) -> io::Result<()> {
- let (client_socket, addr) = self.listener.accept()?;
- info!("Connected: {}", addr);
-
- let client_id = self.server.add_client();
- self.register_client(poll, client_id, self.create_client_socket(client_socket)?, addr);
- self.flush_server_messages();
-
- Ok(())
- }
-
- fn operation_failed(&mut self, poll: &Poll, client_id: ClientId, error: &Error, msg: &str) -> io::Result<()> {
- let addr = if let Some(ref mut client) = self.clients.get_mut(client_id) {
- client.peer_addr
- } else {
- SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0)
- };
- debug!("{}({}): {}", msg, addr, error);
- self.client_error(poll, client_id)
- }
-
- pub fn client_readable(&mut self, poll: &Poll,
- client_id: ClientId) -> io::Result<()> {
- let messages =
- if let Some(ref mut client) = self.clients.get_mut(client_id) {
- client.read()
- } else {
- warn!("invalid readable client: {}", client_id);
- Ok((Vec::new(), NetworkClientState::Idle))
- };
-
- match messages {
- Ok((messages, state)) => {
- for message in messages {
- self.server.handle_msg(client_id, message);
- }
- match state {
- NetworkClientState::NeedsRead => {
- self.pending.insert((client_id, state));
- },
- NetworkClientState::Closed =>
- self.client_error(&poll, client_id)?,
- _ => {}
- };
- }
- Err(e) => self.operation_failed(
- poll, client_id, &e,
- "Error while reading from client socket")?
- }
-
- self.flush_server_messages();
-
- if !self.server.removed_clients.is_empty() {
- let ids: Vec<_> = self.server.removed_clients.drain(..).collect();
- for client_id in ids {
- self.deregister_client(poll, client_id);
- }
- }
-
- Ok(())
- }
-
- pub fn client_writable(&mut self, poll: &Poll,
- client_id: ClientId) -> io::Result<()> {
- let result =
- if let Some(ref mut client) = self.clients.get_mut(client_id) {
- client.write()
- } else {
- warn!("invalid writable client: {}", client_id);
- Ok(((), NetworkClientState::Idle))
- };
-
- match result {
- Ok(((), state)) if state == NetworkClientState::NeedsWrite => {
- self.pending.insert((client_id, state));
- },
- Ok(_) => {}
- Err(e) => self.operation_failed(
- poll, client_id, &e,
- "Error while writing to client socket")?
- }
-
- Ok(())
- }
-
- pub fn client_error(&mut self, poll: &Poll,
- client_id: ClientId) -> io::Result<()> {
- self.deregister_client(poll, client_id);
- self.server.client_lost(client_id);
-
- Ok(())
- }
-
- pub fn has_pending_operations(&self) -> bool {
- !self.pending.is_empty()
- }
-
- pub fn on_idle(&mut self, poll: &Poll) -> io::Result<()> {
- if self.has_pending_operations() {
- let mut cache = replace(&mut self.pending_cache, Vec::new());
- cache.extend(self.pending.drain());
- for (id, state) in cache.drain(..) {
- match state {
- NetworkClientState::NeedsRead =>
- self.client_readable(poll, id)?,
- NetworkClientState::NeedsWrite =>
- self.client_writable(poll, id)?,
- _ => {}
- }
- }
- swap(&mut cache, &mut self.pending_cache);
- }
- Ok(())
- }
-}
--- a/gameServer2/src/server/room.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-use std::{
- iter, collections::HashMap
-};
-use crate::server::{
- coretypes::{
- ClientId, RoomId, TeamInfo, GameCfg, GameCfg::*, Voting,
- MAX_HEDGEHOGS_PER_TEAM
- },
- client::{HWClient}
-};
-use bitflags::*;
-use serde::{Serialize, Deserialize};
-use serde_derive::{Serialize, Deserialize};
-use serde_yaml;
-
-const MAX_TEAMS_IN_ROOM: u8 = 8;
-const MAX_HEDGEHOGS_IN_ROOM: u8 =
- MAX_HEDGEHOGS_PER_TEAM * MAX_HEDGEHOGS_PER_TEAM;
-
-#[derive(Clone, Serialize, Deserialize)]
-struct Ammo {
- name: String,
- settings: Option<String>
-}
-
-#[derive(Clone, Serialize, Deserialize)]
-struct Scheme {
- name: String,
- settings: Vec<String>
-}
-
-#[derive(Clone, Serialize, Deserialize)]
-struct RoomConfig {
- feature_size: u32,
- map_type: String,
- map_generator: u32,
- maze_size: u32,
- seed: String,
- template: u32,
-
- ammo: Ammo,
- scheme: Scheme,
- script: String,
- theme: String,
- drawn_map: Option<String>
-}
-
-impl RoomConfig {
- fn new() -> RoomConfig {
- RoomConfig {
- feature_size: 12,
- map_type: "+rnd+".to_string(),
- map_generator: 0,
- maze_size: 0,
- seed: "seed".to_string(),
- template: 0,
-
- ammo: Ammo {name: "Default".to_string(), settings: None },
- scheme: Scheme {name: "Default".to_string(), settings: Vec::new() },
- script: "Normal".to_string(),
- theme: "\u{1f994}".to_string(),
- drawn_map: None
- }
- }
-}
-
-fn client_teams_impl(teams: &[(ClientId, TeamInfo)], client_id: ClientId)
- -> impl Iterator<Item = &TeamInfo> + Clone
-{
- teams.iter().filter(move |(id, _)| *id == client_id).map(|(_, t)| t)
-}
-
-fn map_config_from(c: &RoomConfig) -> Vec<String> {
- vec![c.feature_size.to_string(), c.map_type.to_string(),
- c.map_generator.to_string(), c.maze_size.to_string(),
- c.seed.to_string(), c.template.to_string()]
-}
-
-fn game_config_from(c: &RoomConfig) -> Vec<GameCfg> {
- use crate::server::coretypes::GameCfg::*;
- let mut v = vec![
- Ammo(c.ammo.name.to_string(), c.ammo.settings.clone()),
- Scheme(c.scheme.name.to_string(), c.scheme.settings.clone()),
- Script(c.script.to_string()),
- Theme(c.theme.to_string())];
- if let Some(ref m) = c.drawn_map {
- v.push(DrawnMap(m.to_string()))
- }
- v
-}
-
-pub struct GameInfo {
- pub teams_in_game: u8,
- pub teams_at_start: Vec<(ClientId, TeamInfo)>,
- pub left_teams: Vec<String>,
- pub msg_log: Vec<String>,
- pub sync_msg: Option<String>,
- pub is_paused: bool,
- config: RoomConfig
-}
-
-impl GameInfo {
- fn new(teams: Vec<(ClientId, TeamInfo)>, config: RoomConfig) -> GameInfo {
- GameInfo {
- left_teams: Vec::new(),
- msg_log: Vec::new(),
- sync_msg: None,
- is_paused: false,
- teams_in_game: teams.len() as u8,
- teams_at_start: teams,
- config
- }
- }
-
- pub fn client_teams(&self, client_id: ClientId) -> impl Iterator<Item = &TeamInfo> + Clone {
- client_teams_impl(&self.teams_at_start, client_id)
- }
-}
-
-#[derive(Serialize, Deserialize)]
-pub struct RoomSave {
- pub location: String,
- config: RoomConfig
-}
-
-bitflags!{
- pub struct RoomFlags: u8 {
- const FIXED = 0b0000_0001;
- const RESTRICTED_JOIN = 0b0000_0010;
- const RESTRICTED_TEAM_ADD = 0b0000_0100;
- const RESTRICTED_UNREGISTERED_PLAYERS = 0b0000_1000;
- }
-}
-
-pub struct HWRoom {
- pub id: RoomId,
- pub master_id: Option<ClientId>,
- pub name: String,
- pub password: Option<String>,
- pub greeting: String,
- pub protocol_number: u16,
- pub flags: RoomFlags,
-
- pub players_number: u8,
- pub default_hedgehog_number: u8,
- pub team_limit: u8,
- pub ready_players_number: u8,
- pub teams: Vec<(ClientId, TeamInfo)>,
- config: RoomConfig,
- pub voting: Option<Voting>,
- pub saves: HashMap<String, RoomSave>,
- pub game_info: Option<GameInfo>
-}
-
-impl HWRoom {
- pub fn new(id: RoomId) -> HWRoom {
- HWRoom {
- id,
- master_id: None,
- name: String::new(),
- password: None,
- greeting: "".to_string(),
- flags: RoomFlags::empty(),
- protocol_number: 0,
- players_number: 0,
- default_hedgehog_number: 4,
- team_limit: MAX_TEAMS_IN_ROOM,
- ready_players_number: 0,
- teams: Vec::new(),
- config: RoomConfig::new(),
- voting: None,
- saves: HashMap::new(),
- game_info: None
- }
- }
-
- pub fn hedgehogs_number(&self) -> u8 {
- self.teams.iter().map(|(_, t)| t.hedgehogs_number).sum()
- }
-
- pub fn addable_hedgehogs(&self) -> u8 {
- MAX_HEDGEHOGS_IN_ROOM - self.hedgehogs_number()
- }
-
- pub fn add_team(&mut self, owner_id: ClientId, mut team: TeamInfo, preserve_color: bool) -> &TeamInfo {
- if !preserve_color {
- team.color = iter::repeat(()).enumerate()
- .map(|(i, _)| i as u8).take(u8::max_value() as usize + 1)
- .find(|i| self.teams.iter().all(|(_, t)| t.color != *i))
- .unwrap_or(0u8)
- };
- team.hedgehogs_number = if self.teams.is_empty() {
- self.default_hedgehog_number
- } else {
- self.teams[0].1.hedgehogs_number.min(self.addable_hedgehogs())
- };
- self.teams.push((owner_id, team));
- &self.teams.last().unwrap().1
- }
-
- pub fn remove_team(&mut self, name: &str) {
- if let Some(index) = self.teams.iter().position(|(_, t)| t.name == name) {
- self.teams.remove(index);
- }
- }
-
- pub fn set_hedgehogs_number(&mut self, n: u8) -> Vec<String> {
- let mut names = Vec::new();
- let teams = match self.game_info {
- Some(ref mut info) => &mut info.teams_at_start,
- None => &mut self.teams
- };
-
- if teams.len() as u8 * n <= MAX_HEDGEHOGS_IN_ROOM {
- for (_, team) in teams.iter_mut() {
- team.hedgehogs_number = n;
- names.push(team.name.clone())
- };
- self.default_hedgehog_number = n;
- }
- names
- }
-
- pub fn find_team_and_owner_mut<F>(&mut self, f: F) -> Option<(ClientId, &mut TeamInfo)>
- where F: Fn(&TeamInfo) -> bool {
- self.teams.iter_mut().find(|(_, t)| f(t)).map(|(id, t)| (*id, t))
- }
-
- pub fn find_team<F>(&self, f: F) -> Option<&TeamInfo>
- where F: Fn(&TeamInfo) -> bool {
- self.teams.iter().find_map(|(_, t)| Some(t).filter(|t| f(&t)))
- }
-
- pub fn client_teams(&self, client_id: ClientId) -> impl Iterator<Item = &TeamInfo> {
- client_teams_impl(&self.teams, client_id)
- }
-
- pub fn client_team_indices(&self, client_id: ClientId) -> Vec<u8> {
- self.teams.iter().enumerate()
- .filter(move |(_, (id, _))| *id == client_id)
- .map(|(i, _)| i as u8).collect()
- }
-
- pub fn find_team_owner(&self, team_name: &str) -> Option<(ClientId, &str)> {
- self.teams.iter().find(|(_, t)| t.name == team_name)
- .map(|(id, t)| (*id, &t.name[..]))
- }
-
- pub fn find_team_color(&self, owner_id: ClientId) -> Option<u8> {
- self.client_teams(owner_id).nth(0).map(|t| t.color)
- }
-
- pub fn has_multiple_clans(&self) -> bool {
- self.teams.iter().min_by_key(|(_, t)| t.color) !=
- self.teams.iter().max_by_key(|(_, t)| t.color)
- }
-
- pub fn set_config(&mut self, cfg: GameCfg) {
- let c = &mut self.config;
- match cfg {
- FeatureSize(s) => c.feature_size = s,
- MapType(t) => c.map_type = t,
- MapGenerator(g) => c.map_generator = g,
- MazeSize(s) => c.maze_size = s,
- Seed(s) => c.seed = s,
- Template(t) => c.template = t,
-
- Ammo(n, s) => c.ammo = Ammo {name: n, settings: s},
- Scheme(n, s) => c.scheme = Scheme {name: n, settings: s},
- Script(s) => c.script = s,
- Theme(t) => c.theme = t,
- DrawnMap(m) => c.drawn_map = Some(m)
- };
- }
-
- pub fn start_round(&mut self) {
- if self.game_info.is_none() {
- self.game_info = Some(GameInfo::new(
- self.teams.clone(), self.config.clone()));
- }
- }
-
- pub fn is_fixed(&self) -> bool {
- self.flags.contains(RoomFlags::FIXED)
- }
- pub fn is_join_restricted(&self) -> bool {
- self.flags.contains(RoomFlags::RESTRICTED_JOIN)
- }
- pub fn is_team_add_restricted(&self) -> bool {
- self.flags.contains(RoomFlags::RESTRICTED_TEAM_ADD)
- }
- pub fn are_unregistered_players_restricted(&self) -> bool {
- self.flags.contains(RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS)
- }
-
- pub fn set_is_fixed(&mut self, value: bool) {
- self.flags.set(RoomFlags::FIXED, value)
- }
- pub fn set_join_restriction(&mut self, value: bool) {
- self.flags.set(RoomFlags::RESTRICTED_JOIN, value)
- }
- pub fn set_team_add_restriction(&mut self, value: bool) {
- self.flags.set(RoomFlags::RESTRICTED_TEAM_ADD, value)
- }
- pub fn set_unregistered_players_restriction(&mut self, value: bool) {
- self.flags.set(RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS, value)
- }
-
- fn flags_string(&self) -> String {
- let mut result = "-".to_string();
- if self.game_info.is_some() { result += "g" }
- if self.password.is_some() { result += "p" }
- if self.is_join_restricted() { result += "j" }
- if self.are_unregistered_players_restricted() {
- result += "r"
- }
- result
- }
-
- pub fn info(&self, master: Option<&HWClient>) -> Vec<String> {
- let c = &self.config;
- vec![
- self.flags_string(),
- self.name.clone(),
- self.players_number.to_string(),
- self.teams.len().to_string(),
- master.map_or("[]", |c| &c.nick).to_string(),
- c.map_type.to_string(),
- c.script.to_string(),
- c.scheme.name.to_string(),
- c.ammo.name.to_string()
- ]
- }
-
- pub fn map_config(&self) -> Vec<String> {
- match self.game_info {
- Some(ref info) => map_config_from(&info.config),
- None => map_config_from(&self.config)
- }
- }
-
- pub fn game_config(&self) -> Vec<GameCfg> {
- match self.game_info {
- Some(ref info) => game_config_from(&info.config),
- None => game_config_from(&self.config)
- }
- }
-
- pub fn save_config(&mut self, name: String, location: String) {
- self.saves.insert(name, RoomSave { location, config: self.config.clone() });
- }
-
- pub fn load_config(&mut self, name: &str) -> Option<&str> {
- if let Some(save) = self.saves.get(name) {
- self.config = save.config.clone();
- Some(&save.location[..])
- } else {
- None
- }
- }
-
- pub fn delete_config(&mut self, name: &str) -> bool {
- self.saves.remove(name).is_some()
- }
-
- pub fn get_saves(&self) -> Result<String, serde_yaml::Error> {
- serde_yaml::to_string(&(&self.greeting, &self.saves))
- }
-
- pub fn set_saves(&mut self, text: &str) -> Result<(), serde_yaml::Error> {
- serde_yaml::from_str::<(String, HashMap<String, RoomSave>)>(text).map(|(greeting, saves)| {
- self.greeting = greeting;
- self.saves = saves;
- })
- }
-
- pub fn team_info(owner: &HWClient, team: &TeamInfo) -> Vec<String> {
- let mut info = vec![
- team.name.clone(),
- team.grave.clone(),
- team.fort.clone(),
- team.voice_pack.clone(),
- team.flag.clone(),
- owner.nick.clone(),
- team.difficulty.to_string()];
- let hogs = team.hedgehogs.iter().flat_map(|h|
- iter::once(h.name.clone()).chain(iter::once(h.hat.clone())));
- info.extend(hogs);
- info
- }
-}
\ No newline at end of file
--- a/gameServer2/src/server/server.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-use slab;
-use crate::utils;
-use super::{
- client::HWClient, room::HWRoom, actions, handlers,
- coretypes::{ClientId, RoomId},
- actions::{Destination, PendingMessage}
-};
-use crate::protocol::messages::*;
-use rand::{RngCore, thread_rng};
-use base64::{encode};
-use log::*;
-
-type Slab<T> = slab::Slab<T>;
-
-
-pub struct HWServer {
- pub clients: Slab<HWClient>,
- pub rooms: Slab<HWRoom>,
- pub lobby_id: RoomId,
- pub output: Vec<(Vec<ClientId>, HWServerMessage)>,
- pub removed_clients: Vec<ClientId>,
-}
-
-impl HWServer {
- pub fn new(clients_limit: usize, rooms_limit: usize) -> HWServer {
- let rooms = Slab::with_capacity(rooms_limit);
- let clients = Slab::with_capacity(clients_limit);
- let mut server = HWServer {
- clients, rooms,
- lobby_id: 0,
- output: vec![],
- removed_clients: vec![]
- };
- server.lobby_id = server.add_room();
- server
- }
-
- pub fn add_client(&mut self) -> ClientId {
- let key: ClientId;
- {
- let entry = self.clients.vacant_entry();
- key = entry.key();
- let mut salt = [0u8; 18];
- thread_rng().fill_bytes(&mut salt);
-
- let client = HWClient::new(entry.key(), encode(&salt));
- entry.insert(client);
- }
- self.send(key, &Destination::ToSelf, HWServerMessage::Connected(utils::PROTOCOL_VERSION));
- key
- }
-
- pub fn client_lost(&mut self, client_id: ClientId) {
- actions::run_action(self, client_id,
- actions::Action::ByeClient("Connection reset".to_string()));
- }
-
- pub fn add_room(&mut self) -> RoomId {
- let entry = self.rooms.vacant_entry();
- let key = entry.key();
- let room = HWRoom::new(entry.key());
- entry.insert(room);
- key
- }
-
- pub fn handle_msg(&mut self, client_id: ClientId, msg: HWProtocolMessage) {
- debug!("Handling message {:?} for client {}", msg, client_id);
- if self.clients.contains(client_id) {
- handlers::handle(self, client_id, msg);
- }
- }
-
- fn get_recipients(&self, client_id: ClientId, destination: &Destination) -> Vec<ClientId> {
- let mut ids = match *destination {
- Destination::ToSelf => vec![client_id],
- Destination::ToId(id) => vec![id],
- Destination::ToAll {room_id: Some(id), ..} =>
- self.room_clients(id),
- Destination::ToAll {protocol: Some(proto), ..} =>
- self.protocol_clients(proto),
- Destination::ToAll {..} =>
- self.clients.iter().map(|(id, _)| id).collect::<Vec<_>>()
- };
- if let Destination::ToAll {skip_self: true, ..} = destination {
- if let Some(index) = ids.iter().position(|id| *id == client_id) {
- ids.remove(index);
- }
- }
- ids
- }
-
- pub fn send(&mut self, client_id: ClientId, destination: &Destination, message: HWServerMessage) {
- let ids = self.get_recipients(client_id, &destination);
- self.output.push((ids, message));
- }
-
- pub fn react(&mut self, client_id: ClientId, actions: Vec<actions::Action>) {
- for action in actions {
- actions::run_action(self, client_id, action);
- }
- }
-
- pub fn lobby(&self) -> &HWRoom { &self.rooms[self.lobby_id] }
-
- pub fn has_room(&self, name: &str) -> bool {
- self.rooms.iter().any(|(_, r)| r.name == name)
- }
-
- pub fn find_room(&self, name: &str) -> Option<&HWRoom> {
- self.rooms.iter().find_map(|(_, r)| Some(r).filter(|r| r.name == name))
- }
-
- pub fn find_room_mut(&mut self, name: &str) -> Option<&mut HWRoom> {
- self.rooms.iter_mut().find_map(|(_, r)| Some(r).filter(|r| r.name == name))
- }
-
- pub fn find_client(&self, nick: &str) -> Option<&HWClient> {
- self.clients.iter().find_map(|(_, c)| Some(c).filter(|c| c.nick == nick))
- }
-
- pub fn find_client_mut(&mut self, nick: &str) -> Option<&mut HWClient> {
- self.clients.iter_mut().find_map(|(_, c)| Some(c).filter(|c| c.nick == nick))
- }
-
- pub fn select_clients<F>(&self, f: F) -> Vec<ClientId>
- where F: Fn(&(usize, &HWClient)) -> bool {
- self.clients.iter().filter(f)
- .map(|(_, c)| c.id).collect()
- }
-
- pub fn room_clients(&self, room_id: RoomId) -> Vec<ClientId> {
- self.select_clients(|(_, c)| c.room_id == Some(room_id))
- }
-
- pub fn protocol_clients(&self, protocol: u16) -> Vec<ClientId> {
- self.select_clients(|(_, c)| c.protocol_number == protocol)
- }
-
- pub fn other_clients_in_room(&self, self_id: ClientId) -> Vec<ClientId> {
- let room_id = self.clients[self_id].room_id;
- self.select_clients(|(id, c)| *id != self_id && c.room_id == room_id )
- }
-
- pub fn client_and_room(&mut self, client_id: ClientId) -> (&mut HWClient, Option<&mut HWRoom>) {
- let c = &mut self.clients[client_id];
- if let Some(room_id) = c.room_id {
- (c, Some(&mut self.rooms[room_id]))
- } else {
- (c, None)
- }
- }
-
- pub fn room(&mut self, client_id: ClientId) -> Option<&mut HWRoom> {
- self.client_and_room(client_id).1
- }
-}
--- a/gameServer2/src/utils.rs Mon Jan 14 12:34:47 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-use std::iter::Iterator;
-use mio;
-use base64::{encode};
-
-pub const PROTOCOL_VERSION : u32 = 3;
-pub const SERVER: mio::Token = mio::Token(1_000_000_000);
-
-pub fn is_name_illegal(name: &str ) -> bool{
- name.len() > 40 ||
- name.trim().is_empty() ||
- name.chars().any(|c|
- "$()*+?[]^{|}\x7F".contains(c) ||
- '\x00' <= c && c <= '\x1F')
-}
-
-pub fn to_engine_msg<T>(msg: T) -> String
- where T: Iterator<Item = u8> + Clone
-{
- let mut tmp = Vec::new();
- tmp.push(msg.clone().count() as u8);
- tmp.extend(msg);
- encode(&tmp)
-}
-
-pub fn protocol_version_string(protocol_number: u16) -> &'static str {
- match protocol_number {
- 17 => "0.9.7-dev",
- 19 => "0.9.7",
- 20 => "0.9.8-dev",
- 21 => "0.9.8",
- 22 => "0.9.9-dev",
- 23 => "0.9.9",
- 24 => "0.9.10-dev",
- 25 => "0.9.10",
- 26 => "0.9.11-dev",
- 27 => "0.9.11",
- 28 => "0.9.12-dev",
- 29 => "0.9.12",
- 30 => "0.9.13-dev",
- 31 => "0.9.13",
- 32 => "0.9.14-dev",
- 33 => "0.9.14",
- 34 => "0.9.15-dev",
- 35 => "0.9.14.1",
- 37 => "0.9.15",
- 38 => "0.9.16-dev",
- 39 => "0.9.16",
- 40 => "0.9.17-dev",
- 41 => "0.9.17",
- 42 => "0.9.18-dev",
- 43 => "0.9.18",
- 44 => "0.9.19-dev",
- 45 => "0.9.19",
- 46 => "0.9.20-dev",
- 47 => "0.9.20",
- 48 => "0.9.21-dev",
- 49 => "0.9.21",
- 50 => "0.9.22-dev",
- 51 => "0.9.22",
- 52 => "0.9.23-dev",
- 53 => "0.9.23",
- 54 => "0.9.24-dev",
- 55 => "0.9.24",
- 56 => "0.9.25-dev",
- _ => "Unknown"
- }
-}
\ No newline at end of file
--- a/hedgewars/hwengine.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/hwengine.pas Mon Jan 14 12:35:32 2019 -0500
@@ -264,7 +264,6 @@
SDL_MOUSEWHEEL:
begin
wheelEvent:= true;
- //ProcessMouseWheel(event.wheel.x, event.wheel.y);
ProcessMouseWheel(event.wheel.y);
end;
{$ENDIF}
@@ -354,7 +353,6 @@
///////////////////////////////////////////////////////////////////////////////
procedure GameRoutine;
-//var p: TPathType;
var s: shortstring;
i: LongInt;
begin
@@ -380,7 +378,6 @@
end;
if not allOK then exit;
- //SDL_StartTextInput();
SDL_ShowCursor(0);
@@ -450,7 +447,6 @@
isDeveloperMode:= false;
if checkFails(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true) then exit;
- //ParseCommand('rotmask', true);
if not allOK then exit;
{$IFDEF USE_VIDEO_RECORDING}
--- a/hedgewars/uChat.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uChat.pas Mon Jan 14 12:35:32 2019 -0500
@@ -589,6 +589,15 @@
exit
end;
+ if (copy(s, 2, 9) = 'help room') then
+ begin
+ if (gameType = gmtNet) then
+ SendConsoleCommand('/help')
+ else
+ AddChatString(#0 + shortstring(trcmd[sidCmdHelpRoomFail]));
+ exit;
+ end;
+
if (copy(s, 2, 4) = 'help') then
begin
AddChatString(#3 + shortstring(trcmd[sidCmdHeaderBasic]));
@@ -608,6 +617,8 @@
AddChatString(#3 + shortstring(trcmd[sidCmdHistory]));
AddChatString(#3 + shortstring(trcmd[sidCmdHelp]));
AddChatString(#3 + shortstring(trcmd[sidCmdHelpTaunts]));
+ if gameType = gmtNet then
+ AddChatString(#3 + shortstring(trcmd[sidCmdHelpRoom]));
exit
end;
--- a/hedgewars/uCollisions.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uCollisions.pas Mon Jan 14 12:35:32 2019 -0500
@@ -501,7 +501,7 @@
begin
if Land[y, x] and Gear^.CollisionMask <> 0 then
begin
- if ((Land[y, x] and Gear^.CollisionMask) and lfNotObjMask) <> 0 then
+ if ((Land[y, x] and Gear^.CollisionMask) and lfLandMask) <> 0 then
exit(Land[y, x] and Gear^.CollisionMask)
else
pixel:= Land[y, x] and Gear^.CollisionMask;
@@ -567,7 +567,7 @@
if (x and LAND_WIDTH_MASK) = 0 then
if Land[y, x] > 0 then
begin
- if ((Land[y, x] and Gear^.CollisionMask) and lfNotObjMask) <> 0 then
+ if ((Land[y, x] and Gear^.CollisionMask) and lfLandMask) <> 0 then
exit(Land[y, x] and Gear^.CollisionMask)
else // if Land[y, x] <> 0 then
pixel:= Land[y, x] and Gear^.CollisionMask;
@@ -642,7 +642,7 @@
i:= y + Gear^.Radius * 2 - 2;
repeat
if (y and LAND_HEIGHT_MASK) = 0 then
- if ((Land[y, x] and Gear^.CollisionMask) and lfNotObjMask) <> 0 then
+ if ((Land[y, x] and Gear^.CollisionMask) and lfLandMask) <> 0 then
exit(Land[y, x] and Gear^.CollisionMask);
inc(y)
until (y > i);
@@ -665,7 +665,7 @@
i:= x + Gear^.Radius * 2 - 2;
repeat
if (x and LAND_WIDTH_MASK) = 0 then
- if ((Land[y, x] and Gear^.CollisionMask) and lfNotObjMask) <> 0 then
+ if ((Land[y, x] and Gear^.CollisionMask) and lfLandMask) <> 0 then
exit(Land[y, x] and Gear^.CollisionMask);
inc(x)
until (x > i);
@@ -981,7 +981,7 @@
i:= x + Gear^.Radius * 2 - 2;
repeat
if (x and LAND_WIDTH_MASK) = 0 then
- if (Land[y, x] and lfNotObjMask) <> 0 then
+ if (Land[y, x] and lfLandMask) <> 0 then
if (not isColl) or (abs(x-gx) < abs(collX-gx)) then
begin
isColl:= true;
--- a/hedgewars/uCommandHandlers.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uCommandHandlers.pas Mon Jan 14 12:35:32 2019 -0500
@@ -478,6 +478,11 @@
if CheckNoTeamOrHH then
exit;
+ (* Use "~" (ASCII character 126) as synonym for NUL byte (=amNothing).
+ This is done to allow to add "setweap ~" in QTfrontend/binds.cpp because
+ the NUL byte would terminate the strings in C++ otherwise. *)
+ if (s[1] = '~') then
+ s[1]:= #0;
if checkFails((s[0] = #1) and (s[1] <= char(High(TAmmoType))), 'Malformed /setweap', true) then exit;
if not isExternalSource then
@@ -785,6 +790,11 @@
cHealthDecrease:= StrToInt(s)
end;
+procedure chInitHealth(var s: shortstring);
+begin
+cInitHealth:= StrToInt(s)
+end;
+
procedure chDamagePercent(var s: shortstring);
begin
cDamagePercent:= StrToInt(s)
@@ -853,6 +863,11 @@
CampaignVariable := s;
end;
+procedure chMissVar(var s:shortstring);
+begin
+ MissionVariable := s;
+end;
+
procedure chWorldEdge(var s: shortstring);
begin
WorldEdge:= TWorldEdge(StrToInt(s))
@@ -921,6 +936,7 @@
RegisterVariable('sd_turns', @chSuddenDTurns , false);
RegisterVariable('waterrise', @chWaterRise , false);
RegisterVariable('healthdec', @chHealthDecrease, false);
+ RegisterVariable('inithealth',@chInitHealth, false);
RegisterVariable('damagepct',@chDamagePercent , false);
RegisterVariable('ropepct' , @chRopePercent , false);
RegisterVariable('getawaytime' , @chGetAwayTime , false);
@@ -963,6 +979,7 @@
RegisterVariable('+cur_r' , @chCurR_p , true );
RegisterVariable('-cur_r' , @chCurR_m , true );
RegisterVariable('campvar' , @chCampVar , true );
+ RegisterVariable('missvar' , @chMissVar , true );
RegisterVariable('record' , @chRecord , true );
RegisterVariable('worldedge',@chWorldEdge , false);
RegisterVariable('advmapgen',@chAdvancedMapGenMode, false);
--- a/hedgewars/uConsts.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uConsts.pas Mon Jan 14 12:35:32 2019 -0500
@@ -336,6 +336,7 @@
= $00100000; // doesn't stop timer while Attacking gear msg is set and inf. attack mode is on
ammoprop_ForceTurnEnd = $00200000; // always ends turn after usage, ignoring inf. attack
ammoprop_NoTargetAfter= $00400000; // disable target selection after attack
+ ammoprop_NoWrapTarget = $00800000; // allow to select target beyond wrap world edge limits
ammoprop_NoRoundEnd = $10000000; // ammo doesn't end turn
AMMO_INFINITE = 100; // internal representation of infinite ammo count
--- a/hedgewars/uGears.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGears.pas Mon Jan 14 12:35:32 2019 -0500
@@ -62,11 +62,18 @@
var delay: LongWord;
delay2: LongWord;
- step: (stInit, stDelay, stChDmg, stSweep, stTurnStats, stChWin1,
- stTurnReact, stAfterDelay, stChWin2, stWater, stChWin3,
- stHealth, stSpawn, stNTurn);
+ step: (stInit, stDelay1, stChDmg, stSweep, stTurnStats, stChWin1,
+ stTurnReact, stDelay2, stChWin2, stWater, stChWin3,
+ stChKing, stSuddenDeath, stDelay3, stHealth, stSpawn, stDelay4,
+ stNTurn);
NewTurnTick: LongWord;
- //SDMusic: shortstring;
+
+const delaySDStart = 1600;
+ delaySDWarning = 1000;
+ delayDamageTagFull = 1500;
+ delayDamageTagShort = 500;
+ delayTurnReact = 800;
+ delayFinal = 100;
function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs
var Gear: PGear;
@@ -86,7 +93,7 @@
CheckNoDamage:= false;
dmg:= Gear^.Damage;
- if Gear^.Health < dmg then
+ if (Gear^.Health < dmg) then
begin
Gear^.Active:= true;
Gear^.Health:= 0
@@ -105,7 +112,15 @@
RenderHealth(Gear^.Hedgehog^);
RecountTeamHealth(Gear^.Hedgehog^.Team);
+ end
+ else if ((GameFlags and gfKing) <> 0) and (not Gear^.Hedgehog^.Team^.hasKing) then
+ begin
+ Gear^.Active:= true;
+ Gear^.Health:= 0;
+ RenderHealth(Gear^.Hedgehog^);
+ RecountTeamHealth(Gear^.Hedgehog^.Team);
end;
+
if (not isInMultiShoot) then
Gear^.Karma:= 0;
Gear^.Damage:= 0
@@ -114,6 +129,34 @@
end;
end;
+function DoDelay: boolean;
+begin
+if delay <= 0 then
+ delay:= 1
+else
+ dec(delay);
+DoDelay:= delay = 0;
+end;
+
+function CheckMinionsDie: boolean;
+var Gear: PGear;
+begin
+ CheckMinionsDie:= false;
+ if (GameFlags and gfKing) = 0 then
+ exit;
+
+ Gear:= GearsList;
+ while Gear <> nil do
+ begin
+ if (Gear^.Kind = gtHedgehog) and (not Gear^.Hedgehog^.King) and (not Gear^.Hedgehog^.Team^.hasKing) then
+ begin
+ CheckMinionsDie:= true;
+ exit;
+ end;
+ Gear:= Gear^.NextGear;
+ end;
+end;
+
procedure HealthMachine;
var Gear: PGear;
team: PTeam;
@@ -237,8 +280,6 @@
curHandledGear^.Tex:= RenderStringTex(ansistring(inttostr(curHandledGear^.Timer div 1000)), cWhiteColor, fntSmall);
end;
curHandledGear^.doStep(curHandledGear);
- // might be useful later
- //ScriptCall('onGearStep', Gear^.uid);
end
end
end;
@@ -269,22 +310,20 @@
ScriptCall('onEndTurn');
inc(step)
end;
- stDelay:
- begin
- if delay = 0 then
- delay:= cInactDelay
- else
- dec(delay);
-
- if delay = 0 then
- inc(step)
- end;
-
+ stDelay1:
+ if DoDelay() then
+ inc(step);
stChDmg:
if CheckNoDamage then
inc(step)
else
- step:= stDelay;
+ begin
+ if (not bBetweenTurns) and (not isInMultiShoot) then
+ delay:= delayDamageTagShort
+ else
+ delay:= delayDamageTagFull;
+ step:= stDelay1;
+ end;
stSweep:
if SweepDirty then
@@ -314,22 +353,16 @@
begin
uStats.TurnReaction;
uStats.TurnStatsReset;
+ delay:= delayTurnReact;
inc(step)
end
else
inc(step, 2);
end;
- stAfterDelay:
- begin
- if delay = 0 then
- delay:= cInactDelay
- else
- dec(delay);
-
- if delay = 0 then
- inc(step)
- end;
+ stDelay2:
+ if DoDelay() then
+ inc(step);
stChWin2:
begin
CheckForWin();
@@ -357,39 +390,79 @@
inc(step)
end;
- stHealth:
+ stChKing:
+ begin
+ if (not isInMultiShoot) and (CheckMinionsDie) then
+ step:= stChDmg
+ else
+ inc(step);
+ end;
+ stSuddenDeath:
begin
- if (cWaterRise <> 0) or (cHealthDecrease <> 0) then
- begin
- if (TotalRoundsPre = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then
- StartSuddenDeath()
- else if (TotalRoundsPre < cSuddenDTurns) and (not isInMultiShoot) then
+ if ((cWaterRise <> 0) or (cHealthDecrease <> 0)) and (not (isInMultiShoot or bBetweenTurns)) then
+ begin
+ // Start Sudden Death
+ if (TotalRoundsPre = cSuddenDTurns) and (not SuddenDeath) then
+ begin
+ StartSuddenDeath();
+ delay:= delaySDStart;
+ inc(step);
+ end
+ // Show Sudden Death warning message
+ else if (TotalRoundsPre < cSuddenDTurns) and ((LastSuddenDWarn = -2) or (LastSuddenDWarn <> TotalRoundsPre)) then
begin
i:= cSuddenDTurns - TotalRoundsPre;
s:= ansistring(inttostr(i));
- if i = 1 then
- AddCaption(trmsg[sidRoundSD], capcolDefault, capgrpGameState)
- else if (i = 2) or ((i > 0) and ((i mod 50 = 0) or ((i <= 25) and (i mod 5 = 0)))) then
- AddCaption(FormatA(trmsg[sidRoundsSD], s), capcolDefault, capgrpGameState);
- end;
+ // X rounds before SD. X = 1, 2, 3, 5, 7, 10, 15, 20, 25, 50, 100, ...
+ if (i > 0) and ((i <= 3) or (i = 7) or ((i mod 50 = 0) or ((i <= 25) and (i mod 5 = 0)))) then
+ begin
+ if i = 1 then
+ AddCaption(trmsg[sidRoundSD], capcolDefault, capgrpGameState)
+ else
+ AddCaption(FormatA(trmsg[sidRoundsSD], s), capcolDefault, capgrpGameState);
+ delay:= delaySDWarning;
+ inc(step);
+ LastSuddenDWarn:= TotalRoundsPre;
+ end
+ else
+ inc(step, 2);
+ end
+ else
+ inc(step, 2);
+ end
+ else
+ inc(step, 2);
+ end;
+ stDelay3:
+ if DoDelay() then
+ inc(step);
+ stHealth:
+ begin
+ if bBetweenTurns
+ or isInMultiShoot
+ or (TotalRoundsReal = -1) then
+ inc(step)
+ else
+ begin
+ bBetweenTurns:= true;
+ HealthMachine;
+ step:= stChDmg
end;
- if bBetweenTurns
- or isInMultiShoot
- or (TotalRoundsPre = -1) then
- inc(step)
- else
- begin
- bBetweenTurns:= true;
- HealthMachine;
- step:= stChDmg
- end
- end;
+ end;
stSpawn:
begin
- if not isInMultiShoot then
+ if (not isInMultiShoot) then
+ begin
SpawnBoxOfSmth;
- inc(step)
+ delay:= delayFinal;
+ inc(step);
+ end
+ else
+ inc(step, 2)
end;
+ stDelay4:
+ if DoDelay() then
+ inc(step);
stNTurn:
begin
if isInMultiShoot then
@@ -464,13 +537,12 @@
if TurnTimeLeft > 0 then
if IsClockRunning() then
- //(CurrentHedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle])
begin
- if (cHedgehogTurnTime >= 10000)
+ if (cHedgehogTurnTime > TurnTimeLeft)
and (CurrentHedgehog^.Gear <> nil)
and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0)
and (not isGetAwayTime) and (ReadyTimeLeft = 0) then
- if TurnTimeLeft = 5000 then
+ if (TurnTimeLeft = 5000) and (cHedgehogTurnTime >= 10000) then
PlaySoundV(sndHurry, CurrentTeam^.voicepack)
else if TurnTimeLeft = 4000 then
PlaySound(sndCountdown4)
@@ -552,13 +624,6 @@
for i:= 0 to cMaxHHIndex do
with Hedgehogs[i] do
begin
-(*
- if (SpeechGear <> nil) then
- begin
- DeleteVisualGear(SpeechGear); // remove to restore persisting beyond end of turn. Tiy says was too much of a gameplay issue
- SpeechGear:= nil
- end;
-*)
if (Gear <> nil) then
begin
@@ -691,16 +756,14 @@
while (i < cAirMines) and (j < 1000*cAirMines) do
begin
p:= 0;
+ if (hasBorder) or (WorldEdge = weBounce) then
+ rx:= leftX+GetRandom(rightX-leftX-16)+8
+ else
+ rx:= leftX+GetRandom(rightX-leftX+400)-200;
if hasBorder then
- begin
- rx:= leftX+GetRandom(rightX-leftX-16)+8;
ry:= topY+GetRandom(LAND_HEIGHT-topY-16)+8
- end
else
- begin
- rx:= leftX+GetRandom(rightX-leftX+400)-200;
- ry:= topY+GetRandom(LAND_HEIGHT-topY+400)-200
- end;
+ ry:= topY+GetRandom(LAND_HEIGHT-topY+400)-200;
Gear^.X:= int2hwFloat(CalcWorldWrap(rx,Gear^.Radius));
Gear^.Y:= int2hwFloat(ry);
if CheckLandValue(rx, ry, $FFFF) and
@@ -724,9 +787,6 @@
((rdx.Round+rdy.Round < Gear^.Angle) and
(hwRound(hwSqr(rdx) + hwSqr(rdy)) < sqr(Gear^.Angle))) then
begin
- // Debug line. Remove later
- // AddFileLog('Too Close to Hog @ (' + inttostr(rx) + ',' + inttostr(ry) + ')');
-
p:= 1
end
end;
@@ -776,7 +836,7 @@
rdx:= _90-(GetRandomf*_360);
rdy:= _90-(GetRandomf*_360);
Gear:= AddGear(rx, ry, gtGenericFaller, gstInvisible, rdx, rdy, $FFFFFFFF);
- // Tag=1: This allows this generic faller to be displaced randomly by events
+ // This allows this generic faller to be displaced randomly by events
Gear^.Tag:= 1;
end;
@@ -909,7 +969,6 @@
FindPlace(Gear, false, t, t + playWidth div ClansCount, true);// could make Gear == nil;
if Gear <> nil then
begin
- //AddCI(Gear); uncomment if new hogs should be able to spawn on top of old ones.
Gear^.Pos:= GetRandom(49);
// unless the world is wrapping, make outter teams face to map center
if (WorldEdge <> weWrap) and ((p = 0) or (p = ClansCount - 1)) then
@@ -944,7 +1003,6 @@
FindPlace(ar[i]^.Gear, false, leftX, rightX, true);
if ar[i]^.Gear <> nil then
begin
- //AddCI(ar[i]^.Gear); uncomment if new hogs should be able to spawn on top of old ones
ar[i]^.Gear^.dX.isNegative:= hwRound(ar[i]^.Gear^.X) > leftX + playWidth div 2;
ar[i]^.Gear^.Pos:= GetRandom(19)
end;
@@ -1006,79 +1064,91 @@
function SpawnCustomCrateAt(x, y: LongInt; crate: TCrateType; content, cnt: Longword): PGear;
+var gear: PGear;
begin
- FollowGear := AddGear(x, y, gtCase, 0, _0, _0, 0);
+ gear := AddGear(x, y, gtCase, 0, _0, _0, 0);
+ if(FinishedTurnsTotal > -1) then
+ FollowGear:= gear;
cCaseFactor := 0;
if (crate <> HealthCrate) and (content > ord(High(TAmmoType))) then
content := ord(High(TAmmoType));
- FollowGear^.Power:= cnt;
+ gear^.Power:= cnt;
case crate of
HealthCrate:
begin
- FollowGear^.Pos := posCaseHealth;
+ gear^.Pos := posCaseHealth;
// health crate is smaller than the other crates
- FollowGear^.Radius := cCaseHealthRadius;
- FollowGear^.Health := content;
- AddCaption(GetEventString(eidNewHealthPack), capcolDefault, capgrpAmmoInfo);
+ gear^.Radius := cCaseHealthRadius;
+ gear^.Health := content;
+ if(FinishedTurnsTotal > -1) then
+ AddCaption(GetEventString(eidNewHealthPack), capcolDefault, capgrpAmmoInfo);
end;
AmmoCrate:
begin
- FollowGear^.Pos := posCaseAmmo;
- FollowGear^.AmmoType := TAmmoType(content);
- AddCaption(GetEventString(eidNewAmmoPack), capcolDefault, capgrpAmmoInfo);
+ gear^.Pos := posCaseAmmo;
+ gear^.AmmoType := TAmmoType(content);
+ if(FinishedTurnsTotal > -1) then
+ AddCaption(GetEventString(eidNewAmmoPack), capcolDefault, capgrpAmmoInfo);
end;
UtilityCrate:
begin
- FollowGear^.Pos := posCaseUtility;
- FollowGear^.AmmoType := TAmmoType(content);
- AddCaption(GetEventString(eidNewUtilityPack), capColDefault, capgrpAmmoInfo);
+ gear^.Pos := posCaseUtility;
+ gear^.AmmoType := TAmmoType(content);
+ if(FinishedTurnsTotal > -1) then
+ AddCaption(GetEventString(eidNewUtilityPack), capColDefault, capgrpAmmoInfo);
end;
end;
if ( (x = 0) and (y = 0) ) then
- FindPlace(FollowGear, true, 0, LAND_WIDTH);
+ FindPlace(gear, true, 0, LAND_WIDTH);
- SpawnCustomCrateAt := FollowGear;
+ SpawnCustomCrateAt := gear;
end;
function SpawnFakeCrateAt(x, y: LongInt; crate: TCrateType; explode: boolean; poison: boolean): PGear;
+var gear: PGear;
begin
- FollowGear := AddGear(x, y, gtCase, 0, _0, _0, 0);
+ gear := AddGear(x, y, gtCase, 0, _0, _0, 0);
+ if(FinishedTurnsTotal > -1) then
+ FollowGear:= gear;
cCaseFactor := 0;
- FollowGear^.Pos := posCaseDummy;
+ gear^.Pos := posCaseDummy;
if explode then
- FollowGear^.Pos := FollowGear^.Pos + posCaseExplode;
+ gear^.Pos := gear^.Pos + posCaseExplode;
if poison then
- FollowGear^.Pos := FollowGear^.Pos + posCasePoison;
+ gear^.Pos := gear^.Pos + posCasePoison;
case crate of
HealthCrate:
begin
- FollowGear^.Pos := FollowGear^.Pos + posCaseHealth;
+ gear^.Pos := gear^.Pos + posCaseHealth;
// health crate is smaller than the other crates
- FollowGear^.Radius := cCaseHealthRadius;
- AddCaption(GetEventString(eidNewHealthPack), capcolDefault, capgrpAmmoInfo);
+ gear^.Radius := cCaseHealthRadius;
+ if(FinishedTurnsTotal > -1) then
+ AddCaption(GetEventString(eidNewHealthPack), capcolDefault, capgrpAmmoInfo);
end;
AmmoCrate:
begin
- FollowGear^.Pos := FollowGear^.Pos + posCaseAmmo;
- AddCaption(GetEventString(eidNewAmmoPack), capcolDefault, capgrpAmmoInfo);
+ gear^.Pos := gear^.Pos + posCaseAmmo;
+ if(FinishedTurnstotal > -1) then
+ AddCaption(GetEventString(eidNewAmmoPack), capcolDefault, capgrpAmmoInfo);
end;
UtilityCrate:
begin
- FollowGear^.Pos := FollowGear^.Pos + posCaseUtility;
- AddCaption(GetEventString(eidNewUtilityPack), capcolDefault, capgrpAmmoInfo);
+ gear^.Pos := gear^.Pos + posCaseUtility;
+ if(FinishedTurnsTotal > -1) then
+ AddCaption(GetEventString(eidNewUtilityPack), capcolDefault, capgrpAmmoInfo);
end;
end;
if ( (x = 0) and (y = 0) ) then
- FindPlace(FollowGear, true, 0, LAND_WIDTH);
+ FindPlace(gear, true, 0, LAND_WIDTH);
- SpawnFakeCrateAt := FollowGear;
+ SpawnFakeCrateAt := gear;
end;
procedure StartSuddenDeath();
@@ -1147,7 +1217,8 @@
or (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_DoesntStopTimerWhileAttacking <> 0)
or ((GameFlags and gfInfAttack) <> 0) and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_DoesntStopTimerWhileAttackingInInfAttackMode <> 0)
or (CurrentHedgehog^.CurAmmoType = amSniperRifle))
- and (not(isInMultiShoot and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_DoesntStopTimerInMultiShoot) <> 0)));
+ and (not(isInMultiShoot and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_DoesntStopTimerInMultiShoot) <> 0)))
+ and (not LuaClockPaused);
end;
@@ -1191,14 +1262,6 @@
if text = '' then text:= '...';
- (*
- if CheckNoTeamOrHH then
- begin
- ParseCommand('say ' + text, true);
- exit
- end;
- *)
-
if (x < 4) and (TeamsArray[t] <> nil) then
begin
// if team matches current hedgehog team, default to current hedgehog
@@ -1332,10 +1395,9 @@
//typed const
delay:= 0;
delay2:= 0;
- step:= stDelay;
+ step:= stDelay1;
upd:= 0;
- //SDMusic:= 'hell.ogg';
NewTurnTick:= $FFFFFFFF;
end;
--- a/hedgewars/uGearsHandlersMess.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGearsHandlersMess.pas Mon Jan 14 12:35:32 2019 -0500
@@ -115,6 +115,7 @@
procedure doStepMovingPortal(Gear: PGear);
procedure doStepPortalShot(newPortal: PGear);
procedure doStepPiano(Gear: PGear);
+procedure doStepPianoWork(Gear: PGear);
procedure doStepSineGunShotWork(Gear: PGear);
procedure doStepSineGunShot(Gear: PGear);
procedure doStepFlamethrowerWork(Gear: PGear);
@@ -357,7 +358,6 @@
procedure doStepFallingGear(Gear: PGear);
var
isFalling: boolean;
- //tmp: QWord;
tX, tdX, tdY: hwFloat;
collV, collH, gX, gY: LongInt;
land, xland: word;
@@ -478,10 +478,8 @@
xland:= TestCollisionXwithGear(Gear, -hwSign(Gear^.dX));
if xland <> 0 then collH := -hwSign(Gear^.dX)
end;
- //if Gear^.AdvBounce and (collV <>0) and (collH <> 0) and (hwSqr(tdX) + hwSqr(tdY) > _0_08) then
if (collV <> 0) and (collH <> 0) and
(((Gear^.AdvBounce=1) and ((collV=-1) or ((tdX.QWordValue + tdY.QWordValue) > _0_2.QWordValue)))) then
- //or ((xland or land) and lfBouncy <> 0)) then
begin
if (xland or land) and lfBouncy = 0 then
begin
@@ -534,7 +532,6 @@
Gear^.X := Gear^.X + Gear^.dX;
Gear^.Y := Gear^.Y + Gear^.dY;
CheckGearDrowning(Gear);
- //if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
if (not isFalling) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_02.QWordValue) then
Gear^.State := Gear^.State and (not gstMoving)
else
@@ -543,7 +540,7 @@
if ((xland or land) and lfBouncy <> 0) and (Gear^.dX.QWordValue < _0_15.QWordValue) and (Gear^.dY.QWordValue < _0_15.QWordValue) then
Gear^.State := Gear^.State or gstCollision;
- if ((xland or land) and lfBouncy <> 0) and (Gear^.Radius >= 3) and
+ if ((xland or land) and lfBouncy <> 0) and
((Gear^.dX.QWordValue > _0_15.QWordValue) or (Gear^.dY.QWordValue > _0_15.QWordValue)) then
begin
AddBounceEffectForGear(Gear);
@@ -712,14 +709,6 @@
gY := hwRound(Gear^.Y);
for i:= 0 to 4 do
begin
- (*glass:= AddVisualGear(gx+random(7)-3, gy+random(5)-2, vgtEgg);
- if glass <> nil then
- begin
- glass^.Frame:= 2;
- glass^.Tint:= $41B83ED0 - i * $10081000;
- glass^.dX:= 1/(10*(random(11)-5));
- glass^.dY:= -1/(random(4)+5);
- end;*)
glass:= AddVisualGear(gx+random(7)-3, gy+random(7)-3, vgtStraightShot);
if glass <> nil then
with glass^ do
@@ -867,17 +856,6 @@
else if 360 < DirAngle then
DirAngle := DirAngle - 360;
end;
-(*
-We aren't using frametick right now, so just a waste of cycles.
- inc(Health, 8);
- if longword(Health) > vobFrameTicks then
- begin
- dec(Health, vobFrameTicks);
- inc(Timer);
- if Timer = vobFramesCount then
- Timer:= 0
- end;
-*)
// move back to cloud layer
if CheckCoordInWater(xx, yy) then
move:= true
@@ -1046,11 +1024,14 @@
var
t: hwFloat;
gX,gY,i: LongInt;
- uw, nuw: boolean;
+ uw, nuw, wrapped: boolean;
flower: PVisualGear;
begin
- WorldWrap(Gear);
+ wrapped:= WorldWrap(Gear);
+ if wrapped then
+ HomingWrap(Gear);
+
AllInactive := false;
gX := hwRound(Gear^.X);
gY := hwRound(Gear^.Y);
@@ -2392,7 +2373,6 @@
ScriptCall('onGearDamage', Gear^.UID, dmg)
end;
CalcRotationDirAngle(Gear);
- //CheckGearDrowning(Gear)
end
else
begin
@@ -2400,22 +2380,6 @@
AddCI(Gear)
end;
-(*
-Attempt to make a barrel knock itself over an edge. Would need more checks to avoid issues like burn damage
- begin
- x:= hwRound(Gear^.X);
- y:= hwRound(Gear^.Y);
- if (((y+1) and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then
- if (Land[y+1, x] = 0) then
- begin
- if (((y+1) and LAND_HEIGHT_MASK) = 0) and (((x+Gear^.Radius-2) and LAND_WIDTH_MASK) = 0) and (Land[y+1, x+Gear^.Radius-2] = 0) then
- Gear^.dX:= -_0_08
- else if (((y+1 and LAND_HEIGHT_MASK)) = 0) and (((x-(Gear^.Radius-2)) and LAND_WIDTH_MASK) = 0) and (Land[y+1, x-(Gear^.Radius-2)] = 0) then
- Gear^.dX:= _0_08;
- end;
- if Gear^.dX.QWordValue = 0 then AddCI(Gear)
- end; *)
-
if not Gear^.dY.isNegative and (Gear^.dY < _0_001) and (TestCollisionYwithGear(Gear, 1) <> 0) then
Gear^.dY := _0;
if hwAbs(Gear^.dX) < _0_001 then
@@ -2486,7 +2450,6 @@
if k = gtExplosives then
begin
- //if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation;
if (hwAbs(Gear^.dX) > _0_15) or ((hwAbs(Gear^.dY) > _0_15) and (hwAbs(Gear^.dX) > _0_02)) then
begin
Gear^.doStep := @doStepRollingBarrel;
@@ -2566,7 +2529,6 @@
else if Gear^.dY < - _0_03 then
PlaySound(Gear^.ImpactSound);
end;
- //if Gear^.dY > - _0_001 then Gear^.dY:= _0
CheckGearDrowning(Gear);
end;
@@ -2737,12 +2699,10 @@
Gear^.dX := Gear^.dX * _0_995;
Gear^.dY := Gear^.dY + cGravity;
- // if sticky then Gear^.dY := Gear^.dY + cGravity;
if Gear^.dY.QWordValue > _0_2.QWordValue then
Gear^.dY := Gear^.dY * _0_995;
- //if sticky then Gear^.X := Gear^.X + Gear^.dX else
Gear^.X := Gear^.X + Gear^.dX + cWindSpeed * 640;
Gear^.Y := Gear^.Y + Gear^.dY;
end;
@@ -2817,7 +2777,7 @@
Gear^.Radius := 1;
end
else if ((GameTicks and $3) = 3) then
- doMakeExplosion(gX, gY, Gear^.Boom * 4, Gear^.Hedgehog, 0);//, EXPLNoDamage);
+ doMakeExplosion(gX, gY, Gear^.Boom * 4, Gear^.Hedgehog, 0);
if ((GameTicks and $7) = 0) and (Random(2) = 0) then
for i:= Random(2) downto 0 do
@@ -2914,7 +2874,6 @@
AllInactive := false;
HHGear := Gear^.Hedgehog^.Gear;
DeleteCI(HHGear);
- //HHGear^.X := int2hwFloat(hwRound(HHGear^.X)) - _0_5; WTF?
HHGear^.dX := SignAs(cLittle, Gear^.dX);
HHGear^.dY := - _0_3;
@@ -3015,17 +2974,25 @@
if (Gear^.Health > 0) and (not (Gear^.X < Gear^.dX)) and (Gear^.X < Gear^.dX + cAirPlaneSpeed) then
begin
dec(Gear^.Health);
+ if (WorldEdge = weBounce) and (((Gear^.Tag = 1) and (hwRound(Gear^.X) > rightX)) or ((Gear^.Tag = -1) and (hwRound(Gear^.X) < leftX))) then
+ begin
+ // Don't spawn missile if it would end up inside bounce world edge of the opposite side
+ PlaySound(sndVaporize);
+ AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmoke);
+ end
+ else
+ begin
+ // Spawn missile
case Gear^.State of
0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0);
2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed * Gear^.Tag, _0, Gear^.Timer + 1);
- //4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed *
- // Gear^.Tag, _0, 5000);
end;
- Gear^.dX := Gear^.dX + int2hwFloat(Gear^.Damage * Gear^.Tag);
- if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
- FollowGear^.State:= FollowGear^.State or gstSubmersible;
+ Gear^.dX := Gear^.dX + int2hwFloat(Gear^.Damage * Gear^.Tag);
+ if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
+ FollowGear^.State:= FollowGear^.State or gstSubmersible;
+ end;
StopSoundChan(Gear^.SoundChannel, 4000);
end;
@@ -3041,9 +3008,45 @@
end;
procedure doStepAirAttack(Gear: PGear);
+var valid: boolean;
+ HHGear: PGear;
begin
AllInactive := false;
+ valid:= true;
+ // Bounce world edge restrictions ...
+ if (WorldEdge = weBounce) then
+ // If plane flies right, deny placement inside the right bounce side
+ if (Gear^.X.QWordValue = 0) and (Gear^.Target.X > rightX) then
+ valid:= false
+ // If plane flies left, deny placement inside the left bounce side
+ else if (Gear^.X.QWordValue <> 0) and (Gear^.Target.X < leftX) then
+ valid:= false
+ // Deny placement of high targets. This serves as a buffer to further
+ // reduce potentially weird bouncy gear behaviour
+ else if (Gear^.Target.Y < (topY - 50)) then
+ valid:= false;
+
+ if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then
+ HHGear:= Gear^.Hedgehog^.Gear;
+
+ if (not valid) then
+ begin
+ if (HHGear <> nil) then
+ begin
+ HHGear^.Message := HHGear^.Message and (not gmAttack);
+ HHGear^.State := HHGear^.State and (not gstAttacking);
+ HHGear^.State := HHGear^.State or gstChooseTarget;
+ isCursorVisible := true;
+ end;
+ DeleteGear(Gear);
+ PlaySound(sndDenied);
+ exit;
+ end;
+
+ if (HHGear <> nil) then
+ PlaySoundV(sndIncoming, Gear^.Hedgehog^.Team^.voicepack);
+
if Gear^.X.QWordValue = 0 then
begin
Gear^.Tag := 1;
@@ -3055,7 +3058,7 @@
Gear^.X := int2hwFloat(max(LAND_WIDTH,4096) + 2048);
end;
- Gear^.Y := int2hwFloat(topY-300);
+ Gear^.Y := int2hwFloat(topY - 300);
Gear^.dX := int2hwFloat(Gear^.Target.X) - int2hwFloat(Gear^.Tag * (Gear^.Health-1) * Gear^.Damage) / 2;
// calcs for Napalm Strike, so that it will hit the target (without wind at least :P)
@@ -3276,12 +3279,10 @@
if ((Gear^.Message and (not (gmSwitch or gmPrecise))) <> 0) or (TurnTimeLeft = 0) then
begin
hedgehog := Gear^.Hedgehog;
- //Msg := Gear^.Message and (not gmSwitch);
ApplyAmmoChanges(hedgehog^);
HHGear := CurrentHedgehog^.Gear;
ApplyAmmoChanges(HHGear^.Hedgehog^);
- //HHGear^.Message := Msg;
DeleteGear(Gear);
exit
end;
@@ -3441,9 +3442,6 @@
inc(Gear^.Damage, 2);
- // if TestCollisionXwithGear(HHGear, hwSign(Gear^.dX))
- // or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY)) then inc(Gear^.Damage, 3);
-
dec(i)
until (i = 0)
or (Gear^.Damage > Gear^.Health);
@@ -3587,10 +3585,6 @@
if Gear^.Pos = 0 then
begin
///////////// adapted from doMakeExplosion ///////////////////////////
- //fX:= Gear^.X;
- //fY:= Gear^.Y;
- //fX.QWordValue:= fX.QWordValue and $FFFFFFFF00000000;
- //fY.QWordValue:= fY.QWordValue and $FFFFFFFF00000000;
fX:= int2hwFloat(hwRound(Gear^.X));
fY:= int2hwFloat(hwRound(Gear^.Y));
dmgBase:= Gear^.Boom shl 1 + cHHRadius div 2;
@@ -3720,7 +3714,7 @@
Gear^.Angle := (LongInt(Gear^.Angle) + 2) and 3;
// Bounce effect
- if (Gear^.Karma = 2) and (Gear^.Radius > 2) then
+ if (Gear^.Karma = 2) then
AddBounceEffectForGear(Gear, 0.55);
Gear^.Tag:= 0;
@@ -3862,30 +3856,6 @@
end ;
AfterAttack;
DeleteGear(Gear);
-
-(*
- Gear^.X := Gear^.X + Gear^.dX;
- Gear^.Y := Gear^.Y + Gear^.dY;
- x := hwRound(Gear^.X);
- y := hwRound(Gear^.Y);
-
- if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then
- if (Land[y, x] <> 0) then
- begin
- Gear^.dX.isNegative := not Gear^.dX.isNegative;
- Gear^.dY.isNegative := not Gear^.dY.isNegative;
- Gear^.dX := Gear^.dX * _1_5;
- Gear^.dY := Gear^.dY * _1_5 - _0_3;
- AmmoShove(Gear, 0, 40);
- AfterAttack;
- DeleteGear(Gear)
- end
- else
- else
- begin
- AfterAttack;
- DeleteGear(Gear)
- end*)
end;
procedure doStepSeductionWear(Gear: PGear);
@@ -3920,14 +3890,6 @@
if heart <> nil then
with heart^ do
begin
- { // old calcs
- dx:= 0.001 * (random(200));
- dy:= 0.001 * (random(200));
- if random(2) = 0 then
- dx := -dx;
- if random(2) = 0 then
- dy := -dy;
- }
// randomize speed in both directions
dx:= 0.001 * (random(201));
@@ -3965,7 +3927,6 @@
procedure doStepSeduction(Gear: PGear);
begin
AllInactive := false;
- //DeleteCI(Gear^.Hedgehog^.Gear);
Gear^.doStep := @doStepSeductionWear
end;
@@ -4365,14 +4326,8 @@
dec(Gear^.Pos);
AllInactive := false;
HHGear := Gear^.Hedgehog^.Gear;
- //dec(Gear^.Timer);
move := _0_2;
fuel := 50;
-(*if (HHGear^.Message and gmPrecise) <> 0 then
- begin
- move:= _0_02;
- fuel:= 5;
- end;*)
if HHGear^.Message and gmPrecise <> 0 then
HedgehogChAngle(HHGear)
else if (Gear^.Health > 0) or (Gear^.Health = JETPACK_FUEL_INFINITE) then
@@ -4470,9 +4425,8 @@
or (HHGear^.dY < _0) then
doStepHedgehogMoving(HHGear);
- if // (Gear^.Health = 0)
+ if
(HHGear^.Damage <> 0)
- //or CheckGearDrowning(HHGear)
// drown if too deep under water
or (cWaterLine + cVisibleWater * 4 < hwRound(HHGear^.Y))
or (TurnTimeLeft = 0)
@@ -4490,11 +4444,6 @@
HHGear^.Hedgehog^.CurAmmoType:= amJetpack;
isCursorVisible := false;
ApplyAmmoChanges(HHGear^.Hedgehog^);
- // if Gear^.Tex <> nil then FreeTexture(Gear^.Tex);
-
-// Gear^.Tex:= RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + '%', cWhiteColor, fntSmall)
-
-//AddCaption(trmsg[sidFuel]+': '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate);
DeleteGear(Gear);
end
end;
@@ -4739,7 +4688,6 @@
AllInactive := false;
Gear^.dX := Gear^.dX;
doStepFallingGear(Gear);
- // CheckGearDrowning(Gear); // already checked for in doStepFallingGear
CalcRotationDirAngle(Gear);
if (Gear^.State and gstCollision) <> 0 then
@@ -5294,8 +5242,51 @@
newPortal^.doStep := @doStepMovingPortal;
end;
+procedure doStepPiano(Gear: PGear);
+var valid: boolean;
+ HHGear: PGear;
+begin
+ AllInactive := false;
+ valid := true;
+
+ if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then
+ HHGear := Gear^.Hedgehog^.Gear;
+
+ if (WorldEdge = weBounce) then
+ if (hwRound(Gear^.X) - Gear^.Radius < leftX) then
+ valid := false
+ else if (hwRound(Gear^.X) - Gear^.Radius > rightX) then
+ valid := false;
+
+ if (not valid) then
+ begin
+ if (HHGear <> nil) then
+ begin
+ HHGear^.Message := HHGear^.Message and (not gmAttack);
+ HHGear^.State := HHGear^.State and (not gstAttacking);
+ HHGear^.State := HHGear^.State or gstChooseTarget;
+ isCursorVisible := true;
+ end;
+ DeleteGear(Gear);
+ PlaySound(sndDenied);
+ exit;
+ end;
+
+ isCursorVisible := false;
+ if (HHGear <> nil) then
+ begin
+ PlaySoundV(sndIncoming, Gear^.Hedgehog^.Team^.voicepack);
+ // Tuck the hedgehog away until the piano attack is completed
+ Gear^.Hedgehog^.Unplaced:= true;
+ HHGear^.X:= _0;
+ HHGear^.Y:= _0;
+ end;
+
+ PauseMusic;
+ Gear^.doStep:= @doStepPianoWork;
+end;
////////////////////////////////////////////////////////////////////////////////
-procedure doStepPiano(Gear: PGear);
+procedure doStepPianoWork(Gear: PGear);
var
r0, r1: LongInt;
odY: hwFloat;
@@ -5322,7 +5313,7 @@
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSlot);
end;
- if (*((Gear^.Pos = 3) and ((GameFlags and gfSolidLand) <> 0)) or*) (Gear^.Pos = 5) then
+ if (Gear^.Pos = 5) then
begin
Gear^.dY := Gear^.dY + cGravity * 2;
Gear^.Y := Gear^.Y + Gear^.dY;
@@ -5650,7 +5641,6 @@
SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
flame^.CollisionMask:= lfNotCurHogCrate;
- //flame^.FlightTime:= 500; use the default huge value to avoid sticky flame suddenly being damaging as opposed to other flames
if (Gear^.Health mod 30) = 0 then
begin
@@ -5658,7 +5648,6 @@
SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
flame^.CollisionMask:= lfNotCurHogCrate;
- //flame^.FlightTime:= 500;
end
end;
Gear^.Timer:= Gear^.Tag
@@ -5831,7 +5820,6 @@
if (tmp^.Kind = gtHedgehog) or (tmp^.Kind = gtMine) or (tmp^.Kind = gtExplosives) then
begin
dmg:= 0;
- //tmp^.State:= tmp^.State or gstFlatened;
if (tmp^.Kind <> gtHedgehog) or (tmp^.Hedgehog^.Effects[heInvulnerable] = 0) then
begin
// base damage on remaining health
@@ -5849,7 +5837,6 @@
if (tmp^.Kind <> gtHedgehog) or (dmg > 0) or (tmp^.Health > tmp^.Damage) then
begin
- //DrawTunnel(tmp^.X, tmp^.Y - _1, _0, _0_5, cHHRadius * 6, cHHRadius * 3);
tmp2:= AddGear(hwRound(tmp^.X), hwRound(tmp^.Y), gtHammerHit, 0, _0, _0, 0);
tmp2^.LinkedGear:= tmp;
SetAllToActive
@@ -5893,7 +5880,6 @@
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9)
, lfIndestructible) then
begin
- //Gear^.X := Gear^.X + Gear^.dX;
Gear^.Y := Gear^.Y + _1_9
end;
end;
@@ -5905,13 +5891,10 @@
end
else
begin
- //Gear^.dY := Gear^.dY + cGravity;
- //Gear^.Y := Gear^.Y + Gear^.dY;
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
Gear^.Timer := 1
end;
- //Gear^.X := Gear^.X + HitGear^.dX;
HitGear^.X := Gear^.X;
HitGear^.Y := Gear^.Y;
SetLittle(HitGear^.dY);
@@ -5956,13 +5939,6 @@
AllInactive := false;
hh := Gear^.Hedgehog;
- // no, you can't do that here
- {DrawCentered(hwRound(hh^.Gear^.X) + WorldDx, hwRound(hh^.Gear^.Y) + WorldDy -
- cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex);
- }
- (*DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF,
- $FF);*)
-
if ((Gear^.Message and gmUp) <> 0) then
begin
if (GameTicks and $F) <> 0 then
@@ -5998,12 +5974,6 @@
RecountTeamHealth(hh^.Team);
inc(graves.ar^[Gear^.Tag]^.Health);
inc(Gear^.Tag)
-{-for i:= 0 to High(graves) do begin
- if hh^.Gear^.Health > 0 then begin
- dec(hh^.Gear^.Health);
- inc(graves[i]^.Health);
- end;
- end; -}
end
else
begin
@@ -6020,6 +5990,8 @@
RenderHealth(resgear^.Hedgehog^);
RecountTeamHealth(resgear^.Hedgehog^.Team);
resgear^.Hedgehog^.Effects[heResurrected]:= 1;
+ if resgear^.Hedgehog^.King then
+ resgear^.Hedgehog^.Team^.hasKing:= true;
{ Reviving a hog implies its clan is now alive, too. }
resgear^.Hedgehog^.Team^.Clan^.DeathLogged:= false;
s:= ansistring(resgear^.Hedgehog^.Name);
@@ -6037,7 +6009,6 @@
Gear^.Timer := 250;
Gear^.doStep := @doStepIdle;
end
- //if hh^.Gear^.Health = 0 then doStepHedgehogFree(hh^.Gear);
end;
procedure doStepResurrector(Gear: PGear);
@@ -6150,8 +6121,7 @@
((Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
HideHog(HH)
end
- //else if (HH^.Gear <> nil) and (HH^.Gear^.State and gstInvisible <> 0) then
- else if (HH^.GearHidden <> nil) then// and (HH^.Gear^.State and gstInvisible <> 0) then
+ else if (HH^.GearHidden <> nil) then
begin
RestoreHog(HH);
s:= ansistring(HH^.Name);
@@ -6257,9 +6227,8 @@
////////////////////////////////////////////////////////////////////////////////
(*
-WIP. The ice gun will have the following effects. It has been proposed by sheepluva that it take the appearance of a large freezer
-spewing ice cubes. The cubes will be visual gears only. The scatter from them and the impact snow dust should help hide imprecisions in things like the GearsNear effect.
-For now we assume a "ray" like a deagle projected out from the gun.
+The ice gun has the following effects:
+A "ray" like a deagle is projected out from the gun.
All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks. This is a simplifying assumption for "gun was applying freezing effect to the same target".
* When fired at water a layer of ice textured land is added above the water.
* When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
@@ -6267,10 +6236,8 @@
As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.
If the effect is interrupted before reaching the top, the freezing state is cleared.
A frozen hog will animate differently.
- To be decided, but possibly in a similar fashion to a grave when it comes to explosions.
- The hog might (possibly) not be damaged by explosions.
+ Frozen hogs take less damage and are harder to push.
This might make freezing potentially useful for friendlies in a bad position.
- It might be better to allow damage though.
A frozen hog stays frozen for a certain number of turns.
Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
*)
@@ -6312,8 +6279,6 @@
procedure updateTarget(Gear:PGear; newX, newY:HWFloat);
-// var
-// iter:PGear;
begin
with Gear^ do
begin
@@ -6330,10 +6295,7 @@
procedure doStepIceGun(Gear: PGear);
const iceWaitCollision = 0;
const iceCollideWithGround = 1;
-//const iceWaitNextTarget:Longint = 2;
-//const iceCollideWithHog:Longint = 4;
const iceCollideWithWater = 5;
-//const waterFreezingTime:Longint = 500;
const groundFreezingTime = 1000;
const iceRadius = 32;
const iceHeight = 40;
@@ -6354,9 +6316,10 @@
exit
end;
updateFuel(Gear);
- if WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.Target.X = NoPointX) then
- // Use FlightTime to count number of times the gear has world-wrapped
- inc(Gear^.FlightTime);
+ if (WorldEdge <> weBounce) then
+ if WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.Target.X = NoPointX) then
+ // Use FlightTime to count number of times the gear has world-wrapped
+ inc(Gear^.FlightTime);
with Gear^ do
begin
@@ -6366,13 +6329,18 @@
if (ndX <> dX) or (ndY <> dY) or (Gear^.Message and (gmUp or gmDown) <> 0) or
(((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and
(Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0)) and
- (not CheckCoordInWater(Target.X, Target.Y))) and (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*3, Gear^.Radius*3) = nil)) then
+ (not CheckCoordInWater(Target.X, Target.Y))) and (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*3, Gear^.Radius*3) = nil) and
+ (not ((WorldEdge = weBounce) and ((Target.X > rightX) or (Target.X < leftX))))) then
begin
updateTarget(Gear, ndX, ndY);
Timer := iceWaitCollision;
FlightTime := 0;
end
- else
+ // Extend ice beam, unless it is far outside he map boundaries
+ else if (not ((hwRound(X + dX) > max(LAND_WIDTH,4096)*2) or
+ (hwRound(X + dX) < -max(LAND_WIDTH,4096)*2) or
+ (hwRound(Y + dY) < -max(LAND_HEIGHT,4096)*2) or
+ (hwRound(Y + dY) > max(LAND_HEIGHT,4096)+512))) then
begin
X:= X + dX;
Y:= Y + dY;
@@ -6503,7 +6471,6 @@
iter:= iter^.NextGear
end;
- // FillRoundInLandWithIce(Target.X, Target.Y, iceRadius);
SetAllHHToActive;
Timer := iceWaitCollision;
Power:= GameTicks
@@ -6523,22 +6490,6 @@
SetAllHHToActive;
Timer := iceWaitCollision;
end;
-(*
- Any ideas for something that would look good here?
- if (Target.X <> NoPointX) and ((Timer = iceCollideWithGround) or (Timer = iceCollideWithWater)) and (GameTicks mod max((groundFreezingTime-((GameTicks - Power)*2)),2) = 0) then //and CheckLandValue(Target.X, Target.Y, lfIce) then
- begin
- vg:= AddVisualGear(Target.X+random(20)-10, Target.Y+random(40)-10, vgtDust, 1);
- if vg <> nil then
- begin
- i:= random(100) + 155;
- vg^.Tint:= IceColor or $FF;
- vg^.Angle:= random(360);
- vg^.dx:= 0.001 * random(80);
- vg^.dy:= 0.001 * random(80)
- end
- end;
-*)
-
// freeze nearby hogs
hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius*2);
if hogs.size > 0 then
@@ -6566,6 +6517,13 @@
X:= HHGear^.X;
Y:= HHGear^.Y
end
+ else if (WorldEdge = weBounce) and ((gX > rightX) or (gX < leftX)) then
+ begin
+ Target.X:= gX;
+ Target.Y:= gY;
+ X:= HHGear^.X;
+ Y:= HHGear^.Y
+ end
else
begin
iter:= CheckGearNear(Gear, gtAirMine, Gear^.Radius*2, Gear^.Radius*2);
@@ -6577,16 +6535,6 @@
Y:= HHGear^.Y
end
end;
- if (gX > max(LAND_WIDTH,4096)*2) or
- (gX < -max(LAND_WIDTH,4096)) or
- (gY < -max(LAND_HEIGHT,4096)) or
- (gY > max(LAND_HEIGHT,4096)+512) then
- begin
- //X:= HHGear^.X;
- //Y:= HHGear^.Y
- Target.X:= gX;
- Target.Y:= gY;
- end
end
end;
end;
@@ -6809,8 +6757,6 @@
////////////////////////////////////////////////////////////////////////////////
procedure doStepKnife(Gear: PGear);
-//var ox, oy: LongInt;
-// la: hwFloat;
var a: real;
begin
// Gear is shrunk so it can actually escape the hog without carving into the terrain
@@ -6834,29 +6780,12 @@
end
else if (Gear^.CollisionIndex = -1) and (Gear^.Timer = 0) then
begin
- (*ox:= 0; oy:= 0;
- if TestCollisionYwithGear(Gear, -1) <> 0 then oy:= -1;
- if TestCollisionXwithGear(Gear, 1) <> 0 then ox:= 1;
- if TestCollisionXwithGear(Gear, -1) <> 0 then ox:= -1;
- if TestCollisionYwithGear(Gear, 1) <> 0 then oy:= 1;
-
- la:= _10000;
- if (ox <> 0) or (oy <> 0) then
- la:= CalcSlopeNearGear(Gear, ox, oy);
- if la = _10000 then
- begin
- // debug for when we couldn't get an angle
- //AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeWhite);
-*)
if Gear^.Health > 0 then
PlaySound(Gear^.ImpactSound);
Gear^.DirAngle:= DxDy2Angle(Gear^.dX, Gear^.dY) + (random(30)-15);
if (Gear^.dX.isNegative and Gear^.dY.isNegative) or
((not Gear^.dX.isNegative) and (not Gear^.dY.isNegative)) then Gear^.DirAngle:= Gear^.DirAngle-90;
- // end
- // else Gear^.DirAngle:= hwFloat2Float(la)*90; // sheepluva's comment claims 45deg = 0.5 - yet orientation doesn't seem consistent?
- // AddFileLog('la: '+floattostr(la)+' DirAngle: '+inttostr(round(Gear^.DirAngle)));
Gear^.dX:= _0;
Gear^.dY:= _0;
Gear^.State:= Gear^.State and (not gstMoving) or gstCollision;
@@ -6958,137 +6887,4 @@
Gear^.doStep := @doStepBulletWork
end;
-(*
- This didn't end up getting used, but, who knows, might be reasonable for javellin or something
-// Make the knife initial angle based on the hog attack angle, or is that too hard?
-procedure doStepKnife(Gear: PGear);
-var t,
- gx, gy, ga, // gear x,y,angle
- lx, ly, la, // land x,y,angle
- ox, oy, // x,y offset
- w, h, // wXh of clip area
- tx, ty // tip position in sprite
- : LongInt;
- surf: PSDL_Surface;
- s: hwFloat;
-
-begin
- Gear^.dY := Gear^.dY + cGravity;
- if (GameFlags and gfMoreWind) <> 0 then
- Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density;
- Gear^.X := Gear^.X + Gear^.dX;
- Gear^.Y := Gear^.Y + Gear^.dY;
- CheckGearDrowning(Gear);
- gx:= hwRound(Gear^.X);
- gy:= hwRound(Gear^.Y);
- if Gear^.State and gstDrowning <> 0 then exit;
- with Gear^ do
- begin
- if CheckLandValue(gx, gy, lfLandMask) then
- begin
- t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10);
-
- if t < 0 then inc(t, 4096)
- else if 4095 < t then dec(t, 4096);
- Angle:= t;
-
- DirAngle:= Angle / 4096 * 360
- end
- else
- begin
-//This is the set of postions for the knife.
-//Using FlipSurface and copyToXY the knife can be written to the LandPixels at 32 positions, and an appropriate line drawn in Land.
- t:= Angle mod 1024;
- case t div 128 of
- 0: begin
- ox:= 2; oy:= 5;
- w := 25; h:= 5;
- tx:= 0; ty:= 2
- end;
- 1: begin
- ox:= 2; oy:= 15;
- w:= 24; h:= 8;
- tx:= 0; ty:= 7
- end;
- 2: begin
- ox:= 2; oy:= 27;
- w:= 23; h:= 12;
- tx:= -12; ty:= -5
- end;
- 3: begin
- ox:= 2; oy:= 43;
- w:= 21; h:= 15;
- tx:= 0; ty:= 14
- end;
- 4: begin
- ox:= 29; oy:= 8;
- w:= 19; h:= 19;
- tx:= 0; ty:= 17
- end;
- 5: begin
- ox:= 29; oy:= 32;
- w:= 15; h:= 21;
- tx:= 0; ty:= 20
- end;
- 6: begin
- ox:= 51; oy:= 3;
- w:= 11; h:= 23;
- tx:= 0; ty:= 22
- end;
- 7: begin
- ox:= 51; oy:= 34;
- w:= 7; h:= 24;
- tx:= 0; ty:= 23
- end
- end;
-
- surf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask);
- copyToXYFromRect(SpritesData[sprKnife].Surface, surf, ox, oy, w, h, 0, 0);
- // try to make the knife hit point first
- lx := 0;
- ly := 0;
- if CalcSlopeTangent(Gear, gx, gy, lx, ly, 255) then
- begin
- la:= vector2Angle(int2hwFloat(lx), int2hwFloat(ly));
- ga:= vector2Angle(dX, dY);
- AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle));
- // change to 0 to 4096 forced by LongWord in Gear
- if la < 0 then la:= 4096+la;
- if ga < 0 then ga:= 4096+ga;
- if ((Angle > ga) and (Angle < la)) or ((Angle < ga) and (Angle > la)) then
- begin
- if Angle >= 2048 then dec(Angle, 2048)
- else if Angle < 2048 then inc(Angle, 2048)
- end;
- AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle))
- end;
- case Angle div 1024 of
- 0: begin
- flipSurface(surf, true);
- flipSurface(surf, true);
- BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-(h-ty), w, surf)
- end;
- 1: begin
- flipSurface(surf, false);
- BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-ty, w, surf)
- end;
- 2: begin // knife was actually drawn facing this way...
- BlitImageAndGenerateCollisionInfo(gx-tx, gy-ty, w, surf)
- end;
- 3: begin
- flipSurface(surf, true);
- BlitImageAndGenerateCollisionInfo(gx-tx, gy-(h-ty), w, surf)
- end
- end;
- SDL_FreeSurface(surf);
- // this needs to calculate actual width/height + land clipping since update texture doesn't.
- // i.e. this will crash if you fire near sides of map, but until I get the blit right, not going to put real values
- UpdateLandTexture(hwRound(X)-32, 64, hwRound(Y)-32, 64, true);
- DeleteGear(Gear);
- exit
- end
- end;
-end;
-*)
-
end.
--- a/hedgewars/uGearsHedgehog.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGearsHedgehog.pas Mon Jan 14 12:35:32 2019 -0500
@@ -487,14 +487,7 @@
PlaySoundV(sndOw1, Team^.voicepack);
cVampiric:= true;
end;
- amPiano: begin
- // Tuck the hedgehog away until the piano attack is completed
- Unplaced:= true;
- X:= _0;
- Y:= _0;
- newGear:= AddGear(TargetPoint.X, -1024, gtPiano, 0, _0, _0, 0);
- PauseMusic
- end;
+ amPiano: newGear:= AddGear(TargetPoint.X, -1024, gtPiano, 0, _0, _0, 0);
amFlamethrower: newGear:= AddGear(hwRound(X), hwRound(Y), gtFlamethrower, 0, xx * _0_5, yy * _0_5, 0);
amLandGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtLandGun, 0, xx * _0_5, yy * _0_5, 0);
amResurrector: begin
@@ -1307,7 +1300,7 @@
else if not isInMultiShoot then
AllInactive:= false;
-if (TurnTimeLeft = 0) or (HHGear^.Damage > 0) or (LuaEndTurnRequested = true) then
+if (TurnTimeLeft = 0) or (HHGear^.Damage > 0) or (((GameFlags and gfKing) <> 0) and (not Hedgehog^.Team^.hasKing)) or (LuaEndTurnRequested = true) then
begin
if (Hedgehog^.CurAmmoType = amKnife) then
LoadHedgehogHat(Hedgehog^, Hedgehog^.Hat);
--- a/hedgewars/uGearsList.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGearsList.pas Mon Jan 14 12:35:32 2019 -0500
@@ -771,7 +771,6 @@
procedure DeleteGear(Gear: PGear);
var team: PTeam;
t,i: Longword;
- k: boolean;
cakeData: PCakeData;
iterator: PGear;
begin
@@ -857,19 +856,14 @@
if Gear^.Hedgehog^.King then
begin
- // are there any other kings left? Just doing nil check. Presumably a mortally wounded king will get reaped soon enough
- k:= false;
+ Gear^.Hedgehog^.Team^.hasKing:= false;
for i:= 0 to Pred(team^.Clan^.TeamsNumber) do
- if (team^.Clan^.Teams[i]^.Hedgehogs[0].Gear <> nil) then
- k:= true;
- if not k then
- for i:= 0 to Pred(team^.Clan^.TeamsNumber) do
- with team^.Clan^.Teams[i]^ do
- for t:= 0 to cMaxHHIndex do
- if Hedgehogs[t].Gear <> nil then
- Hedgehogs[t].Gear^.Health:= 0
- else if (Hedgehogs[t].GearHidden <> nil) then
- Hedgehogs[t].GearHidden^.Health:= 0 // hog is still hidden. if tardis should return though, lua, eh...
+ with team^.Clan^.Teams[i]^ do
+ for t:= 0 to cMaxHHIndex do
+ if Hedgehogs[t].Gear <> nil then
+ Hedgehogs[t].Gear^.Health:= 0
+ else if (Hedgehogs[t].GearHidden <> nil) then
+ Hedgehogs[t].GearHidden^.Health:= 0 // hog is still hidden. if tardis should return though, lua, eh...
end;
// should be not CurrentHedgehog, but hedgehog of the last gear which caused damage to this hog
--- a/hedgewars/uGearsRender.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGearsRender.pas Mon Jan 14 12:35:32 2019 -0500
@@ -69,8 +69,6 @@
if (RopePoints.Count > 0) or (Gear^.Elasticity.QWordValue > 0) then
begin
EnableTexture(false);
- //glEnable(GL_LINE_SMOOTH);
-
Tint(Gear^.Tint shr 24 div 3, Gear^.Tint shr 16 and $FF div 3, Gear^.Tint shr 8 and $FF div 3, Gear^.Tint and $FF);
@@ -92,7 +90,6 @@
openglPopMatrix();
EnableTexture(true);
- //glDisable(GL_LINE_SMOOTH)
end
end;
@@ -263,7 +260,7 @@
// Render some informational GUI next to hedgehog, like fuel and alternate weapon
procedure RenderHHGuiExtras(Gear: PGear; ox, oy: LongInt);
var HH: PHedgehog;
- sx, sy: LongInt;
+ sx, sy, sign, m: LongInt;
begin
HH:= Gear^.Hedgehog;
sx:= ox + 1; // this offset is very common
@@ -275,10 +272,32 @@
if (Gear^.State and gstHHGone) <> 0 then
exit;
+ // render crosshair
+ if (CrosshairGear <> nil) and (Gear = CrosshairGear) then
+ begin
+ sign:= hwSign(Gear^.dX);
+ m:= 1;
+ if ((Gear^.State and gstHHHJump) <> 0) and (HH^.Effects[heArtillery] = 0) then
+ m:= -1;
+ setTintAdd(true);
+ Tint(HH^.Team^.Clan^.Color shl 8 or $FF);
+ DrawTextureRotated(CrosshairTexture,
+ 12, 12, CrosshairX + WorldDx, CrosshairY + WorldDy, 0,
+ sign * m * (Gear^.Angle * 180.0) / cMaxAngle);
+ untint;
+ setTintAdd(false);
+ end;
+
+ // render gear-related extras: alt weapon, fuel, other
if ((Gear^.State and gstHHDriven) <> 0) and (CurAmmoGear <> nil) then
begin
case CurAmmoGear^.Kind of
gtJetpack: begin
+ // render jetpack contour if underwater
+ if (((not SuddenDeathDmg) and (WaterOpacity > 179)) or (SuddenDeathDmg and (SDWaterOpacity > 179))) and
+ ((cWaterLine < (hwRound(Gear^.Y) + Gear^.Radius - 16)) or
+ ((WorldEdge = weSea) and ((hwRound(Gear^.X) < LeftX) or (hwRound(Gear^.X) > RightX)))) then
+ DrawSprite(sprJetpack, sx-32, sy-32, 4);
if CurAmmoGear^.Tex <> nil then
DrawTextureCentered(sx, sy - 40, CurAmmoGear^.Tex);
DrawAltWeapon(Gear, sx, sy);
@@ -309,6 +328,7 @@
curhat: PTexture;
begin
HH:= Gear^.Hedgehog;
+ CrosshairGear:= nil;
if HH^.Unplaced then
exit;
if (HH^.CurAmmoType = amKnife) and (HH = CurrentHedgehog) then
@@ -404,7 +424,7 @@
begin
if ((Gear^.State and (gstHHThinking or gstAnimation)) = 0) and
/// If current ammo is active, and current ammo has alt attack and uses a crosshair (rope, basically, right now, with no crosshair for parachute/saucer
- (((CurAmmoGear <> nil) and //((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) and
+ (((CurAmmoGear <> nil) and
// don't render crosshair/laser during kamikaze
((CurAmmoGear^.AmmoType <> amKamikaze) or ((Gear^.State and gstAttacking) = 0)) and
((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_NoCrossHair) = 0)) or
@@ -491,17 +511,12 @@
DrawLineWrapped(hx, hy, tx, ty, 1.0, (sign*m) < 0, wraps, $FF, $00, $00, $C0);
end;
- // draw crosshair
+
+ // calculate crosshair position
CrosshairX := Round(hwRound(Gear^.X) + dx * 80 + GetLaunchX(HH^.CurAmmoType, sign * m, Gear^.Angle));
CrosshairY := Round(hwRound(Gear^.Y) + dy * 80 + GetLaunchY(HH^.CurAmmoType, Gear^.Angle));
-
- setTintAdd(true);
- Tint(HH^.Team^.Clan^.Color shl 8 or $FF);
- DrawTextureRotated(CrosshairTexture,
- 12, 12, CrosshairX + WorldDx, CrosshairY + WorldDy, 0,
- sign * m * (Gear^.Angle * 180.0) / cMaxAngle);
- untint;
- setTintAdd(false);
+ // crosshair will be rendered in RenderHHGuiExtras
+ CrosshairGear := Gear;
end;
hx:= ox + 8 * sign;
@@ -800,9 +815,6 @@
amSeduction: begin
DrawSpriteRotated(sprHandSeduction, hx, hy, sign, aangle);
DrawCircle(ox, oy, 248, 4, $FF, $00, $00, $AA);
- //Tint($FF, $0, $0, $AA);
- //DrawTexture(ox - 240, oy - 240, SpritesData[sprVampiric].Texture, 10);
- //untint;
end;
amVampiric: DrawSpriteRotatedF(sprHandVamp, hx, hy, (RealTicks div 125) mod 4, sign, aangle);
amRCPlane: begin
@@ -899,17 +911,6 @@
0);
HatVisible:= true;
- (* with HH^ do
- if (HatTex <> nil)
- and (HatVisibility > 0) then
- DrawTextureF(HatTex,
- HatVisibility,
- sx,
- sy - 5,
- 0,
- sign,
- 32,
- 32); *)
end;
defaultPos:= false
@@ -1082,13 +1083,6 @@
if (Gear^.State and gstHHDriven) <> 0 then
begin
- (* if (CurAmmoGear = nil) then
- begin
- amt:= CurrentHedgehog^.CurAmmoType;
- case amt of
- amJetpack: DrawSprite(sprJetpack, sx-32, sy-32, 0);
- end
- end; *)
if (CurAmmoGear = nil) then
begin
if ((Gear^.State and (gstAttacked or gstAnimation or gstHHJumping)) = 0)
@@ -1172,11 +1166,9 @@
tx := ox;
// don't go offscreen
- //tx := round(max(((-cScreenWidth + 16) / cScaleFactor) + SpritesData[sprFinger].Width div 2, min(((cScreenWidth - 16) / cScaleFactor) - SpritesData[sprFinger].Width div 2, tx)));
- //ty := round(max(cScreenHeight div 2 - ((cScreenHeight - 16) / cScaleFactor) + SpritesData[sprFinger].Height div 2, min(cScreenHeight div 2 - ((-cScreenHeight + SpritesData[sprFinger].Height) / (cScaleFactor)) - SpritesData[sprFinger].Width div 2 - 96, ty)));
- t:= 32;//trunc((SpritesData[sprFinger].Width + t) / cScaleFactor);
+ t:= 32;
tx := min(max(tx, ViewLeftX + t), ViewRightX - t);
- t:= 32;//trunc((SpritesData[sprFinger].Height + t) / cScaleFactor);
+ t:= 32;
ty := min(ty, ViewBottomY - 96);
// don't overlap with HH or HH tags
if ty < ViewTopY + t then
@@ -1189,7 +1181,9 @@
dAngle := DxDy2Angle(int2hwfloat(ty - oy), int2hwfloat(tx - ox)) + 90;
+ Tint(Team^.Clan^.Color shl 8 or $FF);
DrawSpriteRotatedF(sprFinger, tx, ty, RealTicks div 32 mod 16, 1, dAngle);
+ untint;
end;
@@ -1253,18 +1247,21 @@
aAngle: real;
startX, endX, startY, endY: LongInt;
begin
- // airmine has its own sprite
+ // airmine has its own sprite
if (Gear^.State and gstFrozen <> 0) and (Gear^.Kind <> gtAirMine) then Tint($A0, $A0, $FF, $FF);
- //if Gear^.State and gstFrozen <> 0 then Tint(IceColor or $FF);
if Gear^.Target.X <> NoPointX then
if Gear^.AmmoType = amBee then
DrawSpriteRotatedF(sprTargetBee, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360)
else if Gear^.AmmoType = amIceGun then
- //DrawSprite(sprSnowDust, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8)
- //DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1, 0, 0, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8, 1, 22, 22, (RealTicks shr 3) mod 360)
DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1/(1+(RealTicks shr 8) mod 5), 0, 0, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, (RealTicks shr 2) mod 8, 1, 22, 22, (RealTicks shr 3) mod 360)
else
+ begin
+ if CurrentHedgehog <> nil then
+ Tint(CurrentHedgehog^.Team^.Clan^.Color shl 8 or $FF);
DrawSpriteRotatedF(sprTargetP, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360);
+ if CurrentHedgehog <> nil then
+ untint;
+ end;
case Gear^.Kind of
gtGrenade: DrawSpriteRotated(sprBomb, x, y, 0, Gear^.DirAngle);
@@ -1318,9 +1315,7 @@
DrawTextureF(Gear^.Hedgehog^.Team^.GraveTex, 1, x, y, (RealTicks shr 7+Gear^.uid) and 15, 1, 32, 32);
if Gear^.Health > 0 then
begin
- //Tint($33, $33, $FF, max($40, round($FF * abs(1 - (GameTicks mod (6000 div Gear^.Health)) / 750))));
Tint($f5, $db, $35, max($40, round($FF * abs(1 - (RealTicks mod 1500) / (750 + Gear^.Health)))));
- //Tint($FF, $FF, $FF, max($40, round($FF * abs(1 - (RealTicks mod 1500) / 750))));
DrawSprite(sprVampiric, x - 24, y - 24, 0);
untint
end
@@ -1467,7 +1462,13 @@
DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0)
end
end;
- gtSwitcher: DrawSprite(sprSwitch, x - 16, y - 56, (RealTicks shr 6) mod 12);
+ gtSwitcher: begin
+ setTintAdd(true);
+ Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF);
+ DrawSprite(sprSwitch, x - 16, y - 56, (RealTicks shr 6) mod 12);
+ untint;
+ setTintAdd(false);
+ end;
gtTarget: begin
Tint($FF, $FF, $FF, round($FF * Gear^.Timer / 1000));
DrawSprite(sprTarget, x - 16, y - 16, 0);
@@ -1551,8 +1552,6 @@
Tint(Gear^.Tint);
// Needs a nicer white texture to tint
DrawTextureRotatedF(SpritesData[sprSnowDust].Texture, 1, 0, 0, x, y, 0, 1, 8, 8, Gear^.DirAngle);
- //DrawSpriteRotated(sprSnowDust, x, y, 0, Gear^.DirAngle);
- //DrawTexture(x, y, SpritesData[sprVampiric].Texture, 0.1);
untint;
end
else //if not isInLag then
@@ -1567,8 +1566,6 @@
DrawSprite(sprFlake, x, y, Gear^.Timer)
else
DrawSpriteRotatedF(sprFlake, x, y, Gear^.Timer, 1, Gear^.DirAngle);
-//DrawSprite(sprFlake, x-SpritesData[sprFlake].Width div 2, y-SpritesData[sprFlake].Height div 2, Gear^.Timer)
-//DrawSpriteRotatedF(sprFlake, x-SpritesData[sprFlake].Width div 2, y-SpritesData[sprFlake].Height div 2, Gear^.Timer, 1, Gear^.DirAngle);
if Gear^.FlightTime > 0 then
untint;
end;
@@ -1586,11 +1583,6 @@
DrawSprite(sprTardis, x-25, y-64,1);
if Gear^.Pos <> 2 then
untint
-(*
- Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or max($00, round(Gear^.Power * abs(1 - (RealTicks mod 500) / 250))));
- DrawTexture(x-6, y-70, SpritesData[sprVampiric].Texture, 0.25);
- untint
-*)
end;
gtIceGun: begin
HHGear := Gear^.Hedgehog^.Gear;
--- a/hedgewars/uGearsUtils.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uGearsUtils.pas Mon Jan 14 12:35:32 2019 -0500
@@ -64,6 +64,7 @@
function GetUtility(Hedgehog: PHedgehog): TAmmoType;
function WorldWrap(var Gear: PGear): boolean;
+function HomingWrap(var Gear: PGear): boolean;
function IsHogLocal(HH: PHedgehog): boolean;
@@ -117,11 +118,6 @@
end;
if (Mask and EXPLAutoSound) <> 0 then PlaySound(sndExplosion);
-(*if (Mask and EXPLAllDamageInRadius) = 0 then
- dmgRadius:= Radius shl 1
-else
- dmgRadius:= Radius;
-dmgBase:= dmgRadius + cHHRadius div 2;*)
dmgBase:= Radius shl 1 + cHHRadius div 2;
// we might have to run twice if weWrap is enabled
@@ -135,8 +131,6 @@
while Gear <> nil do
begin
dmg:= 0;
- //dmg:= dmgRadius + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
- //if (dmg > 1) and
if (Gear^.State and gstNoDamage) = 0 then
begin
case Gear^.Kind of
@@ -146,7 +140,6 @@
gtMelonPiece,
gtGrenade,
gtClusterBomb,
- // gtCluster, too game breaking I think
gtSMine,
gtAirMine,
gtCase,
@@ -325,11 +318,8 @@
tdy:= -cGravityf;
if random(2) = 0 then
dx := -dx;
- //if random(2) = 0 then
- // dy := -dy;
FrameTicks:= random(500) + 1000;
State:= ord(sprBubbles);
- //Tint:= $bd2f03ff
Tint:= $ff0000ff
end
end
@@ -468,11 +458,6 @@
if ((Gear^.Hedgehog^.Effects[heInvulnerable] <> 0)) then
exit;
- //if _0_6 < Gear^.dY then
- // PlaySound(sndOw4, Gear^.Hedgehog^.Team^.voicepack)
- //else
- // PlaySound(sndOw1, Gear^.Hedgehog^.Team^.voicepack);
-
if Gear^.LastDamage <> nil then
ApplyDamage(Gear, Gear^.LastDamage, dmg, dsFall)
else
@@ -486,7 +471,6 @@
dAngle: real;
begin
// Frac/Round to be kind to JS as of 2012-08-27 where there is yet no int64/uint64
- //dAngle := (Gear^.dX.QWordValue + Gear^.dY.QWordValue) / $80000000;
dAngle := (Gear^.dX.Round + Gear^.dY.Round) / 2 + (Gear^.dX.Frac/$100000000+Gear^.dY.Frac/$100000000);
if not Gear^.dX.isNegative then
Gear^.DirAngle := Gear^.DirAngle + dAngle
@@ -756,7 +740,7 @@
end
else // submersible
begin
- // drown submersible grears if far below map
+ // drown submersible gears if far below map
if (Y > cWaterLine + cVisibleWater*4) then
begin
DrownGear(Gear);
@@ -795,7 +779,8 @@
// splash sound animation and droplets
if isImpact or isSkip then
- addSplashForGear(Gear, isSkip);
+ if (not (((dist2Water + Gear^.Radius div 2) < 0) or (abs(dist2Water + Gear^.Radius) >= Gear^.Radius))) then
+ addSplashForGear(Gear, isSkip);
if isSkip then
ScriptCall('onGearWaterSkip', Gear^.uid);
@@ -1744,7 +1729,7 @@
Trying to make the checks a little broader than on first pass to catch things that don't move normally.
*)
function WorldWrap(var Gear: PGear): boolean;
-//var tdx: hwFloat;
+var bounced: boolean;
begin
WorldWrap:= false;
if WorldEdge = weNone then exit(false);
@@ -1757,58 +1742,79 @@
Gear^.X:= Gear^.X + int2hwfloat(rightX - leftX)
else Gear^.X:= Gear^.X - int2hwfloat(rightX - leftX);
LeftImpactTimer:= 150;
- RightImpactTimer:= 150
+ RightImpactTimer:= 150;
+ WorldWrap:= true;
end
else if WorldEdge = weBounce then
begin
- if (hwRound(Gear^.X) - Gear^.Radius < leftX) then
+ bounced:= false;
+ if (hwRound(Gear^.X) - Gear^.Radius < leftX) and (hwSign(Gear^.dX) = -1) and (not isZero(Gear^.dX)) then
begin
LeftImpactTimer:= 333;
Gear^.dX.isNegative:= false;
- Gear^.X:= int2hwfloat(leftX + Gear^.Radius)
+ Gear^.X:= int2hwfloat(leftX + Gear^.Radius);
+ bounced:= true;
end
- else
+ else if (hwRound(Gear^.X) - Gear^.Radius > rightX) and (hwSign(Gear^.dX) = 1) and (not isZero(Gear^.dX)) then
begin
RightImpactTimer:= 333;
Gear^.dX.isNegative:= true;
- Gear^.X:= int2hwfloat(rightX-Gear^.Radius)
+ Gear^.X:= int2hwfloat(rightX-Gear^.Radius);
+ bounced:= true;
end;
- if (Gear^.Radius > 2) and (Gear^.dX.QWordValue > _0_001.QWordValue) then
- AddBounceEffectForGear(Gear);
- end{
- else if WorldEdge = weSea then
- begin
- if (hwRound(Gear^.Y) > cWaterLine) and (Gear^.State and gstSubmersible <> 0) then
- Gear^.State:= Gear^.State and (not gstSubmersible)
- else
+ if (bounced) then
begin
- Gear^.State:= Gear^.State or gstSubmersible;
- Gear^.X:= int2hwFloat(PlayWidth)*int2hwFloat(min(max(0,hwRound(Gear^.Y)),PlayHeight))/PlayHeight;
- Gear^.Y:= int2hwFloat(cWaterLine+cVisibleWater+Gear^.Radius*2);
- tdx:= Gear^.dX;
- Gear^.dX:= -Gear^.dY;
- Gear^.dY:= tdx;
- Gear^.dY.isNegative:= true
- end
- end};
-(*
-* Window in the sky (Gear moved high into the sky, Y is used to determine X) [unfortunately, not a safe thing to do. shame, I thought aerial bombardment would be kinda neat
-This one would be really easy to freeze game unless it was flagged unfortunately.
-
+ WorldWrap:= true;
+ if (Gear^.dX.QWordValue > _0_001.QWordValue) then
+ AddBounceEffectForGear(Gear);
+ end;
+ end
else
- begin
- Gear^.X:= int2hwFloat(PlayWidth)*int2hwFloat(min(max(0,hwRound(Gear^.Y)),PlayHeight))/PlayHeight;
- Gear^.Y:= -_2048-_256-_256;
- tdx:= Gear^.dX;
- Gear^.dX:= Gear^.dY;
- Gear^.dY:= tdx;
- Gear^.dY.isNegative:= false
- end
-*)
- WorldWrap:= true
+ WorldWrap:= true;
end;
end;
+(*
+Applies wrap-around logic for the target of homing gears.
+
+In wrap-around world edge, the shortest way may to the target might
+be across the border, so the X value of the target would lead the
+gear to the wrong direction across the whole map. This procedure
+changes the target X in this case.
+This function must be called after the gear passed through
+the wrap-around world edge (WorldWrap returned true).
+
+No-op for other world edges.
+
+Returns true if target has been changed.
+*)
+function HomingWrap(var Gear: PGear): boolean;
+var dist_center, dist_right, dist_left: hwFloat;
+begin
+ if WorldEdge = weWrap then
+ begin
+ HomingWrap:= false;
+ // We just check the same target 3 times:
+ // 1) in current section (no change)
+ // 2) clone in the right section
+ // 3) clone in the left section
+ // The gear will go for the target with the shortest distance to the gear.
+ // For simplicity, we only check distance on the X axis.
+ dist_center:= hwAbs(Gear^.X - int2hwFloat(Gear^.Target.X));
+ dist_right:= hwAbs(Gear^.X - int2hwFloat(Gear^.Target.X + (RightX-LeftX)));
+ dist_left:= hwAbs(Gear^.X - int2hwFloat(Gear^.Target.X - (RightX-LeftX)));
+ if (dist_left < dist_right) and (dist_left < dist_center) then
+ begin
+ dec(Gear^.Target.X, RightX-LeftX);
+ HomingWrap:= true;
+ end
+ else if (dist_right < dist_left) and (dist_right < dist_center) then
+ begin
+ inc(Gear^.Target.X, RightX-LeftX);
+ HomingWrap:= true;
+ end;
+ end;
+end;
// Add an audiovisual bounce effect for gear after it bounced from bouncy material.
// Graphical effect is based on speed.
@@ -1821,7 +1827,7 @@
procedure AddBounceEffectForGear(Gear: PGear; imageScale: Single);
var boing: PVisualGear;
begin
- if Gear^.Density < _0_01 then
+ if (Gear^.Density < _0_01) or (Gear^.Radius < 2) then
exit;
boing:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot, 0, false, 1);
if boing <> nil then
--- a/hedgewars/uIO.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uIO.pas Mon Jan 14 12:35:32 2019 -0500
@@ -171,6 +171,10 @@
if s[2] = '.' then
ParseCommand('campvar ' + copy(s, 3, length(s) - 2), true);
end;
+ 'v': begin
+ if s[2] = '.' then
+ ParseCommand('missvar ' + copy(s, 3, length(s) - 2), true);
+ end;
'I': ParseCommand('pause server', true);
's': if gameType = gmtNet then
ParseChatCommand('chatmsg ', s, 2)
@@ -523,13 +527,14 @@
TargetPoint.X:= CursorPoint.X - WorldDx;
TargetPoint.Y:= cScreenHeight - CursorPoint.Y - WorldDy;
end;
- if (WorldEdge <> weBounce) then
+ if (WorldEdge <> weBounce) and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NoWrapTarget) = 0) then
TargetPoint.X:= CalcWorldWrap(TargetPoint.X, 0);
SendIPCXY('p', TargetPoint.X, TargetPoint.Y);
end
else
begin
- TargetPoint.X:= CalcWorldWrap(TargetPoint.X, 0);
+ if (Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NoWrapTarget) = 0 then
+ TargetPoint.X:= CalcWorldWrap(TargetPoint.X, 0);
TargetPoint.X:= putX;
TargetPoint.Y:= putY
end;
--- a/hedgewars/uInputHandler.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uInputHandler.pas Mon Jan 14 12:35:32 2019 -0500
@@ -38,6 +38,10 @@
procedure ProcessKey(event: TSDL_KeyboardEvent); inline;
procedure ProcessKey(code: LongInt; KeyDown: boolean);
+{$IFDEF USE_AM_NUMCOLUMN}
+function CheckDefaultSlotKeys: boolean;
+{$ENDIF}
+
procedure ResetKbd;
procedure ResetMouseWheel;
procedure FreezeEnterKey;
@@ -488,6 +492,27 @@
end;
+{$IFDEF USE_AM_NUMCOLUMN}
+function CheckDefaultSlotKeys: boolean;
+{$IFDEF USE_TOUCH_INTERFACE}
+begin
+ CheckDefaultSlotKeys:= false;
+{$ELSE}
+var i, code: LongInt;
+begin
+ for i:=1 to cMaxSlotIndex do
+ begin
+ code:= KeyNameToCode('f'+IntToStr(i));
+ if CurrentBinds.binds[CurrentBinds.indices[code]] <> 'slot '+char(i+48) then
+ begin
+ CheckDefaultSlotKeys:= false;
+ exit;
+ end;
+ end;
+ CheckDefaultSlotKeys:= true;
+{$ENDIF}
+end;
+{$ENDIF}
{$IFNDEF MOBILE}
procedure SetBinds(var binds: TBinds);
--- a/hedgewars/uLand.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uLand.pas Mon Jan 14 12:35:32 2019 -0500
@@ -285,13 +285,13 @@
procedure GenDrawnMap;
begin
- ResizeLand(4096, 2048);
+ ResizeLand((4096 * max(min(cFeatureSize,24),3)) div 12, (2048 * max(min(cFeatureSize,24),3)) div 12);
uLandPainted.Draw;
- MaxHedgehogs:= 48;
+ MaxHedgehogs:= 64;
hasGirders:= true;
- playHeight:= 2048;
- playWidth:= 4096;
+ playHeight:= LAND_HEIGHT;
+ playWidth:= LAND_WIDTH;
leftX:= ((LAND_WIDTH - playWidth) div 2);
rightX:= (playWidth + ((LAND_WIDTH - playWidth) div 2)) - 1;
topY:= LAND_HEIGHT - playHeight;
@@ -300,11 +300,11 @@
function SelectTemplate: LongInt;
var l: LongInt;
begin
- SelectTemplate:= 0;
+ SelectTemplate:= 0;
if (cReducedQuality and rqLowRes) <> 0 then
SelectTemplate:= SmallTemplates[getrandom(Succ(High(SmallTemplates)))]
else
- begin
+ begin
if cTemplateFilter = 0 then
begin
l:= getRandom(GroupedTemplatesCount);
@@ -313,22 +313,22 @@
dec(l, TemplateCounts[cTemplateFilter]);
until l < 0;
end
- else getRandom(1);
+ else getRandom(1);
- case cTemplateFilter of
- 0: OutError('Error selecting TemplateFilter. Ask unC0Rr about what you did wrong', true);
- 1: SelectTemplate:= SmallTemplates[getrandom(TemplateCounts[cTemplateFilter])];
- 2: SelectTemplate:= MediumTemplates[getrandom(TemplateCounts[cTemplateFilter])];
- 3: SelectTemplate:= LargeTemplates[getrandom(TemplateCounts[cTemplateFilter])];
- 4: SelectTemplate:= CavernTemplates[getrandom(TemplateCounts[cTemplateFilter])];
- 5: SelectTemplate:= WackyTemplates[getrandom(TemplateCounts[cTemplateFilter])];
- // For lua only!
- 6: begin
- SelectTemplate:= min(LuaTemplateNumber,High(EdgeTemplates));
- GetRandom(2) // burn 1
- end
- end
- end;
+ case cTemplateFilter of
+ 0: OutError('Error selecting TemplateFilter. Ask unC0Rr about what you did wrong', true);
+ 1: SelectTemplate:= SmallTemplates[getrandom(TemplateCounts[cTemplateFilter])];
+ 2: SelectTemplate:= MediumTemplates[getrandom(TemplateCounts[cTemplateFilter])];
+ 3: SelectTemplate:= LargeTemplates[getrandom(TemplateCounts[cTemplateFilter])];
+ 4: SelectTemplate:= CavernTemplates[getrandom(TemplateCounts[cTemplateFilter])];
+ 5: SelectTemplate:= WackyTemplates[getrandom(TemplateCounts[cTemplateFilter])];
+ // For lua only!
+ 6: begin
+ SelectTemplate:= min(LuaTemplateNumber,High(EdgeTemplates));
+ GetRandom(2) // burn 1
+ end
+ end
+ end;
WriteLnToConsole('Selected template #'+inttostr(SelectTemplate)+' using filter #'+inttostr(cTemplateFilter));
end;
@@ -886,7 +886,7 @@
mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
- mgDrawn: GenDrawnMap;
+ mgDrawn: begin cFeatureSize:= 3;GenDrawnMap; end;
mgForts: MakeFortsPreview();
else
OutError('Unknown mapgen', true);
@@ -895,8 +895,16 @@
ScriptSetMapGlobals;
// strict scaling needed here since preview assumes a rectangle
- rh:= max(LAND_HEIGHT,2048);
- rw:= max(LAND_WIDTH,4096);
+ if (cMapGen <> mgDrawn) then
+ begin
+ rh:= max(LAND_HEIGHT, 2048);
+ rw:= max(LAND_WIDTH, 4096);
+ end
+ else
+ begin
+ rh:= LAND_HEIGHT;
+ rw:= LAND_WIDTH
+ end;
ox:= 0;
if rw < rh*2 then
begin
@@ -937,7 +945,7 @@
mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
- mgDrawn: GenDrawnMap;
+ mgDrawn: begin cFeatureSize:= 3;GenDrawnMap; end;
mgForts: MakeFortsPreview;
else
OutError('Unknown mapgen', true);
@@ -945,9 +953,19 @@
ScriptSetMapGlobals;
+
// strict scaling needed here since preview assumes a rectangle
- rh:= max(LAND_HEIGHT, 2048);
- rw:= max(LAND_WIDTH, 4096);
+ if (cMapGen <> mgDrawn) then
+ begin
+ rh:= max(LAND_HEIGHT, 2048);
+ rw:= max(LAND_WIDTH, 4096);
+ end
+ else
+ begin
+ rh:= LAND_HEIGHT;
+ rw:= LAND_WIDTH
+ end;
+
ox:= 0;
if rw < rh*2 then
begin
@@ -986,9 +1004,9 @@
procedure chSendLandDigest(var s: shortstring);
var i: LongInt;
- landPixelDigest : LongInt;
+ landPixelDigest : LongInt;
begin
- landPixelDigest:= 1;
+ landPixelDigest:= 1;
for i:= 0 to LAND_HEIGHT-1 do
landPixelDigest:= Adler32Update(landPixelDigest, @Land[i,0], LAND_WIDTH*2);
s:= 'M' + IntToStr(syncedPixelDigest)+'|'+IntToStr(landPixelDigest);
--- a/hedgewars/uLandPainted.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uLandPainted.pas Mon Jan 14 12:35:32 2019 -0500
@@ -58,6 +58,7 @@
rec:= prec^;
rec.X:= SDLNet_Read16(@rec.X);
rec.Y:= SDLNet_Read16(@rec.Y);
+
if rec.X < -318 then rec.X:= -318;
if rec.X > 4096+318 then rec.X:= 4096+318;
if rec.Y < -318 then rec.Y:= -318;
@@ -81,7 +82,7 @@
var pe: PPointEntry;
prevPoint: PointRec;
radius: LongInt;
- color: Longword;
+ color, Xoffset, Yoffset: Longword;
lineNumber, linePoints: Longword;
begin
// shutup compiler
@@ -89,6 +90,8 @@
prevPoint.Y:= 0;
radius:= 0;
linePoints:= 0;
+ Xoffset:= (LAND_WIDTH-(4096*max(min(cFeatureSize,24),3) div 12)) div 2;
+ Yoffset:= (LAND_HEIGHT-(2048*max(min(cFeatureSize,24),3) div 12));
pe:= pointsListHead;
while (pe <> nil) and (pe^.point.flags and $80 = 0) do
@@ -101,6 +104,8 @@
while(pe <> nil) do
begin
+ pe^.point.X:= (LongInt(pe^.point.X) * max(min(cFeatureSize,24),3)) div 12 + Xoffset;
+ pe^.point.Y:= (LongInt(pe^.point.Y) * max(min(cFeatureSize,24),3)) div 12 + Yoffset;
if (pe^.point.flags and $80 <> 0) then
begin
if (lineNumber > 0) and (linePoints = 0) and cAdvancedMapGenMode then
@@ -113,9 +118,10 @@
else
color:= lfBasic;
radius:= (pe^.point.flags and $3F) * 5 + 3;
+ radius:= (radius * max(min(cFeatureSize,24),3)) div 12;
linePoints:= FillRoundInLand(pe^.point.X, pe^.point.Y, radius, color);
end
- else
+ else
begin
inc(linePoints, DrawThickLine(prevPoint.X, prevPoint.Y, pe^.point.X, pe^.point.Y, radius, color));
end;
--- a/hedgewars/uScript.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uScript.pas Mon Jan 14 12:35:32 2019 -0500
@@ -686,11 +686,20 @@
function lc_spawnfakehealthcrate(L: Plua_State) : LongInt; Cdecl;
var gear: PGear;
-begin
- if CheckLuaParamCount(L, 4,'SpawnFakeHealthCrate', 'x, y, explode, poison') then
+ explode, poison: boolean;
+ n: LongInt;
+begin
+ if CheckAndFetchParamCountRange(L, 2, 4, 'SpawnFakeHealthCrate', 'x, y [, explode [, poison]]', n) then
begin
+ explode:= false;
+ poison:= false;
+ if (n >= 3) and (not lua_isnil(L, 3)) then
+ explode:= lua_toboolean(L, 3);
+ if (n = 4) and (not lua_isnil(L, 4)) then
+ poison:= lua_toboolean(L, 4);
+
gear := SpawnFakeCrateAt(Trunc(lua_tonumber(L, 1)), Trunc(lua_tonumber(L, 2)),
- HealthCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
+ HealthCrate, explode, poison);
if gear <> nil then
lua_pushnumber(L, gear^.uid)
else lua_pushnil(L)
@@ -702,11 +711,20 @@
function lc_spawnfakeammocrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
-begin
- if CheckLuaParamCount(L, 4,'SpawnFakeAmmoCrate', 'x, y, explode, poison') then
+ explode, poison: boolean;
+ n: LongInt;
+begin
+ if CheckAndFetchParamCountRange(L, 2, 4, 'SpawnFakeAmmoCrate', 'x, y [, explode [, poison]]', n) then
begin
+ explode:= false;
+ poison:= false;
+ if (n >= 3) and (not lua_isnil(L, 3)) then
+ explode:= lua_toboolean(L, 3);
+ if (n = 4) and (not lua_isnil(L, 4)) then
+ poison:= lua_toboolean(L, 4);
+
gear := SpawnFakeCrateAt(Trunc(lua_tonumber(L, 1)), Trunc(lua_tonumber(L, 2)),
- AmmoCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
+ AmmoCrate, explode, poison);
if gear <> nil then
lua_pushnumber(L, gear^.uid)
else lua_pushnil(L)
@@ -718,11 +736,20 @@
function lc_spawnfakeutilitycrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
-begin
- if CheckLuaParamCount(L, 4,'SpawnFakeUtilityCrate', 'x, y, explode, poison') then
+ explode, poison: boolean;
+ n: LongInt;
+begin
+ if CheckAndFetchParamCountRange(L, 2, 4, 'SpawnFakeUtilityCrate', 'x, y [, explode [, poison]]', n) then
begin
+ explode:= false;
+ poison:= false;
+ if (n >= 3) and (not lua_isnil(L, 3)) then
+ explode:= lua_toboolean(L, 3);
+ if (n = 4) and (not lua_isnil(L, 4)) then
+ poison:= lua_toboolean(L, 4);
+
gear := SpawnFakeCrateAt(Trunc(lua_tonumber(L, 1)), Trunc(lua_tonumber(L, 2)),
- UtilityCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
+ UtilityCrate, explode, poison);
if gear <> nil then
lua_pushnumber(L, gear^.uid)
else lua_pushnil(L)
@@ -2263,7 +2290,9 @@
else
begin
OutError('Lua error: AddTeam: Invalid ''color'' argument, must be between '+IntToStr(-cClanColors)+' and 0xffffffff!', true);
- lc_addteam:= 0;
+ lua_pushnil(L);
+ lua_pushnil(L);
+ lc_addteam:= 2;
exit;
end;
ParseCommand('addteam x ' + colorStr + ' ' + lua_tostring(L, 1), true, true);
@@ -2271,13 +2300,70 @@
ParseCommand('fort ' + lua_tostring(L, 4), true, true);
ParseCommand('voicepack ' + lua_tostring(L, 5), true, true);
if (np = 6) then ParseCommand('flag ' + lua_tostring(L, 6), true, true);
- CurrentTeam^.Binds:= DefaultBinds
- // fails on x64
- //lua_pushnumber(L, LongInt(CurrentTeam));
+ // If there's a mission team, copy it's control scheme.
+ // So in singleplayer missions, all teams use the player team's controls.
+ if MissionTeam <> nil then
+ CurrentTeam^.Binds:= MissionTeam^.Binds
+ // Default keys otherwise
+ else
+ CurrentTeam^.Binds:= DefaultBinds;
+ // push team name and index
+ lua_pushstring(L, str2pchar(CurrentTeam^.TeamName));
+ lua_pushnumber(L, TeamsCount - 1);
+ end
+ else
+ begin
+ lua_pushnil(L);
+ lua_pushnil(L);
end;
- //else
- //lua_pushnil(L)
- lc_addteam:= 0;//1;
+ lc_addteam:= 2;
+end;
+
+function lc_addmissionteam(L : Plua_State) : LongInt; Cdecl;
+var colorArg: Int64;
+ colorStr: shortstring;
+begin
+ if CheckLuaParamCount(L, 1, 'AddMissionTeam', 'color') then
+ begin
+ if(MissionTeam = nil) then
+ begin
+ OutError('Lua error: AddMissionTeam: Could not add team. Note: This function only works in singleplayer missions!', true);
+ lc_addmissionteam:= 0;
+ exit;
+ end;
+
+ colorArg:= Trunc(lua_tonumber(L, 1));
+ if (colorArg < 0) and (abs(colorArg) <= cClanColors) then
+ // Pick clan color from settings (recommended)
+ colorStr:= IntToStr(ClanColorArray[Pred(abs(colorArg))])
+ else if (colorArg >= 0) and (colorArg <= $ffffffff) then
+ // Specify color directly
+ colorStr:= IntToStr(colorArg)
+ else
+ begin
+ OutError('Lua error: AddMissionTeam: Invalid ''color'' argument, must be between '+IntToStr(-cClanColors)+' and 0xffffffff!', true);
+ lua_pushnil(L);
+ lua_pushnil(L);
+ lc_addmissionteam:= 2;
+ exit;
+ end;
+
+ ParseCommand('addteam x ' + colorStr + ' ' + MissionTeam^.TeamName, true, true);
+ ParseCommand('grave ' + MissionTeam^.GraveName, true, true);
+ ParseCommand('fort ' + MissionTeam^.FortName, true, true);
+ ParseCommand('voicepack ' + MissionTeam^.Voicepack^.name, true, true);
+ ParseCommand('flag ' + MissionTeam^.Flag, true, true);
+ CurrentTeam^.Binds:= MissionTeam^.Binds;
+ // push real team name and team index
+ lua_pushstring(L, str2pchar(CurrentTeam^.TeamName));
+ lua_pushnumber(L, TeamsCount - 1);
+ end
+ else
+ begin
+ lua_pushnil(L);
+ lua_pushnil(L);
+ end;
+ lc_addmissionteam:= 2;
end;
function lc_setteamlabel(L : Plua_State) : LongInt; Cdecl;
@@ -2472,13 +2558,13 @@
function lc_addhog(L : Plua_State) : LongInt; Cdecl;
-var temp: ShortString;
+var hatName: ShortString;
begin
if CheckLuaParamCount(L, 4, 'AddHog', 'hogname, botlevel, health, hat') then
begin
- temp:= lua_tostring(L, 4);
+ hatName:= lua_tostring(L, 4);
ParseCommand('addhh ' + lua_tostring(L, 2) + ' ' + lua_tostring(L, 3) + ' ' + lua_tostring(L, 1), true, true);
- ParseCommand('hat ' + temp, true, true);
+ ParseCommand('hat ' + hatName, true, true);
lua_pushnumber(L, CurrentHedgehog^.Gear^.uid);
end
else
@@ -2486,6 +2572,31 @@
lc_addhog:= 1;
end;
+function lc_addmissionhog(L : Plua_State) : LongInt; Cdecl;
+var hatName: ShortString;
+begin
+ if CheckLuaParamCount(L, 1, 'AddMissionHog', 'health') then
+ begin
+ if(MissionTeam = nil) then
+ begin
+ OutError('Lua error: AddMissionHog: Could not add hog. Mission team is not set!', true);
+ lua_pushnil(L);
+ lc_addmissionhog:= 1;
+ exit;
+ end;
+ with MissionTeam^.Hedgehogs[CurrentTeam^.HedgehogsNumber] do
+ begin
+ hatName:= Hat;
+ ParseCommand('addhh ' + IntToStr(BotLevel) + ' ' + lua_tostring(L, 1) + ' ' + Name, true, true);
+ ParseCommand('hat ' + hatName, true, true);
+ end;
+ lua_pushnumber(L, CurrentHedgehog^.Gear^.uid);
+ end
+ else
+ lua_pushnil(L);
+ lc_addmissionhog:= 1;
+end;
+
function lc_hogturnleft(L : Plua_State) : LongInt; Cdecl;
var gear: PGear;
begin
@@ -2980,6 +3091,21 @@
lc_getcampaignvar := 1;
end;
+function lc_savemissionvar(L : Plua_State): LongInt; Cdecl;
+begin
+ if CheckLuaParamCount(L, 2, 'SaveMissionVar', 'varname, value') then
+ SendIPC('v!' + lua_tostring(L, 1) + ' ' + lua_tostring(L, 2) + #0);
+ lc_savemissionvar := 0;
+end;
+
+function lc_getmissionvar(L : Plua_State): LongInt; Cdecl;
+begin
+ if CheckLuaParamCount(L, 1, 'GetMissionVar', 'varname') then
+ SendIPCAndWaitReply('v?' + lua_tostring(L, 1) + #0);
+ lua_pushstring(L, str2pchar(MissionVariable));
+ lc_getmissionvar := 1;
+end;
+
function lc_hidehog(L: Plua_State): LongInt; Cdecl;
var gear: PGear;
begin
@@ -3276,6 +3402,22 @@
lc_setreadytimeleft:= 0;
end;
+function lc_setturntimepaused(L : Plua_State) : LongInt; Cdecl;
+begin
+ if CheckLuaParamCount(L, 1, 'SetTurnTimePaused', 'isPaused') then
+ LuaClockPaused:= lua_toboolean(L, 1);
+ lc_setturntimepaused:= 0;
+end;
+
+function lc_getturntimepaused(L : Plua_State) : LongInt; Cdecl;
+begin
+ if CheckLuaParamCount(L, 0, 'GetTurnTimePaused', '') then
+ lua_pushboolean(L, LuaClockPaused)
+ else
+ lua_pushnil(L);
+ lc_getturntimepaused:= 1;
+end;
+
function lc_startghostpoints(L : Plua_State) : LongInt; Cdecl;
begin
if CheckLuaParamCount(L, 1, 'StartGhostPoints', 'count') then
@@ -3478,6 +3620,7 @@
ScriptSetInteger('MaxCaseDrops', cMaxCaseDrops);
ScriptSetInteger('HealthCaseProb', cHealthCaseProb);
ScriptSetInteger('HealthCaseAmount', cHealthCaseAmount);
+ScriptSetInteger('InitHealth', cInitHealth);
ScriptSetInteger('DamagePercent', cDamagePercent);
ScriptSetInteger('RopePercent', cRopePercent);
ScriptSetInteger('MinesNum', cLandMines);
@@ -3511,6 +3654,7 @@
cMaxCaseDrops := ScriptGetInteger('MaxCaseDrops');
cHealthCaseProb := ScriptGetInteger('HealthCaseProb');
cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
+cInitHealth := ScriptGetInteger('InitHealth');
cDamagePercent := ScriptGetInteger('DamagePercent');
cRopePercent := ScriptGetInteger('RopePercent');
cLandMines := ScriptGetInteger('MinesNum');
@@ -4165,6 +4309,8 @@
lua_register(luaState, _P'IsHogHidden', @lc_ishoghidden);
lua_register(luaState, _P'SaveCampaignVar', @lc_savecampaignvar);
lua_register(luaState, _P'GetCampaignVar', @lc_getcampaignvar);
+lua_register(luaState, _P'SaveMissionVar', @lc_savemissionvar);
+lua_register(luaState, _P'GetMissionVar', @lc_getmissionvar);
lua_register(luaState, _P'band', @lc_band);
lua_register(luaState, _P'bor', @lc_bor);
lua_register(luaState, _P'bnot', @lc_bnot);
@@ -4229,8 +4375,10 @@
lua_register(luaState, _P'GetTeamIndex', @lc_getteamindex);
lua_register(luaState, _P'GetTeamClan', @lc_getteamclan);
lua_register(luaState, _P'AddTeam', @lc_addteam);
+lua_register(luaState, _P'AddMissionTeam', @lc_addmissionteam);
lua_register(luaState, _P'SetTeamLabel', @lc_setteamlabel);
lua_register(luaState, _P'AddHog', @lc_addhog);
+lua_register(luaState, _P'AddMissionHog', @lc_addmissionhog);
lua_register(luaState, _P'AddAmmo', @lc_addammo);
lua_register(luaState, _P'GetAmmoCount', @lc_getammocount);
lua_register(luaState, _P'HealHog', @lc_healhog);
@@ -4310,6 +4458,8 @@
lua_register(luaState, _P'Explode', @lc_explode);
lua_register(luaState, _P'SetTurnTimeLeft', @lc_setturntimeleft);
lua_register(luaState, _P'SetReadyTimeLeft', @lc_setreadytimeleft);
+lua_register(luaState, _P'SetTurnTimePaused', @lc_setturntimepaused);
+lua_register(luaState, _P'GetTurnTimePaused', @lc_getturntimepaused);
// drawn map functions
lua_register(luaState, _P'AddPoint', @lc_addPoint);
lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
--- a/hedgewars/uSound.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uSound.pas Mon Jan 14 12:35:32 2019 -0500
@@ -490,11 +490,11 @@
GetFallbackV := sndUhOh
else if (snd in [sndDrat, sndBugger]) then
GetFallbackV := sndStupid
- else if (snd in [sndGonnaGetYou, sndCutItOut, sndLeaveMeAlone]) then
+ else if (snd in [sndGonnaGetYou, sndIllGetYou, sndJustYouWait, sndCutItOut, sndLeaveMeAlone]) then
GetFallbackV := sndRegret
else if (snd in [sndOhDear, sndSoLong]) then
GetFallbackV := sndByeBye
- else if (snd = sndWhatThe) then
+ else if (snd in [sndWhatThe, sndUhOh]) then
GetFallbackV := sndNooo
else if (snd = sndRunAway) then
GetFallbackV := sndOops
@@ -502,14 +502,19 @@
GetFallbackV := sndReinforce
else if (snd in [sndAmazing, sndBrilliant, sndExcellent]) then
GetFallbackV := sndEnemyDown
- // Hmm is for enemy turn start
- else if snd = sndHmm then
- // these are not ideal fallbacks, but those were the voices which were used in older versions
- // for enemy turn start
- if random(2) = 0 then
- GetFallbackV := sndIllGetYou
- else
- GetFallbackV := sndJustYouWait
+ else if (snd = sndPoisonCough) then
+ GetFallbackV := sndPoisonMoan
+ else if (snd = sndPoisonMoan) then
+ GetFallbackV := sndPoisonCough
+ else if (snd = sndFlawless) then
+ GetFallbackV := sndVictory
+ else if (snd = sndSameTeam) then
+ GetFallbackV := sndTraitor
+ else if (snd = sndMelon) then
+ GetFallbackV := sndCover
+ // sndHmm is used for enemy turn start, so sndHello is an "okay" replacement
+ else if (snd = sndHmm) then
+ GetFallbackV := sndHello
else
GetFallbackV := sndNone;
end;
--- a/hedgewars/uStats.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uStats.pas Mon Jan 14 12:35:32 2019 -0500
@@ -67,6 +67,7 @@
HitTargets : LongWord = 0; // Target (gtTarget) hits per turn
AmmoUsedCount : Longword = 0;
AmmoDamagingUsed : boolean = false;
+ FirstBlood : boolean = false;
LeaveMeAlone : boolean = false;
SkippedTurns: LongWord = 0;
isTurnSkipped: boolean = false;
@@ -254,8 +255,11 @@
killsCheck:= 0;
// First blood (first damage, poison or kill)
- if ((DamageTotal > 0) or (KillsTotal > 0) or (PoisonTotal > 0)) and ((CurrentHedgehog^.stats.DamageGiven = DamageTotal) and (CurrentHedgehog^.stats.StepKills = KillsTotal) and (PoisonTotal = PoisonTurn + PoisonClan)) then
- AddVoice(sndFirstBlood, CurrentTeam^.voicepack)
+ if (not FirstBlood) and (ClansCount > 1) and ((DamageTotal > 0) or (KillsTotal > 0) or (PoisonTotal > 0)) and ((CurrentHedgehog^.stats.DamageGiven = DamageTotal) and (CurrentHedgehog^.stats.StepKills = KillsTotal) and (PoisonTotal = PoisonTurn + PoisonClan)) then
+ begin
+ FirstBlood:= true;
+ AddVoice(sndFirstBlood, CurrentTeam^.voicepack);
+ end
// Hog hurts, poisons or kills itself (except sacrifice)
else if (CurrentHedgehog^.stats.Sacrificed = false) and ((CurrentHedgehog^.stats.StepDamageRecv > 0) or (CurrentHedgehog^.stats.StepPoisoned) or (CurrentHedgehog^.stats.StepDied)) then
@@ -549,13 +553,17 @@
// now to console
if winnersClan <> nil then
begin
+ ScriptCall('onGameResult', winnersClan^.ClanIndex);
WriteLnToConsole('WINNERS');
WriteLnToConsole(inttostr(winnersClan^.TeamsNumber));
for t:= 0 to winnersClan^.TeamsNumber - 1 do
WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
end
else
+ begin
+ ScriptCall('onGameResult', -1);
WriteLnToConsole('DRAW');
+ end;
ScriptCall('onAchievementsDeclaration');
end;
@@ -598,6 +606,7 @@
HitTargets := 0;
AmmoUsedCount := 0;
AmmoDamagingUsed := false;
+ FirstBlood:= false;
LeaveMeAlone := false;
SkippedTurns:= 0;
isTurnSkipped:= false;
--- a/hedgewars/uTeams.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uTeams.pas Mon Jan 14 12:35:32 2019 -0500
@@ -29,6 +29,7 @@
procedure freeModule;
function AddTeam(TeamColor: Longword): PTeam;
+function SetMissionTeam(): PTeam;
procedure SwitchHedgehog;
procedure AfterSwitchHedgehog;
procedure InitTeams;
@@ -476,6 +477,20 @@
end;
end;
+function SetMissionTeam(): PTeam;
+var team: PTeam;
+begin
+New(team);
+if checkFails(team <> nil, 'AddTeam: team = nil', true) then exit(nil);
+FillChar(team^, sizeof(TTeam), 0);
+team^.HedgehogsNumber:= 0;
+team^.Binds:= DefaultBinds;
+
+CurrentTeam:= team;
+MissionTeam:= team;
+SetMissionTeam:= team;
+end;
+
function AddTeam(TeamColor: Longword): PTeam;
var team: PTeam;
c: LongInt;
@@ -560,6 +575,7 @@
// Some initial King buffs
if (GameFlags and gfKing) <> 0 then
begin
+ hasKing:= true;
Hedgehogs[0].King:= true;
Hedgehogs[0].Hat:= 'crown';
Hedgehogs[0].Effects[hePoisoned] := 0;
@@ -678,6 +694,30 @@
end
end;
+procedure chAddMissionHH(var id: shortstring);
+var s: shortstring;
+ Health: LongInt;
+begin
+s:= '';
+if (not isDeveloperMode) then
+ exit;
+if checkFails((CurrentTeam <> nil), 'Can''t add hedgehogs yet, add a team first!', true) then exit;
+with CurrentTeam^ do
+ begin
+ if checkFails(HedgehogsNumber<=cMaxHHIndex, 'Can''t add hedgehog to "' + TeamName + '"! (already ' + intToStr(HedgehogsNumber) + ' hogs)', true) then exit;
+ SplitBySpace(id, s);
+ CurrentHedgehog:= @Hedgehogs[HedgehogsNumber];
+ CurrentHedgehog^.BotLevel:= StrToInt(id);
+ CurrentHedgehog^.Team:= CurrentTeam;
+ SplitBySpace(s, id);
+ Health:= StrToInt(s);
+ if checkFails((Health > 0) and (Health <= cMaxHogHealth), 'Invalid hedgehog health (must be between 1 and '+IntToStr(cMaxHogHealth)+')', true) then exit;
+ CurrentHedgehog^.Name:= id;
+ CurrentHedgehog^.InitialHealth:= Health;
+ inc(HedgehogsNumber)
+ end
+end;
+
procedure chAddHH(var id: shortstring);
var s: shortstring;
Gear: PGear;
@@ -728,6 +768,63 @@
loadBinds('bind', s);
end;
+// Make sure the team name of chTeam is unique.
+// If it isn't, the name is changed to be unique.
+procedure makeTeamNameUnique(chTeam: PTeam);
+var tail: shortstring;
+ t, numLen, numTail: LongInt;
+// valOK: Word; -- see pas2c-related FIXME below
+ nameDupeCheck: boolean;
+ chChar: char;
+begin
+ nameDupeCheck:= false;
+ while(nameDupeCheck = false) do
+ begin
+ nameDupeCheck:= true;
+ for t:=0 to TeamsCount - 1 do
+ begin
+ // Name collision?
+ if (chTeam <> teamsArray[t]) and (TeamsArray[t]^.TeamName = chTeam^.TeamName) then
+ begin
+ // Change the name by appending a sequence number, starting from 2
+ numLen:= 0;
+ chChar:= chTeam^.TeamName[Length(chTeam^.TeamName) - numLen];
+ // Parse number at end of team name (if any)
+ while (chChar >= '0') and (chChar <= '9') and (numLen < Length(chTeam^.TeamName)) do
+ begin
+ inc(numLen);
+ chChar:= chTeam^.TeamName[Length(chTeam^.TeamName) - numLen];
+ end;
+
+ if numLen > 0 then
+ // Number found: Increment it by 1
+ begin
+ tail:= Copy(chTeam^.TeamName, Length(chTeam^.TeamName) - numLen + 1, numLen);
+(* FIXME - pas2c missing 3rd param for val
+ valOK:= 1;
+ Val(tail, numTail, valOK);
+ Inc(numTail);
+ if valOK = 0 then
+ tail:= IntToStr(numTail)
+ else
+ // This should not happen
+ tail:= shortstring('X');
+*)
+ Val(tail, numTail);
+ Inc(numTail);
+ tail:= IntToStr(numTail);
+ chTeam^.TeamName:= Copy(chTeam^.TeamName, 0, Length(chTeam^.TeamName) - numLen) + tail;
+ end
+ else
+ // No number at team end: Just append a '2'
+ chTeam^.TeamName:= chTeam^.TeamName + ' 2';
+ nameDupeCheck:= false;
+ break;
+ end;
+ end;
+ end;
+end;
+
procedure chAddTeam(var s: shortstring);
var Color: Longword;
ts, cs: shortstring;
@@ -743,10 +840,12 @@
// color is always little endian so the mask must be constant also in big endian archs
Color:= Color or $FF000000;
AddTeam(Color);
-
+
if CurrentTeam <> nil then
begin
CurrentTeam^.TeamName:= ts;
+ makeTeamNameUnique(CurrentTeam);
+
CurrentTeam^.PlayerHash:= s;
loadTeamBinds(ts);
@@ -758,6 +857,28 @@
end
end;
+procedure chSetMissionTeam(var s: shortstring);
+var ts, cs: shortstring;
+begin
+cs:= '';
+ts:= '';
+if isDeveloperMode then
+ begin
+ SplitBySpace(s, cs);
+ SplitBySpace(cs, ts);
+
+ SetMissionTeam();
+
+ if CurrentTeam <> nil then
+ begin
+ CurrentTeam^.TeamName:= ts;
+ CurrentTeam^.PlayerHash:= s;
+ loadTeamBinds(ts);
+ CurrentTeam^.voicepack:= AskForVoicepack('Default')
+ end
+ end
+end;
+
procedure chSetHHCoords(var x: shortstring);
var y: shortstring;
t: Longint;
@@ -803,7 +924,8 @@
begin
if (not hasGone) and isGoneFlagPendingToBeSet then
begin
- AddChatString(#7 + Format('* '+shortstring(trmsg[sidTeamGone]), TeamName));
+ if (not TeamsGameOver) then
+ AddChatString(#7 + Format('* '+shortstring(trmsg[sidTeamGone]), TeamName));
if not CurrentTeam^.ExtDriven then SendIPC(_S'f' + s);
hasGone:= true;
skippedTurns:= 0;
@@ -940,7 +1062,9 @@
procedure initModule;
begin
RegisterVariable('addhh', @chAddHH, false);
+RegisterVariable('addmisshh', @chAddMissionHH, false);
RegisterVariable('addteam', @chAddTeam, false);
+RegisterVariable('setmissteam', @chSetMissionTeam, false);
RegisterVariable('hhcoords', @chSetHHCoords, false);
RegisterVariable('bind', @chBind, true );
RegisterVariable('teamgone', @chTeamGone, true );
--- a/hedgewars/uTouch.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uTouch.pas Mon Jan 14 12:35:32 2019 -0500
@@ -22,7 +22,7 @@
interface
-uses SysUtils, uUtils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, GLUnit, uTypes, uCaptions, uAmmos, uWorld;
+uses SysUtils, uUtils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, GLUnit, uTypes, uCaptions, uWorld, uGearsHedgehog;
procedure initModule;
@@ -89,7 +89,7 @@
procedure onTouchDown(x, y: Single; pointerId: TSDL_FingerId);
var
finger: PTouch_Data;
- xr, yr: LongWord;
+ xr, yr, tmp: LongWord;
begin
xr:= round(x * cScreenWidth);
yr:= round(y * cScreenHeight);
@@ -159,10 +159,35 @@
if(CurrentHedgehog <> nil) then
begin
if Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Timerable <> 0 then
- ParseTeamCommand('/timer ' + inttostr((GetCurAmmoEntry(CurrentHedgeHog^)^.Timer div 1000) mod 5 + 1));
+ begin
+ tmp:= HHGetTimerMsg(CurrentHedgehog^.Gear);
+ if tmp <> MSGPARAM_INVALID then
+ ParseTeamCommand('/timer ' + inttostr(tmp mod 5 + 1));
+ end;
end;
exit;
end;
+
+if isOnWidget(utilityWidget2, finger^) then
+ begin
+ finger^.pressedWidget:= @utilityWidget2;
+ moveCursor:= false;
+ if(CurrentHedgehog <> nil) then
+ begin
+ if Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_SetBounce <> 0 then
+ begin
+ tmp := HHGetBouncinessMsg(CurrentHedgehog^.Gear);
+ if tmp <> MSGPARAM_INVALID then
+ begin
+ ParseTeamCommand('+precise');
+ ParseTeamCommand('timer ' + inttostr(tmp mod 5 + 1));
+ bounceButtonPressed:= true;
+ end;
+ end;
+ end;
+ exit;
+ end;
+
dec(buttonsDown);//no buttonsDown, undo the inc() above
if buttonsDown = 0 then
begin
@@ -496,6 +521,12 @@
aimingDown:= false;
end;
end;
+
+if bounceButtonPressed then
+ begin
+ ParseTeamCommand('-precise');
+ bounceButtonPressed:= false;
+ end;
end;
function findFinger(id: TSDL_FingerId): PTouch_Data;
@@ -627,6 +658,7 @@
begin
buttonsDown:= 0;
pointerCount:= 0;
+ bounceButtonPressed:= false;
setLength(fingers, 4);
for index := 0 to (Length(fingers)-1) do
--- a/hedgewars/uTypes.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uTypes.pas Mon Jan 14 12:35:32 2019 -0500
@@ -61,7 +61,7 @@
{$IFDEF USE_TOUCH_INTERFACE}
sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight,
sprJumpWidget, sprAMWidget, sprPauseButton, sprTimerButton, sprTargetButton,
- sprSwitchButton,
+ sprSwitchButton, sprBounceButton,
{$ENDIF}
sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun,
sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer,
@@ -168,6 +168,8 @@
amPiano, amGasBomb, amSineGun, amFlamethrower, amSMine, amHammer, // 48
amResurrector, amDrillStrike, amSnowball, amTardis, amLandGun, // 53
amIceGun, amKnife, amRubber, amAirMine, amCreeper, amMinigun); // 59
+ // NOTE: If we ever reach 126 ammo types, make sure to skip ammo type number 126 because it's
+ // reserved as synonym for amNothing. See also chSetWeapon.
// Different kind of crates that e.g. hedgehogs can pick up
TCrateType = (HealthCrate, AmmoCrate, UtilityCrate);
@@ -444,6 +446,7 @@
voicepack: PVoicepack;
PlayerHash: shortstring; // md5 hash of player name. For temporary enabling of hats as thank you. Hashed for privacy of players
stats: TTeamStats;
+ hasKing: boolean; // true if team has a living king
hasGone: boolean;
skippedTurns: Longword;
isGoneFlagPendingToBeSet, isGoneFlagPendingToBeUnset: boolean;
@@ -511,7 +514,8 @@
sidCmdHeaderTaunts, sidCmdSpeech, sidCmdThink, sidCmdYell,
sidCmdSpeechNumberHint, sidCmdHsa, sidCmdHta, sidCmdHya,
sidCmdHurrah, sidCmdIlovelotsoflemonade, sidCmdJuggle,
- sidCmdRollup, sidCmdShrug, sidCmdWave, sidCmdUnknown);
+ sidCmdRollup, sidCmdShrug, sidCmdWave, sidCmdUnknown,
+ sidCmdHelpRoom, sidCmdHelpRoomFail);
// Events that are important for the course of the game or at least interesting for other reasons
TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
--- a/hedgewars/uVariables.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uVariables.pas Mon Jan 14 12:35:32 2019 -0500
@@ -88,6 +88,7 @@
CheckSum : LongWord;
CampaignVariable: shortstring;
+ MissionVariable : shortstring;
GameTicks : LongWord;
OuchTauntTimer : LongWord; // Timer which blocks sndOuch from being played too often and fast
GameState : TGameState;
@@ -104,6 +105,9 @@
IsGetAwayTime : boolean;
GameOver : boolean;
cSuddenDTurns : LongInt;
+ LastSuddenDWarn : LongInt; // last round in which the last SD warning appeared. -2 = no warning so far
+ cInitHealth : LongInt; // initial hedgehog health (from game scheme. note the real hog health is sent directly
+ // from frontend, this is only used to inform Lua scripts)
cDamagePercent : LongInt;
cMineDudPercent : LongWord;
cTemplateFilter : LongInt;
@@ -182,6 +186,7 @@
CrosshairX : LongInt;
CrosshairY : LongInt;
+ CrosshairGear : PGear;
CursorMovementX : LongInt;
CursorMovementY : LongInt;
cWaveHeight : LongInt;
@@ -261,6 +266,9 @@
LuaEndTurnRequested: boolean;
LuaNoEndTurnTaunts: boolean;
+ // whether Lua requested to pause the clock
+ LuaClockPaused: boolean;
+
MaskedSounds : array[TSound] of boolean;
LastVoice : TVoice;
@@ -276,10 +284,12 @@
//Buttons
{$IFDEF USE_TOUCH_INTERFACE}
buttonScale: GLFloat;
+ bounceButtonPressed: boolean;
arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget;
firebutton, jumpWidget, AMWidget : TOnScreenWidget;
pauseButton, utilityWidget : TOnScreenWidget;
+ utilityWidget2 : TOnScreenWidget;
{$ENDIF}
@@ -480,6 +490,8 @@
Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
(FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
+ (FileName: 'bouncebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBounceButton
{$ENDIF}
(FileName: 'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
@@ -946,6 +958,7 @@
Ammo: (Propz: ammoprop_Power or
ammoprop_NeedTarget or
ammoprop_NoTargetAfter or
+ ammoprop_NoWrapTarget or
ammoprop_DontHold or
ammoprop_NeedUpDown;
Count: 2;
@@ -1277,7 +1290,7 @@
Timer: 0;
Pos: 0;
AmmoType: amAirAttack;
- AttackVoice: sndIncoming;
+ AttackVoice: sndNone; // handled in doStepAirAttack
Bounciness: defaultBounciness);
Slot: 5;
TimeAfterTurn: 0;
@@ -1305,7 +1318,7 @@
Timer: 0;
Pos: 0;
AmmoType: amMineStrike;
- AttackVoice: sndIncoming;
+ AttackVoice: sndNone; // handled in doStepAirAttack
Bounciness: defaultBounciness);
Slot: 5;
TimeAfterTurn: 0;
@@ -1602,7 +1615,7 @@
Timer: 0;
Pos: 0;
AmmoType: amNapalm;
- AttackVoice: sndIncoming;
+ AttackVoice: sndNone; // handled in doStepAirAttack
Bounciness: defaultBounciness);
Slot: 5;
TimeAfterTurn: 0;
@@ -2014,7 +2027,7 @@
NumberInCase: 1;
Ammo: (Propz: ammoprop_NoCrosshair or
ammoprop_NeedTarget or
- ammoprop_NoTargetAfter or
+ // NoTargetAfter is handled manually in doStepPiano
ammoprop_AttackingPut or
ammoprop_DontHold or
ammoprop_NotBorder or
@@ -2024,7 +2037,7 @@
Timer: 0;
Pos: 0;
AmmoType: amPiano;
- AttackVoice: sndIncoming;
+ AttackVoice: sndNone; // handled in doStepPiano
Bounciness: defaultBounciness);
Slot: 5;
TimeAfterTurn: 0;
@@ -2209,7 +2222,7 @@
Timer: 5000;
Pos: 0;
AmmoType: amDrillStrike;
- AttackVoice: sndIncoming;
+ AttackVoice: sndNone; // handled in doStepAirAttack
Bounciness: defaultBounciness);
Slot: 5;
TimeAfterTurn: 0;
@@ -2483,6 +2496,7 @@
CurrentTeam: PTeam;
PreviousTeam: PTeam;
+ MissionTeam: PTeam;
CurrentHedgehog: PHedgehog;
TeamsArray: array[0..Pred(cMaxTeams)] of PTeam;
TeamsCount: Longword; // number of teams on game start
@@ -2798,12 +2812,14 @@
TurnClockActive := true;
TagTurnTimeLeft := 0;
cSuddenDTurns := 15;
+ LastSuddenDWarn := -2;
+ cInitHealth := 100;
cDamagePercent := 100;
cRopePercent := 100;
cGetAwayTime := 100;
cMineDudPercent := 0;
cTemplateFilter := 0;
- cFeatureSize := 50;
+ cFeatureSize := 12;
cMapGen := mgRandom;
cHedgehogTurnTime := 45000;
cMinesTime := 3000;
@@ -2935,6 +2951,7 @@
GearsList:= nil;
CurrentTeam:= nil;
PreviousTeam:= nil;
+ MissionTeam:= nil;
CurrentHedgehog:= nil;
FollowGear:= nil;
lastVisualGearByUID:= nil;
--- a/hedgewars/uVideoRec.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uVideoRec.pas Mon Jan 14 12:35:32 2019 -0500
@@ -36,7 +36,7 @@
var flagPrerecording: boolean = false;
function BeginVideoRecording: Boolean;
-function LoadNextCameraPosition(out newRealTicks, newGameTicks: LongInt): Boolean;
+function LoadNextCameraPosition(var newRealTicks, newGameTicks: LongInt): Boolean;
procedure EncodeFrame;
procedure StopVideoRecording;
@@ -190,7 +190,7 @@
inc(numFrames);
end;
-function LoadNextCameraPosition(out newRealTicks, newGameTicks: LongInt): Boolean;
+function LoadNextCameraPosition(var newRealTicks, newGameTicks: LongInt): Boolean;
var frame: TFrame = (realTicks: 0; gameTicks: 0; CamX: 0; CamY: 0; zoom: 0);
begin
// we need to skip or duplicate frames to match target framerate
--- a/hedgewars/uVisualGears.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uVisualGears.pas Mon Jan 14 12:35:32 2019 -0500
@@ -74,7 +74,7 @@
for i:= 0 to 6 do
begin
- t:= VisualGearLayers[i];
+ t:= VisualGearLayersStart[i];
while t <> nil do
begin
Gear:= t;
@@ -93,7 +93,7 @@
for i:= 2 to 6 do
if i <> 3 then
begin
- t:= VisualGearLayers[i];
+ t:= VisualGearLayersStart[i];
while t <> nil do
begin
Gear:= t;
@@ -154,7 +154,7 @@
case Layer of
// this layer is very distant in the background when stereo
0: begin
- Gear:= VisualGearLayers[0];
+ Gear:= VisualGearLayersStart[0];
while Gear <> nil do
begin
if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
@@ -189,10 +189,9 @@
end;
// this layer is on the land level (which is close but behind the screen plane) when stereo
1: begin
- Gear:= VisualGearLayers[1];
+ Gear:= VisualGearLayersStart[1];
while Gear <> nil do
begin
- //tinted:= false;
if Gear^.Tint <> $FFFFFFFF then
Tint(Gear^.Tint);
case Gear^.Kind of
@@ -227,14 +226,13 @@
if Gear^.Angle <> 0 then
DrawTextureRotatedF(spriteData^.Texture, Gear^.scale, 0, 0, round(Gear^.X + WorldDx + (((spriteData^.Height+8)*Gear^.Scale)/2) * (Gear^.Angle / abs(Gear^.Angle))), round(Gear^.Y + WorldDy), 19 - (Gear^.FrameTicks div Gear^.Timer div 37), 1, spriteData^.Width, spriteData^.Height, Gear^.Angle)
else
- //DrawSprite(sprite, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37))
DrawTextureF(spriteData^.Texture, Gear^.scale, round(Gear^.X + WorldDx), round(Gear^.Y + WorldDy - ((spriteData^.Height+8)*Gear^.Scale)/2), 19 - (Gear^.FrameTicks div Gear^.Timer div 37), 1, spriteData^.Width, spriteData^.Height);
end;
vgtDroplet: begin
sprite:= GetSprite(sprDroplet, sprSDDroplet);
DrawSprite(sprite, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);
end;
- vgtBubble: DrawSprite(sprBubbles, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8);
+ vgtBubble: DrawSprite(sprBubbles, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);
vgtStraightShot: begin
if Gear^.dX < 0 then
i:= -1
@@ -243,7 +241,6 @@
DrawTextureRotatedF(SpritesData[TSprite(Gear^.State)].Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, i, SpritesData[TSprite(Gear^.State)].Width, SpritesData[TSprite(Gear^.State)].Height, Gear^.Angle);
end;
end;
- //if (Gear^.Tint <> $FFFFFFFF) or tinted then untint;
if (Gear^.Tint <> $FFFFFFFF) then
untint;
Gear:= Gear^.NextGear
@@ -251,21 +248,13 @@
end;
// this layer is on the screen plane (depth = 0) when stereo
3: begin
- Gear:= VisualGearLayers[3];
+ Gear:= VisualGearLayersStart[3];
while Gear <> nil do
begin
tinted:= false;
if Gear^.Tint <> $FFFFFFFF then
Tint(Gear^.Tint);
case Gear^.Kind of
-(*
- vgtFlake: begin
- sprite:= GetSprite(sprFlake, sprSDFlake);
- if speedlessFlakes then
- DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
- else
- DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
- end;*)
vgtSpeechBubble: if (Gear^.Angle <> 0) then
// ^ Before this gear renders, Angle must be set to mark it ready (e.g. coordinates properly initialized)
if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Team <> CurrentTeam)) or (Gear^.State = 1)) then
@@ -318,7 +307,7 @@
end;
// this layer is outside the screen when stereo
2: begin
- Gear:= VisualGearLayers[2];
+ Gear:= VisualGearLayersStart[2];
while Gear <> nil do
begin
tinted:= false;
@@ -393,7 +382,7 @@
end;
// this layer is half-way between the screen plane (depth = 0) when in stereo, and the land
4: begin
- Gear:= VisualGearLayers[4];
+ Gear:= VisualGearLayersStart[4];
while Gear <> nil do
begin
if Gear^.Tint <> $FFFFFFFF then
@@ -419,7 +408,7 @@
end;
// this layer is on the screen plane (depth = 0) when stereo, but just behind the land
5: begin
- Gear:= VisualGearLayers[5];
+ Gear:= VisualGearLayersStart[5];
while Gear <> nil do
begin
if Gear^.Tint <> $FFFFFFFF then
@@ -445,7 +434,7 @@
end;
// this layer is on the screen plane (depth = 0) when stereo, but just in front of the land
6: begin
- Gear:= VisualGearLayers[6];
+ Gear:= VisualGearLayersStart[6];
while Gear <> nil do
begin
if Gear^.Tint <> $FFFFFFFF then
@@ -485,7 +474,7 @@
exit;
for i:= 0 to 6 do
begin
- vg:= VisualGearLayers[i];
+ vg:= VisualGearLayersStart[i];
while vg <> nil do
if vg^.Kind = vgtCloud then
begin
@@ -525,7 +514,7 @@
exit;
for i:= 0 to 6 do
begin
- vg:= VisualGearLayers[i];
+ vg:= VisualGearLayersStart[i];
while vg <> nil do
if vg^.Kind = vgtFlake then
begin
@@ -548,7 +537,10 @@
begin
VGCounter:= 0;
for i:= 0 to 6 do
- VisualGearLayers[i]:= nil;
+ begin
+ VisualGearLayersStart[i]:= nil;
+ VisualGearLayersEnd[i]:= nil;
+ end;
end;
procedure freeModule;
@@ -556,7 +548,7 @@
begin
VGCounter:= 0;
for i:= 0 to 6 do
- while VisualGearLayers[i] <> nil do DeleteVisualGear(VisualGearLayers[i]);
+ while VisualGearLayersStart[i] <> nil do DeleteVisualGear(VisualGearLayersStart[i]);
end;
end.
--- a/hedgewars/uVisualGearsHandlers.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uVisualGearsHandlers.pas Mon Jan 14 12:35:32 2019 -0500
@@ -246,7 +246,6 @@
Gear^.X:= Gear^.X + Gear^.dX * s;
Gear^.Y:= Gear^.Y + Gear^.dY * s;
-//Gear^.dY:= Gear^.dY + cGravityf;
if Gear^.FrameTicks <= Steps then
if Gear^.Frame = 0 then
@@ -317,7 +316,7 @@
begin
Gear^.X:= Gear^.X + Gear^.dX * Steps;
-Gear^.Y:= Gear^.Y + Gear^.dY * Steps;// + cGravityf * (Steps * Steps);
+Gear^.Y:= Gear^.Y + Gear^.dY * Steps;
if (Gear^.State and gstTmpFlag) = 0 then
begin
Gear^.dY:= Gear^.dY + cGravityf * Steps;
@@ -421,7 +420,6 @@
Gear^.Y:= Gear^.Y - (cDrownSpeedf + Gear^.dY) * Steps;
Gear^.dX := Gear^.dX + (cWindSpeedf * 0.3 * Steps);
-//Gear^.dY := Gear^.dY - (cDrownSpeedf * 0.995);
if Gear^.FrameTicks <= Steps then
if Gear^.Frame = 0 then
@@ -624,7 +622,6 @@
Gear^.Timer:= cSorterWorkTime;
Gear^.doStep:= @doStepTeamHealthSorterWork;
currsorter:= Gear;
-//doStepTeamHealthSorterWork(Gear, Steps)
end;
////////////////////////////////////////////////////////////////////////////////
@@ -900,6 +897,7 @@
currwindbar: PVisualGear = nil;
procedure doStepSmoothWindBarWork(Gear: PVisualGear; Steps: Longword);
+const maxWindBarWidth = 73;
begin
if currwindbar = Gear then
begin
@@ -912,6 +910,11 @@
inc(WindBarWidth)
else if WindBarWidth > Gear^.Tag then
dec(WindBarWidth);
+ // Prevent wind bar from overflowing
+ if WindBarWidth > maxWindBarWidth then
+ WindBarWidth:= maxWindBarWidth;
+ if WindBarWidth < - maxWindBarWidth then
+ WindBarWidth:= - maxWindBarWidth;
end;
if cWindspeedf > Gear^.dAngle then
begin
@@ -925,7 +928,7 @@
end;
end;
- if ((WindBarWidth = Gear^.Tag) and (cWindspeedf = Gear^.dAngle)) or (currwindbar <> Gear) then
+ if (((WindBarWidth = Gear^.Tag) or (Abs(WindBarWidth) >= maxWindBarWidth)) and (cWindspeedf = Gear^.dAngle)) or (currwindbar <> Gear) then
begin
if currwindbar = Gear then currwindbar:= nil;
DeleteVisualGear(Gear)
--- a/hedgewars/uVisualGearsList.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uVisualGearsList.pas Mon Jan 14 12:35:32 2019 -0500
@@ -33,7 +33,8 @@
cExplFrameTicks = 110;
var VGCounter: LongWord;
- VisualGearLayers: array[0..6] of PVisualGear;
+ VisualGearLayersStart: array[0..6] of PVisualGear;
+ VisualGearLayersEnd: array[0..6] of PVisualGear;
implementation
uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers, uScript;
@@ -231,9 +232,6 @@
end;
vgtDroplet:
begin
- // old dx & dy calcs
- // dx:= 0.001 * (random(180) - 90);
- // dy:= -0.001 * (random(160) + 40);
// => min speed ~ 0.098, max speed ~ 0.218, speed range ~ 0.120
// => min angle(4096) ~ 129, max angle ~ 1919, angle range ~ 1790
dx:= 0.001 * (98 + random(121)); // speed
@@ -279,7 +277,6 @@
Timer:= 1500;
dY:= -0.08;
dX:= 0;
- //gear^.Z:= 2002;
end;
vgtSmokeTrace,
vgtEvilTrace:
@@ -287,7 +284,6 @@
gear^.X:= gear^.X - 16;
gear^.Y:= gear^.Y - 16;
gear^.State:= 8;
- //gear^.Z:= cSmokeZ
end;
vgtBigExplosion:
begin
@@ -433,12 +429,15 @@
if Layer <> -1 then gear^.Layer:= Layer;
-if VisualGearLayers[gear^.Layer] <> nil then
+if VisualGearLayersStart[gear^.Layer] = nil then
+ VisualGearLayersStart[gear^.Layer]:= gear;
+
+if VisualGearLayersEnd[gear^.Layer] <> nil then
begin
- VisualGearLayers[gear^.Layer]^.PrevGear:= gear;
- gear^.NextGear:= VisualGearLayers[gear^.Layer]
+ VisualGearLayersEnd[gear^.Layer]^.NextGear:= gear;
+ gear^.PrevGear:= VisualGearLayersEnd[gear^.Layer]
end;
-VisualGearLayers[gear^.Layer]:= gear;
+VisualGearLayersEnd[gear^.Layer]:= gear;
AddVisualGear:= gear;
ScriptCall('onVisualGearAdd', gear^.uid);
@@ -449,12 +448,19 @@
ScriptCall('onVisualGearDelete', Gear^.uid);
FreeAndNilTexture(Gear^.Tex);
- if Gear^.NextGear <> nil then
- Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
+ if (Gear^.NextGear = nil) and (Gear^.PrevGear = nil) then
+ begin
+ VisualGearLayersStart[Gear^.Layer]:= nil;
+ VisualGearLayersEnd[Gear^.Layer]:= nil;
+ end;
if Gear^.PrevGear <> nil then
Gear^.PrevGear^.NextGear:= Gear^.NextGear
- else
- VisualGearLayers[Gear^.Layer]:= Gear^.NextGear;
+ else if Gear^.NextGear <> nil then
+ VisualGearLayersStart[Gear^.Layer]:= Gear^.NextGear;
+ if Gear^.NextGear <> nil then
+ Gear^.NextGear^.PrevGear:= Gear^.PrevGear
+ else if Gear^.PrevGear <> nil then
+ VisualGearLayersEnd[Gear^.Layer]:= Gear^.PrevGear;
if lastVisualGearByUID = Gear then
lastVisualGearByUID:= nil;
@@ -477,7 +483,7 @@
// search in an order that is more likely to return layers they actually use. Could perhaps track statistically AddVisualGear in uScript, since that is most likely the ones they want
for i:= 2 to 5 do
begin
- vg:= VisualGearLayers[i mod 4];
+ vg:= VisualGearLayersStart[i mod 4];
while vg <> nil do
begin
if vg^.uid = uid then
--- a/hedgewars/uWorld.pas Mon Jan 14 12:34:47 2019 -0500
+++ b/hedgewars/uWorld.pas Mon Jan 14 12:35:32 2019 -0500
@@ -42,6 +42,7 @@
procedure MoveCamera;
procedure onFocusStateChanged;
procedure updateCursorVisibility;
+procedure updateTouchWidgets(ammoType: TAmmoType);
implementation
uses
@@ -63,6 +64,7 @@
, uCommands
, uTeams
, uDebug
+ , uInputHandler
{$IFDEF USE_VIDEO_RECORDING}
, uVideoRec
{$ENDIF}
@@ -395,6 +397,28 @@
source.y:= frame.y;
end;
end;
+
+with utilityWidget2 do
+ begin
+ show:= false;
+ sprite:= sprBounceButton;
+ frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale);
+ frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale);
+ frame.x:= utilityWidget.frame.x + Round(frame.w * 1.25);
+ frame.y:= arrowLeft.frame.y - Round(frame.h * 1.25);
+ active.x:= frame.x;
+ active.y:= frame.y;
+ active.w:= frame.w;
+ active.h:= frame.h;
+ with moveAnim do
+ begin
+ target.x:= frame.x;
+ target.y:= frame.y;
+ source.x:= frame.x;
+ source.y:= frame.y;
+ end;
+ end;
+
{$ENDIF}
end;
@@ -415,7 +439,10 @@
STurns: LongInt;
amSurface: PSDL_Surface;
AMRect: TSDL_Rect;
-{$IFDEF USE_AM_NUMCOLUMN}tmpsurf: PSDL_Surface;{$ENDIF}
+{$IFDEF USE_AM_NUMCOLUMN}
+ tmpsurf: PSDL_Surface;
+ usesDefaultSlotKeys: boolean;
+{$ENDIF}
begin
if cOnlyStats then exit(nil);
@@ -451,6 +478,9 @@
x:= AMRect.x;
y:= AMRect.y;
+{$IFDEF USE_AM_NUMCOLUMN}
+ usesDefaultSlotKeys:= CheckDefaultSlotKeys;
+{$ENDIF USE_AM_NUMCOLUMN}
for i:= 0 to cMaxSlotIndex do
if (i <> cHiddenSlotIndex) and (Ammo^[i, 0].Count > 0) then
begin
@@ -460,7 +490,13 @@
x:= AMRect.x;
{$ENDIF}
{$IFDEF USE_AM_NUMCOLUMN}
- tmpsurf:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar('F' + IntToStr(i+1)), cWhiteColorChannels);
+ // Ammo slot number column
+ if usesDefaultSlotKeys then
+ // F1, F2, F3, F4, ...
+ tmpsurf:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar('F'+IntToStr(i+1)), cWhiteColorChannels)
+ else
+ // 1, 2, 3, 4, ...
+ tmpsurf:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(IntToStr(i+1)), cWhiteColorChannels);
copyToXY(tmpsurf, amSurface,
x + AMSlotPadding + (AMSlotSize shr 1) - (tmpsurf^.w shr 1),
y + AMSlotPadding + (AMSlotSize shr 1) - (tmpsurf^.h shr 1));
@@ -600,12 +636,14 @@
if AMState = AMShowingUp then // show ammo menu
begin
- if (cReducedQuality and rqSlowMenu) <> 0 then
+ // No "appear" animation in low quality or playing with very short turn time.
+ if ((cReducedQuality and rqSlowMenu) <> 0) or (cHedgehogTurnTime <= 10000) then
begin
AMShiftX:= 0;
AMShiftY:= 0;
AMState:= AMShowing;
end
+ // "Appear" animation
else
if AMAnimState < 1 then
begin
@@ -625,12 +663,14 @@
end;
if AMState = AMHiding then // hide ammo menu
begin
- if (cReducedQuality and rqSlowMenu) <> 0 then
+ // No "disappear" animation (see above)
+ if ((cReducedQuality and rqSlowMenu) <> 0) or (cHedgehogTurnTime <= 10000) then
begin
AMShiftX:= AMShiftTargetX;
AMShiftY:= AMShiftTargetY;
AMState:= AMHidden;
end
+ // "Disappear" animation
else
if AMAnimState < 1 then
begin
@@ -742,23 +782,7 @@
SetWeapon(Ammo^[Slot, Pos].AmmoType);
bSelected:= false;
FreeAndNilTexture(WeaponTooltipTex);
-{$IFDEF USE_TOUCH_INTERFACE}//show the aiming buttons + animation
- if (Ammo^[Slot, Pos].Propz and ammoprop_NeedUpDown) <> 0 then
- begin
- if (not arrowUp.show) then
- begin
- animateWidget(@arrowUp, true, true);
- animateWidget(@arrowDown, true, true);
- end;
- end
- else
- if arrowUp.show then
- begin
- animateWidget(@arrowUp, true, false);
- animateWidget(@arrowDown, true, false);
- end;
- SetUtilityWidgetState(Ammo^[Slot, Pos].AmmoType);
-{$ENDIF}
+ updateTouchWidgets(Ammo^[Slot, Pos].AmmoType);
exit
end;
end
@@ -1146,7 +1170,9 @@
h:= -NameTagTex^.w - 24;
if OwnerTex <> nil then
h:= h - OwnerTex^.w - 4;
+ Tint(TeamsArray[t]^.Clan^.Color shl 8 or $FF);
DrawSpriteRotatedF(sprFinger, h, cScreenHeight + DrawHealthY + smallScreenOffset + 2 + SpritesData[sprFinger].Width div 4, 0, 1, -90);
+ untint;
end;
end;
end;
@@ -1198,7 +1224,7 @@
r: TSDL_Rect;
s: shortstring;
offsetX, offsetY, screenBottom: LongInt;
- replicateToLeft, replicateToRight, tmp: boolean;
+ replicateToLeft, replicateToRight, tmp, isNotHiddenByCinematic: boolean;
{$IFDEF USE_VIDEO_RECORDING}
a: Byte;
{$ENDIF}
@@ -1336,6 +1362,12 @@
else
DrawWaves(-1, 50, cWaveHeight div 2, cWaveHeight div 2, 0);
+// line at airplane height for certain airstrike types (when spawning height is important)
+with CurrentHedgehog^ do
+ if (isCursorVisible) and ((CurAmmoType = amNapalm) or (CurAmmoType = amMineStrike) or (((GameFlags and gfMoreWind) <> 0) and ((CurAmmoType = amDrillStrike) or (CurAmmoType = amAirAttack)))) then
+ DrawLine(-3000, topY-300, 7000, topY-300, 3.0, (Team^.Clan^.Color shr 16), (Team^.Clan^.Color shr 8) and $FF, Team^.Clan^.Color and $FF, $FF);
+
+// gear HUD extras (fuel indicator, secondary ammo, etc.)
if replicateToLeft then
begin
ShiftWorld(-1);
@@ -1400,7 +1432,10 @@
if CurAmmoType = amBee then
spr:= sprTargetBee
else
+ begin
spr:= sprTargetP;
+ Tint(Team^.Clan^.Color shl 8 or $FF);
+ end;
if replicateToLeft then
begin
ShiftWorld(-1);
@@ -1416,6 +1451,8 @@
end;
DrawSpriteRotatedF(spr, TargetPoint.X + WorldDx, TargetPoint.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360);
+ if spr = sprTargetP then
+ untint;
end;
end;
@@ -1442,7 +1479,8 @@
// This scale is used to keep the various widgets at the same dimension at all zoom levels
SetScale(cDefaultZoomLevel);
-// Cinematic Mode: Effects
+isNotHiddenByCinematic:= true;
+// Cinematic Mode: Determine effects and state
if CinematicScript or (InCinematicMode and autoCameraOn
and ((CurrentHedgehog = nil) or CurrentHedgehog^.Team^.ExtDriven
or (CurrentHedgehog^.BotLevel <> 0) or (GameType = gmtDemo))) then
@@ -1451,7 +1489,10 @@
begin
inc(CinematicSteps, Lag);
if CinematicSteps > 300 then
- CinematicSteps:= 300;
+ begin
+ CinematicSteps:= 300;
+ isNotHiddenByCinematic:= false;
+ end;
end;
end
else if CinematicSteps > 0 then
@@ -1461,22 +1502,8 @@
CinematicSteps:= 0;
end;
-// Cinematic Mode: Render black bars
-if CinematicSteps > 0 then
- begin
- r.x:= ViewLeftX;
- r.w:= ViewWidth;
- r.y:= ViewTopY;
- CinematicBarH:= (ViewHeight * CinematicSteps) div 2048;
- r.h:= CinematicBarH;
- DrawRect(r, 0, 0, 0, $FF, true);
- r.y:= ViewBottomY - r.h;
- DrawRect(r, 0, 0, 0, $FF, true);
- end;
-
-
// Turn time
-if UIDisplay <> uiNone then
+if (UIDisplay <> uiNone) and (isNotHiddenByCinematic) then
begin
{$IFDEF USE_TOUCH_INTERFACE}
offsetX:= cScreenHeight - 13;
@@ -1515,34 +1542,14 @@
DrawSprite(sprFrame, -(cScreenWidth shr 1) + t - 4 + offsetY, cScreenHeight - offsetX, 0);
end;
-// Captions
- DrawCaptions
end;
-{$IFDEF USE_TOUCH_INTERFACE}
-// Draw buttons Related to the Touch interface
-DrawScreenWidget(@arrowLeft);
-DrawScreenWidget(@arrowRight);
-DrawScreenWidget(@arrowUp);
-DrawScreenWidget(@arrowDown);
-
-DrawScreenWidget(@fireButton);
-DrawScreenWidget(@jumpWidget);
-DrawScreenWidget(@AMWidget);
-DrawScreenWidget(@pauseButton);
-DrawScreenWidget(@utilityWidget);
-{$ENDIF}
-
// Team bars
-if UIDisplay = uiAll then
+if (UIDisplay = uiAll) and (isNotHiddenByCinematic) then
RenderTeamsHealth;
-// Lag alert
-if isInLag then
- DrawSprite(sprLag, 32 - (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12);
-
// Wind bar
-if UIDisplay <> uiNone then
+if (UIDisplay <> uiNone) and (isNotHiddenByCinematic) then
begin
{$IFDEF USE_TOUCH_INTERFACE}
offsetX:= cScreenHeight - 13;
@@ -1555,7 +1562,7 @@
if WindBarWidth > 0 then
begin
{$WARNINGS OFF}
- r.x:= 8 - (RealTicks shr 6) mod 8;
+ r.x:= 8 - (RealTicks shr 6) mod 9;
{$WARNINGS ON}
r.y:= 0;
r.w:= WindBarWidth;
@@ -1566,7 +1573,7 @@
if WindBarWidth < 0 then
begin
{$WARNINGS OFF}
- r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 8;
+ r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 9;
{$WARNINGS ON}
r.y:= 0;
r.w:= - WindBarWidth;
@@ -1576,7 +1583,7 @@
end;
// Indicators for global effects (extra damage, low gravity)
-if UIDisplay <> uiNone then
+if (UIDisplay <> uiNone) and (isNotHiddenByCinematic) then
begin
{$IFDEF USE_TOUCH_INTERFACE}
offsetX:= (cScreenWidth shr 1) - 95;
@@ -1603,6 +1610,42 @@
end;
end;
+// Cinematic Mode: Render black bars
+if CinematicSteps > 0 then
+ begin
+ r.x:= ViewLeftX;
+ r.w:= ViewWidth;
+ r.y:= ViewTopY;
+ CinematicBarH:= (ViewHeight * CinematicSteps) div 2048;
+ r.h:= CinematicBarH;
+ DrawRect(r, 0, 0, 0, $FF, true);
+ r.y:= ViewBottomY - r.h;
+ DrawRect(r, 0, 0, 0, $FF, true);
+ end;
+
+// Touchscreen interface widgets
+{$IFDEF USE_TOUCH_INTERFACE}
+DrawScreenWidget(@arrowLeft);
+DrawScreenWidget(@arrowRight);
+DrawScreenWidget(@arrowUp);
+DrawScreenWidget(@arrowDown);
+
+DrawScreenWidget(@fireButton);
+DrawScreenWidget(@jumpWidget);
+DrawScreenWidget(@AMWidget);
+DrawScreenWidget(@utilityWidget);
+DrawScreenWidget(@utilityWidget2);
+DrawScreenWidget(@pauseButton);
+{$ENDIF}
+
+// Captions
+if UIDisplay <> uiNone then
+ DrawCaptions;
+
+// Lag alert
+if isInLag then
+ DrawSprite(sprLag, 32 - (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12);
+
// Chat
DrawChat;
@@ -1778,8 +1821,6 @@
with CurrentHedgehog^ do
if (Gear <> nil) and ((Gear^.State and gstChooseTarget) <> 0) then
begin
- if (CurAmmoType = amNapalm) or (CurAmmoType = amMineStrike) or (((GameFlags and gfMoreWind) <> 0) and ((CurAmmoType = amDrillStrike) or (CurAmmoType = amAirAttack))) then
- DrawLine(-3000, topY-300, 7000, topY-300, 3.0, (Team^.Clan^.Color shr 16), (Team^.Clan^.Color shr 8) and $FF, Team^.Clan^.Color and $FF, $FF);
i:= GetCurAmmoEntry(CurrentHedgehog^)^.Pos;
with Ammoz[CurAmmoType] do
if PosCount > 1 then
@@ -2077,6 +2118,30 @@
SDL_ShowCursor(ord(GameState = gsConfirm))
end;
+procedure updateTouchWidgets(ammoType: TAmmoType);
+begin
+{$IFDEF USE_TOUCH_INTERFACE}
+//show the aiming buttons + animation
+if (Ammoz[ammoType].Ammo.Propz and ammoprop_NeedUpDown) <> 0 then
+ begin
+ if (not arrowUp.show) then
+ begin
+ animateWidget(@arrowUp, true, true);
+ animateWidget(@arrowDown, true, true);
+ end;
+ end
+else
+ if arrowUp.show then
+ begin
+ animateWidget(@arrowUp, true, false);
+ animateWidget(@arrowDown, true, false);
+ end;
+SetUtilityWidgetState(ammoType);
+{$ELSE}
+ammoType:= ammoType; // avoid hint
+{$ENDIF}
+end;
+
procedure SetUtilityWidgetState(ammoType: TAmmoType);
begin
{$IFDEF USE_TOUCH_INTERFACE}
@@ -2087,20 +2152,32 @@
if ((Ammoz[ammoType].Ammo.Propz and ammoprop_Timerable) <> 0) and (ammoType <> amDrillStrike) then
begin
utilityWidget.sprite:= sprTimerButton;
- animateWidget(@utilityWidget, true, true);
+ if (not utilityWidget.show) then
+ animateWidget(@utilityWidget, true, true);
end
else if (Ammoz[ammoType].Ammo.Propz and ammoprop_NeedTarget) <> 0 then
begin
utilityWidget.sprite:= sprTargetButton;
- animateWidget(@utilityWidget, true, true);
+ if (not utilityWidget.show) then
+ animateWidget(@utilityWidget, true, true);
end
else if ammoType = amSwitch then
begin
utilityWidget.sprite:= sprSwitchButton;
- animateWidget(@utilityWidget, true, true);
+ if (not utilityWidget.show) then
+ animateWidget(@utilityWidget, true, true);
end
else if utilityWidget.show then
animateWidget(@utilityWidget, true, false);
+
+ if ((Ammoz[ammoType].Ammo.Propz and ammoprop_SetBounce) <> 0) then
+ begin
+ utilityWidget2.sprite:= sprBounceButton;
+ if (not utilityWidget2.show) then
+ animateWidget(@utilityWidget2, true, true);
+ end
+ else if utilityWidget2.show then
+ animateWidget(@utilityWidget2, true, false);
{$ELSE}
ammoType:= ammoType; // avoid hint
{$ENDIF}
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/bouncebutton.png has changed
--- a/project_files/hwc/CMakeLists.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/project_files/hwc/CMakeLists.txt Mon Jan 14 12:35:32 2019 -0500
@@ -32,12 +32,14 @@
#get the list of pas files that are going to be converted and compiled
file(GLOB engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/*.pas")
-list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/uVideoRec.pas")
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/uTouch.pas")
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/PNGh.pas")
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/pas2cSystem.pas")
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/pas2cRedo.pas")
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/hwLibrary.pas")
+if(NOVIDEOREC)
+ list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/uVideoRec.pas")
+endif()
if(NOT GL2)
list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/uMatrix.pas")
endif()
@@ -73,6 +75,12 @@
set(pas2c_args ${pas2c_args} -d GL2)
endif()
+if(LIBAV_FOUND)
+ add_subdirectory(${CMAKE_SOURCE_DIR}/hedgewars/avwrapper ${CMAKE_CURRENT_BINARY_DIR}/avwrapper)
+ list(APPEND HW_LINK_LIBS avwrapper)
+ set(pas2c_args ${pas2c_args} -d USE_VIDEO_RECORDING)
+endif()
+
#invoke pas2c on main module, it will call all the others
add_custom_command(OUTPUT ${engine_sources}
COMMAND "${EXECUTABLE_OUTPUT_PATH}/pas2c${CMAKE_EXECUTABLE_SUFFIX}"
@@ -111,6 +119,7 @@
physfs
physlayer
m
+ ${HW_LINK_LIBS}
#TODO: add other libraries
)
install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION ${target_binary_install_dir})
--- a/qmlfrontend/CMakeLists.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/CMakeLists.txt Mon Jan 14 12:35:32 2019 -0500
@@ -15,6 +15,8 @@
"team.cpp" "team.h"
"engine_instance.cpp" "engine_instance.h"
"preview_image_provider.cpp" "preview_image_provider.h"
- "engine_interface.h")
+ "engine_interface.h"
+ "preview_acceptor.cpp" "preview_acceptor.h"
+ )
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
--- a/qmlfrontend/Page1.qml Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/Page1.qml Mon Jan 14 12:35:32 2019 -0500
@@ -2,24 +2,31 @@
import Hedgewars.Engine 1.0
Page1Form {
+ property var hwEngine
+
+ Component {
+ id: hwEngineComponent
+
+ HWEngine {
+ engineLibrary: "./libhedgewars_engine.so"
+ previewAcceptor: PreviewAcceptor
+ onPreviewImageChanged: previewImage.source = "image://preview/image"
+ onPreviewIsRendering: previewImage.source = "qrc:/res/iconTime.png"
+ }
+ }
+
+ Component.onCompleted: {
+ hwEngine = hwEngineComponent.createObject()
+ }
+
tickButton.onClicked: {
gameView.tick(100)
}
gameButton.onClicked: {
- var engineInstance = HWEngine.runQuickGame()
+ var engineInstance = hwEngine.runQuickGame()
gameView.engineInstance = engineInstance
}
button1.onClicked: {
- HWEngine.getPreview()
- }
-
- Connections {
- target: HWEngine
- onPreviewImageChanged: {
- previewImage.source = "image://preview/image"
- }
- onPreviewIsRendering: {
- previewImage.source = "qrc:/res/iconTime.png"
- }
+ hwEngine.getPreview()
}
}
--- a/qmlfrontend/engine_instance.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/engine_instance.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -1,6 +1,7 @@
#include "engine_instance.h"
#include <QDebug>
+#include <QLibrary>
#include <QOpenGLFunctions>
#include <QSurface>
@@ -12,37 +13,92 @@
return currentOpenglContext->getProcAddress(fn);
}
-EngineInstance::EngineInstance(QObject* parent)
- : QObject(parent), m_instance(Engine::start_engine()) {}
+EngineInstance::EngineInstance(const QString& libraryPath, QObject* parent)
+ : QObject(parent) {
+ QLibrary hwlib(libraryPath);
+
+ if (!hwlib.load())
+ qWarning() << "Engine library not found" << hwlib.errorString();
+
+ hedgewars_engine_protocol_version =
+ reinterpret_cast<Engine::hedgewars_engine_protocol_version_t*>(
+ hwlib.resolve("hedgewars_engine_protocol_version"));
+ start_engine =
+ reinterpret_cast<Engine::start_engine_t*>(hwlib.resolve("start_engine"));
+ generate_preview = reinterpret_cast<Engine::generate_preview_t*>(
+ hwlib.resolve("generate_preview"));
+ dispose_preview = reinterpret_cast<Engine::dispose_preview_t*>(
+ hwlib.resolve("dispose_preview"));
+ cleanup = reinterpret_cast<Engine::cleanup_t*>(hwlib.resolve("cleanup"));
+
+ send_ipc = reinterpret_cast<Engine::send_ipc_t*>(hwlib.resolve("send_ipc"));
+ read_ipc = reinterpret_cast<Engine::read_ipc_t*>(hwlib.resolve("read_ipc"));
-EngineInstance::~EngineInstance() { Engine::cleanup(m_instance); }
+ setup_current_gl_context =
+ reinterpret_cast<Engine::setup_current_gl_context_t*>(
+ hwlib.resolve("setup_current_gl_context"));
+ render_frame =
+ reinterpret_cast<Engine::render_frame_t*>(hwlib.resolve("render_frame"));
+ advance_simulation = reinterpret_cast<Engine::advance_simulation_t*>(
+ hwlib.resolve("advance_simulation"));
+
+ m_isValid = hedgewars_engine_protocol_version && start_engine &&
+ generate_preview && dispose_preview && cleanup && send_ipc &&
+ read_ipc && setup_current_gl_context && render_frame &&
+ advance_simulation;
+ emit isValidChanged(m_isValid);
+
+ if (isValid()) {
+ qDebug() << "Loaded engine library with protocol version"
+ << hedgewars_engine_protocol_version();
+
+ m_instance = start_engine();
+ }
+}
+
+EngineInstance::~EngineInstance() {
+ if (m_isValid) cleanup(m_instance);
+}
void EngineInstance::sendConfig(const GameConfig& config) {
for (auto b : config.config()) {
- Engine::send_ipc(m_instance, reinterpret_cast<uint8_t*>(b.data()),
- static_cast<size_t>(b.size()));
+ send_ipc(m_instance, reinterpret_cast<uint8_t*>(b.data()),
+ static_cast<size_t>(b.size()));
}
}
void EngineInstance::advance(quint32 ticks) {
- Engine::advance_simulation(m_instance, ticks);
+ advance_simulation(m_instance, ticks);
}
-void EngineInstance::renderFrame() { Engine::render_frame(m_instance); }
+void EngineInstance::renderFrame() { render_frame(m_instance); }
void EngineInstance::setOpenGLContext(QOpenGLContext* context) {
currentOpenglContext = context;
auto size = context->surface()->size();
- Engine::setup_current_gl_context(
- m_instance, static_cast<quint16>(size.width()),
- static_cast<quint16>(size.height()), &getProcAddress);
+ setup_current_gl_context(m_instance, static_cast<quint16>(size.width()),
+ static_cast<quint16>(size.height()),
+ &getProcAddress);
}
-Engine::PreviewInfo EngineInstance::generatePreview() {
+QImage EngineInstance::generatePreview() {
Engine::PreviewInfo pinfo;
- Engine::generate_preview(m_instance, &pinfo);
+ generate_preview(m_instance, &pinfo);
+
+ QVector<QRgb> colorTable;
+ colorTable.resize(256);
+ for (int i = 0; i < 256; ++i) colorTable[i] = qRgba(255, 255, 0, i);
- return pinfo;
+ QImage previewImage(pinfo.land, static_cast<int>(pinfo.width),
+ static_cast<int>(pinfo.height), QImage::Format_Indexed8);
+ previewImage.setColorTable(colorTable);
+
+ // Cannot use it here, since QImage refers to original bytes
+ // dispose_preview(m_instance);
+
+ return previewImage;
}
+
+bool EngineInstance::isValid() const { return m_isValid; }
--- a/qmlfrontend/engine_instance.h Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/engine_instance.h Mon Jan 14 12:35:32 2019 -0500
@@ -1,31 +1,50 @@
#ifndef ENGINEINSTANCE_H
#define ENGINEINSTANCE_H
-#include "engine_interface.h"
-
+#include <QImage>
#include <QObject>
#include <QOpenGLContext>
+#include "engine_interface.h"
#include "game_config.h"
class EngineInstance : public QObject {
Q_OBJECT
public:
- explicit EngineInstance(QObject* parent = nullptr);
+ explicit EngineInstance(const QString& libraryPath,
+ QObject* parent = nullptr);
~EngineInstance();
+ Q_PROPERTY(bool isValid READ isValid NOTIFY isValidChanged)
+
void sendConfig(const GameConfig& config);
void advance(quint32 ticks);
void renderFrame();
void setOpenGLContext(QOpenGLContext* context);
- Engine::PreviewInfo generatePreview();
+ QImage generatePreview();
+
+ bool isValid() const;
signals:
+ void isValidChanged(bool isValid);
public slots:
private:
Engine::EngineInstance* m_instance;
+
+ Engine::hedgewars_engine_protocol_version_t*
+ hedgewars_engine_protocol_version;
+ Engine::start_engine_t* start_engine;
+ Engine::generate_preview_t* generate_preview;
+ Engine::dispose_preview_t* dispose_preview;
+ Engine::cleanup_t* cleanup;
+ Engine::send_ipc_t* send_ipc;
+ Engine::read_ipc_t* read_ipc;
+ Engine::setup_current_gl_context_t* setup_current_gl_context;
+ Engine::render_frame_t* render_frame;
+ Engine::advance_simulation_t* advance_simulation;
+ bool m_isValid;
};
#endif // ENGINEINSTANCE_H
--- a/qmlfrontend/engine_interface.h Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/engine_interface.h Mon Jan 14 12:35:32 2019 -0500
@@ -18,10 +18,11 @@
unsigned char* land;
} PreviewInfo;
-typedef uint32_t protocol_version_t();
+typedef uint32_t hedgewars_engine_protocol_version_t();
typedef EngineInstance* start_engine_t();
typedef void generate_preview_t(EngineInstance* engine_state,
PreviewInfo* preview);
+typedef void dispose_preview_t(EngineInstance* engine_state);
typedef void cleanup_t(EngineInstance* engine_state);
typedef void send_ipc_t(EngineInstance* engine_state, uint8_t* buf,
@@ -36,18 +37,6 @@
typedef bool advance_simulation_t(EngineInstance* engine_state, uint32_t ticks);
-extern protocol_version_t* protocol_version;
-extern start_engine_t* start_engine;
-extern generate_preview_t* generate_preview;
-extern cleanup_t* cleanup;
-
-extern send_ipc_t* send_ipc;
-extern read_ipc_t* read_ipc;
-
-extern setup_current_gl_context_t* setup_current_gl_context;
-extern render_frame_t* render_frame;
-extern advance_simulation_t* advance_simulation;
-
#ifdef __cplusplus
}
};
--- a/qmlfrontend/hwengine.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/hwengine.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -1,64 +1,33 @@
+#include "hwengine.h"
+
#include <QDebug>
-#include <QLibrary>
-#include <QQmlEngine>
+#include <QImage>
#include <QUuid>
#include "engine_instance.h"
#include "engine_interface.h"
#include "game_view.h"
-#include "preview_image_provider.h"
-
-#include "hwengine.h"
+#include "preview_acceptor.h"
-HWEngine::HWEngine(QQmlEngine* engine, QObject* parent)
- : QObject(parent),
- m_engine(engine),
- m_previewProvider(new PreviewImageProvider()) {
- m_engine->addImageProvider(QLatin1String("preview"), m_previewProvider);
-}
+HWEngine::HWEngine(QObject* parent) : QObject(parent) {}
HWEngine::~HWEngine() {}
-static QObject* hwengine_singletontype_provider(QQmlEngine* engine,
- QJSEngine* scriptEngine) {
- Q_UNUSED(scriptEngine)
-
- HWEngine* hwengine = new HWEngine(engine);
- return hwengine;
-}
-
-void HWEngine::exposeToQML() {
- qDebug("HWEngine::exposeToQML");
- qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine",
- hwengine_singletontype_provider);
- qmlRegisterType<GameView>("Hedgewars.Engine", 1, 0, "GameView");
- qmlRegisterUncreatableType<EngineInstance>("Hedgewars.Engine", 1, 0,
- "EngineInstance",
- "Create by HWEngine run methods");
-}
-
void HWEngine::getPreview() {
emit previewIsRendering();
m_gameConfig = GameConfig();
m_gameConfig.cmdSeed(QUuid::createUuid().toByteArray());
- EngineInstance engine;
+ EngineInstance engine(m_engineLibrary);
+ if (!engine.isValid()) // TODO: error notification
+ return;
+
engine.sendConfig(m_gameConfig);
- Engine::PreviewInfo preview = engine.generatePreview();
-
- QVector<QRgb> colorTable;
- colorTable.resize(256);
- for (int i = 0; i < 256; ++i) colorTable[i] = qRgba(255, 255, 0, i);
+ QImage previewImage = engine.generatePreview();
- QImage previewImage(preview.land, static_cast<int>(preview.width),
- static_cast<int>(preview.height),
- QImage::Format_Indexed8);
- previewImage.setColorTable(colorTable);
- previewImage.detach();
-
- m_previewProvider->setImage(previewImage);
+ if (m_previewAcceptor) m_previewAcceptor->setImage(previewImage);
emit previewImageChanged();
// m_runQueue->queue(m_gameConfig);
@@ -74,9 +43,28 @@
m_gameConfig.cmdTeam(team1);
m_gameConfig.cmdTeam(team2);
- EngineInstance* engine = new EngineInstance(this);
+ EngineInstance* engine = new EngineInstance(m_engineLibrary, this);
+
return engine;
// m_runQueue->queue(m_gameConfig);
}
int HWEngine::previewHedgehogsCount() const { return m_previewHedgehogsCount; }
+
+PreviewAcceptor* HWEngine::previewAcceptor() const { return m_previewAcceptor; }
+
+QString HWEngine::engineLibrary() const { return m_engineLibrary; }
+
+void HWEngine::setPreviewAcceptor(PreviewAcceptor* previewAcceptor) {
+ if (m_previewAcceptor == previewAcceptor) return;
+
+ m_previewAcceptor = previewAcceptor;
+ emit previewAcceptorChanged(m_previewAcceptor);
+}
+
+void HWEngine::setEngineLibrary(const QString& engineLibrary) {
+ if (m_engineLibrary == engineLibrary) return;
+
+ m_engineLibrary = engineLibrary;
+ emit engineLibraryChanged(m_engineLibrary);
+}
--- a/qmlfrontend/hwengine.h Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/hwengine.h Mon Jan 14 12:35:32 2019 -0500
@@ -8,25 +8,33 @@
#include "game_config.h"
class QQmlEngine;
-class PreviewImageProvider;
class EngineInstance;
+class PreviewAcceptor;
class HWEngine : public QObject {
Q_OBJECT
Q_PROPERTY(int previewHedgehogsCount READ previewHedgehogsCount NOTIFY
previewHedgehogsCountChanged)
+ Q_PROPERTY(PreviewAcceptor* previewAcceptor READ previewAcceptor WRITE
+ setPreviewAcceptor NOTIFY previewAcceptorChanged)
+ Q_PROPERTY(QString engineLibrary READ engineLibrary WRITE setEngineLibrary
+ NOTIFY engineLibraryChanged)
public:
- explicit HWEngine(QQmlEngine* engine, QObject* parent = nullptr);
+ explicit HWEngine(QObject* parent = nullptr);
~HWEngine();
- static void exposeToQML();
-
Q_INVOKABLE void getPreview();
Q_INVOKABLE EngineInstance* runQuickGame();
int previewHedgehogsCount() const;
+ PreviewAcceptor* previewAcceptor() const;
+ QString engineLibrary() const;
+
+ public slots:
+ void setPreviewAcceptor(PreviewAcceptor* previewAcceptor);
+ void setEngineLibrary(const QString& engineLibrary);
signals:
void previewIsRendering();
@@ -34,12 +42,15 @@
void previewHogCountChanged(int count);
void gameFinished();
void previewHedgehogsCountChanged(int previewHedgehogsCount);
+ void previewAcceptorChanged(PreviewAcceptor* previewAcceptor);
+ void engineLibraryChanged(const QString& engineLibrary);
private:
QQmlEngine* m_engine;
- PreviewImageProvider* m_previewProvider;
GameConfig m_gameConfig;
int m_previewHedgehogsCount;
+ PreviewAcceptor* m_previewAcceptor;
+ QString m_engineLibrary;
};
#endif // HWENGINE_H
--- a/qmlfrontend/main.cpp Mon Jan 14 12:34:47 2019 -0500
+++ b/qmlfrontend/main.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -4,66 +4,34 @@
#include <QQmlApplicationEngine>
#include "engine_interface.h"
+#include "game_view.h"
#include "hwengine.h"
+#include "preview_acceptor.h"
-namespace Engine {
-protocol_version_t* protocol_version;
-start_engine_t* start_engine;
-generate_preview_t* generate_preview;
-cleanup_t* cleanup;
-send_ipc_t* send_ipc;
-read_ipc_t* read_ipc;
-setup_current_gl_context_t* setup_current_gl_context;
-render_frame_t* render_frame;
-advance_simulation_t* advance_simulation;
-}; // namespace Engine
-
-void loadEngineLibrary() {
-#ifdef Q_OS_WIN
- QLibrary hwlib("./libhedgewars_engine.dll");
-#else
- QLibrary hwlib("./libhedgewars_engine.so");
-#endif
-
- if (!hwlib.load())
- qWarning() << "Engine library not found" << hwlib.errorString();
+namespace Engine {}; // namespace Engine
- Engine::protocol_version = reinterpret_cast<Engine::protocol_version_t*>(
- hwlib.resolve("protocol_version"));
- Engine::start_engine =
- reinterpret_cast<Engine::start_engine_t*>(hwlib.resolve("start_engine"));
- Engine::generate_preview = reinterpret_cast<Engine::generate_preview_t*>(
- hwlib.resolve("generate_preview"));
- Engine::cleanup =
- reinterpret_cast<Engine::cleanup_t*>(hwlib.resolve("cleanup"));
+static QObject* previewacceptor_singletontype_provider(
+ QQmlEngine* engine, QJSEngine* scriptEngine) {
+ Q_UNUSED(scriptEngine)
- Engine::send_ipc =
- reinterpret_cast<Engine::send_ipc_t*>(hwlib.resolve("send_ipc"));
- Engine::read_ipc =
- reinterpret_cast<Engine::read_ipc_t*>(hwlib.resolve("read_ipc"));
-
- Engine::setup_current_gl_context =
- reinterpret_cast<Engine::setup_current_gl_context_t*>(
- hwlib.resolve("setup_current_gl_context"));
- Engine::render_frame =
- reinterpret_cast<Engine::render_frame_t*>(hwlib.resolve("render_frame"));
- Engine::advance_simulation = reinterpret_cast<Engine::advance_simulation_t*>(
- hwlib.resolve("advance_simulation"));
-
- if (Engine::protocol_version)
- qDebug() << "Loaded engine library with protocol version"
- << Engine::protocol_version();
+ PreviewAcceptor* acceptor = new PreviewAcceptor(engine);
+ return acceptor;
}
int main(int argc, char* argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
- loadEngineLibrary();
-
QQmlApplicationEngine engine;
- HWEngine::exposeToQML();
+ qmlRegisterSingletonType<PreviewAcceptor>(
+ "Hedgewars.Engine", 1, 0, "PreviewAcceptor",
+ previewacceptor_singletontype_provider);
+ qmlRegisterType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine");
+ qmlRegisterType<GameView>("Hedgewars.Engine", 1, 0, "GameView");
+ qmlRegisterUncreatableType<EngineInstance>("Hedgewars.Engine", 1, 0,
+ "EngineInstance",
+ "Create by HWEngine run methods");
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if (engine.rootObjects().isEmpty()) return -1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qmlfrontend/preview_acceptor.cpp Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,15 @@
+#include "preview_acceptor.h"
+
+#include <QImage>
+#include <QQmlEngine>
+
+#include "preview_image_provider.h"
+
+PreviewAcceptor::PreviewAcceptor(QQmlEngine *engine, QObject *parent)
+ : QObject(parent), m_previewProvider(new PreviewImageProvider()) {
+ engine->addImageProvider(QLatin1String("preview"), m_previewProvider);
+}
+
+void PreviewAcceptor::setImage(const QImage &preview) {
+ m_previewProvider->setImage(preview);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qmlfrontend/preview_acceptor.h Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,21 @@
+#ifndef PREVIEW_ACCEPTOR_H
+#define PREVIEW_ACCEPTOR_H
+
+#include <QObject>
+
+class QQmlEngine;
+class PreviewImageProvider;
+
+class PreviewAcceptor : public QObject {
+ Q_OBJECT
+ public:
+ explicit PreviewAcceptor(QQmlEngine *engine, QObject *parent = nullptr);
+
+ public slots:
+ void setImage(const QImage &preview);
+
+ private:
+ PreviewImageProvider *m_previewProvider;
+};
+
+#endif // PREVIEW_ACCEPTOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/Cargo.toml Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,9 @@
+[package]
+name = "chat_sanitizer"
+version = "0.1.0"
+authors = ["Andrey Korotaev <a.korotaev@hedgewars.org>"]
+edition = "2018"
+
+[dependencies]
+unicode_skeleton = "0.1"
+itertools = "0.8.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/bad_words.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,58 @@
+use crate::{normalized_message, MessageChecker, Severity};
+
+use std::marker::PhantomData;
+
+struct BadWordsChecker<T> {
+ blacklist: Vec<String>,
+ whitelist: Vec<String>,
+ player_id_type: PhantomData<T>,
+}
+
+impl<T> BadWordsChecker<T> {
+ pub fn new(blacklist: &[&str], whitelist: &[&str]) -> Self {
+ Self {
+ blacklist: blacklist.iter().map(|s| normalized_message(*s)).collect(),
+ whitelist: whitelist.iter().map(|s| normalized_message(*s)).collect(),
+ player_id_type: PhantomData,
+ }
+ }
+}
+
+impl<T> MessageChecker<T> for BadWordsChecker<T> {
+ fn check(&self, _player_id: T, message: &str) -> Severity {
+ let msg = normalized_message(message);
+
+ // silly implementation, allows bad messages with a single good word
+ for bad_word in &self.blacklist {
+ if msg.contains(bad_word) {
+ if !self
+ .whitelist
+ .iter()
+ .any(|good_word| msg.contains(good_word))
+ {
+ return Severity::Warn;
+ }
+ }
+ }
+
+ Severity::Pass
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ #[test]
+ fn it_works() {
+ let checker = BadWordsChecker::new(&["fsck", "poop"], &["fsck -y"]);
+ assert_eq!(checker.check(0, "group hug"), Severity::Pass);
+ assert_eq!(checker.check(0, "fpoopf"), Severity::Warn);
+ assert_eq!(checker.check(0, "PooP"), Severity::Warn);
+
+ // this one fails
+ //assert_eq!(checker.check(0, "poop 'fsck -y' poop"), Severity::Warn);
+
+ // ideally this one shouldn't fail, need a better confusables check
+ // assert_eq!(checker.check(0, "P00P"), Severity::Warn);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/caps_abuse.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,9 @@
+use crate::{MessageChecker, Severity};
+
+struct CapsAbuseChecker {}
+
+impl<T> MessageChecker<T> for CapsAbuseChecker {
+ fn check(&self, player_id: T, message: &str) -> Severity {
+ Severity::Pass
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/flood.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,9 @@
+use crate::{MessageChecker, Severity};
+
+struct FloodChecker {}
+
+impl<T> MessageChecker<T> for FloodChecker {
+ fn check(&self, player_id: T, message: &str) -> Severity {
+ Severity::Pass
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/letter_repeat.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,45 @@
+use crate::{MessageChecker, Severity};
+
+use itertools::Itertools;
+use std::marker::PhantomData;
+
+struct LetterRepeatChecker<T> {
+ threshold: usize,
+ player_id_type: PhantomData<T>,
+}
+
+impl<T> LetterRepeatChecker<T> {
+ pub fn new(threshold: usize) -> Self {
+ Self {
+ threshold,
+ player_id_type: PhantomData,
+ }
+ }
+}
+
+impl<T> MessageChecker<T> for LetterRepeatChecker<T> {
+ fn check(&self, _player_id: T, message: &str) -> Severity {
+ for (_key, group) in &message.chars().into_iter().group_by(|c| *c) {
+ if group.count() >= self.threshold {
+ return Severity::Warn;
+ }
+ }
+
+ Severity::Pass
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ #[test]
+ fn it_works() {
+ let checker = LetterRepeatChecker::new(3);
+ assert_eq!(checker.check(0, "Hello world!"), Severity::Pass);
+ assert_eq!(checker.check(0, "ooops"), Severity::Warn);
+ assert_eq!(
+ checker.check(0, "жираф - длинношеее животное"),
+ Severity::Warn
+ );
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/lib.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,26 @@
+pub mod bad_words;
+pub mod letter_repeat;
+
+use unicode_skeleton::UnicodeSkeleton;
+
+#[derive(PartialEq, Debug)]
+enum Severity {
+ Pass,
+ Warn,
+ Silence,
+ Ban,
+}
+
+trait MessageChecker<T> {
+ fn check(&self, player_id: T, message: &str) -> Severity;
+ fn fix(&self, player_id: T, message: &str) -> Option<String> {
+ None
+ }
+}
+
+fn normalized_message(s: &str) -> String {
+ s.chars()
+ .flat_map(|c| c.to_lowercase())
+ .skeleton_chars()
+ .collect::<String>()
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/part_repeat.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,9 @@
+use crate::{MessageChecker, Severity};
+
+struct PartRepeatChecker {}
+
+impl<T> MessageChecker<T> for PartRepeatChecker {
+ fn check(&self, player_id: T, message: &str) -> Severity {
+ Severity::Pass
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/chat_sanitizer/src/url.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,9 @@
+use crate::{MessageChecker, Severity};
+
+struct URLChecker {}
+
+impl<T> MessageChecker<T> for URLChecker {
+ fn check(&self, player_id: T, message: &str) -> Severity {
+ Severity::Pass
+ }
+}
--- a/rust/hedgewars-checker/src/main.rs Mon Jan 14 12:34:47 2019 -0500
+++ b/rust/hedgewars-checker/src/main.rs Mon Jan 14 12:35:32 2019 -0500
@@ -175,7 +175,7 @@
fn get_protocol_number(executable: &str) -> std::io::Result<u32> {
let output = Command::new(executable).arg("--protocol").output()?;
- Ok(u32::from_str(&String::from_utf8(output.stdout).unwrap().as_str()).unwrap_or(55))
+ Ok(u32::from_str(&String::from_utf8(output.stdout).unwrap().trim()).unwrap_or(55))
}
fn main() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/Cargo.toml Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,29 @@
+[package]
+edition = "2018"
+name = "hedgewars-server"
+version = "0.0.1"
+authors = [ "Andrey Korotaev <a.korotaev@hedgewars.org>" ]
+
+[features]
+official-server = ["openssl", "mysql"]
+tls-connections = ["openssl"]
+default = []
+
+[dependencies]
+rand = "0.5"
+mio = "0.6"
+slab = "0.4"
+netbuf = "0.4"
+nom = "4.1"
+env_logger = "0.6"
+log = "0.4"
+base64 = "0.10"
+bitflags = "1.0"
+serde = "1.0"
+serde_yaml = "0.8"
+serde_derive = "1.0"
+openssl = { version = "0.10", optional = true }
+mysql = { version = "14.2", optional = true }
+
+[dev-dependencies]
+proptest = "0.8"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/main.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,65 @@
+#![allow(unused_imports)]
+#![deny(bare_trait_objects)]
+
+//use std::io::*;
+//use rand::Rng;
+//use std::cmp::Ordering;
+use log::*;
+use mio::net::*;
+use mio::*;
+
+mod protocol;
+mod server;
+mod utils;
+
+use crate::server::network::NetworkLayer;
+use std::time::Duration;
+
+fn main() {
+ env_logger::init();
+
+ info!(
+ "Hedgewars game server, protocol {}",
+ utils::PROTOCOL_VERSION
+ );
+
+ let address = "0.0.0.0:46631".parse().unwrap();
+ let listener = TcpListener::bind(&address).unwrap();
+
+ let poll = Poll::new().unwrap();
+ let mut hw_network = NetworkLayer::new(listener, 1024, 512);
+ hw_network.register_server(&poll).unwrap();
+
+ let mut events = Events::with_capacity(1024);
+
+ loop {
+ let timeout = if hw_network.has_pending_operations() {
+ Some(Duration::from_millis(1))
+ } else {
+ None
+ };
+ poll.poll(&mut events, timeout).unwrap();
+
+ for event in events.iter() {
+ if event.readiness() & Ready::readable() == Ready::readable() {
+ match event.token() {
+ utils::SERVER => hw_network.accept_client(&poll).unwrap(),
+ Token(tok) => hw_network.client_readable(&poll, tok).unwrap(),
+ }
+ }
+ if event.readiness() & Ready::writable() == Ready::writable() {
+ match event.token() {
+ utils::SERVER => unreachable!(),
+ Token(tok) => hw_network.client_writable(&poll, tok).unwrap(),
+ }
+ }
+ // if event.kind().is_hup() || event.kind().is_error() {
+ // match event.token() {
+ // utils::SERVER => unreachable!(),
+ // Token(tok) => server.client_error(&poll, tok).unwrap(),
+ // }
+ // }
+ }
+ hw_network.on_idle(&poll).unwrap();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/protocol.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,43 @@
+use netbuf;
+use nom::{Err, IResult};
+use std::io::{Read, Result};
+
+pub mod messages;
+mod parser;
+#[cfg(test)]
+pub mod test;
+
+pub struct ProtocolDecoder {
+ buf: netbuf::Buf,
+ consumed: usize,
+}
+
+impl ProtocolDecoder {
+ pub fn new() -> ProtocolDecoder {
+ ProtocolDecoder {
+ buf: netbuf::Buf::new(),
+ consumed: 0,
+ }
+ }
+
+ pub fn read_from<R: Read>(&mut self, stream: &mut R) -> Result<usize> {
+ self.buf.read_from(stream)
+ }
+
+ pub fn extract_messages(&mut self) -> Vec<messages::HWProtocolMessage> {
+ let parse_result = parser::extract_messages(&self.buf[..]);
+ match parse_result {
+ Ok((tail, msgs)) => {
+ self.consumed = self.buf.len() - self.consumed - tail.len();
+ msgs
+ }
+ Err(Err::Incomplete(_)) => unreachable!(),
+ Err(Err::Error(_)) | Err(Err::Failure(_)) => unreachable!(),
+ }
+ }
+
+ pub fn sweep(&mut self) {
+ self.buf.consume(self.consumed);
+ self.consumed = 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/protocol/messages.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,319 @@
+use crate::server::coretypes::{GameCfg, HedgehogInfo, ServerVar, TeamInfo, VoteType};
+use std::{convert::From, iter::once, ops};
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub enum HWProtocolMessage {
+ // core
+ Ping,
+ Pong,
+ Quit(Option<String>),
+ //Cmd(String, Vec<String>),
+ Global(String),
+ Watch(String),
+ ToggleServerRegisteredOnly,
+ SuperPower,
+ Info(String),
+ // not entered state
+ Nick(String),
+ Proto(u16),
+ Password(String, String),
+ Checker(u16, String, String),
+ // lobby
+ List,
+ Chat(String),
+ CreateRoom(String, Option<String>),
+ JoinRoom(String, Option<String>),
+ Follow(String),
+ Rnd(Vec<String>),
+ Kick(String),
+ Ban(String, String, u32),
+ BanIP(String, String, u32),
+ BanNick(String, String, u32),
+ BanList,
+ Unban(String),
+ SetServerVar(ServerVar),
+ GetServerVar,
+ RestartServer,
+ Stats,
+ // in room
+ Part(Option<String>),
+ Cfg(GameCfg),
+ AddTeam(Box<TeamInfo>),
+ RemoveTeam(String),
+ SetHedgehogsNumber(String, u8),
+ SetTeamColor(String, u8),
+ ToggleReady,
+ StartGame,
+ EngineMessage(String),
+ RoundFinished,
+ ToggleRestrictJoin,
+ ToggleRestrictTeams,
+ ToggleRegisteredOnly,
+ RoomName(String),
+ Delegate(String),
+ TeamChat(String),
+ MaxTeams(u8),
+ Fix,
+ Unfix,
+ Greeting(String),
+ CallVote(Option<VoteType>),
+ Vote(bool),
+ ForceVote(bool),
+ Save(String, String),
+ Delete(String),
+ SaveRoom(String),
+ LoadRoom(String),
+ Malformed,
+ Empty,
+}
+
+#[derive(Debug)]
+pub enum HWServerMessage {
+ Ping,
+ Pong,
+ Bye(String),
+ Nick(String),
+ Proto(u16),
+ ServerAuth(String),
+ LobbyLeft(String, String),
+ LobbyJoined(Vec<String>),
+ ChatMsg { nick: String, msg: String },
+ ClientFlags(String, Vec<String>),
+ Rooms(Vec<String>),
+ RoomAdd(Vec<String>),
+ RoomJoined(Vec<String>),
+ RoomLeft(String, String),
+ RoomRemove(String),
+ RoomUpdated(String, Vec<String>),
+ TeamAdd(Vec<String>),
+ TeamRemove(String),
+ TeamAccepted(String),
+ TeamColor(String, u8),
+ HedgehogsNumber(String, u8),
+ ConfigEntry(String, Vec<String>),
+ Kicked,
+ RunGame,
+ ForwardEngineMessage(Vec<String>),
+ RoundFinished,
+
+ ServerMessage(String),
+ Notice(String),
+ Warning(String),
+ Error(String),
+ Connected(u32),
+ Unreachable,
+
+ //Deprecated messages
+ LegacyReady(bool, Vec<String>),
+}
+
+pub fn server_chat(msg: String) -> HWServerMessage {
+ HWServerMessage::ChatMsg {
+ nick: "[server]".to_string(),
+ msg,
+ }
+}
+
+impl GameCfg {
+ pub fn to_protocol(&self) -> (String, Vec<String>) {
+ use crate::server::coretypes::GameCfg::*;
+ match self {
+ FeatureSize(s) => ("FEATURE_SIZE".to_string(), vec![s.to_string()]),
+ MapType(t) => ("MAP".to_string(), vec![t.to_string()]),
+ MapGenerator(g) => ("MAPGEN".to_string(), vec![g.to_string()]),
+ MazeSize(s) => ("MAZE_SIZE".to_string(), vec![s.to_string()]),
+ Seed(s) => ("SEED".to_string(), vec![s.to_string()]),
+ Template(t) => ("TEMPLATE".to_string(), vec![t.to_string()]),
+
+ Ammo(n, None) => ("AMMO".to_string(), vec![n.to_string()]),
+ Ammo(n, Some(s)) => ("AMMO".to_string(), vec![n.to_string(), s.to_string()]),
+ Scheme(n, s) if s.is_empty() => ("SCHEME".to_string(), vec![n.to_string()]),
+ Scheme(n, s) => ("SCHEME".to_string(), {
+ let mut v = vec![n.to_string()];
+ v.extend(s.clone().into_iter());
+ v
+ }),
+ Script(s) => ("SCRIPT".to_string(), vec![s.to_string()]),
+ Theme(t) => ("THEME".to_string(), vec![t.to_string()]),
+ DrawnMap(m) => ("DRAWNMAP".to_string(), vec![m.to_string()]),
+ }
+ }
+
+ pub fn to_server_msg(&self) -> HWServerMessage {
+ use self::HWServerMessage::ConfigEntry;
+ let (name, args) = self.to_protocol();
+ HWServerMessage::ConfigEntry(name, args)
+ }
+}
+
+macro_rules! const_braces {
+ ($e: expr) => {
+ "{}\n"
+ };
+}
+
+macro_rules! msg {
+ [$($part: expr),*] => {
+ format!(concat!($(const_braces!($part)),*, "\n"), $($part),*);
+ };
+}
+
+#[cfg(test)]
+macro_rules! several {
+ [$part: expr] => { once($part) };
+ [$part: expr, $($other: expr),*] => { once($part).chain(several![$($other),*]) };
+}
+
+impl HWProtocolMessage {
+ /** Converts the message to a raw `String`, which can be sent over the network.
+ *
+ * This is the inverse of the `message` parser.
+ */
+ #[cfg(test)]
+ pub(crate) fn to_raw_protocol(&self) -> String {
+ use self::HWProtocolMessage::*;
+ match self {
+ Ping => msg!["PING"],
+ Pong => msg!["PONG"],
+ Quit(None) => msg!["QUIT"],
+ Quit(Some(msg)) => msg!["QUIT", msg],
+ Global(msg) => msg!["CMD", format!("GLOBAL {}", msg)],
+ Watch(name) => msg!["CMD", format!("WATCH {}", name)],
+ ToggleServerRegisteredOnly => msg!["CMD", "REGISTERED_ONLY"],
+ SuperPower => msg!["CMD", "SUPER_POWER"],
+ Info(info) => msg!["CMD", format!("INFO {}", info)],
+ Nick(nick) => msg!("NICK", nick),
+ Proto(version) => msg!["PROTO", version],
+ Password(p, s) => msg!["PASSWORD", p, s],
+ Checker(i, n, p) => msg!["CHECKER", i, n, p],
+ List => msg!["LIST"],
+ Chat(msg) => msg!["CHAT", msg],
+ CreateRoom(name, None) => msg!["CREATE_ROOM", name],
+ CreateRoom(name, Some(password)) => msg!["CREATE_ROOM", name, password],
+ JoinRoom(name, None) => msg!["JOIN_ROOM", name],
+ JoinRoom(name, Some(password)) => msg!["JOIN_ROOM", name, password],
+ Follow(name) => msg!["FOLLOW", name],
+ Rnd(args) => {
+ if args.is_empty() {
+ msg!["CMD", "RND"]
+ } else {
+ msg!["CMD", format!("RND {}", args.join(" "))]
+ }
+ }
+ Kick(name) => msg!["KICK", name],
+ Ban(name, reason, time) => msg!["BAN", name, reason, time],
+ BanIP(ip, reason, time) => msg!["BAN_IP", ip, reason, time],
+ BanNick(nick, reason, time) => msg!("BAN_NICK", nick, reason, time),
+ BanList => msg!["BANLIST"],
+ Unban(name) => msg!["UNBAN", name],
+ //SetServerVar(ServerVar), ???
+ GetServerVar => msg!["GET_SERVER_VAR"],
+ RestartServer => msg!["CMD", "RESTART_SERVER YES"],
+ Stats => msg!["CMD", "STATS"],
+ Part(None) => msg!["PART"],
+ Part(Some(msg)) => msg!["PART", msg],
+ Cfg(config) => {
+ let (name, args) = config.to_protocol();
+ msg!["CFG", name, args.join("\n")]
+ }
+ AddTeam(info) => msg![
+ "ADD_TEAM",
+ info.name,
+ info.color,
+ info.grave,
+ info.fort,
+ info.voice_pack,
+ info.flag,
+ info.difficulty,
+ info.hedgehogs
+ .iter()
+ .flat_map(|h| several![&h.name[..], &h.hat[..]])
+ .collect::<Vec<_>>()
+ .join("\n")
+ ],
+ RemoveTeam(name) => msg!["REMOVE_TEAM", name],
+ SetHedgehogsNumber(team, number) => msg!["HH_NUM", team, number],
+ SetTeamColor(team, color) => msg!["TEAM_COLOR", team, color],
+ ToggleReady => msg!["TOGGLE_READY"],
+ StartGame => msg!["START_GAME"],
+ EngineMessage(msg) => msg!["EM", msg],
+ RoundFinished => msg!["ROUNDFINISHED"],
+ ToggleRestrictJoin => msg!["TOGGLE_RESTRICT_JOINS"],
+ ToggleRestrictTeams => msg!["TOGGLE_RESTRICT_TEAMS"],
+ ToggleRegisteredOnly => msg!["TOGGLE_REGISTERED_ONLY"],
+ RoomName(name) => msg!["ROOM_NAME", name],
+ Delegate(name) => msg!["CMD", format!("DELEGATE {}", name)],
+ TeamChat(msg) => msg!["TEAMCHAT", msg],
+ MaxTeams(count) => msg!["CMD", format!("MAXTEAMS {}", count)],
+ Fix => msg!["CMD", "FIX"],
+ Unfix => msg!["CMD", "UNFIX"],
+ Greeting(msg) => msg!["CMD", format!("GREETING {}", msg)],
+ //CallVote(Option<(String, Option<String>)>) =>, ??
+ Vote(msg) => msg!["CMD", format!("VOTE {}", if *msg { "YES" } else { "NO" })],
+ ForceVote(msg) => msg!["CMD", format!("FORCE {}", if *msg { "YES" } else { "NO" })],
+ Save(name, location) => msg!["CMD", format!("SAVE {} {}", name, location)],
+ Delete(name) => msg!["CMD", format!("DELETE {}", name)],
+ SaveRoom(name) => msg!["CMD", format!("SAVEROOM {}", name)],
+ LoadRoom(name) => msg!["CMD", format!("LOADROOM {}", name)],
+ Malformed => msg!["A", "QUICK", "BROWN", "HOG", "JUMPS", "OVER", "THE", "LAZY", "DOG"],
+ Empty => msg![""],
+ _ => panic!("Protocol message not yet implemented"),
+ }
+ }
+}
+
+fn construct_message(header: &[&str], msg: &[String]) -> String {
+ let mut v: Vec<_> = header.iter().cloned().collect();
+ v.extend(msg.iter().map(|s| &s[..]));
+ v.push("\n");
+ v.join("\n")
+}
+
+impl HWServerMessage {
+ pub fn to_raw_protocol(&self) -> String {
+ use self::HWServerMessage::*;
+ match self {
+ Ping => msg!["PING"],
+ Pong => msg!["PONG"],
+ Connected(protocol_version) => msg![
+ "CONNECTED",
+ "Hedgewars server https://www.hedgewars.org/",
+ protocol_version
+ ],
+ Bye(msg) => msg!["BYE", msg],
+ Nick(nick) => msg!["NICK", nick],
+ Proto(proto) => msg!["PROTO", proto],
+ ServerAuth(hash) => msg!["SERVER_AUTH", hash],
+ LobbyLeft(nick, msg) => msg!["LOBBY:LEFT", nick, msg],
+ LobbyJoined(nicks) => construct_message(&["LOBBY:JOINED"], &nicks),
+ ClientFlags(flags, nicks) => construct_message(&["CLIENT_FLAGS", flags], &nicks),
+ Rooms(info) => construct_message(&["ROOMS"], &info),
+ RoomAdd(info) => construct_message(&["ROOM", "ADD"], &info),
+ RoomJoined(nicks) => construct_message(&["JOINED"], &nicks),
+ RoomLeft(nick, msg) => msg!["LEFT", nick, msg],
+ RoomRemove(name) => msg!["ROOM", "DEL", name],
+ RoomUpdated(name, info) => construct_message(&["ROOM", "UPD", name], &info),
+ TeamAdd(info) => construct_message(&["ADD_TEAM"], &info),
+ TeamRemove(name) => msg!["REMOVE_TEAM", name],
+ TeamAccepted(name) => msg!["TEAM_ACCEPTED", name],
+ TeamColor(name, color) => msg!["TEAM_COLOR", name, color],
+ HedgehogsNumber(name, number) => msg!["HH_NUM", name, number],
+ ConfigEntry(name, values) => construct_message(&["CFG", name], &values),
+ Kicked => msg!["KICKED"],
+ RunGame => msg!["RUN_GAME"],
+ ForwardEngineMessage(em) => construct_message(&["EM"], &em),
+ RoundFinished => msg!["ROUND_FINISHED"],
+ ChatMsg { nick, msg } => msg!["CHAT", nick, msg],
+ ServerMessage(msg) => msg!["SERVER_MESSAGE", msg],
+ Notice(msg) => msg!["NOTICE", msg],
+ Warning(msg) => msg!["WARNING", msg],
+ Error(msg) => msg!["ERROR", msg],
+
+ LegacyReady(is_ready, nicks) => {
+ construct_message(&[if *is_ready { "READY" } else { "NOT_READY" }], &nicks)
+ }
+
+ _ => msg!["ERROR", "UNIMPLEMENTED"],
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/protocol/parser.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,306 @@
+/** The parsers for the chat and multiplayer protocol. The main parser is `message`.
+ * # Protocol
+ * All messages consist of `\n`-separated strings. The end of a message is
+ * indicated by a double newline - `\n\n`.
+ *
+ * For example, a nullary command like PING will be actually sent as `PING\n\n`.
+ * A unary command, such as `START_GAME nick` will be actually sent as `START_GAME\nnick\n\n`.
+ */
+use nom::*;
+
+use super::messages::{HWProtocolMessage, HWProtocolMessage::*};
+use crate::server::coretypes::{GameCfg, HedgehogInfo, TeamInfo, VoteType, MAX_HEDGEHOGS_PER_TEAM};
+use std::{ops::Range, str, str::FromStr};
+#[cfg(test)]
+use {
+ super::test::gen_proto_msg,
+ proptest::{proptest, proptest_helper},
+};
+
+named!(end_of_message, tag!("\n\n"));
+named!(str_line<&[u8], &str>, map_res!(not_line_ending, str::from_utf8));
+named!( a_line<&[u8], String>, map!(str_line, String::from));
+named!(cmd_arg<&[u8], String>,
+ map!(map_res!(take_until_either!(" \n"), str::from_utf8), String::from));
+named!( u8_line<&[u8], u8>, map_res!(str_line, FromStr::from_str));
+named!(u16_line<&[u8], u16>, map_res!(str_line, FromStr::from_str));
+named!(u32_line<&[u8], u32>, map_res!(str_line, FromStr::from_str));
+named!(yes_no_line<&[u8], bool>, alt!(
+ do_parse!(tag_no_case!("YES") >> (true))
+ | do_parse!(tag_no_case!("NO") >> (false))));
+named!(opt_param<&[u8], Option<String> >, alt!(
+ do_parse!(peek!(tag!("\n\n")) >> (None))
+ | do_parse!(tag!("\n") >> s: str_line >> (Some(s.to_string())))));
+named!(spaces<&[u8], &[u8]>, preceded!(tag!(" "), eat_separator!(" ")));
+named!(opt_space_param<&[u8], Option<String> >, alt!(
+ do_parse!(peek!(tag!("\n\n")) >> (None))
+ | do_parse!(spaces >> s: str_line >> (Some(s.to_string())))));
+named!(hog_line<&[u8], HedgehogInfo>,
+ do_parse!(name: str_line >> eol >> hat: str_line >>
+ (HedgehogInfo{name: name.to_string(), hat: hat.to_string()})));
+named!(_8_hogs<&[u8], [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize]>,
+ do_parse!(h1: hog_line >> eol >> h2: hog_line >> eol >>
+ h3: hog_line >> eol >> h4: hog_line >> eol >>
+ h5: hog_line >> eol >> h6: hog_line >> eol >>
+ h7: hog_line >> eol >> h8: hog_line >>
+ ([h1, h2, h3, h4, h5, h6, h7, h8])));
+named!(voting<&[u8], VoteType>, alt!(
+ do_parse!(tag_no_case!("KICK") >> spaces >> n: a_line >>
+ (VoteType::Kick(n)))
+ | do_parse!(tag_no_case!("MAP") >>
+ n: opt!(preceded!(spaces, a_line)) >>
+ (VoteType::Map(n)))
+ | do_parse!(tag_no_case!("PAUSE") >>
+ (VoteType::Pause))
+ | do_parse!(tag_no_case!("NEWSEED") >>
+ (VoteType::NewSeed))
+ | do_parse!(tag_no_case!("HEDGEHOGS") >> spaces >> n: u8_line >>
+ (VoteType::HedgehogsPerTeam(n)))));
+
+/** Recognizes messages which do not take any parameters */
+named!(basic_message<&[u8], HWProtocolMessage>, alt!(
+ do_parse!(tag!("PING") >> (Ping))
+ | do_parse!(tag!("PONG") >> (Pong))
+ | do_parse!(tag!("LIST") >> (List))
+ | do_parse!(tag!("BANLIST") >> (BanList))
+ | do_parse!(tag!("GET_SERVER_VAR") >> (GetServerVar))
+ | do_parse!(tag!("TOGGLE_READY") >> (ToggleReady))
+ | do_parse!(tag!("START_GAME") >> (StartGame))
+ | do_parse!(tag!("ROUNDFINISHED") >> _m: opt_param >> (RoundFinished))
+ | do_parse!(tag!("TOGGLE_RESTRICT_JOINS") >> (ToggleRestrictJoin))
+ | do_parse!(tag!("TOGGLE_RESTRICT_TEAMS") >> (ToggleRestrictTeams))
+ | do_parse!(tag!("TOGGLE_REGISTERED_ONLY") >> (ToggleRegisteredOnly))
+));
+
+/** Recognizes messages which take exactly one parameter */
+named!(one_param_message<&[u8], HWProtocolMessage>, alt!(
+ do_parse!(tag!("NICK") >> eol >> n: a_line >> (Nick(n)))
+ | do_parse!(tag!("INFO") >> eol >> n: a_line >> (Info(n)))
+ | do_parse!(tag!("CHAT") >> eol >> m: a_line >> (Chat(m)))
+ | do_parse!(tag!("PART") >> msg: opt_param >> (Part(msg)))
+ | do_parse!(tag!("FOLLOW") >> eol >> n: a_line >> (Follow(n)))
+ | do_parse!(tag!("KICK") >> eol >> n: a_line >> (Kick(n)))
+ | do_parse!(tag!("UNBAN") >> eol >> n: a_line >> (Unban(n)))
+ | do_parse!(tag!("EM") >> eol >> m: a_line >> (EngineMessage(m)))
+ | do_parse!(tag!("TEAMCHAT") >> eol >> m: a_line >> (TeamChat(m)))
+ | do_parse!(tag!("ROOM_NAME") >> eol >> n: a_line >> (RoomName(n)))
+ | do_parse!(tag!("REMOVE_TEAM") >> eol >> n: a_line >> (RemoveTeam(n)))
+
+ | do_parse!(tag!("PROTO") >> eol >> d: u16_line >> (Proto(d)))
+
+ | do_parse!(tag!("QUIT") >> msg: opt_param >> (Quit(msg)))
+));
+
+/** Recognizes messages preceded with CMD */
+named!(cmd_message<&[u8], HWProtocolMessage>, preceded!(tag!("CMD\n"), alt!(
+ do_parse!(tag_no_case!("STATS") >> (Stats))
+ | do_parse!(tag_no_case!("FIX") >> (Fix))
+ | do_parse!(tag_no_case!("UNFIX") >> (Unfix))
+ | do_parse!(tag_no_case!("RESTART_SERVER") >> spaces >> tag!("YES") >> (RestartServer))
+ | do_parse!(tag_no_case!("REGISTERED_ONLY") >> (ToggleServerRegisteredOnly))
+ | do_parse!(tag_no_case!("SUPER_POWER") >> (SuperPower))
+ | do_parse!(tag_no_case!("PART") >> m: opt_space_param >> (Part(m)))
+ | do_parse!(tag_no_case!("QUIT") >> m: opt_space_param >> (Quit(m)))
+ | do_parse!(tag_no_case!("DELEGATE") >> spaces >> n: a_line >> (Delegate(n)))
+ | do_parse!(tag_no_case!("SAVE") >> spaces >> n: cmd_arg >> spaces >> l: cmd_arg >> (Save(n, l)))
+ | do_parse!(tag_no_case!("DELETE") >> spaces >> n: a_line >> (Delete(n)))
+ | do_parse!(tag_no_case!("SAVEROOM") >> spaces >> r: a_line >> (SaveRoom(r)))
+ | do_parse!(tag_no_case!("LOADROOM") >> spaces >> r: a_line >> (LoadRoom(r)))
+ | do_parse!(tag_no_case!("GLOBAL") >> spaces >> m: a_line >> (Global(m)))
+ | do_parse!(tag_no_case!("WATCH") >> spaces >> i: a_line >> (Watch(i)))
+ | do_parse!(tag_no_case!("GREETING") >> spaces >> m: a_line >> (Greeting(m)))
+ | do_parse!(tag_no_case!("VOTE") >> spaces >> m: yes_no_line >> (Vote(m)))
+ | do_parse!(tag_no_case!("FORCE") >> spaces >> m: yes_no_line >> (ForceVote(m)))
+ | do_parse!(tag_no_case!("INFO") >> spaces >> n: a_line >> (Info(n)))
+ | do_parse!(tag_no_case!("MAXTEAMS") >> spaces >> n: u8_line >> (MaxTeams(n)))
+ | do_parse!(tag_no_case!("CALLVOTE") >>
+ v: opt!(preceded!(spaces, voting)) >> (CallVote(v)))
+ | do_parse!(
+ tag_no_case!("RND") >> alt!(spaces | peek!(end_of_message)) >>
+ v: str_line >>
+ (Rnd(v.split_whitespace().map(String::from).collect())))
+)));
+
+named!(complex_message<&[u8], HWProtocolMessage>, alt!(
+ do_parse!(tag!("PASSWORD") >> eol >>
+ p: a_line >> eol >>
+ s: a_line >>
+ (Password(p, s)))
+ | do_parse!(tag!("CHECKER") >> eol >>
+ i: u16_line >> eol >>
+ n: a_line >> eol >>
+ p: a_line >>
+ (Checker(i, n, p)))
+ | do_parse!(tag!("CREATE_ROOM") >> eol >>
+ n: a_line >>
+ p: opt_param >>
+ (CreateRoom(n, p)))
+ | do_parse!(tag!("JOIN_ROOM") >> eol >>
+ n: a_line >>
+ p: opt_param >>
+ (JoinRoom(n, p)))
+ | do_parse!(tag!("ADD_TEAM") >> eol >>
+ name: a_line >> eol >>
+ color: u8_line >> eol >>
+ grave: a_line >> eol >>
+ fort: a_line >> eol >>
+ voice_pack: a_line >> eol >>
+ flag: a_line >> eol >>
+ difficulty: u8_line >> eol >>
+ hedgehogs: _8_hogs >>
+ (AddTeam(Box::new(TeamInfo{
+ name, color, grave, fort,
+ voice_pack, flag, difficulty,
+ hedgehogs, hedgehogs_number: 0
+ }))))
+ | do_parse!(tag!("HH_NUM") >> eol >>
+ n: a_line >> eol >>
+ c: u8_line >>
+ (SetHedgehogsNumber(n, c)))
+ | do_parse!(tag!("TEAM_COLOR") >> eol >>
+ n: a_line >> eol >>
+ c: u8_line >>
+ (SetTeamColor(n, c)))
+ | do_parse!(tag!("BAN") >> eol >>
+ n: a_line >> eol >>
+ r: a_line >> eol >>
+ t: u32_line >>
+ (Ban(n, r, t)))
+ | do_parse!(tag!("BAN_IP") >> eol >>
+ n: a_line >> eol >>
+ r: a_line >> eol >>
+ t: u32_line >>
+ (BanIP(n, r, t)))
+ | do_parse!(tag!("BAN_NICK") >> eol >>
+ n: a_line >> eol >>
+ r: a_line >> eol >>
+ t: u32_line >>
+ (BanNick(n, r, t)))
+));
+
+named!(cfg_message<&[u8], HWProtocolMessage>, preceded!(tag!("CFG\n"), map!(alt!(
+ do_parse!(tag!("THEME") >> eol >>
+ name: a_line >>
+ (GameCfg::Theme(name)))
+ | do_parse!(tag!("SCRIPT") >> eol >>
+ name: a_line >>
+ (GameCfg::Script(name)))
+ | do_parse!(tag!("AMMO") >> eol >>
+ name: a_line >>
+ value: opt_param >>
+ (GameCfg::Ammo(name, value)))
+ | do_parse!(tag!("SCHEME") >> eol >>
+ name: a_line >>
+ values: opt!(preceded!(eol, separated_list!(eol, a_line))) >>
+ (GameCfg::Scheme(name, values.unwrap_or_default())))
+ | do_parse!(tag!("FEATURE_SIZE") >> eol >>
+ value: u32_line >>
+ (GameCfg::FeatureSize(value)))
+ | do_parse!(tag!("MAP") >> eol >>
+ value: a_line >>
+ (GameCfg::MapType(value)))
+ | do_parse!(tag!("MAPGEN") >> eol >>
+ value: u32_line >>
+ (GameCfg::MapGenerator(value)))
+ | do_parse!(tag!("MAZE_SIZE") >> eol >>
+ value: u32_line >>
+ (GameCfg::MazeSize(value)))
+ | do_parse!(tag!("SEED") >> eol >>
+ value: a_line >>
+ (GameCfg::Seed(value)))
+ | do_parse!(tag!("TEMPLATE") >> eol >>
+ value: u32_line >>
+ (GameCfg::Template(value)))
+ | do_parse!(tag!("DRAWNMAP") >> eol >>
+ value: a_line >>
+ (GameCfg::DrawnMap(value)))
+), Cfg)));
+
+named!(malformed_message<&[u8], HWProtocolMessage>,
+ do_parse!(separated_list!(eol, a_line) >> (Malformed)));
+
+named!(empty_message<&[u8], HWProtocolMessage>,
+ do_parse!(alt!(end_of_message | eol) >> (Empty)));
+
+named!(message<&[u8], HWProtocolMessage>, alt!(terminated!(
+ alt!(
+ basic_message
+ | one_param_message
+ | cmd_message
+ | complex_message
+ | cfg_message
+ ), end_of_message
+ )
+ | terminated!(malformed_message, end_of_message)
+ | empty_message
+ )
+);
+
+named!(pub extract_messages<&[u8], Vec<HWProtocolMessage> >, many0!(complete!(message)));
+
+#[cfg(test)]
+proptest! {
+ #[test]
+ fn is_parser_composition_idempotent(ref msg in gen_proto_msg()) {
+ println!("!! Msg: {:?}, Bytes: {:?} !!", msg, msg.to_raw_protocol().as_bytes());
+ assert_eq!(message(msg.to_raw_protocol().as_bytes()), Ok((&b""[..], msg.clone())))
+ }
+}
+
+#[test]
+fn parse_test() {
+ assert_eq!(message(b"PING\n\n"), Ok((&b""[..], Ping)));
+ assert_eq!(message(b"START_GAME\n\n"), Ok((&b""[..], StartGame)));
+ assert_eq!(
+ message(b"NICK\nit's me\n\n"),
+ Ok((&b""[..], Nick("it's me".to_string())))
+ );
+ assert_eq!(message(b"PROTO\n51\n\n"), Ok((&b""[..], Proto(51))));
+ assert_eq!(
+ message(b"QUIT\nbye-bye\n\n"),
+ Ok((&b""[..], Quit(Some("bye-bye".to_string()))))
+ );
+ assert_eq!(message(b"QUIT\n\n"), Ok((&b""[..], Quit(None))));
+ assert_eq!(
+ message(b"CMD\nwatch demo\n\n"),
+ Ok((&b""[..], Watch("demo".to_string())))
+ );
+ assert_eq!(
+ message(b"BAN\nme\nbad\n77\n\n"),
+ Ok((&b""[..], Ban("me".to_string(), "bad".to_string(), 77)))
+ );
+
+ assert_eq!(message(b"CMD\nPART\n\n"), Ok((&b""[..], Part(None))));
+ assert_eq!(
+ message(b"CMD\nPART _msg_\n\n"),
+ Ok((&b""[..], Part(Some("_msg_".to_string()))))
+ );
+
+ assert_eq!(message(b"CMD\nRND\n\n"), Ok((&b""[..], Rnd(vec![]))));
+ assert_eq!(
+ message(b"CMD\nRND A B\n\n"),
+ Ok((&b""[..], Rnd(vec![String::from("A"), String::from("B")])))
+ );
+
+ assert_eq!(
+ extract_messages(b"QUIT\n1\n2\n\n"),
+ Ok((&b""[..], vec![Malformed]))
+ );
+
+ assert_eq!(
+ extract_messages(b"PING\n\nPING\n\nP"),
+ Ok((&b"P"[..], vec![Ping, Ping]))
+ );
+ assert_eq!(
+ extract_messages(b"SING\n\nPING\n\n"),
+ Ok((&b""[..], vec![Malformed, Ping]))
+ );
+ assert_eq!(
+ extract_messages(b"\n\n\n\nPING\n\n"),
+ Ok((&b""[..], vec![Empty, Empty, Ping]))
+ );
+ assert_eq!(
+ extract_messages(b"\n\n\nPING\n\n"),
+ Ok((&b""[..], vec![Empty, Empty, Ping]))
+ );
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/protocol/test.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,213 @@
+use proptest::{
+ arbitrary::{any, any_with, Arbitrary, StrategyFor},
+ strategy::{BoxedStrategy, Just, Map, Strategy},
+ test_runner::{Reason, TestRunner},
+};
+
+use crate::server::coretypes::{GameCfg, HedgehogInfo, TeamInfo};
+
+use super::messages::{HWProtocolMessage, HWProtocolMessage::*};
+
+// Due to inability to define From between Options
+trait Into2<T>: Sized {
+ fn into2(self) -> T;
+}
+impl<T> Into2<T> for T {
+ fn into2(self) -> T {
+ self
+ }
+}
+impl Into2<Vec<String>> for Vec<Ascii> {
+ fn into2(self) -> Vec<String> {
+ self.into_iter().map(|x| x.0).collect()
+ }
+}
+impl Into2<String> for Ascii {
+ fn into2(self) -> String {
+ self.0
+ }
+}
+impl Into2<Option<String>> for Option<Ascii> {
+ fn into2(self) -> Option<String> {
+ self.map(|x| x.0)
+ }
+}
+
+macro_rules! proto_msg_case {
+ ($val: ident()) => {
+ Just($val)
+ };
+ ($val: ident($arg: ty)) => {
+ any::<$arg>().prop_map(|v| $val(v.into2()))
+ };
+ ($val: ident($arg1: ty, $arg2: ty)) => {
+ any::<($arg1, $arg2)>().prop_map(|v| $val(v.0.into2(), v.1.into2()))
+ };
+ ($val: ident($arg1: ty, $arg2: ty, $arg3: ty)) => {
+ any::<($arg1, $arg2, $arg3)>().prop_map(|v| $val(v.0.into2(), v.1.into2(), v.2.into2()))
+ };
+}
+
+macro_rules! proto_msg_match {
+ ($var: expr, def = $default: expr, $($num: expr => $constr: ident $res: tt),*) => (
+ match $var {
+ $($num => (proto_msg_case!($constr $res)).boxed()),*,
+ _ => Just($default).boxed()
+ }
+ )
+}
+
+/// Wrapper type for generating non-empty strings
+#[derive(Debug)]
+struct Ascii(String);
+
+impl Arbitrary for Ascii {
+ type Parameters = <String as Arbitrary>::Parameters;
+
+ fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
+ "[a-zA-Z0-9]+".prop_map(Ascii).boxed()
+ }
+
+ type Strategy = BoxedStrategy<Ascii>;
+}
+
+impl Arbitrary for GameCfg {
+ type Parameters = ();
+
+ fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
+ use crate::server::coretypes::GameCfg::*;
+ (0..10)
+ .no_shrink()
+ .prop_flat_map(|i| {
+ proto_msg_match!(i, def = FeatureSize(0),
+ 0 => FeatureSize(u32),
+ 1 => MapType(Ascii),
+ 2 => MapGenerator(u32),
+ 3 => MazeSize(u32),
+ 4 => Seed(Ascii),
+ 5 => Template(u32),
+ 6 => Ammo(Ascii, Option<Ascii>),
+ 7 => Scheme(Ascii, Vec<Ascii>),
+ 8 => Script(Ascii),
+ 9 => Theme(Ascii),
+ 10 => DrawnMap(Ascii))
+ })
+ .boxed()
+ }
+
+ type Strategy = BoxedStrategy<GameCfg>;
+}
+
+impl Arbitrary for TeamInfo {
+ type Parameters = ();
+
+ fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
+ (
+ "[a-z]+",
+ 0u8..127u8,
+ "[a-z]+",
+ "[a-z]+",
+ "[a-z]+",
+ "[a-z]+",
+ 0u8..127u8,
+ )
+ .prop_map(|(name, color, grave, fort, voice_pack, flag, difficulty)| {
+ fn hog(n: u8) -> HedgehogInfo {
+ HedgehogInfo {
+ name: format!("hog{}", n),
+ hat: format!("hat{}", n),
+ }
+ }
+ let hedgehogs = [
+ hog(1),
+ hog(2),
+ hog(3),
+ hog(4),
+ hog(5),
+ hog(6),
+ hog(7),
+ hog(8),
+ ];
+ TeamInfo {
+ name,
+ color,
+ grave,
+ fort,
+ voice_pack,
+ flag,
+ difficulty,
+ hedgehogs,
+ hedgehogs_number: 0,
+ }
+ })
+ .boxed()
+ }
+
+ type Strategy = BoxedStrategy<TeamInfo>;
+}
+
+pub fn gen_proto_msg() -> BoxedStrategy<HWProtocolMessage> where {
+ let res = (0..58).no_shrink().prop_flat_map(|i| {
+ proto_msg_match!(i, def = Malformed,
+ 0 => Ping(),
+ 1 => Pong(),
+ 2 => Quit(Option<Ascii>),
+ //3 => Cmd
+ 4 => Global(Ascii),
+ 5 => Watch(Ascii),
+ 6 => ToggleServerRegisteredOnly(),
+ 7 => SuperPower(),
+ 8 => Info(Ascii),
+ 9 => Nick(Ascii),
+ 10 => Proto(u16),
+ 11 => Password(Ascii, Ascii),
+ 12 => Checker(u16, Ascii, Ascii),
+ 13 => List(),
+ 14 => Chat(Ascii),
+ 15 => CreateRoom(Ascii, Option<Ascii>),
+ 16 => JoinRoom(Ascii, Option<Ascii>),
+ 17 => Follow(Ascii),
+ 18 => Rnd(Vec<Ascii>),
+ 19 => Kick(Ascii),
+ 20 => Ban(Ascii, Ascii, u32),
+ 21 => BanIP(Ascii, Ascii, u32),
+ 22 => BanNick(Ascii, Ascii, u32),
+ 23 => BanList(),
+ 24 => Unban(Ascii),
+ //25 => SetServerVar(ServerVar),
+ 26 => GetServerVar(),
+ 27 => RestartServer(),
+ 28 => Stats(),
+ 29 => Part(Option<Ascii>),
+ 30 => Cfg(GameCfg),
+ 31 => AddTeam(Box<TeamInfo>),
+ 32 => RemoveTeam(Ascii),
+ 33 => SetHedgehogsNumber(Ascii, u8),
+ 34 => SetTeamColor(Ascii, u8),
+ 35 => ToggleReady(),
+ 36 => StartGame(),
+ 37 => EngineMessage(Ascii),
+ 38 => RoundFinished(),
+ 39 => ToggleRestrictJoin(),
+ 40 => ToggleRestrictTeams(),
+ 41 => ToggleRegisteredOnly(),
+ 42 => RoomName(Ascii),
+ 43 => Delegate(Ascii),
+ 44 => TeamChat(Ascii),
+ 45 => MaxTeams(u8),
+ 46 => Fix(),
+ 47 => Unfix(),
+ 48 => Greeting(Ascii),
+ //49 => CallVote(Option<(String, Option<String>)>),
+ 50 => Vote(bool),
+ 51 => ForceVote(bool),
+ 52 => Save(Ascii, Ascii),
+ 53 => Delete(Ascii),
+ 54 => SaveRoom(Ascii),
+ 55 => LoadRoom(Ascii),
+ 56 => Malformed(),
+ 57 => Empty()
+ )
+ });
+ res.boxed()
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,10 @@
+mod actions;
+pub mod client;
+pub mod core;
+pub mod coretypes;
+#[cfg(feature = "official-server")]
+mod database;
+mod handlers;
+pub mod io;
+pub mod network;
+pub mod room;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/actions.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,800 @@
+use super::{
+ client::HWClient,
+ core::HWServer,
+ coretypes::{ClientId, GameCfg, RoomId, VoteType},
+ handlers,
+ room::HWRoom,
+ room::{GameInfo, RoomFlags},
+};
+use crate::{
+ protocol::messages::{server_chat, HWProtocolMessage, HWServerMessage, HWServerMessage::*},
+ utils::to_engine_msg,
+};
+use rand::{distributions::Uniform, thread_rng, Rng};
+use std::{io, io::Write, iter::once, mem::replace};
+
+#[cfg(feature = "official-server")]
+use super::database;
+
+pub enum Destination {
+ ToId(ClientId),
+ ToSelf,
+ ToAll {
+ room_id: Option<RoomId>,
+ protocol: Option<u16>,
+ skip_self: bool,
+ },
+}
+
+pub struct PendingMessage {
+ pub destination: Destination,
+ pub message: HWServerMessage,
+}
+
+impl PendingMessage {
+ pub fn send(message: HWServerMessage, client_id: ClientId) -> PendingMessage {
+ PendingMessage {
+ destination: Destination::ToId(client_id),
+ message,
+ }
+ }
+
+ pub fn send_self(message: HWServerMessage) -> PendingMessage {
+ PendingMessage {
+ destination: Destination::ToSelf,
+ message,
+ }
+ }
+
+ pub fn send_all(message: HWServerMessage) -> PendingMessage {
+ let destination = Destination::ToAll {
+ room_id: None,
+ protocol: None,
+ skip_self: false,
+ };
+ PendingMessage {
+ destination,
+ message,
+ }
+ }
+
+ pub fn in_room(mut self, clients_room_id: RoomId) -> PendingMessage {
+ if let Destination::ToAll {
+ ref mut room_id, ..
+ } = self.destination
+ {
+ *room_id = Some(clients_room_id)
+ }
+ self
+ }
+
+ pub fn with_protocol(mut self, protocol_number: u16) -> PendingMessage {
+ if let Destination::ToAll {
+ ref mut protocol, ..
+ } = self.destination
+ {
+ *protocol = Some(protocol_number)
+ }
+ self
+ }
+
+ pub fn but_self(mut self) -> PendingMessage {
+ if let Destination::ToAll {
+ ref mut skip_self, ..
+ } = self.destination
+ {
+ *skip_self = true
+ }
+ self
+ }
+
+ pub fn action(self) -> Action {
+ Send(self)
+ }
+}
+
+impl Into<Action> for PendingMessage {
+ fn into(self) -> Action {
+ self.action()
+ }
+}
+
+impl HWServerMessage {
+ pub fn send(self, client_id: ClientId) -> PendingMessage {
+ PendingMessage::send(self, client_id)
+ }
+ pub fn send_self(self) -> PendingMessage {
+ PendingMessage::send_self(self)
+ }
+ pub fn send_all(self) -> PendingMessage {
+ PendingMessage::send_all(self)
+ }
+}
+
+pub enum Action {
+ Send(PendingMessage),
+ RemoveClient,
+ ByeClient(String),
+ ReactProtocolMessage(HWProtocolMessage),
+ CheckRegistered,
+ JoinLobby,
+ RemoveRoom(RoomId),
+ MoveToRoom(RoomId),
+ MoveToLobby(String),
+ ChangeMaster(RoomId, Option<ClientId>),
+ RemoveTeam(String),
+ RemoveClientTeams,
+ SendRoomUpdate(Option<String>),
+ StartRoomGame(RoomId),
+ SendTeamRemovalMessage(String),
+ FinishRoomGame(RoomId),
+ SendRoomData {
+ to: ClientId,
+ teams: bool,
+ config: bool,
+ flags: bool,
+ },
+ AddVote {
+ vote: bool,
+ is_forced: bool,
+ },
+ ApplyVoting(VoteType, RoomId),
+ Warn(String),
+ ProtocolError(String),
+}
+
+use self::Action::*;
+
+pub fn run_action(server: &mut HWServer, client_id: usize, action: Action) {
+ match action {
+ Send(msg) => server.send(client_id, &msg.destination, msg.message),
+ ByeClient(msg) => {
+ let c = &server.clients[client_id];
+ let nick = c.nick.clone();
+
+ if let Some(id) = c.room_id {
+ if id != server.lobby_id {
+ server.react(
+ client_id,
+ vec![MoveToLobby(format!("quit: {}", msg.clone()))],
+ );
+ }
+ }
+
+ server.react(
+ client_id,
+ vec![
+ LobbyLeft(nick, msg.clone()).send_all().action(),
+ Bye(msg).send_self().action(),
+ RemoveClient,
+ ],
+ );
+ }
+ RemoveClient => {
+ server.removed_clients.push(client_id);
+ if server.clients.contains(client_id) {
+ server.clients.remove(client_id);
+ }
+ }
+ ReactProtocolMessage(msg) => handlers::handle(server, client_id, msg),
+ CheckRegistered => {
+ let client = &server.clients[client_id];
+ if client.protocol_number > 0 && client.nick != "" {
+ let has_nick_clash = server
+ .clients
+ .iter()
+ .any(|(id, c)| id != client_id && c.nick == client.nick);
+
+ let actions = if !client.is_checker() && has_nick_clash {
+ if client.protocol_number < 38 {
+ vec![ByeClient("Nickname is already in use".to_string())]
+ } else {
+ server.clients[client_id].nick.clear();
+ vec![Notice("NickAlreadyInUse".to_string()).send_self().action()]
+ }
+ } else {
+ vec![JoinLobby]
+ };
+ server.react(client_id, actions);
+ }
+ }
+ JoinLobby => {
+ server.clients[client_id].room_id = Some(server.lobby_id);
+
+ let mut lobby_nicks = Vec::new();
+ for (_, c) in server.clients.iter() {
+ if c.room_id.is_some() {
+ lobby_nicks.push(c.nick.clone());
+ }
+ }
+ let joined_msg = LobbyJoined(lobby_nicks);
+
+ let everyone_msg = LobbyJoined(vec![server.clients[client_id].nick.clone()]);
+ let flags_msg = ClientFlags(
+ "+i".to_string(),
+ server
+ .clients
+ .iter()
+ .filter(|(_, c)| c.room_id.is_some())
+ .map(|(_, c)| c.nick.clone())
+ .collect(),
+ );
+ let server_msg = ServerMessage("\u{1f994} is watching".to_string());
+ let rooms_msg = Rooms(
+ server
+ .rooms
+ .iter()
+ .filter(|(id, _)| *id != server.lobby_id)
+ .flat_map(|(_, r)| r.info(r.master_id.map(|id| &server.clients[id])))
+ .collect(),
+ );
+ server.react(
+ client_id,
+ vec![
+ everyone_msg.send_all().but_self().action(),
+ joined_msg.send_self().action(),
+ flags_msg.send_self().action(),
+ server_msg.send_self().action(),
+ rooms_msg.send_self().action(),
+ ],
+ );
+ }
+ RemoveRoom(room_id) => {
+ let r = &mut server.rooms[room_id];
+ let actions = vec![RoomRemove(r.name.clone())
+ .send_all()
+ .with_protocol(r.protocol_number)
+ .action()];
+ server.rooms.remove(room_id);
+ server.react(client_id, actions);
+ }
+ MoveToRoom(room_id) => {
+ let r = &mut server.rooms[room_id];
+ let c = &mut server.clients[client_id];
+ r.players_number += 1;
+ c.room_id = Some(room_id);
+
+ let is_master = r.master_id == Some(c.id);
+ c.set_is_master(is_master);
+ c.set_is_ready(is_master);
+ c.set_is_joined_mid_game(false);
+
+ if is_master {
+ r.ready_players_number += 1;
+ }
+
+ let mut v = vec![
+ RoomJoined(vec![c.nick.clone()])
+ .send_all()
+ .in_room(room_id)
+ .action(),
+ ClientFlags("+i".to_string(), vec![c.nick.clone()])
+ .send_all()
+ .action(),
+ SendRoomUpdate(None),
+ ];
+
+ if !r.greeting.is_empty() {
+ v.push(
+ ChatMsg {
+ nick: "[greeting]".to_string(),
+ msg: r.greeting.clone(),
+ }
+ .send_self()
+ .action(),
+ );
+ }
+
+ if !c.is_master() {
+ let team_names: Vec<_>;
+ if let Some(ref mut info) = r.game_info {
+ c.set_is_in_game(true);
+ c.set_is_joined_mid_game(true);
+
+ {
+ let teams = info.client_teams(c.id);
+ c.teams_in_game = teams.clone().count() as u8;
+ c.clan = teams.clone().next().map(|t| t.color);
+ team_names = teams.map(|t| t.name.clone()).collect();
+ }
+
+ if !team_names.is_empty() {
+ info.left_teams.retain(|name| !team_names.contains(&name));
+ info.teams_in_game += team_names.len() as u8;
+ r.teams = info
+ .teams_at_start
+ .iter()
+ .filter(|(_, t)| !team_names.contains(&t.name))
+ .cloned()
+ .collect();
+ }
+ } else {
+ team_names = Vec::new();
+ }
+
+ v.push(SendRoomData {
+ to: client_id,
+ teams: true,
+ config: true,
+ flags: true,
+ });
+
+ if let Some(ref info) = r.game_info {
+ v.push(RunGame.send_self().action());
+ v.push(
+ ClientFlags("+g".to_string(), vec![c.nick.clone()])
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ );
+ v.push(
+ ForwardEngineMessage(vec![to_engine_msg("e$spectate 1".bytes())])
+ .send_self()
+ .action(),
+ );
+ v.push(
+ ForwardEngineMessage(info.msg_log.clone())
+ .send_self()
+ .action(),
+ );
+
+ for name in &team_names {
+ v.push(
+ ForwardEngineMessage(vec![to_engine_msg(
+ once(b'G').chain(name.bytes()),
+ )])
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ );
+ }
+ if info.is_paused {
+ v.push(
+ ForwardEngineMessage(vec![to_engine_msg(once(b'I'))])
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ )
+ }
+ }
+ }
+ server.react(client_id, v);
+ }
+ SendRoomData {
+ to,
+ teams,
+ config,
+ flags,
+ } => {
+ let mut actions = Vec::new();
+ let room_id = server.clients[client_id].room_id;
+ if let Some(r) = room_id.and_then(|id| server.rooms.get(id)) {
+ if config {
+ actions.push(
+ ConfigEntry("FULLMAPCONFIG".to_string(), r.map_config())
+ .send(to)
+ .action(),
+ );
+ for cfg in r.game_config() {
+ actions.push(cfg.to_server_msg().send(to).action());
+ }
+ }
+ if teams {
+ let current_teams = match r.game_info {
+ Some(ref info) => &info.teams_at_start,
+ None => &r.teams,
+ };
+ for (owner_id, team) in current_teams.iter() {
+ actions.push(
+ TeamAdd(HWRoom::team_info(&server.clients[*owner_id], &team))
+ .send(to)
+ .action(),
+ );
+ actions.push(TeamColor(team.name.clone(), team.color).send(to).action());
+ actions.push(
+ HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
+ .send(to)
+ .action(),
+ );
+ }
+ }
+ if flags {
+ if let Some(id) = r.master_id {
+ actions.push(
+ ClientFlags("+h".to_string(), vec![server.clients[id].nick.clone()])
+ .send(to)
+ .action(),
+ );
+ }
+ let nicks: Vec<_> = server
+ .clients
+ .iter()
+ .filter(|(_, c)| c.room_id == Some(r.id) && c.is_ready())
+ .map(|(_, c)| c.nick.clone())
+ .collect();
+ if !nicks.is_empty() {
+ actions.push(ClientFlags("+r".to_string(), nicks).send(to).action());
+ }
+ }
+ }
+ server.react(client_id, actions);
+ }
+ AddVote { vote, is_forced } => {
+ let mut actions = Vec::new();
+ if let Some(r) = server.room(client_id) {
+ let mut result = None;
+ if let Some(ref mut voting) = r.voting {
+ if is_forced || voting.votes.iter().all(|(id, _)| client_id != *id) {
+ actions.push(
+ server_chat("Your vote has been counted.".to_string())
+ .send_self()
+ .action(),
+ );
+ voting.votes.push((client_id, vote));
+ let i = voting.votes.iter();
+ let pro = i.clone().filter(|(_, v)| *v).count();
+ let contra = i.filter(|(_, v)| !*v).count();
+ let success_quota = voting.voters.len() / 2 + 1;
+ if is_forced && vote || pro >= success_quota {
+ result = Some(true);
+ } else if is_forced && !vote || contra > voting.voters.len() - success_quota
+ {
+ result = Some(false);
+ }
+ } else {
+ actions.push(
+ server_chat("You already have voted.".to_string())
+ .send_self()
+ .action(),
+ );
+ }
+ } else {
+ actions.push(
+ server_chat("There's no voting going on.".to_string())
+ .send_self()
+ .action(),
+ );
+ }
+
+ if let Some(res) = result {
+ actions.push(
+ server_chat("Voting closed.".to_string())
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ );
+ let voting = replace(&mut r.voting, None).unwrap();
+ if res {
+ actions.push(ApplyVoting(voting.kind, r.id));
+ }
+ }
+ }
+
+ server.react(client_id, actions);
+ }
+ ApplyVoting(kind, room_id) => {
+ let mut actions = Vec::new();
+ let mut id = client_id;
+ match kind {
+ VoteType::Kick(nick) => {
+ if let Some(c) = server.find_client(&nick) {
+ if c.room_id == Some(room_id) {
+ id = c.id;
+ actions.push(Kicked.send_self().action());
+ actions.push(MoveToLobby("kicked".to_string()));
+ }
+ }
+ }
+ VoteType::Map(None) => (),
+ VoteType::Map(Some(name)) => {
+ if let Some(location) = server.rooms[room_id].load_config(&name) {
+ actions.push(
+ server_chat(location.to_string())
+ .send_all()
+ .in_room(room_id)
+ .action(),
+ );
+ actions.push(SendRoomUpdate(None));
+ for (_, c) in server.clients.iter() {
+ if c.room_id == Some(room_id) {
+ actions.push(SendRoomData {
+ to: c.id,
+ teams: false,
+ config: true,
+ flags: false,
+ })
+ }
+ }
+ }
+ }
+ VoteType::Pause => {
+ if let Some(ref mut info) = server.rooms[room_id].game_info {
+ info.is_paused = !info.is_paused;
+ actions.push(
+ server_chat("Pause toggled.".to_string())
+ .send_all()
+ .in_room(room_id)
+ .action(),
+ );
+ actions.push(
+ ForwardEngineMessage(vec![to_engine_msg(once(b'I'))])
+ .send_all()
+ .in_room(room_id)
+ .action(),
+ );
+ }
+ }
+ VoteType::NewSeed => {
+ let seed = thread_rng().gen_range(0, 1_000_000_000).to_string();
+ let cfg = GameCfg::Seed(seed);
+ actions.push(cfg.to_server_msg().send_all().in_room(room_id).action());
+ server.rooms[room_id].set_config(cfg);
+ }
+ VoteType::HedgehogsPerTeam(number) => {
+ let r = &mut server.rooms[room_id];
+ let nicks = r.set_hedgehogs_number(number);
+ actions.extend(nicks.into_iter().map(|n| {
+ HedgehogsNumber(n, number)
+ .send_all()
+ .in_room(room_id)
+ .action()
+ }));
+ }
+ }
+ server.react(id, actions);
+ }
+ MoveToLobby(msg) => {
+ let mut actions = Vec::new();
+ let lobby_id = server.lobby_id;
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ r.players_number -= 1;
+ if c.is_ready() && r.ready_players_number > 0 {
+ r.ready_players_number -= 1;
+ }
+ if c.is_master() && (r.players_number > 0 || r.is_fixed()) {
+ actions.push(ChangeMaster(r.id, None));
+ }
+ actions.push(
+ ClientFlags("-i".to_string(), vec![c.nick.clone()])
+ .send_all()
+ .action(),
+ );
+ }
+ server.react(client_id, actions);
+ actions = Vec::new();
+
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ c.room_id = Some(lobby_id);
+ if r.players_number == 0 && !r.is_fixed() {
+ actions.push(RemoveRoom(r.id));
+ } else {
+ actions.push(RemoveClientTeams);
+ actions.push(
+ RoomLeft(c.nick.clone(), msg)
+ .send_all()
+ .in_room(r.id)
+ .but_self()
+ .action(),
+ );
+ actions.push(SendRoomUpdate(Some(r.name.clone())));
+ }
+ }
+ server.react(client_id, actions)
+ }
+ ChangeMaster(room_id, new_id) => {
+ let mut actions = Vec::new();
+ let room_client_ids = server.room_clients(room_id);
+ let new_id = if server
+ .room(client_id)
+ .map(|r| r.is_fixed())
+ .unwrap_or(false)
+ {
+ new_id
+ } else {
+ new_id.or_else(|| room_client_ids.iter().find(|id| **id != client_id).cloned())
+ };
+ let new_nick = new_id.map(|id| server.clients[id].nick.clone());
+
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ match r.master_id {
+ Some(id) if id == c.id => {
+ c.set_is_master(false);
+ r.master_id = None;
+ actions.push(
+ ClientFlags("-h".to_string(), vec![c.nick.clone()])
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ );
+ }
+ Some(_) => unreachable!(),
+ None => {}
+ }
+ r.master_id = new_id;
+ if !r.is_fixed() && c.protocol_number < 42 {
+ r.name
+ .replace_range(.., new_nick.as_ref().map_or("[]", String::as_str));
+ }
+ r.set_join_restriction(false);
+ r.set_team_add_restriction(false);
+ let is_fixed = r.is_fixed();
+ r.set_unregistered_players_restriction(is_fixed);
+ if let Some(nick) = new_nick {
+ actions.push(
+ ClientFlags("+h".to_string(), vec![nick])
+ .send_all()
+ .in_room(r.id)
+ .action(),
+ );
+ }
+ }
+ if let Some(id) = new_id {
+ server.clients[id].set_is_master(true)
+ }
+ server.react(client_id, actions);
+ }
+ RemoveTeam(name) => {
+ let mut actions = Vec::new();
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ r.remove_team(&name);
+ if let Some(ref mut info) = r.game_info {
+ info.left_teams.push(name.clone());
+ }
+ actions.push(TeamRemove(name.clone()).send_all().in_room(r.id).action());
+ actions.push(SendRoomUpdate(None));
+ if r.game_info.is_some() && c.is_in_game() {
+ actions.push(SendTeamRemovalMessage(name));
+ }
+ }
+ server.react(client_id, actions);
+ }
+ RemoveClientTeams => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let actions = r
+ .client_teams(c.id)
+ .map(|t| RemoveTeam(t.name.clone()))
+ .collect();
+ server.react(client_id, actions);
+ }
+ }
+ SendRoomUpdate(old_name) => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let name = old_name.unwrap_or_else(|| r.name.clone());
+ let actions = vec![RoomUpdated(name, r.info(Some(&c)))
+ .send_all()
+ .with_protocol(r.protocol_number)
+ .action()];
+ server.react(client_id, actions);
+ }
+ }
+ StartRoomGame(room_id) => {
+ let actions = {
+ let (room_clients, room_nicks): (Vec<_>, Vec<_>) = server
+ .clients
+ .iter()
+ .map(|(id, c)| (id, c.nick.clone()))
+ .unzip();
+ let room = &mut server.rooms[room_id];
+
+ if !room.has_multiple_clans() {
+ vec![Warn(
+ "The game can't be started with less than two clans!".to_string(),
+ )]
+ } else if room.protocol_number <= 43
+ && room.players_number != room.ready_players_number
+ {
+ vec![Warn("Not all players are ready".to_string())]
+ } else if room.game_info.is_some() {
+ vec![Warn("The game is already in progress".to_string())]
+ } else {
+ room.start_round();
+ for id in room_clients {
+ let c = &mut server.clients[id];
+ c.set_is_in_game(false);
+ c.team_indices = room.client_team_indices(c.id);
+ }
+ vec![
+ RunGame.send_all().in_room(room.id).action(),
+ SendRoomUpdate(None),
+ ClientFlags("+g".to_string(), room_nicks)
+ .send_all()
+ .in_room(room.id)
+ .action(),
+ ]
+ }
+ };
+ server.react(client_id, actions);
+ }
+ SendTeamRemovalMessage(team_name) => {
+ let mut actions = Vec::new();
+ if let Some(r) = server.room(client_id) {
+ if let Some(ref mut info) = r.game_info {
+ let msg = once(b'F').chain(team_name.bytes());
+ actions.push(
+ ForwardEngineMessage(vec![to_engine_msg(msg)])
+ .send_all()
+ .in_room(r.id)
+ .but_self()
+ .action(),
+ );
+ info.teams_in_game -= 1;
+ if info.teams_in_game == 0 {
+ actions.push(FinishRoomGame(r.id));
+ }
+ let remove_msg = to_engine_msg(once(b'F').chain(team_name.bytes()));
+ if let Some(m) = &info.sync_msg {
+ info.msg_log.push(m.clone());
+ }
+ if info.sync_msg.is_some() {
+ info.sync_msg = None
+ }
+ info.msg_log.push(remove_msg.clone());
+ actions.push(
+ ForwardEngineMessage(vec![remove_msg])
+ .send_all()
+ .in_room(r.id)
+ .but_self()
+ .action(),
+ );
+ }
+ }
+ server.react(client_id, actions);
+ }
+ FinishRoomGame(room_id) => {
+ let mut actions = Vec::new();
+
+ let r = &mut server.rooms[room_id];
+ r.ready_players_number = 1;
+ actions.push(SendRoomUpdate(None));
+ actions.push(RoundFinished.send_all().in_room(r.id).action());
+
+ if let Some(info) = replace(&mut r.game_info, None) {
+ for (_, c) in server.clients.iter() {
+ if c.room_id == Some(room_id) && c.is_joined_mid_game() {
+ actions.push(SendRoomData {
+ to: c.id,
+ teams: false,
+ config: true,
+ flags: false,
+ });
+ for name in &info.left_teams {
+ actions.push(TeamRemove(name.clone()).send(c.id).action());
+ }
+ }
+ }
+ }
+
+ let nicks: Vec<_> = server
+ .clients
+ .iter_mut()
+ .filter(|(_, c)| c.room_id == Some(room_id))
+ .map(|(_, c)| {
+ c.set_is_ready(c.is_master());
+ c.set_is_joined_mid_game(false);
+ c
+ })
+ .filter_map(|c| {
+ if !c.is_master() {
+ Some(c.nick.clone())
+ } else {
+ None
+ }
+ })
+ .collect();
+
+ if !nicks.is_empty() {
+ let msg = if r.protocol_number < 38 {
+ LegacyReady(false, nicks)
+ } else {
+ ClientFlags("-r".to_string(), nicks)
+ };
+ actions.push(msg.send_all().in_room(room_id).action());
+ }
+ server.react(client_id, actions);
+ }
+ Warn(msg) => {
+ run_action(server, client_id, Warning(msg).send_self().action());
+ }
+ ProtocolError(msg) => run_action(server, client_id, Error(msg).send_self().action()),
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/client.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,92 @@
+use super::coretypes::ClientId;
+use bitflags::*;
+
+bitflags! {
+ pub struct ClientFlags: u8 {
+ const IS_ADMIN = 0b0000_0001;
+ const IS_MASTER = 0b0000_0010;
+ const IS_READY = 0b0000_0100;
+ const IS_IN_GAME = 0b0000_1000;
+ const IS_JOINED_MID_GAME = 0b0001_0000;
+ const IS_CHECKER = 0b0010_0000;
+
+ const NONE = 0b0000_0000;
+ const DEFAULT = Self::NONE.bits;
+ }
+}
+
+pub struct HWClient {
+ pub id: ClientId,
+ pub room_id: Option<usize>,
+ pub nick: String,
+ pub web_password: String,
+ pub server_salt: String,
+ pub protocol_number: u16,
+ pub flags: ClientFlags,
+ pub teams_in_game: u8,
+ pub team_indices: Vec<u8>,
+ pub clan: Option<u8>,
+}
+
+impl HWClient {
+ pub fn new(id: ClientId, salt: String) -> HWClient {
+ HWClient {
+ id,
+ room_id: None,
+ nick: String::new(),
+ web_password: String::new(),
+ server_salt: salt,
+ protocol_number: 0,
+ flags: ClientFlags::DEFAULT,
+ teams_in_game: 0,
+ team_indices: Vec::new(),
+ clan: None,
+ }
+ }
+
+ fn contains(&self, mask: ClientFlags) -> bool {
+ self.flags.contains(mask)
+ }
+
+ fn set(&mut self, mask: ClientFlags, value: bool) {
+ self.flags.set(mask, value);
+ }
+
+ pub fn is_admin(&self) -> bool {
+ self.contains(ClientFlags::IS_ADMIN)
+ }
+ pub fn is_master(&self) -> bool {
+ self.contains(ClientFlags::IS_MASTER)
+ }
+ pub fn is_ready(&self) -> bool {
+ self.contains(ClientFlags::IS_READY)
+ }
+ pub fn is_in_game(&self) -> bool {
+ self.contains(ClientFlags::IS_IN_GAME)
+ }
+ pub fn is_joined_mid_game(&self) -> bool {
+ self.contains(ClientFlags::IS_JOINED_MID_GAME)
+ }
+ pub fn is_checker(&self) -> bool {
+ self.contains(ClientFlags::IS_CHECKER)
+ }
+
+ pub fn set_is_admin(&mut self, value: bool) {
+ self.set(ClientFlags::IS_ADMIN, value)
+ }
+ pub fn set_is_master(&mut self, value: bool) {
+ self.set(ClientFlags::IS_MASTER, value)
+ }
+ pub fn set_is_ready(&mut self, value: bool) {
+ self.set(ClientFlags::IS_READY, value)
+ }
+ pub fn set_is_in_game(&mut self, value: bool) {
+ self.set(ClientFlags::IS_IN_GAME, value)
+ }
+ pub fn set_is_joined_mid_game(&mut self, value: bool) {
+ self.set(ClientFlags::IS_JOINED_MID_GAME, value)
+ }
+ pub fn set_is_checker(&mut self, value: bool) {
+ self.set(ClientFlags::IS_CHECKER, value)
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/core.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,261 @@
+use super::{
+ actions,
+ actions::{Destination, PendingMessage},
+ client::HWClient,
+ coretypes::{ClientId, RoomId},
+ handlers,
+ io::HWServerIO,
+ room::HWRoom,
+};
+use crate::protocol::messages::*;
+use crate::utils;
+use base64::encode;
+use log::*;
+use rand::{thread_rng, RngCore};
+use slab;
+use std::borrow::BorrowMut;
+
+type Slab<T> = slab::Slab<T>;
+
+pub struct HWServer {
+ pub clients: Slab<HWClient>,
+ pub rooms: Slab<HWRoom>,
+ pub lobby_id: RoomId,
+ pub output: Vec<(Vec<ClientId>, HWServerMessage)>,
+ pub removed_clients: Vec<ClientId>,
+ pub io: Box<dyn HWServerIO>,
+}
+
+impl HWServer {
+ pub fn new(clients_limit: usize, rooms_limit: usize, io: Box<dyn HWServerIO>) -> HWServer {
+ let rooms = Slab::with_capacity(rooms_limit);
+ let clients = Slab::with_capacity(clients_limit);
+ let mut server = HWServer {
+ clients,
+ rooms,
+ lobby_id: 0,
+ output: vec![],
+ removed_clients: vec![],
+ io,
+ };
+ server.lobby_id = server.add_room().id;
+ server
+ }
+
+ pub fn add_client(&mut self) -> ClientId {
+ let key: ClientId;
+ {
+ let entry = self.clients.vacant_entry();
+ key = entry.key();
+ let mut salt = [0u8; 18];
+ thread_rng().fill_bytes(&mut salt);
+
+ let client = HWClient::new(entry.key(), encode(&salt));
+ entry.insert(client);
+ }
+ self.send(
+ key,
+ &Destination::ToSelf,
+ HWServerMessage::Connected(utils::PROTOCOL_VERSION),
+ );
+ key
+ }
+
+ pub fn client_lost(&mut self, client_id: ClientId) {
+ actions::run_action(
+ self,
+ client_id,
+ actions::Action::ByeClient("Connection reset".to_string()),
+ );
+ }
+
+ pub fn add_room(&mut self) -> &mut HWRoom {
+ allocate_room(&mut self.rooms)
+ }
+
+ pub fn handle_msg(&mut self, client_id: ClientId, msg: HWProtocolMessage) {
+ debug!("Handling message {:?} for client {}", msg, client_id);
+ if self.clients.contains(client_id) {
+ handlers::handle(self, client_id, msg);
+ }
+ }
+
+ #[inline]
+ pub fn create_room(
+ &mut self,
+ creator_id: ClientId,
+ name: String,
+ password: Option<String>,
+ ) -> RoomId {
+ create_room(
+ &mut self.clients[creator_id],
+ &mut self.rooms,
+ name,
+ password,
+ )
+ }
+
+ fn get_recipients(&self, client_id: ClientId, destination: &Destination) -> Vec<ClientId> {
+ let mut ids = match *destination {
+ Destination::ToSelf => vec![client_id],
+ Destination::ToId(id) => vec![id],
+ Destination::ToAll {
+ room_id: Some(id), ..
+ } => self.room_clients(id),
+ Destination::ToAll {
+ protocol: Some(proto),
+ ..
+ } => self.protocol_clients(proto),
+ Destination::ToAll { .. } => self.clients.iter().map(|(id, _)| id).collect::<Vec<_>>(),
+ };
+ if let Destination::ToAll {
+ skip_self: true, ..
+ } = destination
+ {
+ if let Some(index) = ids.iter().position(|id| *id == client_id) {
+ ids.remove(index);
+ }
+ }
+ ids
+ }
+
+ pub fn send(
+ &mut self,
+ client_id: ClientId,
+ destination: &Destination,
+ message: HWServerMessage,
+ ) {
+ let ids = self.get_recipients(client_id, &destination);
+ self.output.push((ids, message));
+ }
+
+ pub fn react(&mut self, client_id: ClientId, actions: Vec<actions::Action>) {
+ for action in actions {
+ actions::run_action(self, client_id, action);
+ }
+ }
+
+ pub fn lobby(&self) -> &HWRoom {
+ &self.rooms[self.lobby_id]
+ }
+
+ pub fn has_room(&self, name: &str) -> bool {
+ self.rooms.iter().any(|(_, r)| r.name == name)
+ }
+
+ pub fn find_room(&self, name: &str) -> Option<&HWRoom> {
+ self.rooms
+ .iter()
+ .find_map(|(_, r)| Some(r).filter(|r| r.name == name))
+ }
+
+ pub fn find_room_mut(&mut self, name: &str) -> Option<&mut HWRoom> {
+ self.rooms
+ .iter_mut()
+ .find_map(|(_, r)| Some(r).filter(|r| r.name == name))
+ }
+
+ pub fn find_client(&self, nick: &str) -> Option<&HWClient> {
+ self.clients
+ .iter()
+ .find_map(|(_, c)| Some(c).filter(|c| c.nick == nick))
+ }
+
+ pub fn find_client_mut(&mut self, nick: &str) -> Option<&mut HWClient> {
+ self.clients
+ .iter_mut()
+ .find_map(|(_, c)| Some(c).filter(|c| c.nick == nick))
+ }
+
+ pub fn select_clients<F>(&self, f: F) -> Vec<ClientId>
+ where
+ F: Fn(&(usize, &HWClient)) -> bool,
+ {
+ self.clients.iter().filter(f).map(|(_, c)| c.id).collect()
+ }
+
+ pub fn room_clients(&self, room_id: RoomId) -> Vec<ClientId> {
+ self.select_clients(|(_, c)| c.room_id == Some(room_id))
+ }
+
+ pub fn protocol_clients(&self, protocol: u16) -> Vec<ClientId> {
+ self.select_clients(|(_, c)| c.protocol_number == protocol)
+ }
+
+ pub fn other_clients_in_room(&self, self_id: ClientId) -> Vec<ClientId> {
+ let room_id = self.clients[self_id].room_id;
+ self.select_clients(|(id, c)| *id != self_id && c.room_id == room_id)
+ }
+
+ pub fn client_and_room(&mut self, client_id: ClientId) -> (&mut HWClient, Option<&mut HWRoom>) {
+ let c = &mut self.clients[client_id];
+ if let Some(room_id) = c.room_id {
+ (c, Some(&mut self.rooms[room_id]))
+ } else {
+ (c, None)
+ }
+ }
+
+ pub fn room(&mut self, client_id: ClientId) -> Option<&mut HWRoom> {
+ self.client_and_room(client_id).1
+ }
+}
+
+fn allocate_room(rooms: &mut Slab<HWRoom>) -> &mut HWRoom {
+ let entry = rooms.vacant_entry();
+ let key = entry.key();
+ let room = HWRoom::new(entry.key());
+ entry.insert(room)
+}
+
+fn create_room(
+ client: &mut HWClient,
+ rooms: &mut Slab<HWRoom>,
+ name: String,
+ password: Option<String>,
+) -> RoomId {
+ let room = allocate_room(rooms);
+
+ room.master_id = Some(client.id);
+ room.name = name;
+ room.password = password;
+ room.protocol_number = client.protocol_number;
+
+ room.players_number = 1;
+ room.ready_players_number = 1;
+
+ client.room_id = Some(room.id);
+ client.set_is_master(true);
+ client.set_is_ready(true);
+ client.set_is_joined_mid_game(false);
+
+ room.id
+}
+
+fn move_to_room(client: &mut HWClient, room: &mut HWRoom) {
+ debug_assert!(client.room_id != Some(room.id));
+
+ room.players_number += 1;
+
+ client.room_id = Some(room.id);
+ client.set_is_joined_mid_game(room.game_info.is_some());
+ client.set_is_in_game(room.game_info.is_some());
+
+ if let Some(ref mut info) = room.game_info {
+ let teams = info.client_teams(client.id);
+ client.teams_in_game = teams.clone().count() as u8;
+ client.clan = teams.clone().next().map(|t| t.color);
+ let team_names: Vec<_> = teams.map(|t| t.name.clone()).collect();
+
+ if !team_names.is_empty() {
+ info.left_teams.retain(|name| !team_names.contains(&name));
+ info.teams_in_game += team_names.len() as u8;
+ room.teams = info
+ .teams_at_start
+ .iter()
+ .filter(|(_, t)| !team_names.contains(&t.name))
+ .cloned()
+ .collect();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/coretypes.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,74 @@
+pub type ClientId = usize;
+pub type RoomId = usize;
+
+pub const MAX_HEDGEHOGS_PER_TEAM: u8 = 8;
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub enum ServerVar {
+ MOTDNew(String),
+ MOTDOld(String),
+ LatestProto(u32),
+}
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub enum GameCfg {
+ FeatureSize(u32),
+ MapType(String),
+ MapGenerator(u32),
+ MazeSize(u32),
+ Seed(String),
+ Template(u32),
+
+ Ammo(String, Option<String>),
+ Scheme(String, Vec<String>),
+ Script(String),
+ Theme(String),
+ DrawnMap(String),
+}
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub struct TeamInfo {
+ pub name: String,
+ pub color: u8,
+ pub grave: String,
+ pub fort: String,
+ pub voice_pack: String,
+ pub flag: String,
+ pub difficulty: u8,
+ pub hedgehogs_number: u8,
+ pub hedgehogs: [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize],
+}
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub struct HedgehogInfo {
+ pub name: String,
+ pub hat: String,
+}
+
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub enum VoteType {
+ Kick(String),
+ Map(Option<String>),
+ Pause,
+ NewSeed,
+ HedgehogsPerTeam(u8),
+}
+
+#[derive(Clone, Debug)]
+pub struct Voting {
+ pub ttl: u32,
+ pub voters: Vec<ClientId>,
+ pub votes: Vec<(ClientId, bool)>,
+ pub kind: VoteType,
+}
+
+impl Voting {
+ pub fn new(kind: VoteType, voters: Vec<ClientId>) -> Voting {
+ Voting {
+ kind,
+ voters,
+ ttl: 2,
+ votes: Vec::new(),
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/database.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,76 @@
+use mysql;
+use mysql::{error::DriverError, error::Error, params};
+
+struct AccountInfo {
+ is_registered: bool,
+ is_admin: bool,
+ is_contributor: bool,
+}
+
+struct ServerStatistics {
+ rooms: u32,
+ players: u32,
+}
+
+struct Achievements {}
+
+trait DatabaseInterface {
+ fn check_account(username: &str, password: &str) -> AccountInfo;
+ fn store_stats(stats: &ServerStatistics) -> Result<(), ()>;
+ fn store_achievements(achievements: &Achievements) -> Result<(), ()>;
+ fn get_replay_name(replay_id: u32) -> Result<String, ()>;
+}
+
+struct Database {
+ pool: Option<mysql::Pool>,
+}
+
+impl Database {
+ fn new() -> Self {
+ Self { pool: None }
+ }
+
+ fn connect(&mut self, url: &str) -> Result<(), Error> {
+ self.pool = Some(mysql::Pool::new(url)?);
+
+ Ok(())
+ }
+
+ fn check_account(&mut self, username: &str, password: &str) -> AccountInfo {
+ AccountInfo {
+ is_registered: false,
+ is_admin: false,
+ is_contributor: false,
+ }
+ }
+
+ fn store_stats(&mut self, stats: &ServerStatistics) -> Result<(), Error> {
+ if let Some(pool) = &self.pool {
+ for mut stmt in pool
+ .prepare(
+ r"INSERT INTO gameserver_stats
+ (players, rooms, last_update)
+ VALUES
+ (:players, :rooms, UNIX_TIMESTAMP())",
+ )
+ .into_iter()
+ {
+ stmt.execute(params! {
+ "players" => stats.players,
+ "rooms" => stats.rooms,
+ })?;
+ }
+ Ok(())
+ } else {
+ Err(DriverError::SetupError.into())
+ }
+ }
+
+ fn store_achievements(&mut self, achievements: &Achievements) -> Result<(), ()> {
+ Ok(())
+ }
+
+ fn get_replay_name(&mut self, replay_id: u32) -> Result<String, ()> {
+ Err(())
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,35 @@
+use mio;
+use std::{io, io::Write};
+
+use super::{
+ actions::{Action, Action::*},
+ core::HWServer,
+ coretypes::ClientId,
+};
+use crate::protocol::messages::{HWProtocolMessage, HWServerMessage::*};
+use log::*;
+
+mod checker;
+mod common;
+mod inroom;
+mod lobby;
+mod loggingin;
+
+pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
+ match message {
+ HWProtocolMessage::Ping => server.react(client_id, vec![Pong.send_self().action()]),
+ HWProtocolMessage::Quit(Some(msg)) => {
+ server.react(client_id, vec![ByeClient("User quit: ".to_string() + &msg)])
+ }
+ HWProtocolMessage::Quit(None) => {
+ server.react(client_id, vec![ByeClient("User quit".to_string())])
+ }
+ HWProtocolMessage::Malformed => warn!("Malformed/unknown message"),
+ HWProtocolMessage::Empty => warn!("Empty message"),
+ _ => match server.clients[client_id].room_id {
+ None => loggingin::handle(server, client_id, message),
+ Some(id) if id == server.lobby_id => lobby::handle(server, client_id, message),
+ Some(id) => inroom::handle(server, client_id, id, message),
+ },
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers/checker.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,13 @@
+use log::*;
+use mio;
+
+use crate::{
+ protocol::messages::HWProtocolMessage,
+ server::{core::HWServer, coretypes::ClientId},
+};
+
+pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
+ match message {
+ _ => warn!("Unknown command"),
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers/common.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,75 @@
+use crate::{
+ protocol::messages::{
+ HWProtocolMessage::{self, Rnd},
+ HWServerMessage::{self, ChatMsg},
+ },
+ server::{actions::Action, core::HWServer},
+};
+use rand::{self, thread_rng, Rng};
+
+pub fn rnd_reply(options: &[String]) -> HWServerMessage {
+ let mut rng = thread_rng();
+ let reply = if options.is_empty() {
+ (*rng.choose(&["heads", "tails"]).unwrap()).to_owned()
+ } else {
+ rng.choose(&options).unwrap().clone()
+ };
+
+ ChatMsg {
+ nick: "[random]".to_owned(),
+ msg: reply.clone(),
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::protocol::messages::HWServerMessage::ChatMsg;
+ use crate::server::actions::{
+ Action::{self, Send},
+ PendingMessage,
+ };
+
+ fn reply2string(r: HWServerMessage) -> String {
+ match r {
+ ChatMsg { msg: p, .. } => String::from(p),
+ _ => panic!("expected a ChatMsg"),
+ }
+ }
+
+ fn run_handle_test(opts: Vec<String>) {
+ let opts2 = opts.clone();
+ for opt in opts {
+ while reply2string(rnd_reply(&opts2)) != opt {}
+ }
+ }
+
+ /// This test terminates almost surely.
+ #[test]
+ fn test_handle_rnd_empty() {
+ run_handle_test(vec![])
+ }
+
+ /// This test terminates almost surely.
+ #[test]
+ fn test_handle_rnd_nonempty() {
+ run_handle_test(vec!["A".to_owned(), "B".to_owned(), "C".to_owned()])
+ }
+
+ /// This test terminates almost surely (strong law of large numbers)
+ #[test]
+ fn test_distribution() {
+ let eps = 0.000001;
+ let lim = 0.5;
+ let opts = vec![0.to_string(), 1.to_string()];
+ let mut ones = 0;
+ let mut tries = 0;
+
+ while tries < 1000 || ((ones as f64 / tries as f64) - lim).abs() >= eps {
+ tries += 1;
+ if reply2string(rnd_reply(&opts)) == 1.to_string() {
+ ones += 1;
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers/inroom.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,490 @@
+use mio;
+
+use super::common::rnd_reply;
+use crate::{
+ protocol::messages::{server_chat, HWProtocolMessage, HWServerMessage::*},
+ server::{
+ actions::{Action, Action::*},
+ core::HWServer,
+ coretypes::{ClientId, GameCfg, RoomId, VoteType, Voting, MAX_HEDGEHOGS_PER_TEAM},
+ room::{HWRoom, RoomFlags},
+ },
+ utils::is_name_illegal,
+};
+use base64::{decode, encode};
+use log::*;
+use std::mem::swap;
+
+#[derive(Clone)]
+struct ByMsg<'a> {
+ messages: &'a [u8],
+}
+
+impl<'a> Iterator for ByMsg<'a> {
+ type Item = &'a [u8];
+
+ fn next(&mut self) -> Option<<Self as Iterator>::Item> {
+ if let Some(size) = self.messages.get(0) {
+ let (msg, next) = self.messages.split_at(*size as usize + 1);
+ self.messages = next;
+ Some(msg)
+ } else {
+ None
+ }
+ }
+}
+
+fn by_msg(source: &[u8]) -> ByMsg {
+ ByMsg { messages: source }
+}
+
+const VALID_MESSAGES: &[u8] =
+ b"M#+LlRrUuDdZzAaSjJ,NpPwtgfhbc12345\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A";
+const NON_TIMED_MESSAGES: &[u8] = b"M#hb";
+
+#[cfg(canhazslicepatterns)]
+fn is_msg_valid(msg: &[u8], team_indices: &[u8]) -> bool {
+ match msg {
+ [size, typ, body..] => {
+ VALID_MESSAGES.contains(typ)
+ && match body {
+ [1...MAX_HEDGEHOGS_PER_TEAM, team, ..] if *typ == b'h' => {
+ team_indices.contains(team)
+ }
+ _ => *typ != b'h',
+ }
+ }
+ _ => false,
+ }
+}
+
+fn is_msg_valid(msg: &[u8], _team_indices: &[u8]) -> bool {
+ if let Some(typ) = msg.get(1) {
+ VALID_MESSAGES.contains(typ)
+ } else {
+ false
+ }
+}
+
+fn is_msg_empty(msg: &[u8]) -> bool {
+ msg.get(1).filter(|t| **t == b'+').is_some()
+}
+
+fn is_msg_timed(msg: &[u8]) -> bool {
+ msg.get(1)
+ .filter(|t| !NON_TIMED_MESSAGES.contains(t))
+ .is_some()
+}
+
+fn voting_description(kind: &VoteType) -> String {
+ format!(
+ "New voting started: {}",
+ match kind {
+ VoteType::Kick(nick) => format!("kick {}", nick),
+ VoteType::Map(name) => format!("map {}", name.as_ref().unwrap()),
+ VoteType::Pause => "pause".to_string(),
+ VoteType::NewSeed => "new seed".to_string(),
+ VoteType::HedgehogsPerTeam(number) => format!("hedgehogs per team: {}", number),
+ }
+ )
+}
+
+fn room_message_flag(msg: &HWProtocolMessage) -> RoomFlags {
+ use crate::protocol::messages::HWProtocolMessage::*;
+ match msg {
+ ToggleRestrictJoin => RoomFlags::RESTRICTED_JOIN,
+ ToggleRestrictTeams => RoomFlags::RESTRICTED_TEAM_ADD,
+ ToggleRegisteredOnly => RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS,
+ _ => RoomFlags::empty(),
+ }
+}
+
+pub fn handle(
+ server: &mut HWServer,
+ client_id: ClientId,
+ room_id: RoomId,
+ message: HWProtocolMessage,
+) {
+ use crate::protocol::messages::HWProtocolMessage::*;
+ match message {
+ Part(None) => server.react(client_id, vec![
+ MoveToLobby("part".to_string())]),
+ Part(Some(msg)) => server.react(client_id, vec![
+ MoveToLobby(format!("part: {}", msg))]),
+ Chat(msg) => {
+ let actions = {
+ let c = &mut server.clients[client_id];
+ let chat_msg = ChatMsg {nick: c.nick.clone(), msg};
+ vec![chat_msg.send_all().in_room(room_id).but_self().action()]
+ };
+ server.react(client_id, actions);
+ },
+ Fix => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if c.is_admin() { r.set_is_fixed(true) }
+ }
+ }
+ Unfix => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if c.is_admin() { r.set_is_fixed(false) }
+ }
+ }
+ Greeting(text) => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if c.is_admin() || c.is_master() && !r.is_fixed() {
+ r.greeting = text
+ }
+ }
+ }
+ RoomName(new_name) => {
+ let actions =
+ if is_name_illegal(&new_name) {
+ vec![Warn("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: $()*+?[]^{|}".to_string())]
+ } else if server.rooms[room_id].is_fixed() {
+ vec![Warn("Access denied.".to_string())]
+ } else if server.has_room(&new_name) {
+ vec![Warn("A room with the same name already exists.".to_string())]
+ } else {
+ let mut old_name = new_name.clone();
+ swap(&mut server.rooms[room_id].name, &mut old_name);
+ vec![SendRoomUpdate(Some(old_name))]
+ };
+ server.react(client_id, actions);
+ },
+ ToggleReady => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let flags = if c.is_ready() {
+ r.ready_players_number -= 1;
+ "-r"
+ } else {
+ r.ready_players_number += 1;
+ "+r"
+ };
+
+ let msg = if c.protocol_number < 38 {
+ LegacyReady(c.is_ready(), vec![c.nick.clone()])
+ } else {
+ ClientFlags(flags.to_string(), vec![c.nick.clone()])
+ };
+
+ let mut v = vec![msg.send_all().in_room(r.id).action()];
+
+ if r.is_fixed() && r.ready_players_number == r.players_number {
+ v.push(StartRoomGame(r.id))
+ }
+
+ c.set_is_ready(!c.is_ready());
+ server.react(client_id, v);
+ }
+ }
+ AddTeam(info) => {
+ let mut actions = Vec::new();
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if r.teams.len() >= r.team_limit as usize {
+ actions.push(Warn("Too many teams!".to_string()))
+ } else if r.addable_hedgehogs() == 0 {
+ actions.push(Warn("Too many hedgehogs!".to_string()))
+ } else if r.find_team(|t| t.name == info.name) != None {
+ actions.push(Warn("There's already a team with same name in the list.".to_string()))
+ } else if r.game_info.is_some() {
+ actions.push(Warn("Joining not possible: Round is in progress.".to_string()))
+ } else if r.is_team_add_restricted() {
+ actions.push(Warn("This room currently does not allow adding new teams.".to_string()));
+ } else {
+ let team = r.add_team(c.id, *info, c.protocol_number < 42);
+ c.teams_in_game += 1;
+ c.clan = Some(team.color);
+ actions.push(TeamAccepted(team.name.clone())
+ .send_self().action());
+ actions.push(TeamAdd(HWRoom::team_info(&c, team))
+ .send_all().in_room(room_id).but_self().action());
+ actions.push(TeamColor(team.name.clone(), team.color)
+ .send_all().in_room(room_id).action());
+ actions.push(HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
+ .send_all().in_room(room_id).action());
+ actions.push(SendRoomUpdate(None));
+ }
+ }
+ server.react(client_id, actions);
+ },
+ RemoveTeam(name) => {
+ let mut actions = Vec::new();
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ match r.find_team_owner(&name) {
+ None =>
+ actions.push(Warn("Error: The team you tried to remove does not exist.".to_string())),
+ Some((id, _)) if id != client_id =>
+ actions.push(Warn("You can't remove a team you don't own.".to_string())),
+ Some((_, name)) => {
+ c.teams_in_game -= 1;
+ c.clan = r.find_team_color(c.id);
+ actions.push(Action::RemoveTeam(name.to_string()));
+ }
+ }
+ };
+ server.react(client_id, actions);
+ },
+ SetHedgehogsNumber(team_name, number) => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let addable_hedgehogs = r.addable_hedgehogs();
+ let actions = if let Some((_, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) {
+ if !c.is_master() {
+ vec![ProtocolError("You're not the room master!".to_string())]
+ } else if number < 1 || number > MAX_HEDGEHOGS_PER_TEAM
+ || number > addable_hedgehogs + team.hedgehogs_number {
+ vec![HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
+ .send_self().action()]
+ } else {
+ team.hedgehogs_number = number;
+ vec![HedgehogsNumber(team.name.clone(), number)
+ .send_all().in_room(room_id).but_self().action()]
+ }
+ } else {
+ vec![(Warn("No such team.".to_string()))]
+ };
+ server.react(client_id, actions);
+ }
+ },
+ SetTeamColor(team_name, color) => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let mut owner_id = None;
+ let actions = if let Some((owner, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) {
+ if !c.is_master() {
+ vec![ProtocolError("You're not the room master!".to_string())]
+ } else if false {
+ Vec::new()
+ } else {
+ owner_id = Some(owner);
+ team.color = color;
+ vec![TeamColor(team.name.clone(), color)
+ .send_all().in_room(room_id).but_self().action()]
+ }
+ } else {
+ vec![(Warn("No such team.".to_string()))]
+ };
+
+ if let Some(id) = owner_id {
+ server.clients[id].clan = Some(color);
+ }
+
+ server.react(client_id, actions);
+ };
+ },
+ Cfg(cfg) => {
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ let actions = if r.is_fixed() {
+ vec![Warn("Access denied.".to_string())]
+ } else if !c.is_master() {
+ vec![ProtocolError("You're not the room master!".to_string())]
+ } else {
+ let cfg = match cfg {
+ GameCfg::Scheme(name, mut values) => {
+ if c.protocol_number == 49 && values.len() >= 2 {
+ let mut s = "X".repeat(50);
+ s.push_str(&values.pop().unwrap());
+ values.push(s);
+ }
+ GameCfg::Scheme(name, values)
+ }
+ cfg => cfg
+ };
+
+ let v = vec![cfg.to_server_msg()
+ .send_all().in_room(r.id).but_self().action()];
+ r.set_config(cfg);
+ v
+ };
+ server.react(client_id, actions);
+ }
+ }
+ Save(name, location) => {
+ let actions = vec![server_chat(format!("Room config saved as {}", name))
+ .send_all().in_room(room_id).action()];
+ server.rooms[room_id].save_config(name, location);
+ server.react(client_id, actions);
+ }
+ SaveRoom(filename) => {
+ if server.clients[client_id].is_admin() {
+ let actions = match server.rooms[room_id].get_saves() {
+ Ok(text) => match server.io.write_file(&filename, &text) {
+ Ok(_) => vec![server_chat("Room configs saved successfully.".to_string())
+ .send_self().action()],
+ Err(e) => {
+ warn!("Error while writing the config file \"{}\": {}", filename, e);
+ vec![Warn("Unable to save the room configs.".to_string())]
+ }
+ }
+ Err(e) => {
+ warn!("Error while serializing the room configs: {}", e);
+ vec![Warn("Unable to serialize the room configs.".to_string())]
+ }
+ };
+ server.react(client_id, actions);
+ }
+ }
+ LoadRoom(filename) => {
+ if server.clients[client_id].is_admin() {
+ let actions = match server.io.read_file(&filename) {
+ Ok(text) => match server.rooms[room_id].set_saves(&text) {
+ Ok(_) => vec![server_chat("Room configs loaded successfully.".to_string())
+ .send_self().action()],
+ Err(e) => {
+ warn!("Error while deserializing the room configs: {}", e);
+ vec![Warn("Unable to deserialize the room configs.".to_string())]
+ }
+ }
+ Err(e) => {
+ warn!("Error while reading the config file \"{}\": {}", filename, e);
+ vec![Warn("Unable to load the room configs.".to_string())]
+ }
+ };
+ server.react(client_id, actions);
+ }
+ }
+ Delete(name) => {
+ let actions = if !server.rooms[room_id].delete_config(&name) {
+ vec![Warn(format!("Save doesn't exist: {}", name))]
+ } else {
+ vec![server_chat(format!("Room config {} has been deleted", name))
+ .send_all().in_room(room_id).action()]
+ };
+ server.react(client_id, actions);
+ }
+ CallVote(None) => {
+ server.react(client_id, vec![
+ server_chat("Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs <number>".to_string())
+ .send_self().action()])
+ }
+ CallVote(Some(kind)) => {
+ let is_in_game = server.rooms[room_id].game_info.is_some();
+ let error = match &kind {
+ VoteType::Kick(nick) => {
+ if server.find_client(&nick).filter(|c| c.room_id == Some(room_id)).is_some() {
+ None
+ } else {
+ Some("/callvote kick: No such user!".to_string())
+ }
+ },
+ VoteType::Map(None) => {
+ let names: Vec<_> = server.rooms[room_id].saves.keys().cloned().collect();
+ if names.is_empty() {
+ Some("/callvote map: No maps saved in this room!".to_string())
+ } else {
+ Some(format!("Available maps: {}", names.join(", ")))
+ }
+ },
+ VoteType::Map(Some(name)) => {
+ if server.rooms[room_id].saves.get(&name[..]).is_some() {
+ None
+ } else {
+ Some("/callvote map: No such map!".to_string())
+ }
+ },
+ VoteType::Pause => {
+ if is_in_game {
+ None
+ } else {
+ Some("/callvote pause: No game in progress!".to_string())
+ }
+ },
+ VoteType::NewSeed => {
+ None
+ },
+ VoteType::HedgehogsPerTeam(number) => {
+ match number {
+ 1...MAX_HEDGEHOGS_PER_TEAM => None,
+ _ => Some("/callvote hedgehogs: Specify number from 1 to 8.".to_string())
+ }
+ },
+ };
+ match error {
+ None => {
+ let msg = voting_description(&kind);
+ let voting = Voting::new(kind, server.room_clients(client_id));
+ server.rooms[room_id].voting = Some(voting);
+ server.react(client_id, vec![
+ server_chat(msg).send_all().in_room(room_id).action(),
+ AddVote{ vote: true, is_forced: false}]);
+ }
+ Some(msg) => {
+ server.react(client_id, vec![
+ server_chat(msg).send_self().action()])
+ }
+ }
+ }
+ Vote(vote) => {
+ server.react(client_id, vec![AddVote{ vote, is_forced: false }]);
+ }
+ ForceVote(vote) => {
+ let is_forced = server.clients[client_id].is_admin();
+ server.react(client_id, vec![AddVote{ vote, is_forced }]);
+ }
+ ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => {
+ if server.clients[client_id].is_master() {
+ server.rooms[room_id].flags.toggle(room_message_flag(&message));
+ }
+ server.react(client_id, vec![SendRoomUpdate(None)]);
+ }
+ StartGame => {
+ server.react(client_id, vec![StartRoomGame(room_id)]);
+ }
+ EngineMessage(em) => {
+ let mut actions = Vec::new();
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if c.teams_in_game > 0 {
+ let decoding = decode(&em[..]).unwrap();
+ let messages = by_msg(&decoding);
+ let valid = messages.filter(|m| is_msg_valid(m, &c.team_indices));
+ let non_empty = valid.clone().filter(|m| !is_msg_empty(m));
+ let sync_msg = valid.clone().filter(|m| is_msg_timed(m))
+ .last().map(|m| if is_msg_empty(m) {Some(encode(m))} else {None});
+
+ let em_response = encode(&valid.flat_map(|msg| msg).cloned().collect::<Vec<_>>());
+ if !em_response.is_empty() {
+ actions.push(ForwardEngineMessage(vec![em_response])
+ .send_all().in_room(r.id).but_self().action());
+ }
+ let em_log = encode(&non_empty.flat_map(|msg| msg).cloned().collect::<Vec<_>>());
+ if let Some(ref mut info) = r.game_info {
+ if !em_log.is_empty() {
+ info.msg_log.push(em_log);
+ }
+ if let Some(msg) = sync_msg {
+ info.sync_msg = msg;
+ }
+ }
+ }
+ }
+ server.react(client_id, actions)
+ }
+ RoundFinished => {
+ let mut actions = Vec::new();
+ if let (c, Some(r)) = server.client_and_room(client_id) {
+ if c.is_in_game() {
+ c.set_is_in_game(false);
+ actions.push(ClientFlags("-g".to_string(), vec![c.nick.clone()]).
+ send_all().in_room(r.id).action());
+ if r.game_info.is_some() {
+ for team in r.client_teams(c.id) {
+ actions.push(SendTeamRemovalMessage(team.name.clone()));
+ }
+ }
+ }
+ }
+ server.react(client_id, actions)
+ },
+ Rnd(v) => {
+ let result = rnd_reply(&v);
+ let mut echo = vec!["/rnd".to_string()];
+ echo.extend(v.into_iter());
+ let chat_msg = ChatMsg {
+ nick: server.clients[client_id].nick.clone(),
+ msg: echo.join(" ")
+ };
+ server.react(client_id, vec![
+ chat_msg.send_all().in_room(room_id).action(),
+ result.send_all().in_room(room_id).action()])
+ },
+ _ => warn!("Unimplemented!")
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers/lobby.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,92 @@
+use mio;
+
+use super::common::rnd_reply;
+use crate::{
+ protocol::messages::{HWProtocolMessage, HWServerMessage::*},
+ server::{
+ actions::{Action, Action::*},
+ core::HWServer,
+ coretypes::ClientId,
+ },
+ utils::is_name_illegal,
+};
+use log::*;
+
+pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
+ use crate::protocol::messages::HWProtocolMessage::*;
+ match message {
+ CreateRoom(name, password) => {
+ let actions = if is_name_illegal(&name) {
+ vec![Warn("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: $()*+?[]^{|}".to_string())]
+ } else if server.has_room(&name) {
+ vec![Warn(
+ "A room with the same name already exists.".to_string(),
+ )]
+ } else {
+ let flags_msg = ClientFlags(
+ "+hr".to_string(),
+ vec![server.clients[client_id].nick.clone()],
+ );
+
+ let room_id = server.create_room(client_id, name, password);
+ let room = &server.rooms[room_id];
+ let client = &server.clients[client_id];
+
+ vec![
+ RoomAdd(room.info(Some(&client)))
+ .send_all()
+ .with_protocol(room.protocol_number)
+ .action(),
+ flags_msg.send_self().action(),
+ ]
+ };
+ server.react(client_id, actions)
+ }
+ Chat(msg) => {
+ let actions = vec![ChatMsg {
+ nick: server.clients[client_id].nick.clone(),
+ msg,
+ }
+ .send_all()
+ .in_room(server.lobby_id)
+ .but_self()
+ .action()];
+ server.react(client_id, actions);
+ }
+ JoinRoom(name, _password) => {
+ let room = server.rooms.iter().find(|(_, r)| r.name == name);
+ let room_id = room.map(|(_, r)| r.id);
+ let nicks = server
+ .clients
+ .iter()
+ .filter(|(_, c)| c.room_id == room_id)
+ .map(|(_, c)| c.nick.clone())
+ .collect();
+ let c = &mut server.clients[client_id];
+
+ let actions = if let Some((_, r)) = room {
+ if c.protocol_number != r.protocol_number {
+ vec![Warn(
+ "Room version incompatible to your Hedgewars version!".to_string(),
+ )]
+ } else if r.is_join_restricted() {
+ vec![Warn(
+ "Access denied. This room currently doesn't allow joining.".to_string(),
+ )]
+ } else if r.players_number == u8::max_value() {
+ vec![Warn("This room is already full".to_string())]
+ } else {
+ vec![MoveToRoom(r.id), RoomJoined(nicks).send_self().action()]
+ }
+ } else {
+ vec![Warn("No such room.".to_string())]
+ };
+ server.react(client_id, actions);
+ }
+ Rnd(v) => {
+ server.react(client_id, vec![rnd_reply(&v).send_self().action()]);
+ }
+ List => warn!("Deprecated LIST message received"),
+ _ => warn!("Incorrect command in lobby state"),
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/handlers/loggingin.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,96 @@
+use mio;
+
+use crate::{
+ protocol::messages::{HWProtocolMessage, HWServerMessage::*},
+ server::{
+ actions::{Action, Action::*},
+ client::HWClient,
+ core::HWServer,
+ coretypes::ClientId,
+ },
+ utils::is_name_illegal,
+};
+use log::*;
+#[cfg(feature = "official-server")]
+use openssl::sha::sha1;
+use std::fmt::{Formatter, LowerHex};
+
+#[derive(PartialEq)]
+struct Sha1Digest([u8; 20]);
+
+impl LowerHex for Sha1Digest {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
+ for byte in &self.0 {
+ write!(f, "{:02x}", byte)?;
+ }
+ Ok(())
+ }
+}
+
+#[cfg(feature = "official-server")]
+fn get_hash(client: &HWClient, salt1: &str, salt2: &str) -> Sha1Digest {
+ let s = format!(
+ "{}{}{}{}{}",
+ salt1, salt2, client.web_password, client.protocol_number, "!hedgewars"
+ );
+ Sha1Digest(sha1(s.as_bytes()))
+}
+
+pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
+ match message {
+ HWProtocolMessage::Nick(nick) => {
+ let client = &mut server.clients[client_id];
+ debug!("{} {}", nick, is_name_illegal(&nick));
+ let actions = if client.room_id != None {
+ unreachable!()
+ } else if !client.nick.is_empty() {
+ vec![ProtocolError("Nickname already provided.".to_string())]
+ } else if is_name_illegal(&nick) {
+ vec![ByeClient("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: $()*+?[]^{|}".to_string())]
+ } else {
+ client.nick = nick.clone();
+ vec![Nick(nick).send_self().action(), CheckRegistered]
+ };
+
+ server.react(client_id, actions);
+ }
+ HWProtocolMessage::Proto(proto) => {
+ let client = &mut server.clients[client_id];
+ let actions = if client.protocol_number != 0 {
+ vec![ProtocolError("Protocol already known.".to_string())]
+ } else if proto == 0 {
+ vec![ProtocolError("Bad number.".to_string())]
+ } else {
+ client.protocol_number = proto;
+ vec![Proto(proto).send_self().action(), CheckRegistered]
+ };
+ server.react(client_id, actions);
+ }
+ #[cfg(feature = "official-server")]
+ HWProtocolMessage::Password(hash, salt) => {
+ let c = &server.clients[client_id];
+
+ let client_hash = get_hash(c, &salt, &c.server_salt);
+ let server_hash = get_hash(c, &c.server_salt, &salt);
+ let actions = if client_hash == server_hash {
+ vec![
+ ServerAuth(format!("{:x}", server_hash))
+ .send_self()
+ .action(),
+ JoinLobby,
+ ]
+ } else {
+ vec![ByeClient("Authentication failed".to_string())]
+ };
+ server.react(client_id, actions);
+ }
+ #[cfg(feature = "official-server")]
+ HWProtocolMessage::Checker(protocol, nick, password) => {
+ let c = &mut server.clients[client_id];
+ c.nick = nick;
+ c.web_password = password;
+ c.set_is_checker(true);
+ }
+ _ => warn!("Incorrect command in logging-in state"),
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/io.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,49 @@
+use std::{
+ fs::{File, OpenOptions},
+ io::{Error, ErrorKind, Read, Result, Write},
+};
+
+pub trait HWServerIO {
+ fn write_file(&mut self, name: &str, content: &str) -> Result<()>;
+ fn read_file(&mut self, name: &str) -> Result<String>;
+}
+
+pub struct EmptyServerIO {}
+
+impl EmptyServerIO {
+ pub fn new() -> Self {
+ Self {}
+ }
+}
+
+impl HWServerIO for EmptyServerIO {
+ fn write_file(&mut self, _name: &str, _content: &str) -> Result<()> {
+ Ok(())
+ }
+
+ fn read_file(&mut self, _name: &str) -> Result<String> {
+ Ok("".to_string())
+ }
+}
+
+pub struct FileServerIO {}
+
+impl FileServerIO {
+ pub fn new() -> Self {
+ Self {}
+ }
+}
+
+impl HWServerIO for FileServerIO {
+ fn write_file(&mut self, name: &str, content: &str) -> Result<()> {
+ let mut writer = OpenOptions::new().create(true).write(true).open(name)?;
+ writer.write_all(content.as_bytes())
+ }
+
+ fn read_file(&mut self, name: &str) -> Result<String> {
+ let mut reader = File::open(name)?;
+ let mut result = String::new();
+ reader.read_to_string(&mut result)?;
+ Ok(result)
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/network.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,489 @@
+extern crate slab;
+
+use std::{
+ collections::HashSet,
+ io,
+ io::{Error, ErrorKind, Read, Write},
+ mem::{replace, swap},
+ net::{IpAddr, Ipv4Addr, SocketAddr},
+};
+
+use log::*;
+use mio::{
+ net::{TcpListener, TcpStream},
+ Poll, PollOpt, Ready, Token,
+};
+use netbuf;
+use slab::Slab;
+
+use super::{core::HWServer, coretypes::ClientId, io::FileServerIO};
+use crate::{
+ protocol::{messages::*, ProtocolDecoder},
+ utils,
+};
+#[cfg(feature = "tls-connections")]
+use openssl::{
+ error::ErrorStack,
+ ssl::{
+ HandshakeError, MidHandshakeSslStream, Ssl, SslContext, SslContextBuilder, SslFiletype,
+ SslMethod, SslOptions, SslStream, SslStreamBuilder, SslVerifyMode,
+ },
+};
+
+const MAX_BYTES_PER_READ: usize = 2048;
+
+#[derive(Hash, Eq, PartialEq, Copy, Clone)]
+pub enum NetworkClientState {
+ Idle,
+ NeedsWrite,
+ NeedsRead,
+ Closed,
+}
+
+type NetworkResult<T> = io::Result<(T, NetworkClientState)>;
+
+#[cfg(not(feature = "tls-connections"))]
+pub enum ClientSocket {
+ Plain(TcpStream),
+}
+
+#[cfg(feature = "tls-connections")]
+pub enum ClientSocket {
+ SslHandshake(Option<MidHandshakeSslStream<TcpStream>>),
+ SslStream(SslStream<TcpStream>),
+}
+
+impl ClientSocket {
+ fn inner(&self) -> &TcpStream {
+ #[cfg(not(feature = "tls-connections"))]
+ match self {
+ ClientSocket::Plain(stream) => stream,
+ }
+
+ #[cfg(feature = "tls-connections")]
+ match self {
+ ClientSocket::SslHandshake(Some(builder)) => builder.get_ref(),
+ ClientSocket::SslHandshake(None) => unreachable!(),
+ ClientSocket::SslStream(ssl_stream) => ssl_stream.get_ref(),
+ }
+ }
+}
+
+pub struct NetworkClient {
+ id: ClientId,
+ socket: ClientSocket,
+ peer_addr: SocketAddr,
+ decoder: ProtocolDecoder,
+ buf_out: netbuf::Buf,
+}
+
+impl NetworkClient {
+ pub fn new(id: ClientId, socket: ClientSocket, peer_addr: SocketAddr) -> NetworkClient {
+ NetworkClient {
+ id,
+ socket,
+ peer_addr,
+ decoder: ProtocolDecoder::new(),
+ buf_out: netbuf::Buf::new(),
+ }
+ }
+
+ #[cfg(feature = "tls-connections")]
+ fn handshake_impl(
+ &mut self,
+ handshake: MidHandshakeSslStream<TcpStream>,
+ ) -> io::Result<NetworkClientState> {
+ match handshake.handshake() {
+ Ok(stream) => {
+ self.socket = ClientSocket::SslStream(stream);
+ debug!(
+ "TLS handshake with {} ({}) completed",
+ self.id, self.peer_addr
+ );
+ Ok(NetworkClientState::Idle)
+ }
+ Err(HandshakeError::WouldBlock(new_handshake)) => {
+ self.socket = ClientSocket::SslHandshake(Some(new_handshake));
+ Ok(NetworkClientState::Idle)
+ }
+ Err(HandshakeError::Failure(new_handshake)) => {
+ self.socket = ClientSocket::SslHandshake(Some(new_handshake));
+ debug!("TLS handshake with {} ({}) failed", self.id, self.peer_addr);
+ Err(Error::new(ErrorKind::Other, "Connection failure"))
+ }
+ Err(HandshakeError::SetupFailure(_)) => unreachable!(),
+ }
+ }
+
+ fn read_impl<R: Read>(
+ decoder: &mut ProtocolDecoder,
+ source: &mut R,
+ id: ClientId,
+ addr: &SocketAddr,
+ ) -> NetworkResult<Vec<HWProtocolMessage>> {
+ let mut bytes_read = 0;
+ let result = loop {
+ match decoder.read_from(source) {
+ Ok(bytes) => {
+ debug!("Client {}: read {} bytes", id, bytes);
+ bytes_read += bytes;
+ if bytes == 0 {
+ let result = if bytes_read == 0 {
+ info!("EOF for client {} ({})", id, addr);
+ (Vec::new(), NetworkClientState::Closed)
+ } else {
+ (decoder.extract_messages(), NetworkClientState::NeedsRead)
+ };
+ break Ok(result);
+ } else if bytes_read >= MAX_BYTES_PER_READ {
+ break Ok((decoder.extract_messages(), NetworkClientState::NeedsRead));
+ }
+ }
+ Err(ref error) if error.kind() == ErrorKind::WouldBlock => {
+ let messages = if bytes_read == 0 {
+ Vec::new()
+ } else {
+ decoder.extract_messages()
+ };
+ break Ok((messages, NetworkClientState::Idle));
+ }
+ Err(error) => break Err(error),
+ }
+ };
+ decoder.sweep();
+ result
+ }
+
+ pub fn read(&mut self) -> NetworkResult<Vec<HWProtocolMessage>> {
+ #[cfg(not(feature = "tls-connections"))]
+ match self.socket {
+ ClientSocket::Plain(ref mut stream) => {
+ NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr)
+ }
+ }
+
+ #[cfg(feature = "tls-connections")]
+ match self.socket {
+ ClientSocket::SslHandshake(ref mut handshake_opt) => {
+ let handshake = std::mem::replace(handshake_opt, None).unwrap();
+ Ok((Vec::new(), self.handshake_impl(handshake)?))
+ }
+ ClientSocket::SslStream(ref mut stream) => {
+ NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr)
+ }
+ }
+ }
+
+ fn write_impl<W: Write>(buf_out: &mut netbuf::Buf, destination: &mut W) -> NetworkResult<()> {
+ let result = loop {
+ match buf_out.write_to(destination) {
+ Ok(bytes) if buf_out.is_empty() || bytes == 0 => {
+ break Ok(((), NetworkClientState::Idle))
+ }
+ Ok(_) => (),
+ Err(ref error)
+ if error.kind() == ErrorKind::Interrupted
+ || error.kind() == ErrorKind::WouldBlock =>
+ {
+ break Ok(((), NetworkClientState::NeedsWrite));
+ }
+ Err(error) => break Err(error),
+ }
+ };
+ result
+ }
+
+ pub fn write(&mut self) -> NetworkResult<()> {
+ let result = {
+ #[cfg(not(feature = "tls-connections"))]
+ match self.socket {
+ ClientSocket::Plain(ref mut stream) => {
+ NetworkClient::write_impl(&mut self.buf_out, stream)
+ }
+ }
+
+ #[cfg(feature = "tls-connections")]
+ {
+ match self.socket {
+ ClientSocket::SslHandshake(ref mut handshake_opt) => {
+ let handshake = std::mem::replace(handshake_opt, None).unwrap();
+ Ok(((), self.handshake_impl(handshake)?))
+ }
+ ClientSocket::SslStream(ref mut stream) => {
+ NetworkClient::write_impl(&mut self.buf_out, stream)
+ }
+ }
+ }
+ };
+
+ self.socket.inner().flush()?;
+ result
+ }
+
+ pub fn send_raw_msg(&mut self, msg: &[u8]) {
+ self.buf_out.write_all(msg).unwrap();
+ }
+
+ pub fn send_string(&mut self, msg: &str) {
+ self.send_raw_msg(&msg.as_bytes());
+ }
+
+ pub fn send_msg(&mut self, msg: &HWServerMessage) {
+ self.send_string(&msg.to_raw_protocol());
+ }
+}
+
+#[cfg(feature = "tls-connections")]
+struct ServerSsl {
+ context: SslContext,
+}
+
+pub struct NetworkLayer {
+ listener: TcpListener,
+ server: HWServer,
+ clients: Slab<NetworkClient>,
+ pending: HashSet<(ClientId, NetworkClientState)>,
+ pending_cache: Vec<(ClientId, NetworkClientState)>,
+ #[cfg(feature = "tls-connections")]
+ ssl: ServerSsl,
+}
+
+impl NetworkLayer {
+ pub fn new(listener: TcpListener, clients_limit: usize, rooms_limit: usize) -> NetworkLayer {
+ let server = HWServer::new(clients_limit, rooms_limit, Box::new(FileServerIO::new()));
+ let clients = Slab::with_capacity(clients_limit);
+ let pending = HashSet::with_capacity(2 * clients_limit);
+ let pending_cache = Vec::with_capacity(2 * clients_limit);
+
+ NetworkLayer {
+ listener,
+ server,
+ clients,
+ pending,
+ pending_cache,
+ #[cfg(feature = "tls-connections")]
+ ssl: NetworkLayer::create_ssl_context(),
+ }
+ }
+
+ #[cfg(feature = "tls-connections")]
+ fn create_ssl_context() -> ServerSsl {
+ let mut builder = SslContextBuilder::new(SslMethod::tls()).unwrap();
+ builder.set_verify(SslVerifyMode::NONE);
+ builder.set_read_ahead(true);
+ builder
+ .set_certificate_file("ssl/cert.pem", SslFiletype::PEM)
+ .unwrap();
+ builder
+ .set_private_key_file("ssl/key.pem", SslFiletype::PEM)
+ .unwrap();
+ builder.set_options(SslOptions::NO_COMPRESSION);
+ builder.set_cipher_list("DEFAULT:!LOW:!RC4:!EXP").unwrap();
+ ServerSsl {
+ context: builder.build(),
+ }
+ }
+
+ pub fn register_server(&self, poll: &Poll) -> io::Result<()> {
+ poll.register(
+ &self.listener,
+ utils::SERVER,
+ Ready::readable(),
+ PollOpt::edge(),
+ )
+ }
+
+ fn deregister_client(&mut self, poll: &Poll, id: ClientId) {
+ let mut client_exists = false;
+ if let Some(ref client) = self.clients.get(id) {
+ poll.deregister(client.socket.inner())
+ .expect("could not deregister socket");
+ info!("client {} ({}) removed", client.id, client.peer_addr);
+ client_exists = true;
+ }
+ if client_exists {
+ self.clients.remove(id);
+ }
+ }
+
+ fn register_client(
+ &mut self,
+ poll: &Poll,
+ id: ClientId,
+ client_socket: ClientSocket,
+ addr: SocketAddr,
+ ) {
+ poll.register(
+ client_socket.inner(),
+ Token(id),
+ Ready::readable() | Ready::writable(),
+ PollOpt::edge(),
+ )
+ .expect("could not register socket with event loop");
+
+ let entry = self.clients.vacant_entry();
+ let client = NetworkClient::new(id, client_socket, addr);
+ info!("client {} ({}) added", client.id, client.peer_addr);
+ entry.insert(client);
+ }
+
+ fn flush_server_messages(&mut self) {
+ debug!("{} pending server messages", self.server.output.len());
+ for (clients, message) in self.server.output.drain(..) {
+ debug!("Message {:?} to {:?}", message, clients);
+ let msg_string = message.to_raw_protocol();
+ for client_id in clients {
+ if let Some(client) = self.clients.get_mut(client_id) {
+ client.send_string(&msg_string);
+ self.pending
+ .insert((client_id, NetworkClientState::NeedsWrite));
+ }
+ }
+ }
+ }
+
+ fn create_client_socket(&self, socket: TcpStream) -> io::Result<ClientSocket> {
+ #[cfg(not(feature = "tls-connections"))]
+ {
+ Ok(ClientSocket::Plain(socket))
+ }
+
+ #[cfg(feature = "tls-connections")]
+ {
+ let ssl = Ssl::new(&self.ssl.context).unwrap();
+ let mut builder = SslStreamBuilder::new(ssl, socket);
+ builder.set_accept_state();
+ match builder.handshake() {
+ Ok(stream) => Ok(ClientSocket::SslStream(stream)),
+ Err(HandshakeError::WouldBlock(stream)) => {
+ Ok(ClientSocket::SslHandshake(Some(stream)))
+ }
+ Err(e) => {
+ debug!("OpenSSL handshake failed: {}", e);
+ Err(Error::new(ErrorKind::Other, "Connection failure"))
+ }
+ }
+ }
+ }
+
+ pub fn accept_client(&mut self, poll: &Poll) -> io::Result<()> {
+ let (client_socket, addr) = self.listener.accept()?;
+ info!("Connected: {}", addr);
+
+ let client_id = self.server.add_client();
+ self.register_client(
+ poll,
+ client_id,
+ self.create_client_socket(client_socket)?,
+ addr,
+ );
+ self.flush_server_messages();
+
+ Ok(())
+ }
+
+ fn operation_failed(
+ &mut self,
+ poll: &Poll,
+ client_id: ClientId,
+ error: &Error,
+ msg: &str,
+ ) -> io::Result<()> {
+ let addr = if let Some(ref mut client) = self.clients.get_mut(client_id) {
+ client.peer_addr
+ } else {
+ SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0)
+ };
+ debug!("{}({}): {}", msg, addr, error);
+ self.client_error(poll, client_id)
+ }
+
+ pub fn client_readable(&mut self, poll: &Poll, client_id: ClientId) -> io::Result<()> {
+ let messages = if let Some(ref mut client) = self.clients.get_mut(client_id) {
+ client.read()
+ } else {
+ warn!("invalid readable client: {}", client_id);
+ Ok((Vec::new(), NetworkClientState::Idle))
+ };
+
+ match messages {
+ Ok((messages, state)) => {
+ for message in messages {
+ self.server.handle_msg(client_id, message);
+ }
+ match state {
+ NetworkClientState::NeedsRead => {
+ self.pending.insert((client_id, state));
+ }
+ NetworkClientState::Closed => self.client_error(&poll, client_id)?,
+ _ => {}
+ };
+ }
+ Err(e) => self.operation_failed(
+ poll,
+ client_id,
+ &e,
+ "Error while reading from client socket",
+ )?,
+ }
+
+ self.flush_server_messages();
+
+ if !self.server.removed_clients.is_empty() {
+ let ids: Vec<_> = self.server.removed_clients.drain(..).collect();
+ for client_id in ids {
+ self.deregister_client(poll, client_id);
+ }
+ }
+
+ Ok(())
+ }
+
+ pub fn client_writable(&mut self, poll: &Poll, client_id: ClientId) -> io::Result<()> {
+ let result = if let Some(ref mut client) = self.clients.get_mut(client_id) {
+ client.write()
+ } else {
+ warn!("invalid writable client: {}", client_id);
+ Ok(((), NetworkClientState::Idle))
+ };
+
+ match result {
+ Ok(((), state)) if state == NetworkClientState::NeedsWrite => {
+ self.pending.insert((client_id, state));
+ }
+ Ok(_) => {}
+ Err(e) => {
+ self.operation_failed(poll, client_id, &e, "Error while writing to client socket")?
+ }
+ }
+
+ Ok(())
+ }
+
+ pub fn client_error(&mut self, poll: &Poll, client_id: ClientId) -> io::Result<()> {
+ self.deregister_client(poll, client_id);
+ self.server.client_lost(client_id);
+
+ Ok(())
+ }
+
+ pub fn has_pending_operations(&self) -> bool {
+ !self.pending.is_empty()
+ }
+
+ pub fn on_idle(&mut self, poll: &Poll) -> io::Result<()> {
+ if self.has_pending_operations() {
+ let mut cache = replace(&mut self.pending_cache, Vec::new());
+ cache.extend(self.pending.drain());
+ for (id, state) in cache.drain(..) {
+ match state {
+ NetworkClientState::NeedsRead => self.client_readable(poll, id)?,
+ NetworkClientState::NeedsWrite => self.client_writable(poll, id)?,
+ _ => {}
+ }
+ }
+ swap(&mut cache, &mut self.pending_cache);
+ }
+ Ok(())
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/server/room.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,453 @@
+use crate::server::{
+ client::HWClient,
+ coretypes::{ClientId, GameCfg, GameCfg::*, RoomId, TeamInfo, Voting, MAX_HEDGEHOGS_PER_TEAM},
+};
+use bitflags::*;
+use serde::{Deserialize, Serialize};
+use serde_derive::{Deserialize, Serialize};
+use serde_yaml;
+use std::{collections::HashMap, iter};
+
+const MAX_TEAMS_IN_ROOM: u8 = 8;
+const MAX_HEDGEHOGS_IN_ROOM: u8 = MAX_HEDGEHOGS_PER_TEAM * MAX_HEDGEHOGS_PER_TEAM;
+
+#[derive(Clone, Serialize, Deserialize)]
+struct Ammo {
+ name: String,
+ settings: Option<String>,
+}
+
+#[derive(Clone, Serialize, Deserialize)]
+struct Scheme {
+ name: String,
+ settings: Vec<String>,
+}
+
+#[derive(Clone, Serialize, Deserialize)]
+struct RoomConfig {
+ feature_size: u32,
+ map_type: String,
+ map_generator: u32,
+ maze_size: u32,
+ seed: String,
+ template: u32,
+
+ ammo: Ammo,
+ scheme: Scheme,
+ script: String,
+ theme: String,
+ drawn_map: Option<String>,
+}
+
+impl RoomConfig {
+ fn new() -> RoomConfig {
+ RoomConfig {
+ feature_size: 12,
+ map_type: "+rnd+".to_string(),
+ map_generator: 0,
+ maze_size: 0,
+ seed: "seed".to_string(),
+ template: 0,
+
+ ammo: Ammo {
+ name: "Default".to_string(),
+ settings: None,
+ },
+ scheme: Scheme {
+ name: "Default".to_string(),
+ settings: Vec::new(),
+ },
+ script: "Normal".to_string(),
+ theme: "\u{1f994}".to_string(),
+ drawn_map: None,
+ }
+ }
+}
+
+fn client_teams_impl(
+ teams: &[(ClientId, TeamInfo)],
+ client_id: ClientId,
+) -> impl Iterator<Item = &TeamInfo> + Clone {
+ teams
+ .iter()
+ .filter(move |(id, _)| *id == client_id)
+ .map(|(_, t)| t)
+}
+
+fn map_config_from(c: &RoomConfig) -> Vec<String> {
+ vec![
+ c.feature_size.to_string(),
+ c.map_type.to_string(),
+ c.map_generator.to_string(),
+ c.maze_size.to_string(),
+ c.seed.to_string(),
+ c.template.to_string(),
+ ]
+}
+
+fn game_config_from(c: &RoomConfig) -> Vec<GameCfg> {
+ use crate::server::coretypes::GameCfg::*;
+ let mut v = vec![
+ Ammo(c.ammo.name.to_string(), c.ammo.settings.clone()),
+ Scheme(c.scheme.name.to_string(), c.scheme.settings.clone()),
+ Script(c.script.to_string()),
+ Theme(c.theme.to_string()),
+ ];
+ if let Some(ref m) = c.drawn_map {
+ v.push(DrawnMap(m.to_string()))
+ }
+ v
+}
+
+pub struct GameInfo {
+ pub teams_in_game: u8,
+ pub teams_at_start: Vec<(ClientId, TeamInfo)>,
+ pub left_teams: Vec<String>,
+ pub msg_log: Vec<String>,
+ pub sync_msg: Option<String>,
+ pub is_paused: bool,
+ config: RoomConfig,
+}
+
+impl GameInfo {
+ fn new(teams: Vec<(ClientId, TeamInfo)>, config: RoomConfig) -> GameInfo {
+ GameInfo {
+ left_teams: Vec::new(),
+ msg_log: Vec::new(),
+ sync_msg: None,
+ is_paused: false,
+ teams_in_game: teams.len() as u8,
+ teams_at_start: teams,
+ config,
+ }
+ }
+
+ pub fn client_teams(&self, client_id: ClientId) -> impl Iterator<Item = &TeamInfo> + Clone {
+ client_teams_impl(&self.teams_at_start, client_id)
+ }
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct RoomSave {
+ pub location: String,
+ config: RoomConfig,
+}
+
+bitflags! {
+ pub struct RoomFlags: u8 {
+ const FIXED = 0b0000_0001;
+ const RESTRICTED_JOIN = 0b0000_0010;
+ const RESTRICTED_TEAM_ADD = 0b0000_0100;
+ const RESTRICTED_UNREGISTERED_PLAYERS = 0b0000_1000;
+ }
+}
+
+pub struct HWRoom {
+ pub id: RoomId,
+ pub master_id: Option<ClientId>,
+ pub name: String,
+ pub password: Option<String>,
+ pub greeting: String,
+ pub protocol_number: u16,
+ pub flags: RoomFlags,
+
+ pub players_number: u8,
+ pub default_hedgehog_number: u8,
+ pub team_limit: u8,
+ pub ready_players_number: u8,
+ pub teams: Vec<(ClientId, TeamInfo)>,
+ config: RoomConfig,
+ pub voting: Option<Voting>,
+ pub saves: HashMap<String, RoomSave>,
+ pub game_info: Option<GameInfo>,
+}
+
+impl HWRoom {
+ pub fn new(id: RoomId) -> HWRoom {
+ HWRoom {
+ id,
+ master_id: None,
+ name: String::new(),
+ password: None,
+ greeting: "".to_string(),
+ flags: RoomFlags::empty(),
+ protocol_number: 0,
+ players_number: 0,
+ default_hedgehog_number: 4,
+ team_limit: MAX_TEAMS_IN_ROOM,
+ ready_players_number: 0,
+ teams: Vec::new(),
+ config: RoomConfig::new(),
+ voting: None,
+ saves: HashMap::new(),
+ game_info: None,
+ }
+ }
+
+ pub fn hedgehogs_number(&self) -> u8 {
+ self.teams.iter().map(|(_, t)| t.hedgehogs_number).sum()
+ }
+
+ pub fn addable_hedgehogs(&self) -> u8 {
+ MAX_HEDGEHOGS_IN_ROOM - self.hedgehogs_number()
+ }
+
+ pub fn add_team(
+ &mut self,
+ owner_id: ClientId,
+ mut team: TeamInfo,
+ preserve_color: bool,
+ ) -> &TeamInfo {
+ if !preserve_color {
+ team.color = iter::repeat(())
+ .enumerate()
+ .map(|(i, _)| i as u8)
+ .take(u8::max_value() as usize + 1)
+ .find(|i| self.teams.iter().all(|(_, t)| t.color != *i))
+ .unwrap_or(0u8)
+ };
+ team.hedgehogs_number = if self.teams.is_empty() {
+ self.default_hedgehog_number
+ } else {
+ self.teams[0]
+ .1
+ .hedgehogs_number
+ .min(self.addable_hedgehogs())
+ };
+ self.teams.push((owner_id, team));
+ &self.teams.last().unwrap().1
+ }
+
+ pub fn remove_team(&mut self, name: &str) {
+ if let Some(index) = self.teams.iter().position(|(_, t)| t.name == name) {
+ self.teams.remove(index);
+ }
+ }
+
+ pub fn set_hedgehogs_number(&mut self, n: u8) -> Vec<String> {
+ let mut names = Vec::new();
+ let teams = match self.game_info {
+ Some(ref mut info) => &mut info.teams_at_start,
+ None => &mut self.teams,
+ };
+
+ if teams.len() as u8 * n <= MAX_HEDGEHOGS_IN_ROOM {
+ for (_, team) in teams.iter_mut() {
+ team.hedgehogs_number = n;
+ names.push(team.name.clone())
+ }
+ self.default_hedgehog_number = n;
+ }
+ names
+ }
+
+ pub fn find_team_and_owner_mut<F>(&mut self, f: F) -> Option<(ClientId, &mut TeamInfo)>
+ where
+ F: Fn(&TeamInfo) -> bool,
+ {
+ self.teams
+ .iter_mut()
+ .find(|(_, t)| f(t))
+ .map(|(id, t)| (*id, t))
+ }
+
+ pub fn find_team<F>(&self, f: F) -> Option<&TeamInfo>
+ where
+ F: Fn(&TeamInfo) -> bool,
+ {
+ self.teams
+ .iter()
+ .find_map(|(_, t)| Some(t).filter(|t| f(&t)))
+ }
+
+ pub fn client_teams(&self, client_id: ClientId) -> impl Iterator<Item = &TeamInfo> {
+ client_teams_impl(&self.teams, client_id)
+ }
+
+ pub fn client_team_indices(&self, client_id: ClientId) -> Vec<u8> {
+ self.teams
+ .iter()
+ .enumerate()
+ .filter(move |(_, (id, _))| *id == client_id)
+ .map(|(i, _)| i as u8)
+ .collect()
+ }
+
+ pub fn find_team_owner(&self, team_name: &str) -> Option<(ClientId, &str)> {
+ self.teams
+ .iter()
+ .find(|(_, t)| t.name == team_name)
+ .map(|(id, t)| (*id, &t.name[..]))
+ }
+
+ pub fn find_team_color(&self, owner_id: ClientId) -> Option<u8> {
+ self.client_teams(owner_id).nth(0).map(|t| t.color)
+ }
+
+ pub fn has_multiple_clans(&self) -> bool {
+ self.teams.iter().min_by_key(|(_, t)| t.color)
+ != self.teams.iter().max_by_key(|(_, t)| t.color)
+ }
+
+ pub fn set_config(&mut self, cfg: GameCfg) {
+ let c = &mut self.config;
+ match cfg {
+ FeatureSize(s) => c.feature_size = s,
+ MapType(t) => c.map_type = t,
+ MapGenerator(g) => c.map_generator = g,
+ MazeSize(s) => c.maze_size = s,
+ Seed(s) => c.seed = s,
+ Template(t) => c.template = t,
+
+ Ammo(n, s) => {
+ c.ammo = Ammo {
+ name: n,
+ settings: s,
+ }
+ }
+ Scheme(n, s) => {
+ c.scheme = Scheme {
+ name: n,
+ settings: s,
+ }
+ }
+ Script(s) => c.script = s,
+ Theme(t) => c.theme = t,
+ DrawnMap(m) => c.drawn_map = Some(m),
+ };
+ }
+
+ pub fn start_round(&mut self) {
+ if self.game_info.is_none() {
+ self.game_info = Some(GameInfo::new(self.teams.clone(), self.config.clone()));
+ }
+ }
+
+ pub fn is_fixed(&self) -> bool {
+ self.flags.contains(RoomFlags::FIXED)
+ }
+ pub fn is_join_restricted(&self) -> bool {
+ self.flags.contains(RoomFlags::RESTRICTED_JOIN)
+ }
+ pub fn is_team_add_restricted(&self) -> bool {
+ self.flags.contains(RoomFlags::RESTRICTED_TEAM_ADD)
+ }
+ pub fn are_unregistered_players_restricted(&self) -> bool {
+ self.flags
+ .contains(RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS)
+ }
+
+ pub fn set_is_fixed(&mut self, value: bool) {
+ self.flags.set(RoomFlags::FIXED, value)
+ }
+ pub fn set_join_restriction(&mut self, value: bool) {
+ self.flags.set(RoomFlags::RESTRICTED_JOIN, value)
+ }
+ pub fn set_team_add_restriction(&mut self, value: bool) {
+ self.flags.set(RoomFlags::RESTRICTED_TEAM_ADD, value)
+ }
+ pub fn set_unregistered_players_restriction(&mut self, value: bool) {
+ self.flags
+ .set(RoomFlags::RESTRICTED_UNREGISTERED_PLAYERS, value)
+ }
+
+ fn flags_string(&self) -> String {
+ let mut result = "-".to_string();
+ if self.game_info.is_some() {
+ result += "g"
+ }
+ if self.password.is_some() {
+ result += "p"
+ }
+ if self.is_join_restricted() {
+ result += "j"
+ }
+ if self.are_unregistered_players_restricted() {
+ result += "r"
+ }
+ result
+ }
+
+ pub fn info(&self, master: Option<&HWClient>) -> Vec<String> {
+ let c = &self.config;
+ vec![
+ self.flags_string(),
+ self.name.clone(),
+ self.players_number.to_string(),
+ self.teams.len().to_string(),
+ master.map_or("[]", |c| &c.nick).to_string(),
+ c.map_type.to_string(),
+ c.script.to_string(),
+ c.scheme.name.to_string(),
+ c.ammo.name.to_string(),
+ ]
+ }
+
+ pub fn map_config(&self) -> Vec<String> {
+ match self.game_info {
+ Some(ref info) => map_config_from(&info.config),
+ None => map_config_from(&self.config),
+ }
+ }
+
+ pub fn game_config(&self) -> Vec<GameCfg> {
+ match self.game_info {
+ Some(ref info) => game_config_from(&info.config),
+ None => game_config_from(&self.config),
+ }
+ }
+
+ pub fn save_config(&mut self, name: String, location: String) {
+ self.saves.insert(
+ name,
+ RoomSave {
+ location,
+ config: self.config.clone(),
+ },
+ );
+ }
+
+ pub fn load_config(&mut self, name: &str) -> Option<&str> {
+ if let Some(save) = self.saves.get(name) {
+ self.config = save.config.clone();
+ Some(&save.location[..])
+ } else {
+ None
+ }
+ }
+
+ pub fn delete_config(&mut self, name: &str) -> bool {
+ self.saves.remove(name).is_some()
+ }
+
+ pub fn get_saves(&self) -> Result<String, serde_yaml::Error> {
+ serde_yaml::to_string(&(&self.greeting, &self.saves))
+ }
+
+ pub fn set_saves(&mut self, text: &str) -> Result<(), serde_yaml::Error> {
+ serde_yaml::from_str::<(String, HashMap<String, RoomSave>)>(text).map(
+ |(greeting, saves)| {
+ self.greeting = greeting;
+ self.saves = saves;
+ },
+ )
+ }
+
+ pub fn team_info(owner: &HWClient, team: &TeamInfo) -> Vec<String> {
+ let mut info = vec![
+ team.name.clone(),
+ team.grave.clone(),
+ team.fort.clone(),
+ team.voice_pack.clone(),
+ team.flag.clone(),
+ owner.nick.clone(),
+ team.difficulty.to_string(),
+ ];
+ let hogs = team
+ .hedgehogs
+ .iter()
+ .flat_map(|h| iter::once(h.name.clone()).chain(iter::once(h.hat.clone())));
+ info.extend(hogs);
+ info
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/utils.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,70 @@
+use base64::encode;
+use mio;
+use std::iter::Iterator;
+
+pub const PROTOCOL_VERSION: u32 = 3;
+pub const SERVER: mio::Token = mio::Token(1_000_000_000);
+
+pub fn is_name_illegal(name: &str) -> bool {
+ name.len() > 40
+ || name.trim().is_empty()
+ || name
+ .chars()
+ .any(|c| "$()*+?[]^{|}\x7F".contains(c) || '\x00' <= c && c <= '\x1F')
+}
+
+pub fn to_engine_msg<T>(msg: T) -> String
+where
+ T: Iterator<Item = u8> + Clone,
+{
+ let mut tmp = Vec::new();
+ tmp.push(msg.clone().count() as u8);
+ tmp.extend(msg);
+ encode(&tmp)
+}
+
+pub fn protocol_version_string(protocol_number: u16) -> &'static str {
+ match protocol_number {
+ 17 => "0.9.7-dev",
+ 19 => "0.9.7",
+ 20 => "0.9.8-dev",
+ 21 => "0.9.8",
+ 22 => "0.9.9-dev",
+ 23 => "0.9.9",
+ 24 => "0.9.10-dev",
+ 25 => "0.9.10",
+ 26 => "0.9.11-dev",
+ 27 => "0.9.11",
+ 28 => "0.9.12-dev",
+ 29 => "0.9.12",
+ 30 => "0.9.13-dev",
+ 31 => "0.9.13",
+ 32 => "0.9.14-dev",
+ 33 => "0.9.14",
+ 34 => "0.9.15-dev",
+ 35 => "0.9.14.1",
+ 37 => "0.9.15",
+ 38 => "0.9.16-dev",
+ 39 => "0.9.16",
+ 40 => "0.9.17-dev",
+ 41 => "0.9.17",
+ 42 => "0.9.18-dev",
+ 43 => "0.9.18",
+ 44 => "0.9.19-dev",
+ 45 => "0.9.19",
+ 46 => "0.9.20-dev",
+ 47 => "0.9.20",
+ 48 => "0.9.21-dev",
+ 49 => "0.9.21",
+ 50 => "0.9.22-dev",
+ 51 => "0.9.22",
+ 52 => "0.9.23-dev",
+ 53 => "0.9.23",
+ 54 => "0.9.24-dev",
+ 55 => "0.9.24",
+ 56 => "0.9.25-dev",
+ 57 => "0.9.25",
+ 58 => "1.0.0-dev",
+ _ => "Unknown",
+ }
+}
--- a/rust/lib-hedgewars-engine/src/lib.rs Mon Jan 14 12:34:47 2019 -0500
+++ b/rust/lib-hedgewars-engine/src/lib.rs Mon Jan 14 12:35:32 2019 -0500
@@ -25,8 +25,8 @@
}
#[no_mangle]
-pub extern "C" fn protocol_version() -> u32 {
- 56
+pub extern "C" fn hedgewars_engine_protocol_version() -> u32 {
+ 58
}
#[no_mangle]
@@ -42,14 +42,19 @@
(*engine_state).world.generate_preview();
- let land_preview = (*engine_state).world.preview();
+ if let Some(land_preview) = (*engine_state).world.preview() {
+ *preview = PreviewInfo {
+ width: land_preview.width() as u32,
+ height: land_preview.height() as u32,
+ hedgehogs_number: 0,
+ land: land_preview.raw_pixels().as_ptr(),
+ };
+ }
+}
- *preview = PreviewInfo {
- width: land_preview.width() as u32,
- height: land_preview.height() as u32,
- hedgehogs_number: 0,
- land: land_preview.raw_pixels().as_ptr(),
- };
+#[no_mangle]
+pub extern "C" fn dispose_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) {
+ (*engine_state).world.dispose_preview();
}
#[no_mangle]
--- a/rust/lib-hedgewars-engine/src/world.rs Mon Jan 14 12:34:47 2019 -0500
+++ b/rust/lib-hedgewars-engine/src/world.rs Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,7 @@
pub struct World {
random_numbers_gen: LaggedFibonacciPRNG,
- preview: Land2D<u8>,
+ preview: Option<Land2D<u8>>,
game_state: Option<GameState>,
}
@@ -34,7 +34,7 @@
pub fn new() -> Self {
Self {
random_numbers_gen: LaggedFibonacciPRNG::new(&[]),
- preview: Land2D::new(Size::new(0, 0), 0),
+ preview: None,
game_state: None,
}
}
@@ -43,7 +43,7 @@
self.random_numbers_gen = LaggedFibonacciPRNG::new(seed);
}
- pub fn preview(&self) -> &Land2D<u8> {
+ pub fn preview(&self) -> &Option<Land2D<u8>> {
&self.preview
}
@@ -63,7 +63,11 @@
let params = LandGenerationParameters::new(0u8, u8::max_value(), 5, false, false);
let landgen = TemplatedLandGenerator::new(template());
- self.preview = landgen.generate_land(¶ms, &mut self.random_numbers_gen);
+ self.preview = Some(landgen.generate_land(¶ms, &mut self.random_numbers_gen));
+ }
+
+ pub fn dispose_preview(&mut self) {
+ self.preview = None
}
pub fn init(&mut self, template: OutlineTemplate) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/Cargo.toml Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,15 @@
+[package]
+
+name = "physfs-rs"
+version = "0.1.0"
+license = "zlib"
+authors = [ "Robert Habermeier" ]
+
+[lib]
+
+name = "physfs"
+
+[dependencies]
+
+libc = "0.1"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/LICENSE.txt Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,20 @@
+Copyright (c) 2014 Robert Habermeier
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/README.md Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,7 @@
+# physfs-rs [![Build Status](https://travis-ci.org/PistonDevelopers/physfs-rs.svg?branch=master)](https://travis-ci.org/PistonDevelopers/physfs-rs)
+
+## Rust bindings for PhysFS
+
+This project is built against the Rust nightly and PhysFS 2.0.3
+
+[How to contribute](https://github.com/PistonDevelopers/piston/blob/master/CONTRIBUTING.md)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/build.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,4 @@
+fn main() {
+ #[cfg(target_os = "freebsd")]
+ println!("cargo:rustc-link-search=native=/usr/local/lib");
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/src/lib.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,13 @@
+//! PhysFS bindings for Rust
+
+#![deny(missing_docs)]
+
+extern crate libc;
+
+pub use physfs::*;
+pub use physfs::file::*;
+
+/// PhysFS bindings
+mod physfs;
+/// Definitions for the PhysFS primitives
+mod primitives;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/src/physfs/file.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,216 @@
+use std::ffi::CString;
+use std::io::{ Read, Write, Seek, SeekFrom, Result };
+use std::mem;
+use libc::{ c_int, c_char, c_void };
+use primitives::*;
+use super::{ PhysFSContext };
+use super::util::physfs_error_as_io_error;
+
+#[link(name = "physfs")]
+extern {
+ // valid filehandle on success, NULL on failure
+ fn PHYSFS_openAppend(filename: *const c_char) -> *const RawFile;
+ fn PHYSFS_openRead(filename: *const c_char) -> *const RawFile;
+ fn PHYSFS_openWrite(filename: *const c_char) -> *const RawFile;
+
+ // nonzero on success, 0 on failure (and the handle stays open)
+ // The docs make it sound like failure is rare.
+ fn PHYSFS_close(file: *const RawFile) -> c_int;
+
+ // Number of bytes read on success, -1 on failure.
+ fn PHYSFS_read(file: *const RawFile, buffer: *mut c_void,
+ obj_size: PHYSFS_uint32, obj_count: PHYSFS_uint32) -> PHYSFS_sint64;
+
+ // Number of bytes written on success, -1 on failure.
+ fn PHYSFS_write(file: *const RawFile, buffer: *const c_void,
+ obj_size: PHYSFS_uint32, obj_count: PHYSFS_uint32) -> PHYSFS_sint64;
+
+ // Flush buffered file; no-op for unbuffered files.
+ fn PHYSFS_flush(file: *const RawFile) -> c_int;
+
+ // Seek to position in file; nonzero on succss, zero on error.
+ fn PHYSFS_seek(file: *const RawFile, pos: PHYSFS_uint64) -> c_int;
+
+ // Current position in file, -1 on failure.
+ fn PHYSFS_tell(file: *const RawFile) -> PHYSFS_sint64;
+
+ // nonzero if EOF, zero if not.
+ fn PHYSFS_eof(file: *const RawFile) -> c_int;
+
+ // Determine file size; returns -1 if impossible
+ fn PHYSFS_fileLength(file: *const RawFile) -> PHYSFS_sint64;
+}
+
+/// Possible ways to open a file.
+#[derive(Copy, Clone)]
+pub enum Mode {
+ /// Append to the end of the file.
+ Append,
+ /// Read from the file.
+ Read,
+ /// Write to the file, overwriting previous data.
+ Write,
+}
+
+/// A wrapper for the PHYSFS_File type.
+#[repr(C)]
+struct RawFile {
+ opaque: *const c_void,
+}
+
+/// A file handle.
+#[allow(dead_code)]
+pub struct File<'f> {
+ raw: *const RawFile,
+ mode: Mode,
+ context: &'f PhysFSContext,
+}
+
+impl<'f> File<'f> {
+ /// Opens a file with a specific mode.
+ pub fn open<'g>(context: &'g PhysFSContext, filename: String, mode: Mode) -> Result<File<'g>> {
+ let c_filename = try!(CString::new(filename));
+ let raw = unsafe { match mode {
+ Mode::Append => PHYSFS_openAppend(c_filename.as_ptr()),
+ Mode::Read => PHYSFS_openRead(c_filename.as_ptr()),
+ Mode::Write => PHYSFS_openWrite(c_filename.as_ptr())
+ }};
+
+ if raw.is_null() {
+ Err(physfs_error_as_io_error())
+ }
+ else {
+ Ok(File{raw: raw, mode: mode, context: context})
+ }
+ }
+
+ /// Closes a file handle.
+ fn close(&self) -> Result<()> {
+ match unsafe {
+ PHYSFS_close(self.raw)
+ } {
+ 0 => Err(physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Checks whether eof is reached or not.
+ pub fn eof(&self) -> bool {
+ let ret = unsafe {
+ PHYSFS_eof(self.raw)
+ };
+
+ ret != 0
+ }
+
+ /// Determine length of file, if possible
+ pub fn len(&self) -> Result<u64> {
+ let len = unsafe { PHYSFS_fileLength(self.raw) };
+
+ if len >= 0 {
+ Ok(len as u64)
+ } else {
+ Err(physfs_error_as_io_error())
+ }
+ }
+
+ /// Determines current position within a file
+ pub fn tell(&self) -> Result<u64> {
+ let ret = unsafe {
+ PHYSFS_tell(self.raw)
+ };
+
+ match ret {
+ -1 => Err(physfs_error_as_io_error()),
+ _ => Ok(ret as u64)
+ }
+ }
+}
+
+impl<'f> Read for File<'f> {
+ /// Reads from a file
+ fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
+ let ret = unsafe {
+ PHYSFS_read(
+ self.raw,
+ buf.as_ptr() as *mut c_void,
+ mem::size_of::<u8>() as PHYSFS_uint32,
+ buf.len() as PHYSFS_uint32
+ )
+ };
+
+ match ret {
+ -1 => Err(physfs_error_as_io_error()),
+ _ => Ok(ret as usize)
+ }
+ }
+}
+
+impl<'f> Write for File<'f> {
+ /// Writes to a file.
+ /// This code performs no safety checks to ensure
+ /// that the buffer is the correct length.
+ fn write(&mut self, buf: &[u8]) -> Result<usize> {
+ let ret = unsafe {
+ PHYSFS_write(
+ self.raw,
+ buf.as_ptr() as *const c_void,
+ mem::size_of::<u8>() as PHYSFS_uint32,
+ buf.len() as PHYSFS_uint32
+ )
+ };
+
+ match ret {
+ -1 => Err(physfs_error_as_io_error()),
+ _ => Ok(ret as usize)
+ }
+ }
+
+ /// Flushes a file if buffered; no-op if unbuffered.
+ fn flush(&mut self) -> Result<()> {
+ let ret = unsafe {
+ PHYSFS_flush(self.raw)
+ };
+
+ match ret {
+ 0 => Err(physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+}
+
+impl<'f> Seek for File<'f> {
+ /// Seek to a new position within a file
+ fn seek(&mut self, pos: SeekFrom) -> Result<u64> {
+ let seek_pos = match pos {
+ SeekFrom::Start(n) => n as i64,
+ SeekFrom::End(n) => {
+ let len = try!(self.len());
+ n + len as i64
+ }
+ SeekFrom::Current(n) => {
+ let curr_pos = try!(self.tell());
+ n + curr_pos as i64
+ }
+ };
+
+ let result = unsafe {
+ PHYSFS_seek(
+ self.raw,
+ seek_pos as PHYSFS_uint64
+ )
+ };
+
+ if result == -1 {
+ return Err(physfs_error_as_io_error());
+ }
+
+ self.tell()
+ }
+}
+
+impl<'f> Drop for File<'f> {
+ fn drop(&mut self) {
+ let _ = self.close();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/src/physfs/mod.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,190 @@
+use std::ffi::{ CString, CStr, OsStr };
+use std::io::Result;
+use std::sync::{ Mutex };
+use libc::{ c_int, c_char };
+
+/// Keep track of the number of global contexts.
+static mut NUM_CONTEXTS: usize = 0;
+
+/// Utility
+mod util;
+/// File operations
+pub mod file;
+
+#[link(name = "physfs")]
+extern {
+ // nonzero on success, zero on error.
+ fn PHYSFS_init(arg0: *const c_char) -> c_int;
+ // nonzero if initialized, zero if not.
+ fn PHYSFS_isInit() -> c_int;
+ // nonzero if success, zero if error.
+ fn PHYSFS_deinit() -> c_int;
+ // string if success, NULL if error.
+ fn PHYSFS_getLastError() -> *const c_char;
+ // nonzero if success, zero if error
+ fn PHYSFS_mount(new_dir: *const c_char, mount_point: *const c_char, append_to_path: c_int) -> c_int;
+ // nonzero if success, zero if error.
+ fn PHYSFS_setWriteDir(write_dir: *const c_char) -> c_int;
+ // nonzero on success, zero on error.
+ fn PHYSFS_mkdir(dir_name: *const c_char) -> c_int;
+ // Checks if a given path exists; returns nonzero if true
+ fn PHYSFS_exists(path: *const c_char) -> c_int;
+ // Checks if a given path is a directory; returns nonzero if true
+ fn PHYSFS_isDirectory(path: *const c_char) -> c_int;
+}
+
+/// The access point for PhysFS function calls.
+pub struct PhysFSContext;
+
+unsafe impl Send for PhysFSContext {}
+
+impl PhysFSContext {
+ /// Creates a new PhysFS context.
+ pub fn new() -> Result<Self> {
+ let con = PhysFSContext;
+ match PhysFSContext::init() {
+ Err(e) => Err(e),
+ _ => {
+ // Everything's gone right so far
+ // now, increment the instance counter
+ println!("Inc");
+ unsafe {
+ NUM_CONTEXTS += 1;
+ }
+ // and return the newly created context
+ Ok(con)
+ }
+ }
+ }
+
+ /// initializes the PhysFS library.
+ fn init() -> Result<()> {
+ // Initializing multiple times throws an error. So let's not!
+ if PhysFSContext::is_init() { return Ok(()); }
+
+ let mut args = ::std::env::args();
+ let default_arg0 = "".to_string();
+ let arg0 = args.next().unwrap_or(default_arg0);
+ let c_arg0 = try!(CString::new(arg0));
+ let ret = unsafe { PHYSFS_init(c_arg0.as_ptr()) };
+
+ match ret {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Checks if PhysFS is initialized
+ pub fn is_init() -> bool {
+ unsafe { PHYSFS_isInit() != 0 }
+ }
+
+ /// De-initializes PhysFS. It is recommended to close
+ /// all file handles manually before calling this.
+ fn de_init() {
+ // de_init'ing more than once can cause a double-free -- do not want.
+ if !PhysFSContext::is_init() { return }
+ unsafe {
+ PHYSFS_deinit();
+ }
+ }
+ /// Adds an archive or directory to the search path.
+ /// mount_point is the location in the tree to mount it to.
+ pub fn mount<P>(&self, new_dir: P, mount_point: String, append_to_path: bool) -> Result<()>
+ where P: AsRef<OsStr>
+ {
+ let c_new_dir = CString::new(new_dir.as_ref().to_string_lossy().as_bytes()).unwrap();
+ let c_mount_point = try!(CString::new(mount_point));
+ match unsafe {
+ PHYSFS_mount(
+ c_new_dir.as_c_str().as_ptr(),
+ c_mount_point.as_ptr(),
+ append_to_path as c_int
+ )
+ } {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Gets the last error message in a human-readable format
+ /// This message may be localized, so do not expect it to
+ /// match a specific string of characters.
+ pub fn get_last_error() -> String {
+ let ptr: *const c_char = unsafe {
+ PHYSFS_getLastError()
+ };
+ if ptr.is_null() {
+ return "".to_string()
+ }
+
+ let buf = unsafe { CStr::from_ptr(ptr).to_bytes().to_vec() };
+
+ String::from_utf8(buf).unwrap()
+ }
+
+ /// Sets a new write directory.
+ /// This method will fail if the current write dir
+ /// still has open files in it.
+ pub fn set_write_dir<P>(&self, write_dir: P) -> Result<()>
+ where P: AsRef<OsStr>
+ {
+ let write_dir = CStr::from_bytes_with_nul(write_dir.as_ref().to_str().unwrap().as_bytes()).unwrap();
+ let ret = unsafe {
+ PHYSFS_setWriteDir(write_dir.as_ptr())
+ };
+
+ match ret {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Creates a new dir relative to the write_dir.
+ pub fn mkdir(&self, dir_name: &str) -> Result<()> {
+ let c_dir_name = try!(CString::new(dir_name));
+ let ret = unsafe {
+ PHYSFS_mkdir(c_dir_name.as_ptr())
+ };
+
+ match ret {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Checks if given path exists
+ pub fn exists(&self, path: &str) -> Result<()> {
+ let c_path = try!(CString::new(path));
+ let ret = unsafe { PHYSFS_exists(c_path.as_ptr()) };
+
+ match ret {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+
+ /// Checks if given path is a directory
+ pub fn is_directory(&self, path: &str) -> Result<()> {
+ let c_path = try!(CString::new(path));
+ let ret = unsafe { PHYSFS_isDirectory(c_path.as_ptr()) };
+
+ match ret {
+ 0 => Err(util::physfs_error_as_io_error()),
+ _ => Ok(())
+ }
+ }
+}
+
+impl Drop for PhysFSContext {
+ fn drop(&mut self) {
+ // decrement NUM_CONTEXTS
+ unsafe {
+ NUM_CONTEXTS -= 1;
+ }
+ // and de_init if there aren't any contexts left.
+ if unsafe { NUM_CONTEXTS == 0 } {
+ PhysFSContext::de_init();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/src/physfs/util.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,7 @@
+use std::io::{ Error, ErrorKind };
+use super::PhysFSContext;
+
+pub fn physfs_error_as_io_error() -> Error {
+ Error::new(ErrorKind::Other,
+ &format!("PhysicsFS Error: `{}`", PhysFSContext::get_last_error())[..])
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/src/primitives.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,19 @@
+#![allow(non_camel_case_types)]
+
+pub type PHYSFS_uint8 = ::libc::c_uchar;
+pub type PHYSFS_sint8 = ::libc::c_char;
+pub type PHYSFS_uint16 = ::libc::c_ushort;
+pub type PHYSFS_sint16 = ::libc::c_short;
+pub type PHYSFS_uint32 = ::libc::c_uint;
+pub type PHYSFS_sint32 = ::libc::c_int;
+
+#[cfg(target_pointer_width = "64")]
+pub type PHYSFS_uint64 = ::libc::c_ulonglong;
+#[cfg(target_pointer_width = "64")]
+pub type PHYSFS_sint64 = ::libc::c_longlong;
+
+// PhysFS defines the 64-bit types to 32 bits on 32-bit systems.
+#[cfg(target_pointer_width = "32")]
+pub type PHYSFS_uint64 = ::libc::c_uint;
+#[cfg(target_pointer_width = "32")]
+pub type PHYSFS_sint64 = ::libc::c_int;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/tests/directory/mod.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,40 @@
+use std::io::Read;
+use std::path::Path;
+
+use physfs::{ PhysFSContext, file };
+
+#[test]
+fn read_file_from_directory() {
+ let con = match PhysFSContext::new() {
+ Err(e) => panic!(e),
+ Ok(con) => con
+ };
+
+ assert!(PhysFSContext::is_init());
+
+ match con.mount(&Path::new(super::PATH_TO_HERE), "/test/".to_string(), true) {
+ Err(e) => panic!(e),
+ _ => ()
+ }
+
+ let mut file = match file::File::open(&con, "/test/directory/read.txt".to_string(), file::Mode::Read) {
+ Ok(f) => f,
+ Err(e) => panic!(e)
+ };
+
+ let buf = &mut [0; 32];
+
+ match file.read(buf) {
+ Err(e) => panic!(e),
+ _ => ()
+ }
+
+ let mut contents = String::new();
+ for &mut byte in buf {
+ if byte == 0 { break }
+ contents.push(byte as char);
+ }
+
+ assert!(contents == "Read from me.");
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/tests/directory/read.txt Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,1 @@
+Read from me.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/physfs-rs/tests/test.rs Mon Jan 14 12:35:32 2019 -0500
@@ -0,0 +1,15 @@
+extern crate physfs;
+
+use physfs::PhysFSContext;
+
+mod directory;
+
+// from project_root
+const PATH_TO_HERE: &'static str = "tests/";
+
+//#[test]
+fn test_create_physfs_context() {
+ let _c = PhysFSContext::new().unwrap();
+ assert!(PhysFSContext::is_init());
+}
+
Binary file share/hedgewars/Data/Graphics/Finger.png has changed
Binary file share/hedgewars/Data/Graphics/Hedgehog/amJetpack.png has changed
Binary file share/hedgewars/Data/Graphics/Switch.png has changed
Binary file share/hedgewars/Data/Graphics/Targetp.png has changed
Binary file share/hedgewars/Data/Graphics/Targetp@2x.png has changed
Binary file share/hedgewars/Data/Graphics/WindL.png has changed
Binary file share/hedgewars/Data/Graphics/WindR.png has changed
--- a/share/hedgewars/Data/Locale/campaigns_de.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/campaigns_de.txt Mon Jan 14 12:35:32 2019 -0500
@@ -19,10 +19,10 @@
A_Classic_Fairytale-dragon.desc="Unser Held muss auf die andere Seite des Sees kommen. Werd zum Seilprofi und vermeide es, von feindlichen Schüssen getroffen zu werden."
A_Classic_Fairytale-family.name="7. Mission: Familientreffen"
-A_Classic_Fairytale-family.desc="Unser Held muss erneut die Eingeborenen retten. Eliminiere die feindlichen Igel und befreie deine Kameraden. Benutze deine Ressourcen vorsichtig, weil sie begrenzt sind. Bohr ein paar Löcher an den richtigen Stellen und nähere dich der Prinzessin."
+A_Classic_Fairytale-family.desc="Unser Held muss erneut den Stamm retten. Eliminiere die feindlichen Igel und befreie deine Kameraden. Benutze deine Ressourcen vorsichtig, weil sie begrenzt sind. Bohr ein paar Löcher an den richtigen Stellen und nähere dich der Prinzessin."
A_Classic_Fairytale-queen.name="8. Mission: Lang lebe die Königin"
-A_Classic_Fairytale-queen.desc="Die Eingeborenen müssen noch einmal kämpfen. Um zu gewinnen, müssen sie den Verräter bekämpfen und alle verfügbaren Ressourcen benutzen. Besieg den Feind!"
+A_Classic_Fairytale-queen.desc="Der Stamm muss noch einmal kämpfen. Um zu gewinnen, müssen die Igel den Verräter bekämpfen und alle verfügbaren Ressourcen benutzen. Besieg den Feind!"
A_Classic_Fairytale-enemy.name="9. Mission: Der Feind meines Feindes"
A_Classic_Fairytale-enemy.desc="Was für eine umwerfende Wendung! Undichte Stelle muss mit den … »Kannibalen« gegen den gemeinsamen Feind – die bösen Cyborgs – kämpfen!"
@@ -33,43 +33,43 @@
A_Space_Adventure.name="Ein Weltraumabenteuer"
A_Space_Adventure-cosmos.name="Menü: Weltraumreise"
-A_Space_Adventure-cosmos.desc="Hogera, der Igelplanet, wird bald von einem riesigen Meteorit getroffen. In diesem Wettlauf ums Überleben musst du PAdIs besten Piloten, Igel Einsam, in einer Weltraumreise um die Nachbarplaneten führen, um alle 4 Teile des lang verschollenem Antigravitationsgeräts zu finden!"
+A_Space_Adventure-cosmos.desc="Hogera, der Igelplanet, wird bald von einem riesigen Meteorit getroffen. In diesem Wettlauf ums Überleben musst du einen mutigen Igel, der von der Planetaren Assoziation der Igel (PAdI) beauftragt wurde, in einer Weltraumreise um die Nachbarplaneten führen, um alle 4 Teile des lang verschollenem Antigravitationsgeräts zu finden."
A_Space_Adventure-moon01.name="Hauptmission: Der erste Halt"
-A_Space_Adventure-moon01.desc="Igel Einsam ist auf dem Mond gelandet, um seine fliegende Untertasse aufzutanken, aber Prof. Bösigel war zuerst da und hat einen Hinterhalt aufgestellt! Rette die gefangenen PAdI-Forscher und verscheuche Prof. Bösigel!"
+A_Space_Adventure-moon01.desc="Unser Held ist auf dem Mond gelandet, um die fliegende Untertasse aufzutanken, aber Prof. Bösigel war zuerst da und hat einen Hinterhalt aufgestellt! Rette die gefangenen PAdI-Forscher und verscheuche Prof. Bösigel!"
A_Space_Adventure-moon02.name="Nebenmission: Jag den blauen Igel"
-A_Space_Adventure-moon02.desc="Igel Einsam besucht einen Eremiten, einen alten PAdI-Veteran, der im Mond lebt, um Prof. Bösigel auszuspionieren. Allerdings muss er den Eremiten, Verrückter Renner, zuerst in einem Wettlauf besiegen!"
+A_Space_Adventure-moon02.desc="Unser Held besucht einen Eremiten, einen alten PAdI-Veteranen, der im Mond lebt, um Prof. Bösigel auszuspionieren. Allerdings musst du den Eremiten, Verrückter Renner, zuerst in einem Wettlauf besiegen!"
A_Space_Adventure-ice01.name="Hauptmission: Ein frostiges Abenteuer"
-A_Space_Adventure-ice01.desc="Willkommen auf dem Planeten des Eises. Hier ist es so kalt, dass die meisten Waffen von Igel Einsam nicht funktionieren werden. Du musst dir das verlorene Teil von dem Banditenanführer Thanta ergattern, indem du die Waffen, die du hier findest, verwendest!"
+A_Space_Adventure-ice01.desc="Willkommen auf dem Planeten des Eises. Hier ist es so kalt, dass die meisten Waffen nicht funktionieren werden. Du musst dir das verlorene Teil von dem Banditenanführer Thanta ergattern, indem du die Waffen, die du hier findest, verwendest!"
A_Space_Adventure-ice02.name="Nebenmission: Schwerer Flug"
-A_Space_Adventure-ice02.desc="Igel Einsam konnte nicht einfach nur den Eisplaneten besuchen, ohne das Olympiastadion des Untertassenfliegens zu besuchen! In dieser Mission kannst du deine Flugkünste unter Beweis stellen und deinen Platz unter den Besten einnehmen!"
+A_Space_Adventure-ice02.desc="Unser Held konnte nicht einfach nur den Eisplaneten besuchen, ohne das Olympiastadion des Untertassenfliegens zu besuchen! In dieser Mission kannst du deine Flugkünste unter Beweis stellen und deinen Platz unter den Besten einnehmen!"
A_Space_Adventure-desert01.name="Hauptmission: Suche im Staub"
-A_Space_Adventure-desert01.desc="Du bist auf dem Planeten aus Sand gelandet! Igel Einsam muss das fehlende Teil in den Bergwerksstollen finden. Sei vorsichtig, weil bösartige Schmuggler nur darauf warten, dich anzugreifen und auszurauben!"
+A_Space_Adventure-desert01.desc="Du bist auf dem Planeten aus Sand gelandet! Unser Held muss das fehlende Teil in den Bergwerksstollen finden. Sei vorsichtig, weil bösartige Schmuggler nur darauf warten, dich anzugreifen und auszurauben!"
A_Space_Adventure-desert02.name="Nebenmission: Lauf um dein Leben"
-A_Space_Adventure-desert02.desc="Igel Einsam suchte nach dem Teil in diesem Tunnel, als er unerwarteterweise anfing, geflutet zu werden! Komm so schnell wie möglich zur Oberfläche und pass auf, keine Mine auszulösen."
+A_Space_Adventure-desert02.desc="Unser Held suchte nach dem Teil in diesem Tunnel, als er unerwarteterweise anfing, geflutet zu werden! Komm so schnell wie möglich zur Oberfläche und pass auf, keine Mine auszulösen."
A_Space_Adventure-desert03.name="Nebenmission: Präzisionsfliegen"
-A_Space_Adventure-desert03.desc="Igel Einsam hat etwas Zeit, um sein Funkflugzeug zu fliegen und etwas Spaß zu haben. Flieg das Funkflugzeug und triff alle Ziele!"
+A_Space_Adventure-desert03.desc="Unser Held hat etwas Zeit, um mit Funkflugzeugen zu spielen und etwas Spaß zu haben. Flieg das Funkflugzeug und triff alle Ziele!"
A_Space_Adventure-fruit01.name="Hauptmission: Schlechtes Timing"
A_Space_Adventure-fruit01.desc="Auf dem Obstplaneten laufen die Dinge nicht so gut. Igel sammeln kein Obst, sondern sie bereiten sich auf den Kampf vor. Du musst dich entscheiden, ob du kämpfen oder fliehen wirst."
A_Space_Adventure-fruit02.name="Hauptmission: Zum Greifen nah"
-A_Space_Adventure-fruit02.desc="Igel Einsam nähert sich dem verlorenen Teil des Obstplaneten. Wird ihn Leutnant Limone dabei helfen, das Teil zu besorgen? Oder nicht?"
+A_Space_Adventure-fruit02.desc="Unser Held nähert sich dem verlorenen Teil des Obstplaneten. Wird ihn Leutnant Limone dabei helfen, das Teil zu besorgen? Oder nicht?"
A_Space_Adventure-fruit03.name="Nebenmission: Präzisionsschießen"
-A_Space_Adventure-fruit03.desc="Igel Einsam hat sich verlaufen und ist in dem Hinterhalt der Roten Erdbeeren geraten. Hilf ihm, sie zu eliminieren, um etwas zusätzliche Munition für die Mission »Zum Greifen nah« zu gewinnen."
+A_Space_Adventure-fruit03.desc="Unser Held hat sich verlaufen und ist in dem Hinterhalt der Roten Erdbeeren geraten. Hilf ihm, sie zu eliminieren, um etwas zusätzliche Munition für die Mission »Zum Greifen nah« zu gewinnen."
A_Space_Adventure-death01.name="Hauptmission: Das letzte Gefecht"
-A_Space_Adventure-death01.desc="Auf dem Todesplaneten, dem sterilsten Planeten in der Gegend, ist Igel Einsam ganz kurz davor, das letzte Teil des Geräts zu holen! Allerdings erwartet ihn eine unangenehme Überraschung."
+A_Space_Adventure-death01.desc="Auf dem Todesplaneten, dem sterilsten Planeten in der Gegend, ist unser Held ganz kurz davor, das letzte Teil des Geräts zu holen! Allerdings erwartet ihn eine unangenehme Überraschung."
A_Space_Adventure-death02.name="Nebenmission: Die Spezialisten töten"
-A_Space_Adventure-death02.desc="Igel Einsam ist wieder in eine schwierige Situation geraten. Hilf ihm, die »5 tödlichen Igel« in ihrem eigenem Spiel zu besiegen!"
+A_Space_Adventure-death02.desc="Unser Held ist wieder in eine schwierige Situation geraten. Besiege die »5 tödlichen Igel« in ihrem eigenem Spiel!"
A_Space_Adventure-final.name="Hauptmission: Der große Knall"
-A_Space_Adventure-final.desc="Igel Einsam muss ein paar Sprengkörper, die auf dem Meteoriten platziert wurden, detonieren. Hilf ihm, diese Mission zu beenden, ohne verletzt zu werden!"
+A_Space_Adventure-final.desc="Unser Held muss ein paar Sprengkörper, die auf dem Meteoriten platziert wurden, detonieren. Beende diese Mission, ohne verletzt zu werden!"
--- a/share/hedgewars/Data/Locale/campaigns_en.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/campaigns_en.txt Mon Jan 14 12:35:32 2019 -0500
@@ -19,10 +19,10 @@
A_Classic_Fairytale-dragon.desc="Our hero has to get to the other side of the lake. Become a rope master and avoid getting hit by the enemy shots."
A_Classic_Fairytale-family.name="Mission 7: Family Reunion"
-A_Classic_Fairytale-family.desc="Our hero has to save the natives once more. Eliminate the enemy hogs and free your comrades. Use your resources carefully as they are limited. Drill some holes in the right spot and get close to the princess."
+A_Classic_Fairytale-family.desc="Our hero has to save the tribe once more. Eliminate the enemy hogs and free your comrades. Use your resources carefully as they are limited. Drill some holes in the right spot and get close to the princess."
A_Classic_Fairytale-queen.name="Mission 8: Long Live The Queen"
-A_Classic_Fairytale-queen.desc="The natives have to fight once again. In order to win, they'll have to fight the traitor and use all the resources available. Defeat the enemy!"
+A_Classic_Fairytale-queen.desc="The tribe has to fight once again. In order to win, they'll have to fight the traitor and use all the resources available. Defeat the enemy!"
A_Classic_Fairytale-enemy.name="Mission 9: The Enemy Of My Enemy"
A_Classic_Fairytale-enemy.desc="What a great twist! Leaks a Lot has to fight side by side with the … “cannibals” against the common enemy: The evil cyborgs!"
@@ -32,30 +32,30 @@
A_Space_Adventure.name="A Space Adventure"
A_Space_Adventure-cosmos.name="Menu: Spacetrip"
-A_Space_Adventure-cosmos.desc="Hogera, the planet of hogs is about to be hit by a gigantic meteorite. In this race for survival you have to lead PAotH's best pilot, Hog Solo, in a space trip around the neighbor planets to collect all the 4 pieces of the long lost anti gravity device!"
+A_Space_Adventure-cosmos.desc="Hogera, the planet of hogs, is about to be hit by a gigantic meteorite. In this race for survival you have to lead a brave hedgehog, who was commissioned by the Planetary Association of the Hedgehogs (PAotH), on a space trip around the neighbor planets to collect all the 4 pieces of the long lost anti gravity device."
A_Space_Adventure-moon01.name="Main Mission: The first stop"
-A_Space_Adventure-moon01.desc="Hog Solo has landed on the moon to refuel his saucer but professor Hogevil has gone there first and set an ambush! Rescue the captured PAotH researchers and drive Professor Hogevil away!"
+A_Space_Adventure-moon01.desc="Our hero has landed on the moon to refuel the flying saucer but Professor Hogevil has gone there first and set an ambush! Rescue the captured PAotH researchers and drive Professor Hogevil away!"
A_Space_Adventure-moon02.name="Side Mission: Chasing the blue hog"
-A_Space_Adventure-moon02.desc="Hog Solo visits an hermit, old PAotH veteran, who lives on the moon in order to gather some intel about Prof. Hogevil. However, he has to beat the hermit, Soneek the Crazy Runner, in a chase game first!"
+A_Space_Adventure-moon02.desc="Our hero visits an hermit, old PAotH veteran, who lives on the moon in order to gather some intel about Prof. Hogevil. However, you have to beat the hermit, Crazy Runner, in a chase game first!"
A_Space_Adventure-ice01.name="Main Mission: A frozen adventure"
-A_Space_Adventure-ice01.desc="Welcome to the planet of ice. Here, it's so cold that most of Hog Solo's weapons won't work. You have to get the lost part from the bandit leader Thanta using the weapons that you'll find there!"
+A_Space_Adventure-ice01.desc="Welcome to the planet of ice. Here, it's so cold that most weapons won't work. You have to get the lost part from the bandit leader Thanta using the weapons that you'll find there!"
A_Space_Adventure-ice02.name="Side Mission: Hard flying"
-A_Space_Adventure-ice02.desc="Hog Solo couldn't just visit the Ice Planet without visiting the Olympic Stadium of Saucer Flying! In this mission you can prove your flying skills and claim your place among the best!"
+A_Space_Adventure-ice02.desc="Our hero couldn't just visit the Ice Planet without visiting the Olympic Stadium of Saucer Flying! In this mission you can prove your flying skills and claim your place among the best!"
A_Space_Adventure-desert01.name="Main Mission: Searching in the dust"
-A_Space_Adventure-desert01.desc="You have landed to the planet of sand! Hog Solo has to find the missing part in the underground tunnels. Be careful as vicious smugglers await to attack and rob you!"
+A_Space_Adventure-desert01.desc="You have landed to the planet of sand! Our hero has to find the missing part in the underground tunnels. Be careful as vicious smugglers await to attack and rob you!"
A_Space_Adventure-desert02.name="Side Mission: Running for survival"
-A_Space_Adventure-desert02.desc="Hog Solo was searching for the part in this tunnel when it unexpectedly start getting flooded! Get to the surface as soon as possible and be careful not to trigger a mine."
+A_Space_Adventure-desert02.desc="Our hero was searching for the part in this tunnel when it unexpectedly start getting flooded! Get to the surface as soon as possible and be careful not to trigger a mine."
A_Space_Adventure-desert03.name="Side Mission: Precise flying"
-A_Space_Adventure-desert03.desc="Hog Solo has some time to fly his RC plane and have some fun. Fly the RC plane and hit all the targets!"
+A_Space_Adventure-desert03.desc="Our hero has some time to play with RC planes and have some fun. Fly the RC plane and hit all the targets!"
A_Space_Adventure-fruit01.name="Main Mission: Bad timing"
-A_Space_Adventure-fruit01.desc="In the fruit planet things aren't going so well. Hogs aren't collecting fruits but they are preparing for battle. You'll have to choose if you'll fight or if you'll flee."
+A_Space_Adventure-fruit01.desc="On the fruit planet things aren't going so well. Hogs aren't collecting fruits but they are preparing for battle. You'll have to choose if you'll fight or if you'll flee."
A_Space_Adventure-fruit02.name="Main Mission: Getting to the device"
-A_Space_Adventure-fruit02.desc="Hog Solo gets closer to the lost part on the Fruit Planet. Will Captain Lime help him acquire the part or not?"
+A_Space_Adventure-fruit02.desc="Our hero gets closer to the lost part on the Fruit Planet. Will Captain Lime help you acquire the part or not?"
A_Space_Adventure-fruit03.name="Main Mission: Precise shooting"
-A_Space_Adventure-fruit03.desc="Hog Solo got lost and got ambushed by the Red Strawberries. Help him eliminate them and win some extra ammo for the mission “Getting to the device”."
+A_Space_Adventure-fruit03.desc="Our hero got lost and got ambushed by the Red Strawberries. Eliminate them and win some extra ammo for the mission “Getting to the device”."
A_Space_Adventure-death01.name="Main Mission: The last encounter"
-A_Space_Adventure-death01.desc="On the Death Planet, the most infertile planet around, Hog Solo is very close to get the last part of the device! However, an unpleasant surprise awaits him ..."
+A_Space_Adventure-death01.desc="On the Death Planet, the most infertile planet around, our hero is very close to get the last part of the device! However, an unpleasant surprise awaits ..."
A_Space_Adventure-death02.name="Side Mission: Killing the specialists"
-A_Space_Adventure-death02.desc="Again Hog Solo has got himself in a difficult situation. Help him defeat the “5 Deadly Hogs“ in their own game!"
+A_Space_Adventure-death02.desc="Again our hero has gotten in a difficult situation. Defeat the “5 Deadly Hogs“ in their own game!"
A_Space_Adventure-final.name="Main Mission: The big bang"
-A_Space_Adventure-final.desc="Hog Solo has to detonate some explosives that have been placed on the meteorite. Help him complete his mission without getting hurt!"
+A_Space_Adventure-final.desc="Our hero has to detonate some explosives that have been placed on the meteorite. Complete this mission without getting hurt!"
--- a/share/hedgewars/Data/Locale/cs.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/cs.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Trénink s bazukou",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Zatravení zelenáči", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Znič všechny cíle, než ti vyprší čas.|Na tuto misi máš neomezeně munice.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
["Eliminate the enemy specialists."] = "Zabij nepřátelské specialisty",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Běž tamhle a dostaň ho!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "Běž! Běž! Běž!",
["Good birdy......"] = "Hodný ptáček......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Bezejmenní hrdinové",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Ale ne! Prostě to zkus znovu!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Ale ne! Čas vypršel! Zkus to znova!", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Protivníkův tým: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Stiskni [přesnost] pro přeskočení",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Zachraň tolik nešťastných ježků, kolik jen můžeš!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Hloupý",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Odstřelovací trénink",
- ["Sniperz"] = "Snajpři",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
["Team %d: "] = "Tým %d: ",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Bezejmenný",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Tenhle déšť je opravdu něco...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Jedovatý tým", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Přísahal bys, že voda stoupá!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/da.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/da.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Træning med Bazooka",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Forbandede Begyndere", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Eliminer all mål før tiden løber ud.|Du har uendelig ammunition under denne mission.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Eliminer fjendens pindsvin for at vinde.",
["Eliminate the enemy specialists."] = "Eliminer fjendens specialister.",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Kom derover og tag ham ud!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "GO! GO! GO!",
["Good birdy......"] = "God pipfugl......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
["Good so far!"] = "Godt indtil videre!",
["Good to go!"] = "Klar!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
["Lively Lifeguard"] = "Livlig Livredder",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Navnløse Helte",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Åh nej! Bare prøv igen!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Åh nej! Tiden er løbet ud! Bare prøv igen.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Modstander: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Patetisk Modstand", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Tryk på [Præcis] for at springe introen over",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Red så mange uheldige pindsvin som muligt!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Fjollet",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Træning med Sniperriffel",
- ["Sniperz"] = "Sniperz",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Hold %d: ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Den Navnløse Ene",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Det her regnvejr er virkelig noget...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Giftigt Hold", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Man kunne næsten sværge på at vandet steg!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/de.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/de.lua Mon Jan 14 12:35:32 2019 -0500
@@ -34,7 +34,6 @@
["Above-average pilot"]="Überdurchschnittlicher Pilot",
["Accuracy Bonus! +15 points"] = "Präzisionsbonus! +15 Punkte", -- Space_Invasion
["Accuracy bonus: +%d points"]="Präzisions-Bonus: +%d Punkte",
-["Ace"]="Ass",
["Achievement gotten: %s"] = "Auszeichnung erhalten: %s", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Tumbler
["A Classic Fairytale"]="Ein klassisches Märchen",
["A crate critical to this mission has been destroyed."] = "Eine missionskritische Kiste wurde zerstört.", -- SimpleMission
@@ -154,13 +153,14 @@
["As you've seen, the dropped grenade roughly fell into your flying direction."] = "Wie du gesehen hast, fällt die Granate ungefähr in deine Flugrichtung.", -- Basic_Training_-_Flying_Saucer
["Athlete"]="Athlet",
["Attack: Activate"] = "Angriff: Aktivieren", -- Racer
-["Attack Captain Lime before he attacks back"]="Greif Leutnant Limone an, bevor er angreift.",
+["Attack Captain Lime before he attacks back."] = "Greif Leutnant Limone an, bevor er dich angreift.", -- A_Space_Adventure:fruit02
["Attack From Rope: %s"] = "Angriff Vom Seil: %s", -- WxW
["Attack From Rope: You may only attack from a rope."] = "Angriff Vom Seil: Du darfst nur vom Seil angreifen.", -- WxW
["Attack rule: %s"] = "Angriffsregel: %s", -- WxW
["Attack: Select this continent"] = "Angreifen: Diesen Kontinent wählen", -- Continental_supplies
["Attack: [Space]"] = "Angreifen: [Leertaste]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-["Attack the assassins before they attack back"]="Greif die Assassinen an, bevor sie angreifen.",
+["Attack: Tap the [Bomb]"] = "Angreifen: [Bombe] antippen", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+["Attack the assassins before they attack back."] = "Greif die Assassinen an, bevor sie es tun.", -- A_Space_Adventure:fruit02
["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
@@ -170,13 +170,13 @@
["Available weapon specials:"] = "Verfügbare Waffenextras:", -- Continental_supplies
["Average pilot"]="Durchschnittlicher Pilot",
["Avoid bazookas, red and blue invaders."] = "Weiche Bazookas und den roten und blauen Invasoren aus.", -- Space_Invasion
-["Avoid the mines!"] = "Weich den Minen aus!", -- Basic_Training_-_Rope
["Axes"] = "Äxter", -- Bazooka_Battlefield
["Aye! Fellow! Let me exit this chamber of doom!"] = "Aye! Leute! Lasst mich aus dieser Kammer des Schreckens hinaus!", -- A_Classic_Fairytale:epil
["Back Breaker"]="Rückenbrecher",
["Back in the village, after telling the villagers about the threat..."]="Zurück im Dorf, nachdem die Dorfbewohner vor der Gefahr gewarnt worden sind …",
["Back in the village, the two tribes finally started to live in harmony."] = "Zurück im Dorf lebten die beiden Stämme endlich wieder in Frieden.", -- A_Classic_Fairytale:epil
["Back Jump: [Backspace] ×2"] = "Rückwärtssprung: [Rücktaste] ×2", -- Basic_Training_-_Movement
+["Back Jump: Double-tap the [Curvy Arrow]"] = "Rückwärtssprung: [Krummen Pfeil] doppelt antippen", -- Basic_Training_-_Movement
["Back Jumping (1/2)"] = "Rückwärtsspringen (1/2)", -- Basic_Training_-_Movement
["Back Jumping (2/2)"] = "Rückwärtsspringen (2/2)", -- Basic_Training_-_Movement
["Backstab"]="Verrat",
@@ -211,7 +211,6 @@
["Bazooka Battlefield"] = "Bazookaschlachtfeld", -- Bazooka_Battlefield
["Bazooka Master"] = "Bazookameister", -- Basic_Training_-_Bazooka
["Bazookas are influenced by wind."] = "Bazookas werden vom Wind beeinflusst.", -- Basic_Training_-_Bazooka
-["Bazooka Team"] = "Bazooka-Team", -- Basic_Training_-_Bazooka
["Bearded Beast"] = "Bärtiges Biest", --
["Be careful, the future of Hogera is in your hands!"]="Sei vorsichtig, die Zukunft von Hogera liegt in deinen Händen!",
["Be careful, your fuel is limited from now on!"] = "Vorsichtig, dein Treibstoff ist ab jetzt begrenzt!", -- Basic_Training_-_Flying_Saucer
@@ -243,7 +242,6 @@
["Bloodpie"]="Blutkuchen",
["Bloodrocutor"]="Blutfrierer",
["Bloodsucker"]="Blutsauger",
-["Bloody Rookies"]="Blutige Anfänger",
["BlowTorch"]="Schweißbrenner",
["Blue"] = "Blau", --
["Blue Team"]="Blaues Team",
@@ -330,6 +328,7 @@
["Challenge objectives"] = "Herausforderungsziele", -- A_Space_Adventure:death02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit03, A_Space_Adventure:ice02, A_Space_Adventure:moon02
["Challenge over!"] = "Herausforderung beendet!", -- User_Mission_-_Rope_Knock_Challenge
["Change Content: [Left], [Right]"]="Inhalt ändern: [Links], [Rechts]",
+["Change detonation timer: Tap the [Clock]"] = "Explosionszeitzünder einstellen: [Uhr] antippen", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
["Change direction: [Left]/[Right]"] = "Richtung ändern: [Links]/[Rechts]", -- Basic_Training_-_Grenade
["Change Health Boost: [Left], [Right]"]="Gesundheitsschub ändern: [Links], [Rechts]",
["Change Health: [Left], [Right]"]="Gesundheit ändern: [Links], [Rechts]",
@@ -353,6 +352,8 @@
["Chicken"] = "Hühnchen", --
["Chief Sandologist"]="Haupt-Sandologe",
["Chikorita"] = "Endivie", --
+["Choose location: Left click"] = "Ort wählen: Linksklick", -- A_Classic_Fairytale:shadow
+["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "Ort wählen: [Ziel]-Taste antippen, dann den gewünschten Ort antippen", -- A_Classic_Fairytale:shadow
["Choose Selection/Placement/Deletion: [Left], [Right]"] = "Auswahl-/Platzierungs-/Löschmodus wählen: [Links], [Rechts]", -- HedgeEditor
["Choose your continent wisely, as your decision will be permanent."] = "Wähle deinen Kontinent weise, da deine Entscheidung endgültig ist.", -- Continental_supplies
["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."]="Wähl deine Seite! Wenn du dem seltsamen Mann beitreten willst, geh zu ihm hin.|Geh ansonsten von ihm fort. Wenn du angr… Vergiss es!",
@@ -361,7 +362,6 @@
["Cleaver"]="Hackebeil",
["Cleaver Placement Mode"]="Hackebeilplatzierungsmodus",
["CLEAVER PLACEMENT MODE"] = "HACKEBEILPLATZIERUNGSMODUS", -- HedgeEditor
-["Climber"]="Kletterer",
["Climb Home"]="Nach Hause klettern",
["Closing in"] = "Es neigt sich dem Ende zu", -- A_Classic_Fairytale:queen
["Clown"]="Clown",
@@ -374,7 +374,7 @@
["Collect or destroy all the health crates."]="Sammle oder zerstöre alle Gesundheitskisten.",
["Collect or destroy the final crate to finish the training."] = "Schnapp dir oder zerstöre die letzte Kiste, um die Übung abzuschließen.", -- Basic_Training_-_Flying_Saucer
["Collect the crate and attack!"] = "Sammle die Kiste auf und greif an!", -- WxW
-["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"]="Sammle die Kiste auf der rechten Seite ein.|Tipp: Wähle das Seil, [Hoch] oder [Runter] zum Zielen, [Leer] zum Feuern, Richtungstasten zum Bewegen.|Seile können in der Luft erneut geschossen werden.",
+["Collect the crate on the right."] = "Sammle die Kiste rechts ein.", -- A_Classic_Fairytale:first_blood
["Collect the crates within the time limit!|If you fail, you'll have to try again."]="Sammle die Kisten innerhalb der Zeitbegrenzung ein!|Wenn du versagst, musst es erneut versuchen.",
["Collect the crate with the flying saucer!"] = "Sammle die Kiste mit der fliegenden Untertasse auf!", -- A_Space_Adventure:cosmos
["Collect the crate with the flying saucer"]="Sammle die Kiste mit der fliegenden Untertasse ein.",
@@ -475,9 +475,9 @@
["Deer"] = "Hirsch", --
["Defeat all enemies!"] = "Besiege alle Feinde!", -- portal
["Defeat Professor Hogevil!"]="Besiege Professor Bösigel!",
+["Defeat the cannibals!"] = "Besiege die Kannibalen!", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|"]="Besiege die Kannibalen!|",
["Defeat the cannibals"]="Besiege die Kannibalen",
-["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Besiege die Kannibalen!|Granatentipp: Setze den Zeitzünder mit [1-5], ziele mit [Hoch]/[Runter] und halte [Leer] für mehr Wurfkraft", -- A_Classic_Fairytale:shadow
["Defeat the cyborgs!"]="Besiege die Cyborgs!",
["Defeat the enemy!"] = "Besiege den Feind!", -- A_Classic_Fairytale:queen
["Delete Waypoint"] = "Wegpunkt löschen", -- HedgeEditor
@@ -496,11 +496,8 @@
["Destroyer of planes"]="Flugzeug-Zerstörer",
["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"]="Zerstöre ihn, Undichte Stelle! Er ist verantwortlich für viele Tote auf unserer Seite!",
["Destroy invaders and collect bonuses to score points."] = "Zerstöre Invasoren und sammle Boni auf, um zu punkten.", -- Space_Invasion
-["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."]="Zerstör die Zielscheiben!|Tipp: Wähle das Shoryuken und drücke [Leertaste]|PS: Du kannst es in der Luft benutzen.",
-["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"]="Zerstöre die Zielscheiben!|Tipp: [Hoch], [Runter] zum Zielen, [Leer] zum Schießen",
["Destroy the targets!"] = "Zerstöre die Zielscheiben!", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["+%d flamer fuel!"] = "+%d Flammenwerfertreibstoff", -- Tumbler
-["%d Hapless Hogs left"]="%d Glücklose Igel verbleibend",
["%d-Hit Combo! +%d points!"] = "%d-Treffer-Kombi! +%d Punkte!", -- Space_Invasion
["Did anyone follow you?"]="Ist dir irgendjemand gefolgt?",
["Did I miss something?"] = "Hab ich was verpasst?", -- Space_Invasion
@@ -562,7 +559,7 @@
["Drop a ball of dirt which turns into a|cluster on impact. Doesn’t end turn."] = "Lass einen Erdklumpen fallen,|der sich bei Aufprall in einen Bombensplitter|verwandelt. Beendet den Zug nicht.", -- Continental_supplies
["- Dropped flags may be returned or recaptured"] = "- Fallengelassene Flaggen können zurückgebracht oder aufgesammelt werden", -- Capture_the_Flag
["Dropping a weapon while in water would just drown it, but launching one would work."] = "Eine Waffe im Wasser fallen zu lassen, würde sie einfach nur absaufen lassen,|aber ein Abfeuern würde funktionieren.", -- Basic_Training_-_Flying_Saucer
-["Drop weapon (while on rope): [Long Jump]"] = "Waffe fallen lassen (vom Seil): [Langsprung]", -- Basic_Training_-_Rope
+["Drop weapon (while on rope): [Long Jump]"] = "Waffe fallen lassen (vom Seil): [Weitsprung]", -- Basic_Training_-_Rope
["Drove the minions away"]="Seine Lakaien vertrieben",
["Drove the Professor away"]="Den Professor vertrieben",
["Drowner"]="Absäufer",
@@ -610,7 +607,6 @@
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."]="Eliminiere alle Zielscheiben, bevor die Zeit abläuft.|Du hast in dieser Mission unbegrenzte Munition.",
["Eliminated the evil minions"]="Die bösen Lakaien eliminiert",
["Eliminated the Professor Hogevil"]="Professor Bösigel eliminiert",
-["Eliminate the Blue Team before the time runs out."] = "Eliminiere das Blaue Team, bevor die Zeit abläuft.", -- User_Mission_-_Dangerous_Ducklings
["Eliminate the enemy before the time runs out."] = "Eliminiere den Feind, bevor die Zeit abläuft.", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy."] = "Eliminiere den Feind.", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock, User_Mission_-_Nobody_Laugh
["Eliminate the enemy hogs to win."]="Vernichte alle gegnerischen Igel, um zu gewinnen.",
@@ -639,7 +635,7 @@
["Exactly, man! That was my dream."]="Genau! Das war mein Traum.",
["Except me, of course! I just saved a whole planet!"] = "Außer mir natürlich! Ich hab ja schließlich einen ganzen Planeten gerettet!", -- A_Space_Adventure:final
["Experienced beginner"]="Erfahrener Anfänger",
-["Explore the tunnel with the other hedgehogs and search for the device"]="Erforsche den Tunnel mit den anderen Igeln und such nach dem Gerät.",
+["Explore the tunnel with the other hedgehogs and search for the device."] = "Erforsche den Tunnel mit den anderen Igeln und such nach dem Gerät.", -- A_Space_Adventure:fruit02
["Exploring the tunnel"]="Höhlenforscher",
["Eye Chewer"]="Augenkauer",
["Fair Wind"] = "Steife Brise", --
@@ -665,11 +661,12 @@
["Final result"] = "Endstand", -- Mutant
["Final Targets"] = "Letzte Zielscheiben", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["Final team scores:"] = "Endstand:", -- Space_Invasion
+["Find all the parts of the anti-gravity device."] = "Finde all die Teile des Antischwerkraftgeräts.", -- A_Space_Adventure:cosmos
["Find a way to detonate all the explosives and stay alive!"]="Finde einen Weg, alle Sprengstoffe zu detonieren und bleib am Leben!",
["Find your tribe!|Cross the lake!"]="Finde deinen Stamm!|Überquere den Fluss!",
["Finish this challenge as fast as possible to earn bonus points."] = "Beende diese Herausforderung so schnell du kannst, um Bonuspunkte zu erhalten.", -- User_Mission_-_Rope_Knock_Challenge
["Finish waypoint placement"] = "Wegpunktplatzierung beenden", -- Racer
-["Finish your training|Hint: Animations can be skipped with the [Precise] key."]="Schließe deine Übungen ab.|Tipp: Animationen können mit der [Genaues Zielen]-Taste übersprungen werden.",
+["Finish your training."] = "Schließe deine Übungen ab.", -- A_Classic_Fairytale:first_blood
["Finite Ropes"] = "Endliche Seile", -- Basic_Training_-_Rope
["Fire a rocket with napalm."] = "Feuere eine Rakete mit Napalm ab.", -- Continental_supplies
["Fire: [Precise]"] = "Feuern: [Genaues Zielen]", -- Space_Invasion, Tumbler
@@ -697,6 +694,7 @@
["Fly to the meteorite and detonate the explosives"]="Fliege zum Meteoriten und sprenge die Bomben.",
["Fly to the moon"]="Flieg zum Mond.",
["Fly to the moon."] = "Flieg zum Mond.", -- A_Space_Adventure:cosmos
+["Follow the path and destroy the next target."] = "Folge dem Pfad und zerstöre die nächste Zielscheibe.", -- Basic_Training_-_Rope
["Forgetfulness: You will lose all your weapons each turn."] = "Vergesslichkeit: Du wirst jeden Zug alle Waffen verlieren.", -- Continental_supplies
["For the next crate, you have to do back jumps."] = "Für die nächste Kiste brauchst du Rückwärtssprünge.", -- Basic_Training_-_Movement
["Four Eyes"] = "Vier Augen", --
@@ -738,7 +736,7 @@
["Get him Spike!"]="Hol ihn, Stachel!",
["Get him, Spike!"] = "Stachel, hol ihn dir!", -- A_Space_Adventure:desert01
["Get on over there and take him out!"]="Mach, dass du hinüber kommst und schalte ihn aus!",
-["Get on the head of the mole"]="Geh auf den Kopf des Maulwurfs",
+["Get on the head of the mole."] = "Stell dich auf dem Kopf des Maulwurfs.", -- A_Classic_Fairytale:first_blood
["Get past the flower."] = "Überquere die Blume.", -- A_Classic_Fairytale:journey
["Get ready to fight!"]="Bereitmachen zum Kämpfen!",
["Get that crate!"]="Hol dir die Kiste!",
@@ -774,7 +772,6 @@
["GO! GO! GO!"]="Los, los, los!",
["Good birdy......"]="Braver Vogel …",
["Good bye!"] = "Tschüss!", -- Basic_Training_-_Flying_Saucer
-["Good Dude"]="Guter Junge",
["Good idea, they'll never find us there!"]="Gute Idee, dort werden sie uns niemals finden!",
["Good job! Defeat the rest of the aliens!"] = "Gut gemacht! Besiege die verbleibenden Außerirdischen!", -- A_Classic_Fairytale:queen
["Good job!"] = "Gut gemacht!", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
@@ -785,7 +782,7 @@
["Good so far!"]="Gut soweit!",
["Good to go!"]="Startklar!",
["Good! You now control Cappy."] = "Gut! Jetzt steuerst du Käppi.", -- Basic_Training_-_Movement
-["Go on top of the flower"]="Geh auf die Spitze der Blume",
+["Go on top of the flower."] = "Geh auf die Spitze der Blume.", -- A_Classic_Fairytale:first_blood
["Go, quick!"]="Los, schnell!",
["Gorkij"]="Gorkidsch",
["Go surf!"]="Los, surfe!",
@@ -809,7 +806,6 @@
["Great! You will be contacted soon for assistance."]="Gut! Du wirst schon bald für Unterstützung benachrichtigt.",
["Green areas aren't portal enabled"]="Grüne Bereiche sind portalabweisend",
["Green Bananas"]="Grüne Bananen",
-["Green Bananas won!"]="Die Grünen Bananen haben gewonnen!",
["Green double rings also give you a new flying saucer."] = "Grüne Doppelringe geben dir zusätzlich eine fliegende Untertasse.", -- A_Space_Adventure:ice02
["Green"] = "Grün", --
["Green Hog Grape"]="Grünigeltraube",
@@ -819,11 +815,10 @@
["Greetings, cloudy one!"]="Grüße, du Wolkiger!",
["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"]="Grüße von der Marine, %s (%s), für einen Abstand von %d vom Festland!",
["Greetings, %s!"] = "Sei gegrüßt, %s!", -- A_Classic_Fairytale:dragon
-["Greg"] = "Gregor", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["Grenade Group"]="Granatengruppe",
+["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "Granatentipp: Zeitzünder mit [Zeitzünder]-Tasten setzen, zielen mit [Hoch]/[Runter]", -- A_Classic_Fairytale:shadow
["Grenades explode after 1 to 5 seconds (you decide)."] = "Granaten explodieren nach 1 bis 5 Sekunden (du entscheidest).", -- Basic_Training_-_Grenade
["Grenades with high bounciness bounce a lot and behave chaotic."] = "Granaten mit hoher Sprungkraft springen sehr stark und verhalten sich chaotisch.", -- Basic_Training_-_Grenade
-["Grenade Team"] = "Granaten-Team", -- Basic_Training_-_Grenade
["Grenadier"]="Grenadier",
["Grey"] = "Grau", --
["Guards"]="Wächter",
@@ -872,6 +867,7 @@
["Hedgehog"] = "Igel", --
["Hedgehog Projectile"] = "Igelprojektil", -- Continental_supplies
["Hedgehogs can not be deleted."] = "Igel können nicht gelöscht werden.", -- HedgeEditor
+["Hedgehogs left: %d"] = "Verbleibende Igel: %d", -- User_Mission_-_That_Sinking_Feeling
["Hedgehogs will be revived after their death."] = "Igel werden nach ihrem Tod wiederbelebt.", -- Mutant
["Hedgehogs will start in the first waypoint."] = "Igel starten im ersten Wegpunkt.", -- Racer
["Hedgibal Lecter"]="Iglibal Lector",
@@ -889,7 +885,6 @@
["Help Enabled"] = "Hilfe aktiviert", -- HedgeEditor
["Helpers: Each team starts with %d helper points"] = "Helfer: Jedes Team beginnt mit %d Helferpunkten", -- Battalion
["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "Helfer: Igel kriegen zufällig 1 aus 2 Helfern pro Zug", -- Battalion
-["Help Hog Solo to find all the parts of the anti-gravity device."]="Hilf Igel Einsam, alle Bauteile des Antischwerkraftgerätes zu finden.",
["Help me, Leaks!"]="Hilf mir, Undichte!",
["Help me, please!"]="Hilf mir bitte!",
["He moves like an eagle in the sky."]="Er bewegt sich wie ein Adler in der Luft.",
@@ -904,7 +899,6 @@
["Here you will find the current mission instructions."] = "Hier siehst du die aktuellen Missionsanweisungen.", -- Basic_Training_-_Movement
["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "Hier wirst du den Flug mit der fliegenden Untertasse|und ein paar coole Tricks lernen.", -- Basic_Training_-_Flying_Saucer
["Heroic Wind"] = "Heroischer Wind", -- Continental_supplies
-["Hero Team"]="Heldenteam",
["He's so brave..."]="Er ist so mutig.",
["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device"]="Er war der Laborassistent von Dr. Gutigeln, dem Erfinder des Antischwerkraftgeräts.",
["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "Er war der Laborassistent von Dr. Gutigeln, dem Erfinder des Antischwerkraftgeräts.", -- A_Space_Adventure:moon02
@@ -914,14 +908,15 @@
["Hey, guys!"]="Hey, Leute!",
["Hey"]="Hey",
["Hey Hog Solo! Finally you have come..."]="Hey, Igel Einsam! Endlich bist du angekommen …",
-["Hey, Hog Solo! Finally you have come!"] = "Hey, Igel Einsam! Endlich bist du gekommen!", -- A_Space_Adventure:moon01
["Hey! I was supposed to collect it!"] = "Hey! Eigentlich sollte ich die Kiste aufsammeln!", -- A_Space_Adventure:fruit02
+["Hey, %s! Finally you have come!"] = "Hallo, %s! Endlich bist du gekommen!", -- A_Space_Adventure:moon01
["Hey, %s! Look, someone is stealing the saucer!"] = "He, %s! Pass auf, jemand stiehlt die fliegende Untertasse!", -- A_Space_Adventure:cosmos
["Hey! This is cheating!"]="Hey, das ist geschummelt!",
["H"]="H",
["Hidden"] = "Versteckt", -- portal
["High Gravity: Gravity is %i%%"] = "Hohe Schwerkraft: Schwerkraft ist auf %i%%", -- Gravity
["High Jump: [Backspace]"] = "Hochsprung: [Rücktaste]", -- Basic_Training_-_Movement
+["High Jump: Tap the [Curvy Arrow] shortly"] = "Hochsprung: [Krummen Pfeil] kurz antippen", -- Basic_Training_-_Movement
["Highlander: Eliminate enemy hogs to take their weapons"] = "Hochländer: Eliminiere feindliche Igel, um ihre Waffen zu nehmen", -- Highlander
["Highlander: Eliminate hogs to take their weapons"] = "Hochländer: Eliminiere Igel, um ihre Waffen zu nehmen", -- Highlander
["Highland: Hogs get %d random weapons from their pool"] = "Hochland: Igel erhalten %d zufällige Waffen aus ihrem Waffenpool", -- Battalion
@@ -932,20 +927,26 @@
["Hill Guard"] = "Hügelwache", -- Bazooka_Battlefield
["Hi! Nice to meet you"]="Hi! Schön, dich zu sehen.",
["Hi! Nice to meet you."] = "Hi! Schön, dich zu sehen.", -- A_Space_Adventure:ice01
+["Hint: Cinematics can be skipped with the [Precise] key."] = "Tipp: Zwischensequenzen können mit der [Genaues Zielen]-Taste übersprungen werden.", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
["Hint: Double Jump - Press [Backspace] twice"]="Tipp: Doppelsprung – Drück [Rücktaste] 2 Mal",
+["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "Tipp: Doppelsprung – [Krummen Pfeil] 2 Mal antippen", -- A_Classic_Fairytale:first_blood
["Hint: Drilling holes should solve everything."] = "Tipp: Löcher bohren sollte alle Probleme lösen.", -- A_Classic_Fairytale:family
["Hint: Hold down [M] to review the mission texts."] = "Tipp: Halte [M] gedrückt, um die Missionstexte erneut zu sehen.", -- A_Classic_Fairytale:first_blood
["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "Tipp: Es könnte eine gute Idee sein, einen Träger zu platzieren,|bevor du mit dem Bohren anfängst. Ich sag ja nur.", -- A_Classic_Fairytale:family
["Hint: It might be easier if you vary the angle only slightly."] = "Tipp: Es könnte leichter sein, wenn du den Winkel nur leicht veränderst.", -- Basic_Training_-_Bazooka
+["Hint: Just select the parachute, it opens automatically when you fall."] = "Tipp: Wähle einfach den Fallschirm aus, er öffnet sich von alleine, wenn du fällst.", -- A_Classic_Fairytale:first_blood
["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "Tipp: Der Pool eines getöteten Igels wird nicht seinem Mörder übertragen", -- Battalion
["Hint: Launch the bazooka horizontally at full power."] = "Tipp: Starte die Bazooka horizontal mit voller Kraft.", -- Basic_Training_-_Bazooka
-["Hint: Press [Esc] to review the mission texts."] = "Tipp: Drücke [Esc], um die Missionstexte wieder zu sehen.", -- A_Classic_Fairytale:first_blood
+["Hint: Pause the game to review the mission texts."] = "Tipp: Pausiere das Spiel, um die Missionstexte erneut zu lesen.", -- A_Classic_Fairytale:first_blood
["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "Tipp: Wähle den Schweißbrenner aus, ziele und drücke [Angriff]. Drücke [Angriff] erneut zum Anhalten.", -- A_Classic_Fairytale:journey
["Hint: Select the low gravity and press [Fire]."] = "Tipp: Wähle die niedrige Schwerkraft aus und drücke [Angriff].", -- A_Classic_Fairytale:journey
+["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "Tipp: Wähle das Seil, [Hoch]/[Runter] zum Zielen,|[Angriff] zum Feuern, Richtungstasten zum Bewegen.", -- A_Classic_Fairytale:first_blood
+["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "Tipp: Wähle das Shoryuken und drücke [Angriff].|P.S.: Du kannst es in der Luft benutzen.", -- A_Classic_Fairytale:first_blood
["Hint: %s needs to get really close to the princess!"] = "Tipp: %s muss sehr nah an der Prinzessin stehen!", -- A_Classic_Fairytale:family
["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "Tipp: Das Seil verbiegt sich nur um Objekte.|Wenn es nichts berührt, ist es immer schnurgerade.", -- Basic_Training_-_Rope
["--- Hint ---"] = "--- Tipp ---", -- Battalion
["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "Tipp: Um höher zu springen, warte etwas, bevor du »Hochsprung« erneut drückst.", -- Basic_Training_-_Movement
+["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "Tipp: Um einen Träger zu platzieren, wähle ihn aus,|dann benutze [Links]/[Rechts], um Winkel und Länge zu wählen,|dann wähle einen Ort für den Träger.", -- A_Classic_Fairytale:shadow
["Hint: Use the quit key to see the team’s continent."] = "Tipp: Benutze die Verlassentaste, um den Kontinent des Teams zu sehen.", -- Continental_supplies
["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "Tipp: Wenn du das Seil verkürzt, bewegst du dich schneller!|Und wenn du es verlängerst, wirst du langsamer.", -- Basic_Training_-_Rope
["Hint: You might want to stay out of sight and take all the crates ..."] = "Tipp: Du solltest aus der Schusslinie bleiben und alle Kisten aufsammeln.", -- A_Classic_Fairytale:journey
@@ -978,30 +979,18 @@
["Hogminator"]="Iglinator",
["Hog nueve"]="Igel nueve",
["Hog octo"]="Igel octo",
-["Hogonauts"] = "Igelnauten", -- Basic_Training_-_Flying_Saucer
["Hog onze"]="Igel onze",
["Hog Saturn"]="Igel Saturn",
["Hogs in sight!"]="Igel in Sicht!",
["Hog Solo and GB"]="Igel Einsam und GB",
["Hog Solo arrived at "]="Igel Einsam ist angekommen an ",
-["Hog Solo arrived at the Desert Planet!"] = "Igel Einsam ist auf dem Wüstenplaneten angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo arrived at the Fruit Planet!"] = "Igel Einsam ist auf dem Obstplaneten angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo arrived at the Ice Planet!"] = "Igel Einsam ist auf dem Eisplaneten angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo arrived at the meteorite!"] = "Igel Einsam ist auf dem Meteoriten angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo arrived at the moon!"] = "Igel Einsam ist auf dem Mond angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo arrived at the Planet of Death!"] = "Igel Einsam ist auf dem Planeten des Todes angekommen!", -- A_Space_Adventure:cosmos
-["Hog Solo couldn't escape, try again!"]="Igel Einsam konnte nicht fliehen, versuch es nochmal!",
-["Hog Solo escaped successfully!"]="Igel Einsam ist erfolgreich geflohen!",
["...Hog Solo fights for his life"]="… kämpft Igel Einsam ums Überleben.",
["... Hog Solo fights for his life"] = "… kämpft Igel Einsam ums Überleben.", -- A_Space_Adventure:death02
-["Hog Solo has to reach the last crates"]="Igel Einsam muss die letzten Kisten erreichen.",
-["Hog Solo has to refuel his saucer."]="Igel Einsam muss seine Untertasse auftanken.",
["Hog Solo"]="Igel Einsam",
-["Hog Solo lost, try again!"]="Igel Einsam hat verloren, versuch es nochmal!",
-["Hog Solo wins, congratulations!"]="Igel Einsam gewinnt, Gratulation!",
["- Hogs will be revived"] = "- Igel werden wiederbelebt", -- Capture_the_Flag
["- Hogs will drop the flag when killed"] = "- Getötete Igel lassen die Flagge fallen", -- Capture_the_Flag
["Hog two"]="Igel zwei",
+["Hold [Attack] pressed to throw with more power."] = "Halte [Angriff] gedrückt, um mit mehr Kraft zu werfen.", -- A_Classic_Fairytale:shadow
["Hold [Attack] to attach the rope."] = "Halte [Angriff], um das Seil zu befestigen.", -- Basic_Training_-_Rope
["Hold the Attack key pressed for more power."] = "Halte die Angriffstaste für mehr Kraft.", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["Holy shit!"] = "Ach du dicker Vater!", -- Mutant
@@ -1026,7 +1015,7 @@
["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"]="Aber wenn du versagst, wird sie den grausamsten Tod sterben, genau, wie dein Freund! Muhahahaha!",
["However, if you fail to do so, she dies a most violent death! Muahahaha!"]="Wenn du aber versagst, wird sie den grausamsten Tod sterben! Muhahahaha!",
["However, my mates don't agree with me on letting you go..."]="Aber meine Freunde wollen dich nicht gehen lassen …",
-["However, the army of Yellow Watermelons is about to attack any moment now."]="Aber die Armee der Gelben Wassermelonen wird jeden Moment angreifen.", -- A_Space_Adventure:fruit01
+["However, the army of %s is about to attack any moment now."] = "Jedoch wird die Armee der %s jeden Moment angreifen.", -- A_Space_Adventure:fruit01
["How to Rope"] = "Verwendung des Seils", -- Basic_Training_-_Rope
["How would you like being discriminated against?"] = "Wie würde es sich anfühlen, wenn ihr die Diskriminierten wärt?", -- A_Classic_Fairytale:queen
["Huh?"] = "Hä?", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1046,7 +1035,6 @@
["I can't believe what I'm hearing!"]="Ich kann nicht glauben, was ich höre!",
["I can't let you go further because …"] = "Ich kann euch nicht weitergehen lassen, weil …", -- A_Classic_Fairytale:queen
["I can't wait any more, I have to save myself!"]="Ich kann nicht länger warten, ich muss selber zur Hilfe eilen!",
-["Ice"] = "Eis", -- Basic_Training_-_Movement
["Ice Jake"]="Eis-Jakob",
["I could just teleport myself there..."]="Ich könnte mich einfach dorthin teleportieren.",
["Icy Girder: [3]"] = "Eisiger Bauträger: [3]", -- HedgeEditor
@@ -1104,7 +1092,6 @@
["I just found out that they have captured your princess!"]="Ich habe gerade herausgefunden, dass sie deine Prinzessin gefangen haben!",
["I just want the strange device you found!"]="Ich will nur das seltsame Teil, das du gefunden hast.",
["I just wonder where Ramon and Spiky disappeared..."]="Ich frage mich lediglich, wohin Ramon und Stachli verschwunden sind.",
-["Ikeda"] = "Ikeda", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
["I know and I'm terribly sorry!"] = "Ich weiß, und es tut mir schrecklich Leid!", -- A_Classic_Fairytale:epil
["I know, my hero!"] = "Ich weiß, mein Held!", -- A_Classic_Fairytale:epil
["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."]="Ich weiß, dass deine Ressourcen aufgrund der Schlacht begrenzt sind, aber ich werde dir zwei meiner besten Igel schicken, um dir zu helfen.",
@@ -1132,6 +1119,7 @@
["I'm living a dream!"] = "Ich lebe einen Traum!", -- A_Classic_Fairytale:queen
["I'm not sure about that!"]="Ich bin mir darüber nicht so sicher.",
["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "WICHTIG: Um die Missionstexte erneut zu sehen, halte die Missionsanzeigentaste.", -- Basic_Training_-_Movement
+["IMPORTANT: To see the mission panel again, pause the game."] = "WICHTIG: Um die Missionstexte erneut zu sehen, pausiere das Spiel.", -- Basic_Training_-_Movement
["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."]="Großartig! Du bist immer noch so trocken wie der Kadaver eines Adlers nach einer Woche in der Wüste.",
["%i ms"] = "%i ms", -- Gravity
["I'm so glad this is finally over!"] = "Ich bin so froh, dass es endlich vorbei ist!", -- A_Space_Adventure:final
@@ -1270,7 +1258,7 @@
["Just look at Leaks, may he rest in peace!"] = "Schau dir nur Undichte an, möge er in Frieden ruhen!", -- A_Classic_Fairytale:queen
["Just on a walk."]="Nur spazieren.",
["Just wait till I get my hands on that trauma! ARGH!"]="Warte nur, bis ich mein Trauma in die Finger kriege! ARGH!",
-["Kaboom! Hahahaha! Take this, stupid meteorite!"] = "Krawumm! Hahahaha! Nimm dass, blöder Meteorit!", -- A_Space_Adventure:final
+["Kaboom! Hahahaha! Take this, stupid meteorite!"] = "Krawumm! Hahahaha! Nimm das, blöder Meteorit!", -- A_Space_Adventure:final
["Kaboom!"] = "Kabumm!", -- Basic_Training_-_Flying_Saucer
["Kamikaze Expert! +15 points!"] = "Kamikazeexperte! +15 Punkte", -- Space_Invasion
["Keep it up!"]="Weiter so!",
@@ -1309,7 +1297,7 @@
["Launch some bazookas to destroy the targets!"] = "Feuere ein paar Bazookas ab, um die Zielscheiben zu zerstören!", -- Basic_Training_-_Bazooka
["Leaderbot"]="Führboter",
["Leader"]="Führer",
-["Lead the Green Bananas to battle and eliminate all the enemies!"] = "Führ die Grünen Bananen in die Schlacht und eliminiere alle Feinde!", -- A_Space_Adventure:fruit01
+["Lead your allies to battle and eliminate all the enemies!"] = "Führ deine Verbündeten in die Schlacht und eliminiere alle Feinde!", -- A_Space_Adventure:fruit01
["Leaks A Lot, depressed for killing his loved one, failed to save the village..."]="Traurig darüber, sein Liebling getötet zu haben, versagte Undichte Stelle dabei, das Dorf zu retten.",
["Leaks A Lot gave his life for his tribe! He should have survived!"]="Undichte Stelle gab sein Leben für seinen Stamm! Er hätte überleben sollen!",
["Leaks A Lot must survive!"]="Undichte Stelle muss überleben!",
@@ -1326,7 +1314,6 @@
["[Left], [Right]: Change sprite selection"]="[Links], [Rechts]: Sprite-Auswahl ändern",
["Left/right: Choose crate contents"] = "Links/rechts: Kisteninhalt wählen", -- Construction_Mode
["Left/right: Choose structure type"] = "Links/rechts: Gebäudetyp wählen", -- Construction_Mode
-["Left Tong"] = "Linke Kneifzange", -- Bazooka_Battlefield
["Legs"] = "Beiner", --
["Less tools, more fun"] = "Weniger Werkzeuge, mehr Spaß", -- Battalion
["Lestat"] = "Lestat", -- portal
@@ -1353,10 +1340,11 @@
["Little Obstacle Course"] = "Kleiner Hindernislauf", -- Basic_Training_-_Rope
["Lively Lifeguard"] = "Lebhafter Lebensretter", -- User_Mission_-_That_Sinking_Feeling
["Lonely Cries"] = "Einsame Heuler", -- Continental_supplies
-["Lonely Hog"]="Einsamer Igel",
["Long Jump: [Enter]"] = "Weitsprung: [Enter]", -- Basic_Training_-_Movement
+["Long Jump: Tap the [Curvy Arrow] button for long"] = "Weitsprung: [Krummen Pfeil] lange drücken", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
["Long Live The Queen"] = "Lang lebe die Königin", -- A_Classic_Fairytale:queen
["Look around: [Mouse movement]"] = "Umsehen: [Mausbewegung]", -- Basic_Training_-_Movement
+["Look around: [Tap or swipe on the screen]"] = "Umsehen: [Auf Bildschirm tippen oder wischen]", -- Basic_Training_-_Movement
["Look, boss! There is the target!"]="Sieh, Boss! Dort ist das Ziel!", -- A_Space_Adventure:moon01
["Look, I had no choice!"]="Versteh doch, ich hatte keine Wahl!",
["Look out! There's more of them!"]="Passt auf! Da sind noch mehr von ihnen!",
@@ -1365,7 +1353,6 @@
["Look, someone is stealing the saucer!"]="Sieh, jemand stiehlt die Untertasse!",
["Loon"] = "Spinner", -- The_Specialists
["Loopy"] = "Gaga", --
-["Lord Evil"] = "Lord Böse", -- Tentacle_Terror
["Losing Condition: Destroy"] = "Niederlagebedingung: Zerstören", -- HedgeEditor
["Low Gravity: Gravity is %i%%"] = "Niedrige Schwerkraft: Schwerkraft ist auf %i%%", -- Gravity
["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "Loyaler Hochländer: Eliminiere feindliche Igel, um ihre Waffen zu nehmen", -- Highlander
@@ -1384,7 +1371,6 @@
["Many meters below the surface ..."]="Viele Meter unter der Oberfläche …", -- A_Space_Adventure:desert02
["Mario"] = "Mario", --
["Mark gears for win/lose conditions"] = "Markiere Gears für Sieg-/Niederlagebedingungen", -- HedgeEditor
-["Mark"] = "Markus", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["Mark/unmark gear: [Left Click]"] = "Gear markieren/demarkieren: [Linksklick]", -- HedgeEditor
["Max Citrus"]="Max Zitron",
["Maybe you should try an easier map next time."] = "Vielleicht solltet ihr beim nächsten Mal eine leichtere Karte ausprobieren.", -- Racer
@@ -1429,7 +1415,6 @@
["Monster kill!"] = "Teuflisch!", -- Mutant
["Monsters"] = "Monster", --
["Mooney"] = "Finster", --
-["More Natives"]="Mehr Eingeborene",
["Morris"] = "Moritz", --
["Most mines are not active."]="Die meisten Minen sind Blindgänger.", -- A_Space_Adventure:desert02
["Most of the destructible terrain is marked with dashed lines."] = "Der Großteil des zerstörbaren Landes ist mit gestrichelten Linien markiert.", -- A_Space_Adventure:desert01
@@ -1447,7 +1432,6 @@
["My First Bazooka"] = "Meine erste Bazooka", -- Basic_Training_-_Bazooka
["My flying saucer stopped working!"] = "Meine fliegende Untertasse funktioniert nicht mehr!", -- A_Space_Adventure:ice01
["Nah, probably everyone was just stupid."] = "Ach was, wahrscheinlich waren alle nur doof.", -- A_Space_Adventure:final
-["Nameless Heroes"]="Namenlose Helden",
["Name"]="Name",
["Nancy Screw"]="Lockere Schraube",
["Napalm Rocket"] = "Napalmrakete", -- Continental_supplies
@@ -1545,7 +1529,7 @@
["Oh, my! This is even more entertaining than I've expected!"]="Haha! Das ist sogar noch lustiger, als ich erwartet hatte!",
["Oh no! Just try again!"]="Oh nein! Versuch's nochmal!",
["Oh no, not %s!"] = "Oh nein, nicht %s!", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "Oh nein, die Grünen Bananen haben Igel Einsam betrogen und das Teil des Antischwerkraftgeräts gestohlen!", -- A_Space_Adventure:fruit02
+["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "Oh nein, die Begleiter haben %s betrogen und das Antischwerkraftgerät gestohlen!", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."]="Oh nein! Die Zeit ist um! Versuch es nochmal.",
["Oh no! You failed! Just try again."]="Oh nein! Du hast versagt! Versuch es nochmal.",
["Oh no! You have died. Try again!"] = "Oh nein, du bist tot. Versuch es nochmal!", -- Basic_Training_-_Flying_Saucer
@@ -1572,8 +1556,8 @@
["One shall not judge one by one's appearance!"] = "Man sollte Andere nicht nach ihrem Aussehen beurteilen.", -- A_Classic_Fairytale:epil
["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."]="Ein Stamm war friedlich und verbrachte die Zeit mit der Jagd, Übungen und den kleinen Freuden des Lebens.",
["Oneye"] = "Einauge", -- portal
-["Only Hog Solo can be trusted with the crate."] = "Nur Igel Einsam kann man die Kiste anvertrauen.", -- A_Space_Adventure:fruit02
["Only one hog per team allowed! Excess hogs will be removed."] = "Nur ein Igel pro Team erlaubt! Überschüssige Igel werden entfernt.", -- Mutant
+["Only %s can be trusted with the crate."] = "Die Kiste kann nur %s anvertraut werden.", -- A_Space_Adventure:fruit02
["Only the best pilots can master the following stunts."] = "Nur die besten Piloten können die folgenden Stunts meistern.", -- Basic_Training_-_Flying_Saucer
["Only two clans allowed! Excess hedgehogs will be removed."] = "Nur zwei Klans erlaubt! Überschüssige Igel werden entfernt.", -- CTF_Blizzard
["On the Desert Planet, Hog Solo found some time to play with his RC plane"] = "Auf dem Wüstenplaneten hat Igel Einsam etwas Zeit gefunden, um mit seinem Funkflugzeug zu spielen.", -- A_Space_Adventure:desert03
@@ -1586,6 +1570,7 @@
["Oops, I've been spotted and I have no weapons! I am doomed!"]="Upps! Ich wurde entdeckt und ich habe keine Waffen! Ich bin verloren!",
["Oops! You have selected the wrong hedgehog! Just try again."] = "Upps! Du hast den falschen Igel ausgewählt! Versuch es einfach erneut.", -- Basic_Training_-_Movement
["Open ammo menu: [Right click]"] = "Munitionsmenü öffnen: [Rechtsklick]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+["Open ammo menu: Tap the [Suitcase]"] = "Munitionsmenü öffnen: [Koffer] antippen", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
["Open that crate and we will continue!"]="Öffne diese Kiste und wir werden fortfahren!",
["Orange"] = "Orange", --
["Orlando Boom!"]="Orlando Bumm!",
@@ -1602,9 +1587,9 @@
["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"]="PAdI hat Sprengstoffe geschickt, aber leider scheint der Auslöser defekt zu sein.",
["PAotH"]="PAdI",
["Patches"] = "Flick", --
-["Pathetic Resistance"]="Erbärmlicher Widerstand",
["Paul McHoggy"]="Paul McIgel",
["Pause: [P]"] = "Pause: [P]", -- Basic_Training_-_Movement
+["Pause: Tap the [Pause] button"] = "Pause: [Pause]-Taste antippen", -- Basic_Training_-_Movement
["Pause the game by pressing the pause key (default \"P\") for more details"]="Pausiere das Spiel, indem du die Pausetaste (standardmäßig »P«) drückst, um mehr zu erfahren.",
["Penalty: If you violate above rule, you have to skip in the next turn."] = "Strafe: Wenn du obige Regel verletzt, musst du den nächsten Zug aussetzen.", -- WxW
["Penguin Roar"] = "Pinguinröhren", -- Continental_supplies
@@ -1617,7 +1602,6 @@
["Physicist"]="Physiker",
["PickHammer"]="Presslufthammer",
["Pikachu"] = "Pikachu", --
-["Pincer Knights"] = "Kneifzangenkrieger", -- Bazooka_Battlefield
["Pings left: %d"] = "Verbleibende Pings: %d", -- Space_Invasion
["Pink"] = "Rosa", --
["Pirates"] = "Piraten", --
@@ -1693,9 +1677,10 @@
["Press [Attack] to confirm."] = "Drücke [Angreifen] zum Bestätigen.", -- Continental_supplies
["Press [Attack] to select this continent!"] = "Drücke [Angreifen], um diesen Kontinent auszuwählen!", -- Continental_supplies
["Press [Left] and [Right] to change the difficulty."] = "Drücke [Links] und [Rechts], um den Schwierigkeitsgrad zu ändern.", -- A_Classic_Fairytale:first_blood
-["Press [Left] or [Right] to move around, [Enter] to jump"]="Drücke [Links] oder [Rechts] zum Bewegen, [Eingabe] zum Springen.",
+["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "Drücke [Links]/[Rechts] zum Bewegen, [Weitsprung], um vorwärts zu springen.", -- A_Classic_Fairytale:first_blood
["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "Drücke [Weitsprung], um diese Konfiguration zu akzeptieren|und mit der Igelplatzierung anzufangen.", -- WxW
["Press [Long jump] to accept this configuration and start the game."] = "Drücke [Weitsprung], um diese Konfiguration zu akzeptieren|und das Spiel zu starten.", -- WxW
+["Press [M] to see the mission texts"] = "Drücke [M], um die Missionstexte zu sehen", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"]="Drücke [Genaues Zielen], um das Intro zu überspringen",
["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "Drücke [Hoch] und [Runter], um zwischen Menüpunkten zu wechseln.|Drücke [Angriff], [Links] oder [Rechts] zum Wechseln.", -- WxW
["Prestigious Pilot"]="Prestigeträchtiger Pilot",
@@ -1707,10 +1692,9 @@
["Professional stunt pilot"]="Profi-Stuntpilot",
["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."]="Professor Bösigel, früher bekannt als Jakobus Iglus, arbeitete in meiner Zeit für PAdI.", -- A_Space_Adventure:moon02
["Professor"]="Professor",
+["Professor's Team"] = "Professors Team", -- A_Space_Adventure:death01
["Prof. Hogevil"]="Prof. Bösigel",
-["Pro Killers"] = "Profikiller", -- Big_Armory
["Protect the King: When the king dies, so does the team"] = "Beschützt den König: Wenn der König stirbt, stirbt das Team mit", -- Battalion
-["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Beschütze dich!|Granatentipp: Setze den Zeitzünder mit [1-5], ziele mit [Hoch]/[Runter] und halte [Leer] für mehr Kraft", -- A_Classic_Fairytale:shadow
["Purple"] = "Violett", --
["Pyromancer"]="Feuermacher",
["Pyro"]="Pyromane",
@@ -1759,11 +1743,9 @@
["Return to the mission menu by pressing the \"Go back\" button."]="Kehre zum Missionsmenü zurück, indem du den »Zurück«-Knopf drückst.", -- A_Space_Adventure:cosmos
["Return to the Surface"]="Zurück an die Oberfläche",
["Return to the training menu by pressing the “Go back” button."] = "Kehre zum Trainingsmenü zurück, indem du den »Zurück«-Knopf drückst.", -- Basic_Training_-_Movement
-["Rhombus"] = "Raute", -- Basic_Training_-_Movement
["Rider"] = "Reiter", -- portal
["Rifleman"]="Schütze",
["Righteous Beard"]="Redlicher Bart",
-["Right Tong"] = "Rechte Kneifzange", -- Bazooka_Battlefield
["Ripe"] = "Reif", --
["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "Lass das Wasser steigen, wenn sonst keiner im Kreis ist, und richte 6 Schaden auf alle Feinde an.", -- Continental_supplies
["Robert Yellow Apple"]="Robert Gelbapfel",
@@ -1771,8 +1753,8 @@
["Ronald"] = "Ronald", -- portal
["Roof"] = "Decke", -- WxW
["Rope-knocking Challenge"] = "Seilschubsen", -- User_Mission_-_Rope_Knock_Challenge
-["Roper"] = "Seiler", --
["Ropes and Crates"]="Seile und Kisten",
+["Ropes can be fired again in the air!"] = "Seile können in der Luft erneut gefeuert werden!", -- A_Classic_Fairytale:first_blood
["Rope Weapons"] = "Seilwaffen", -- Basic_Training_-_Rope
["Rope won't get reset"]="Seil wird nicht zurückgesetzt.",
["Roshi"] = "Roschi", --
@@ -1808,10 +1790,17 @@
["Salvation was one step closer now..."]="Die Erlösung war nun einen Schritt näher.",
["Sam"]="Steffen",
["Sandals?! I thought you left your ring!"] = "Sandalen?! Ich dachte, du hattest deinen Ring vergessen!", -- A_Classic_Fairytale:queen
+["%s and GB"] = "%s und GB", -- A_Space_Adventure:fruit02
["%s and %s enter the battlefield"] = "%s und %s betreten das Schlachtfeld", -- A_Space_Adventure:fruit01
["Sandstorm"]="Sandsturm",
["Sandy"]="Sandi",
-["Save as many hapless hogs as possible!"]="Rette so viele glücklose Igel wie möglich!",
+["%s arrived at the Desert Planet!"] = "%s ist auf dem Wüstenplaneten angekommen!", -- A_Space_Adventure:cosmos
+["%s arrived at the Fruit Planet!"] = "%s ist auf dem Obstplaneten angekommen!", -- A_Space_Adventure:cosmos
+["%s arrived at the Ice Planet!"] = "%s ist auf dem Eisplaneten angekommen!", -- A_Space_Adventure:cosmos
+["%s arrived at the meteorite!"] = "%s ist auf dem Meteoriten angekommen!", -- A_Space_Adventure:cosmos
+["%s arrived at the moon!"] = "%s ist auf dem Mond angekommen!", -- A_Space_Adventure:cosmos
+["%s arrived at the Planet of Death!"] = "%s ist auf dem Planeten des Todes angekommen!", -- A_Space_Adventure:cosmos
+["Save as many hogs as possible!"] = "Rette so viele Igel, wie du kannst!", -- User_Mission_-_That_Sinking_Feeling
["Save Fell From Heaven!"]="Rette Fiel Vom Himmel!",
["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "Rette Undichte Stelle!|Tipp: Das Werkzeug »Igel wechseln« könnte von Nutzen sein.", -- A_Classic_Fairytale:shadow
["Save Level: Precise+4"]="Level sichern: Genaues Zielen + 4",
@@ -1827,12 +1816,14 @@
["Scenario"] = "Szenario", -- Big_Armory, portal, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Newton_and_the_Hammock, User_Mission_-_Nobody_Laugh, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork_2, User_Mission_-_Teamwork, User_Mission_-_The_Great_Escape
["Scientist"]="Wissenschaftler",
["%s climbed home in %d seconds!"] = "%s ist in %d Sekunden nach Hause geklettert!", -- ClimbHome
+["%s (contd.)"] = "%s (mehr)", -- A_Classic_Fairytale:epil
["Score: %d"] = "Punktzahl: %d", -- Space_Invasion
["Score goal: %d"] = "Punkteziel: %d", -- Control
["Score graph"] = "Punktegraph", -- Mutant
["Score points by killing other hedgehogs."] = "Hole Punkte, indem du andere Igel tötest.", -- Mutant
["Scores:"] = "Punktestand:", -- Mutant
["Scoring: "] = "Punktewertung: ", -- Mutant
+["%s couldn't escape, try again!"] = "%s konnte nicht fliehen, versuch es erneut!", -- A_Space_Adventure:fruit01
["Script parameter examples:"] = "Skriptparameterbeispiele:", -- Gravity
["%s: %d (deaths: %d)"] = "%s: %d (Tode: %d)", -- Mutant
["%s (%d), %d sec"] = "%s (%d), %d s", -- Continental_supplies
@@ -1844,7 +1835,7 @@
["%s (+%d)"] = "%s (+%d)", -- Battalion
["%s (%d)"] = "%s (%d)", -- Continental_supplies
["%s, %d sec"] = "%s, %d s", -- Continental_supplies
-["Search for the device with the help of the other hedgehogs "]="Such nach dem Gerät mit der Hilfe der anderen Igel.",
+["Search for the device with the help of the other hedgehogs."] = "Such nach dem Gerät mit der Hilfe der anderen Igel.", -- A_Space_Adventure:fruit02
["Searching in the dust"]="Suche im Staub",
["Searching the stars!"]="Suche in den Sternen",
["seconds"]="Sekunden",
@@ -1870,6 +1861,7 @@
["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "Wähle deinen Kontinent mit [Hoch]/[Runter]. Alternativ kannst du eine repräsentative Waffe wählen.", -- Continental_supplies
["%s enters the battlefield"] = "%s betritt das Schlachtfeld", -- A_Space_Adventure:fruit01
["Sergey"] = "Sergey", --
+["%s escaped successfully!"] = "%s ist erfolgreich geflohen!", -- A_Space_Adventure:fruit01
["Set bounciness: [Left Shift] + [1]-[5]"] = "Sprunghaftigkeit setzen: [Umschalt links] + [1]-[5]", -- Basic_Training_-_Grenade
["Set detonation timer: [1]-[5]"] = "Explosionszeitzünder einstellen: [1]-[5]", -- Basic_Training_-_Grenade
["Set Health: [Left Click]"]="Gesundheit setzen: [Linksklick]",
@@ -1898,6 +1890,7 @@
["%s has mutated! +2 points"] = "%s mutierte! +2 Punkte", -- Mutant
["%s has passed the best height of %s!"]="%s hat die Besthöhe von %s überschritten!",
["%s has scored!"] = "%s hat gepunktet!", -- Capture_the_Flag
+["%s has to refuel the saucer."] = "%s muss die Untertasse auftanken.", -- A_Space_Adventure:moon01
["%s hates Newton."] = "%s hasst Newton", -- User_Mission_-_Rope_Knock_Challenge
["She endangered the whole tribe!"] = "Sie hatte den ganzen Stamm in Gefahr gebracht!", -- A_Classic_Fairytale:epil
["sheepluva"] = "sheepluva", --
@@ -1915,7 +1908,6 @@
["%s hit the ground."] = "%s traf den Boden.", -- User_Mission_-_Rope_Knock_Challenge
["Shoppa Love"]="Seilliebe",
["Shoppa Union"]="Konsumentenunion",
-["Shoppers"] = "Käufer", --
["Sigh."] = "Seufz.", -- A_Classic_Fairytale:epil
["Silly"]="Doofi",
["Silver"] = "Silber", --
@@ -1926,11 +1918,11 @@
["%s is now as poor as a church mouse"] = "%s ist jetzt so arm wie eine Kirchenmaus", -- Construction_Mode
["%s is now a zombie hedgehog"] = "%s ist jetzt ein Zombie-Igel", -- Construction_Mode
["%s is suddenly low on ammo"] = "%s fehlt es plötzlich an Munition", -- Construction_Mode
-["Skip your turn to try again."] = "Überspringe deinen Zug, um es erneut zu versuchen.", -- Basic_Training_-_Rope
["Skulls"] = "Schädels", -- Bazooka_Battlefield
["Slimer"] = "Schleimer", --
["Slippery"]="Rutschig",
["%s lost all the weapons"] = "%s hat alle Waffen verloren", -- Construction_Mode
+["%s lost, try again!"] = "%s hat verloren, versuch es nochmal!", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
["Slot %d: %s"] = "Slot %d: %s", -- Frenzy
["Slot keys save time! (F1-F10 by default)"]="Schnelltasten, um Zeit zu sparen! (standardmäßig F1–F10)",
["Slowpoke"] = "Flegmon", --
@@ -1944,6 +1936,7 @@
["Smith 0.99f"]="Smith 0.99f",
["Smith 1.0"]="Smith 1.0",
["Smugglers"]="Schmuggler",
+["%s must collect the final crates."] = "%s muss die letzten Kisten aufsammeln.", -- A_Space_Adventure:fruit02
["%s must skip this turn for rule violation."] = "%s muss wegen einer Regelverletzung aussetzen.", -- WxW
["Sneaks"] = "Schleichs", -- Bazooka_Battlefield
["%s never got the ninja diploma."]="%s ist bei der Ninjaprüfung durchgefallen.",
@@ -1951,10 +1944,8 @@
["Sniper! +8 points!"] = "Scharfschütze! +8 Punkte!", -- Space_Invasion
["Sniper"]="Heckenschütze",
["Sniper Training"]="Scharfschützen-Training",
-["Sniperz"]="Heckenschützen",
["So, as promised I have brought you where I think that the device you are looking for is hidden."]="Nun, wie versprochen habe ich dich an den Ort gebracht, von dem ich glaube, dass das Gerät dort versteckt ist.",
["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "Bisher hattest du unendlich viele Seile,|aber in der realen Welt sind Seile normalerweise begrenzt.", -- Basic_Training_-_Rope
-["So Hog Solo, here we are ..."]="Also, Igel Einsam, da wären wir!",
["So humiliating..."]="Welch Demütigung!",
["So, I believe that it's a good place to start."]="Also glaube ich, dass es ein guter Ort zum Anfangen ist.", -- A_Space_Adventure:desert01
["So, I kindly ask for your help."]="Also bitte ich dich ergebenst um Hilfe.",
@@ -1965,15 +1956,16 @@
["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",
-["Somewhere else on the planet of fruits Hog Solo gets closer to the device"]="Anderswo auf dem Obstplaneten kommt Igel Einsam näher an das Gerät.",
+["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "Irgendwo anders auf dem Planeten des Obstes hilft Leutnant Limone %s", -- A_Space_Adventure:fruit02
+["Somewhere else on the planet of fruits, %s gets closer to the device"] = "Irgendwo anders auf dem Planeten des Obstes kommt %s näher an das Gerät", -- A_Space_Adventure:fruit02
["Somewhere in the Fruit Planet Hog Solo got lost ..."]="Irgendwo auf dem Obstplaneten hat sich Igel Einsam verlaufen …",
["Somewhere in the Planet of Death..."]="Irgendwo auf dem Todesplaneten …",
["Somewhere on the Planet of Death ..."] = "Irgendwo auf dem Planeten des Todes …", -- A_Space_Adventure:death02
["Somewhere on the Planet of Fruits a terrible war is about to begin ..."]="Irgendwo auf dem Obstplaneten steht ein fürchterlicher Krieg bevor",
["Somewhere on the uninhabitable Death Planet ..."]="Irgendwo auf dem unbewohnbaren Todesplaneten …",
["So, now I got the last part and I have your friends captured."]="Und jetzt habe ich das letzte Teil und deine Freunde gefangengenommen.",
-["So the princess was never heard of again ..."] = "Und so hörte man nie wieder was von der Prinzessin …", -- A_Classic_Fairytale:family
+["So, %s, here we are ..."] = "Nun, %s, hier wären wir …", -- A_Space_Adventure:cosmos
+["So the princess was never heard of again ..."] = "Und so hörte man nie wieder von der Prinzessin …", -- A_Classic_Fairytale:family
["So, uhmm, how did you manage to teleport them so far?"] = "Und, ähm, wie hast du es geschafft, sie so weit zu teleportieren?", -- A_Classic_Fairytale:epil
["Sour"] = "Sauer", --
["South America"]="Südamerika",
@@ -2073,8 +2065,6 @@
["Structure Placement Mode"]="Gebäudeplatzierungsmodus",
["Structure Placer"] = "Gebäudeplatzierer", -- Construction_Mode
["Stupid, stupid Hogerians!"] = "Dumme, dumme Hogerianer!", -- A_Space_Adventure:final
-["Subject 1"] = "Subjekt 1", -- portal
-["Subjects"] = "Subjekte", -- portal
["Subtract %d"] = "%d subtrahieren", -- HedgeEditor
["--- Sudden Death ---"] = "--- Sudden Death ---", -- Battalion
["Summer Squash"]="Sommerkürbis",
@@ -2091,7 +2081,7 @@
["Surfer! +15 points!"]="Surfer! +15 Punkte",
["Surfer!"]="Surfer!",
["Surprise supplies: Get 1-3 random weapons each turn."] = "Überraschungsnachschub: Erhalte 1-3 zufällige Waffen pro Zug.", -- Continental_supplies
-["Survive!|Hint: Cinematics can be skipped with the [Precise] key."]="Überlebe!|Tipp: Zwischensequenzen können mit der [Genaues Zielen]-Taste übersprungen werden.",
+["Survive!"] = "Überlebe!", -- A_Classic_Fairytale:shadow
["%s violated the “All But Last” rule and will be penalized."] = "%s verletzte die »Nicht Den Letzten«-Regel und wird aussetzen müssen.", -- WxW
["%s violated the “Kill The Leader” rule and will be penalized."] = "%s verletzte die »Tötet Den Besten«-Regel und wird aussetzen müssen.", -- WxW
["Swap place with a random enemy in the circle."] = "Vertausch die Plätze mit einem zufälligen Gegner im Kreis.", -- Continental_supplies
@@ -2110,6 +2100,7 @@
["%s! Why?!"] = "%s! Warum!", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
["Swing, Leaks A Lot, on the wings of the wind!"]="Schwing, Undichte Stelle, auf den Flügeln des Windes!",
["Swing: [Left]/[Right]"] = "Schwingen: [Links]/[Rechts]", -- Basic_Training_-_Rope
+["%s wins, congratulations!"] = "%s gewinnt, Gratulation!", -- A_Space_Adventure:moon01
["%s wins!"]="%s gewinnt!",
["%s wins with a best time of %.1fs."] = "%s gewinnt mit einer Bestzeit von %.1fs.", -- Racer, TechRacer
["Switch: Drop ball of dirt from parachute (once)"] = "Wechseln: Erdklumpen fallen lassen (ein mal)", -- Continental_supplies
@@ -2120,6 +2111,7 @@
["Switch hedgehog: [Tabulator]"] = "Igel wechseln: [Tabulator]", -- Basic_Training_-_Movement
["Switch: Select weapon special"] = "Wechseln: Waffenextra auswählen", -- Continental_supplies
["Switch: Toggle crate radar"] = "Wechseln: Kistenradar umschalten", -- WxW
+["%s won!"] = "%s gewinnt!", -- A_Space_Adventure:fruit01
["Swords"] = "Schwerter", -- Bazooka_Battlefield
["Syntax Errol"]="Syntaxfehlel",
["%s, you may choose the rules."] = "%s, du darfst die Regeln bestimmen", -- WxW
@@ -2133,6 +2125,8 @@
["Tails"] = "Fuß", --
["Talk about mixed signals..."]="Zuckerbrot und Peitsche …",
["Tall Potato"]="Großkartoffel",
+["Tap [Pause] to see the mission texts"] = "[Pause] antippen, um Missionstexte zu sehen", -- Basic_Training_-_Movement
+["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "Tippe den Knopf mit den rotierenden Pfeilen links unten an,|bis du Käppi ausgewählt hast, dem Igel mit der Mütze!", -- Basic_Training_-_Movement
["Target Placement Mode"]="Zielscheibenplatzierungsmodus",
["TARGET PLACEMENT MODE"] = "ZIELSCHEIBENPLATZIERUNGSMODUS", -- HedgeEditor
["Target Practice: Bazooka (easy)"] = "Zielübung: Bazooka (einfach)", -- Target_Practice_-_Bazooka_easy
@@ -2147,9 +2141,12 @@
["Tatsujin"] = "Tatsujin", --
["Tatters"] = "Lumpen", --
["Team %d"] = "Team %d", -- SimpleMission
+["Team high score: %d"] = "Team-Punkterekord: %d", -- Utils
["Team Identity Mode"]="Team-Identitätsmodus",
["TEAM IDENTITY MODE"]="TEAMIDENTITÄTSMODUS",
["Team of Hearts"]="Team der Herzen",
+["Team record: %.3fs"] = "Teamrekord: %.3fs", -- Utils
+["Team record: %d"] = "Teamrekord: %d", -- Utils
["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
@@ -2183,7 +2180,7 @@
["That Sinking Feeling"]="Land unter",
["That's just the way it works, you know."] = "So laufen die Dinge halt, versteht ihr?", -- A_Classic_Fairytale:queen
["That's not our problem!"]="Das ist nicht unser Problem!",
-["That's typical of you!"]="Das ist so typisch für dich!",
+["That's typical of you!"]="Das ist so typisch für euch!",
["That's why he always wears a hat since then."]="Deshalb trägt er seitdem immer einen Hut.",
["That traitor won't be killing us anymore!"] = "Der Verräter wird uns nicht mehr ermorden!", -- A_Classic_Fairytale:queen
["That was just mean!"]="Das war einfach nur gemein!",
@@ -2243,7 +2240,6 @@
["the Fruit Planet"]="der Obstplanet",
["The giant umbrella from the last crate should help break the fall."]="Der Riesenschirm aus der letzten Kiste sollte helfen, den Sturz abzubremsen.",
["The Great Escape"]="Gesprengte Ketten",
-["The Green Bananas lost, try again!"]="Die Grünen Bananen haben verloren, versuche es nochmal!",
["The guardian"]="Der Wächter",
["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "Die Grauen des Krieges verwandelten %s (%s) in eine Tötungsmaschine: %d Invasoren in einer Runde getötet!", -- Space_Invasion
["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "Der Igel mit den wenigsten Punkten (oder meisten Toden) wird zum Versager.", -- Mutant
@@ -2266,7 +2262,6 @@
["The Moonwalk"]="Der Mondspaziergang",
["The Mutant has super weapons and a lot of health."] = "Der Mutant hat Superwaffen und eine hohe Gesundheit.", -- Mutant
["The Mutant loses health quickly, but gains health by killing."] = "Der Mutant verliert schnell Gesundheit, heilt sich aber für jeden Abschuss.", -- Mutant
-["The Nameless One"]="Der Namenlose",
["The Navy greets %s for managing to get in a distance of %d away from the mainland!"]="Die Marine grüßt %s für einen Abstand von %d vom Festland!",
["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."]="Die nächsten 4 Male, die du die Mission »Das letzte Gefecht« spielst, wirst du 20 weitere Trefferpunkte und ein Laservisier erhalten.",
["The next crate is an utility crate."] = "Die nächste Kiste ist eine Werkzeugkiste.", -- Basic_Training_-_Movement
@@ -2350,7 +2345,6 @@
["This almost concludes our tutorial."] = "Damit ist unsere Übung fast abgeschlossen.", -- Basic_Training_-_Flying_Saucer
["This also increases the effectiveness of Medicine."] = "Dies erhöht außerdem die Wirksamkeit von Medizin.", -- Continental_supplies
["This game wasn’t really exciting."] = "Diese Runde war nicht so aufregend.", -- Space_Invasion
-["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"]="Dieser Igel Einsam ist so naiv! Wenn er zurückkehrt, werde ich ihn erschießen und das Gerät für mich selbst behalten!",
["This is a new personal best, congratulations!"] = "Das ist eine neue persönliche Bestleistung, Gratulation!", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
["This is a new personal best time, congratulations!"] = "Das ist eine neue persönliche Bestzeit, Gratulation!", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
["This is Cappy."] = "Das ist Käppi.", -- Basic_Training_-_Movement
@@ -2367,6 +2361,7 @@
["This rain is really something..."]="Das nenne ich mal einen Regenschauer …",
["This round’s award for ultimate disappointment goes to: Everyone!"]="Der ultimative Enttäuschungspreis geht in dieser Runde an: alle!",
["This seems like a wealthy hedgehog, nice ..."] = "Das scheint ein reicher Igel zu sein, nett …", -- A_Space_Adventure:desert01
+["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "%s ist so naiv! Ich werde diesen Deppen abknallen, damit ich das Gerät für mich behalten kann!", -- A_Space_Adventure:fruit02
["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"]="Das war eine großartige Vorstellung! Aber diese Herausforderung kann sogar mit nur einem Funkflugzeug gemeistert werden. Kannst du herausfinden, wie?",
["This will be fun!"]="Das wird Spaß machen!",
["This will be useful when I need a new platform or if I want to rise."] = "Das wird sich als nützlich erweisen, wenn ich eine neue Plattform brauche oder ich nach oben muss.", -- portal
@@ -2402,6 +2397,7 @@
["To begin with the training, hit the attack key!"] = "Um mit der Übung anzufangen, drücke die Angriffstaste.", -- Basic_Training_-_Movement
["To begin with the training, select the bazooka from the ammo menu!"] = "Um mit dem Training anzufangen, wähl die Bazooka aus dem Munitionsmenü aus!", -- Basic_Training_-_Bazooka
["To begin with the training, select the grenade from the ammo menu!"] = "Um mit dem Training anzufangen, wähl die Granate aus dem Munitionsmenü aus!", -- Basic_Training_-_Grenade
+["To begin with the training, tap the attack button!"] = "Um mit dem Training anzufangen, tippe die Angriffstaste an!", -- Basic_Training_-_Movement
["To finish hedgehog selection, just do anything|with him, like walking."] = "Um die Igelwahl zu beenden, mach irgendwas mit dem Igel, z.B. gehen.", -- Basic_Training_-_Movement
["To get over the next obstacles, keep some distance from the wall before you back jump."] = "Um über die nächsten Hindernisse zu kommen, halte etwas Abstand von der Wand,|bevor du rückwärts springst.", -- Basic_Training_-_Movement
["To get over the water, you have to do multiple|rope shots and swings."] = "Um über das Wasser zu gelangen, brauchst du mehrere Seilschüsse|und musst mehrfach schwingen.", -- Basic_Training_-_Rope
@@ -2419,14 +2415,13 @@
["Too bad! Then you should really leave!"] = "Schade. Dann solltest du wirklich gehen!", -- A_Space_Adventure:fruit01
["Too slow! Try again ..."]="Zu langsam! Versuch es nochmal.",
["Top-class elite pilot"]="Elitepilot der Spitzenklasse",
-["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"]="Um einen Träger zu platzieren, wähle ihn, benutze [Links] und [Rechts], um den Winkel und die Länge zu wählen, platziere ihn mit [Linksklick].",
["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "Um auf höheres Gelände zu kommen, geh zur Kante,|blicke nach links und mach einen Rückwärtssprung.", -- Basic_Training_-_Movement
["Torn Muscle"]="Loser Muskel",
["To the caves..."]="Zu den Höhlen …",
["Touch all waypoints as fast as you can!"] = "Berühre alle Wegpunkte so schnell du kannst!", -- Racer
-["To win the game, Hog Solo has to get the bottom crates and come back to the surface."]="Um das Spiel zu gewinnen, muss Igel Einsam zu den unteren Kisten gelangen und wieder zurück zur Oberfläche kommen.",
+["To win the game, %s has to get the bottom crates and come back to the surface."] = "Um das Spiel zu gewinnen, muss %s die unteren Kisten erreichen und zurück an die Oberfläche gelangen.", -- A_Space_Adventure:fruit02
["To win the game you had to collect the 2 crates with no specific order."]="Um das Spiel zu gewinnen, musstest du die 2 Kisten in beliebiger Reihenfolge einsammeln.",
-["To win the game you have to eliminate all your enemies."]="Um das Spiel zu gewinnen, musst du all deine Gegner eliminieren",
+["To win the game you have to eliminate Professor Hogevil."] = "Um das Spiel zu gewinnen, musst du Professor Bösigel eliminieren.", -- A_Space_Adventure:death01
["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.",
@@ -2435,13 +2430,10 @@
["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
-["Trainee"] = "Azubi", --
["Training complete!"] = "Übung abgeschlossen!", -- Basic_Training_-_Flying_Saucer
-["Training Team"] = "Trainingsteam", --
["Training"] = "Übung", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
["Traitors don't get to shout around here!"] = "Verräter haben hier nicht das Recht, herumzubrüllen!", -- A_Classic_Fairytale:epil
["Traitors"]="Verräter",
-["Trapped"] = "Gefangen", -- Basic_Training_-_Movement
["Trapper"]="Trapper",
["Travel carefully as your fuel is limited"]="Reise vorsichtig, da dein Treibstoff begrenzt ist.",
["Travel to all the neighbor planets and collect all the pieces"]="Reise zu allen Nachbarplaneten und sammle alle Bauteile ein.",
@@ -2458,7 +2450,6 @@
["Try to land softly, as you can still take fall damage!"] = "Lande vorsichtig, da du immer noch Fallschaden nehmen könntest!", -- Basic_Training_-_Flying_Saucer
["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."]="Versuche, den Häuptling zu beschützen! Du wirst nicht verlieren, wenn er stirbt, aber es ist ratsam, dass er überlebt.",
["Try to reach and destroy the next target quickly."] = "Versuch, das nächste Ziel möglichst schnell|zu erreichen und zu zerstören.", -- Basic_Training_-_Rope
-["T_T"]="T_T",
["Tumbler"] = "Purzler", -- Tumbler
["Turn around: [Left Shift] + [Left]/[Right]"] = "Umdrehen: [Umschalt links] + [Links]/[Rechts]", -- Basic_Training_-_Movement
["Turning Around"] = "Umdrehen", -- Basic_Training_-_Movement
@@ -2477,7 +2468,6 @@
["Uhmm...ok no."]="Ähm, okay, nein.",
["Ukemi"] = "Ukemi", --
["Ultra kill!"] = "Ultra-Killer!", -- Mutant
-["Ultrasoldier"] = "Ultrasoldat", -- Big_Armory
["unC0Rr"] = "unC0Rr", --
["Under Construction"]="Baustelle",
["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."]="Unter normalen Bedingungen könnten wir sie leicht besiegen, aber wir hatten freundlicherweise die meisten unserer Männer zum Sandkönigreich geschickt, um bei der jährlichen Entstaubung des Königspalasts zu helfen.",
@@ -2523,7 +2513,7 @@
["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 parachute to get the next crate."] = "Benutze den Fallschirm, um zur nächsten Kiste zu gelangen.", -- A_Classic_Fairytale:first_blood
["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.",
@@ -2596,9 +2586,6 @@
["Walls left: %d"] = "Verbleibende Wände: %d", -- WxW
["Wall to wall"] = "Wand zu Wand", -- WxW
["Waluigi"]="Waluigi",
-["Wannabe Flyboys"]="Möchtegernflieger",
-["Wannabe Ropers"] = "Möchtegernseiler", -- Basic_Training_-_Rope
-["Wannabe Shoppsta"]="Möchtegernkäufer",
["Wario"] = "Wario", --
["Warming Up"] = "Aufwärmübungen", -- Basic_Training_-_Grenade
["Warning: Deletition Mode Active"]="Achtung: Löschmodus aktiv",
@@ -2645,9 +2632,9 @@
["We have to hurry! Are you armed?"]="Wir müssen uns beeilen! Bist du bewaffnet?",
["We have to protect the village!"]="Wir müssen das Dorf schützen!",
["We have to unite and defeat those cylergs!"]="Wir müssen uns zusammentun, und diese Cylergs besiegen!",
-["Welcome Hog Solo, surprised to see me?"]="Hallo, Igel Einsam! Bist du überrascht, mich zu sehen?",
["Welcome home! Please take a seat"] = "Willkommen zu Hause! Bitte nimm Platz", -- ClimbHome
["Welcome, Leaks A Lot!"]="Willkommen, Undichte Stelle!",
+["Welcome, %s, surprised to see me?"] = "Willkommen, %s, überrascht, mich zu sehen?", -- A_Space_Adventure:death01
["Welcome to the Death Planet!"]="Willkommen auf dem Todesplaneten!",
["Welcome to the Desert Planet!"]="Willkommen auf dem Wüstenplaneten!",
["Welcome to the Fruit Planet!"]="Willkommen auf dem Obstplaneten!",
@@ -2808,19 +2795,19 @@
["You can’t open a portal on the blue surface."] = "Du kannst kein Portal auf der blauen Oberfläche öffnen.", -- portal
["You can use the other 2 hogs to assist you."]="Du kannst die anderen beiden Igel benutzen, um dich zu unterstützen.",
["You can use the rope to reach new places."] = "Du kannst das Seil benutzen, um neue Orte zu erreichen.", -- Basic_Training_-_Rope
-["You choose well, Hog Solo!"]="Gute Wahl, Igel Einsam!",
+["You choose well, %s!"] = "Eine gute Wahl, %s!", -- A_Space_Adventure:fruit01
["You completed the mission in %.3f seconds."] = "Du hast die Mission in %.3f Sekunden abgeschlossen.", -- A_Space_Adventure:ice02
["You completed the mission in %d rounds."] = "Du hast die Mission in %d Runden abgeschlossen.", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
["You completed the mission in "]="Du hast die Mission fertiggestellt in ",
["You complete the mission in "]="Du hast die Mission abgeschlossen in ",
-["You couldn't have come to a worse time, Hog Solo!"]="Du könntest du einer kaum schlechteren Zeit ankommen, Igel Einsam!",
+["You couldn't have come to a worse time, %s!"] = "Du konntest zu keiner schlechteren Zeit gekommen sein, %s!", -- A_Space_Adventure:fruit01
["You couldn't possibly believe that after refusing my offer I'd just let you go!"]="Du kannst wohl nicht ernsthaft glauben, dass ich dich einfach laufen lasse, nachdem du mein Angebot abgelehnt hast!",
["You'd almost swear the water was rising!"]="Man könnte fast schwören, das Wasser würde steigen!",
["You'd better watch your steps..."]="Pass besser auf, wohin du trittst.",
["You defended yourself against Captain Lime."]="Du hast dich gegen Leutnant Limone gewehrt.",
["You defended yourself against the Fruit Assassins."] = "Du hast dich gegen die Obstassassinen gewehrt.", -- A_Space_Adventure:fruit02
["You defended yourself against the Strawberry Assassins."]="Du hast dich gegen die Erdbeerassassinen gewehrt.",
-["You did great, Hog Solo! However, we aren't out of danger yet!"]="Du hast dich wacker geschlagen, Igel Einsam! Aber wir haben die Gefahren noch nicht überstanden.",
+["You did great, %s! However, we aren't out of danger yet!"] = "Du hast dich gut geschlagen, %s! Aber die Gefahr ist noch nicht gebannt!", -- A_Space_Adventure:cosmos
["You don't deserve my sacrifice!"] = "Ihr verdient mein Opfer nicht!", -- A_Classic_Fairytale:queen
["You drove Professor Hogevil away."] = "Du hast Professor Bösigel verjagt.", -- A_Space_Adventure:moon01
["You drove the minions away."] = "Du hast die Lakaien verjagt.", -- A_Space_Adventure:moon01
@@ -2839,6 +2826,7 @@
["You have acquired the last device part."]="Du hast das letzte Bauteil erhalten.",
["You have activated Switch Hedgehog!"] = "Du hast »Igel wechseln« aktiviert!", -- Basic_Training_-_Movement
["You have beaten the challenge!"]="Du hast die Herausforderung gemeistert!",
+["You have beaten the team record, congratulations!"] = "Du hast den Teamrekord geschlagen, Gratulation!", -- Utils
["You have been giving us out to the enemy, haven't you!"]="Du hast uns an den Feind verkauft, nicht wahr?",
["You have chosen the perfect moment to leave."]="Du hast den perfekten Augenblick ausgesucht, um zu gehen.",
["You have chosen to fight!"] = "Du hast dich für die Schlacht entschieden!", -- A_Space_Adventure:fruit01
@@ -2934,7 +2922,7 @@
["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 %s at the end."] = "Am Ende musst du %s 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
["You'll lose if you die or if your time is up."]="Du verlierst, wenn du stirbst oder deine Zeit abläuft.", -- A_Space_Adventure:moon02
["You'll see what I mean!"]="Du wirst verstehen, was ich meine.",
@@ -2960,12 +2948,12 @@
["Your accuracy was %.1f%%."]="Deine Treffgenauigkeit betrug %.1f%%.",
["Your accuracy was %.1f%% (+%d points)."] = "Deine Treffgenauigkeit betrug %.1f%% (+%d Punkte).", --
["Your ammo is limited this time."] = "Diesmal ist deine Munition begrenzt.", -- Basic_Training_-_Bazooka
-["Your deaths will be avenged, Cannibals!"] = "Eure Tode werden gerächt, Kannibalen!", -- A_Classic_Fairytale:enemy
-["Your deaths will be avenged, Natives!"] = "Eure Tode werden gerächt, Eingeborene!", -- A_Classic_Fairytale:enemy
+["Your deaths will be avenged, %s!"] = "Eure Tode werden nicht ungesühnt bleiben, %s!", -- A_Classic_Fairytale:enemy
["Your death will not be in vain, Dense Cloud!"]="Dein Tod wird nicht ungesühnt bleiben, Dichte Wolke!",
["You're a coward!"] = "Du bist ein Feigling!", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"]="Du … lebst? Aber wir sahen dich sterben!",
["You're a pathetic liar!"]="Du bist ein dreckiger Lügner!",
+["You're doing well! Here are more targets for you."] = "Du machst das gut! Hier gibt es weitere Zielscheiben.", -- Basic_Training_-_Grenade
["You're funny!"]="Du bist lustig!",
["You're on your way to freeing your tribe!"] = "Ihr seid dabei, euren Stamm zu befreien!", -- A_Classic_Fairytale:queen
["You're pathetic! You are not worthy of my attention..."]="Du bist erbärmlich! Du hast meine Aufmerksamkeit nicht verdient.",
@@ -2987,9 +2975,11 @@
["Your next task is to collect some crates by using the rope!"] = "Für deine nächste Aufgabe musst du ein paar Kisten mit dem Seil aufsammeln.", -- A_Classic_Fairytale:first_blood
["Your personal best time so far: %.3f seconds"] = "Deine persönliche Bestzeit bisher: %.3f Sekunden", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
["Your rank: %s"]="Dein Rang: %s",
-["You saved %d of 8 Hapless Hogs."]="Du hast %d von 8 Glücklosen Igeln gerettet.",
+["Your rope is gone! Try again!"] = "Dein Seil ist futsch! Versuch es erneut!", -- Basic_Training_-_Rope
+["You saved %d of 8 hegehogs."] = "Du hast %d von 8 Igeln gerettet.", -- User_Mission_-_That_Sinking_Feeling
["You see, hedgehog spikes are very, very valuable."] = "Ihr müsst verstehen, Igelstacheln sind sehr, sehr wertvoll.", -- A_Classic_Fairytale:queen
["You see the wind strength at the bottom right corner."] = "Du siehst die Windstärke in der unteren rechten Ecke.", -- Basic_Training_-_Bazooka
+["You see the wind strength at the top."] = "Du siehst die Windstärke oben.", -- Basic_Training_-_Bazooka
["You should have known that we don't rely on meatbags!"] = "Ihr solltet gewusst haben, dass wir uns nicht auf Fleischbeutel verlassen!", -- A_Classic_Fairytale:queen
["You should know this more than anyone, Leaks!"] = "Du solltest es von allen am Ehesten wissen, Undichte!", -- A_Classic_Fairytale:queen
["You speak great truth, Hannibal. Here, take a sip!"] = "Du sprichst weise Worte, Hannibal. Hier, nimm einen Schluck!", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/de.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/de.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1420,3 +1420,5 @@
06:24=/shrug: Igel mit den Achseln zucken lassen
06:25=/wave: Igel winken lassen
06:26=Unbekannter Befehl oder ungültige Parameter. Sag »/help« im Chat für eine Liste an Befehlen.
+06:27=/help room: Raum-Chatbefehle auflisten
+06:28=Du bist nicht online!
--- a/share/hedgewars/Data/Locale/en.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/en.txt Mon Jan 14 12:35:32 2019 -0500
@@ -72,7 +72,7 @@
01:07=%1 remaining
01:08=Fuel: %1%
01:09=Synchronizing ...
-01:10=Using this utility won't end your turn!
+01:10=This won't end your turn!
01:11=This weapon or utility is not yet available!
01:12=Last round till Sudden Death!
01:13=%1 rounds till Sudden Death!
@@ -1325,3 +1325,5 @@
06:24=/shrug: Make hedgehog shrug
06:25=/wave: Make hedgehog wave its hand
06:26=Unknown command or invalid parameters. Say “/help” in chat for a list of commands.
+06:27=/help room: List room chat commands
+06:28=You're not online!
--- a/share/hedgewars/Data/Locale/es.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/es.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Entrenamiento con bazuca",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Reclutas", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Destruye todos los objetivos antes de que se agote el tiempo.|La munición en esta misión es ilimitada.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Acaba con los erizos enemigos para ganar",
["Eliminate the enemy specialists."] = "Acaba con los Especialistas",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "¡Ves allí y elimínalo!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "¡VAMOS! ¡VAMOS! ¡VAMOS!",
["Good birdy......"] = "Buen pajarito......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
["Good so far!"] = "¡Vamos bien!",
["Good to go!"] = "¡Sigue!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
["Lively Lifeguard"] = "Salvavidas dicharachero",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Héroes anónimos",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "¡Oh, no! ¿Por qué no lo intentas de nuevo?", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "¡Oh, no, se te acabó el tiempo! ¿Por qué no lo intentas de nuevo?", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Equipo enemigo: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Patética resistencia", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Aprieta [Incrementar precisión] para saltar la intro",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "¡Salva a tantos pobres desgraciados como puedas!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Idiota",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Entrenamiento con rifle francotirador",
- ["Sniperz"] = "Francotiradores",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Equipo %d",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Anónimo",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Vaya que si llueve...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Tóxicos", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "¡Pero si podría jurar que está subiendo el nivel del mar!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/fr.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/fr.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Un conte classique de fée",
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "",
["Back in the village, after telling the villagers about the threat..."] = "De retour au village, après avoir averti les villageois de la menace...",
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
["Backstab"] = "Coup de poignard dans le dos",
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Entraînement au Bazooka",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "",
-- ["Bloodrocutor"] = "",
["Bloodsucker"] = "Sangsue",
- ["Bloody Rookies"] = "Nouvelles recrues", -- 01#Boot_Çamp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
["Blue Team"] = "Team Bleue", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -321,6 +319,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -340,6 +339,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "Choisis ton côté ! Si tu veux rejoindre l'étranger, marche vers lui. |Dans le cas contraire, éloigne toi de lui. Si tu décide de l'att...non laisse tomber...",
@@ -348,7 +349,6 @@
["Cleaver"] = "Couperet", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
["Cleaver Placement Mode"] = "Mode de placement de couperet", -- Construction_Mode
- ["Climber"] = "Escaladeur", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -362,7 +362,7 @@
["Collect or destroy all the health crates."] = "Récupère ou détruit toutes les caisses de soin", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "Collecte les caisses à droite. |Astuce : sélectionne le grappin, [haut] ou [bas] pour viser, flèches directionnelles pour bouger. |Le grappin peut etre relancé en plein vol !",
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "Collecte les caisses dans le temps imparti ! |Si tu rates, tu devras réessayer.",
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -465,8 +465,8 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|"] = "Décime les cannibales",
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Bat les cannibales ! |Astuce Grenade : règles le compte à rebour avec [1-5], vises avec [haut]/[bas] et maintiens [Espace] pour la puissance",
["Defeat the cyborgs!"] = "Bats les cyborgs !",
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
@@ -490,10 +490,7 @@
["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "Détruis-le, Grosse Fuite ! Il est responsable de la mort de beaucoup des notres !",
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "Détruis les cibles ! |Astuce : sélectionne le Shoryuken et appuyez sur [Espace] |P.S. vous pouvez l'utilisez en plein vol",
- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "Détruis les cibles ! |Astuce : [haut], [bas] pour viser, [Espace] pour tirer",
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
["Did anyone follow you?"] = "As-tu été suivi ? ",
@@ -601,7 +598,6 @@
-- ["Elderbot"] = "",
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Éliminez toutes les cibles avant d'être à cours de temps.|Vos munitions sont illimitées pour cette mission.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Eliminez les hérissons ennemis pour gagner",
["Eliminate the enemy specialists."] = "Eliminez les spécialists ennemis",
@@ -629,7 +625,7 @@
["Exactly, man! That was my dream."] = "Exactement, mec ! C'était mon rêve.",
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
["Eye Chewer"] = "Mâcheur d'oeil",
-- ["Fair Wind"] = "", --
@@ -655,11 +651,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
["Find your tribe!|Cross the lake!"] = "Trouve ta tribue ! |Traverse le lac !",
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "Finis ton entraînement ! |Astuce : Les animations peuvent être passées en appuyant sur la touche [Precise]",
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a mine: [Does what it says ~ Çant be dropped close to an enemy ~ 1 sec]"] = "", -- Continental_supplies
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
@@ -688,6 +685,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -729,7 +727,7 @@
["Get Dense Cloud out of the pit!"] = "Sortez Nuage Dense de la fosse",
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Viens par ici et débarrasse-toi de lui ! ",
- ["Get on the head of the mole"] = "Va sur la tête de la taupe",
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
["Get that crate!"] = "Prends cette caisse",
@@ -768,7 +766,6 @@
["GO! GO! GO!"] = "Allez! Allez! Allez!",
["Good birdy......"] = "Gentil oiseau ...",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
- ["Good Dude"] = "Bravo !", -- User_Mission_-_The_Great_Escape
["Good idea, they'll never find us there!"] = "Bonne idée, ils ne nous trouverons jamais là bas !",
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -779,7 +776,7 @@
["Good so far!"] = "Pas mal jusqu'ici!",
["Good to go!"] = "C'est pret!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
- ["Go on top of the flower"] = "Atteins le dessus de la fleur",
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
["Go, quick!"] = "Va ! Vite !",
["Gorkij"] = "Gorkij",
["Go surf!"] = "Va faire du surf", -- WxW
@@ -802,7 +799,6 @@
["Great! You will be contacted soon for assistance."] = "Super ! Tu seras bientot contacté pour de l'aide.",
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -812,11 +808,10 @@
["Greetings, cloudy one!"] = "Salutation, le nuageux !",
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
["Grenade Training"] = "Entrainement à la grenade", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -871,6 +866,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "",
@@ -886,7 +882,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
["Help me, Leaks!"] = "Aide moi, Fuite !",
["Help me, please!!!"] = "Aide moi, s'il te plaît !!!",
["Help me, please!"] = "Aide moi, s'il te plaît !",
@@ -901,20 +896,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
- ["Hero Team"] = "Equipe de héros", -- User_Mission_-_The_Great_Escape
["He's so brave..."] = "Il est si courageux",
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
["He won't be selling us out anymore!"] = "Il ne nous vendra plus !",
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
["Hey guys!"] = "Salut les gars !",
["Hey, guys!"] = "Salut les gars",
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
["Hey! This is cheating!"] = "Hé ! C'est de la triche !",
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -925,20 +920,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
["Hint: Double Jump - Press [Backspace] twice"] = "Astuce : Double saut - appuyez deux fois sur [retour arrière]",
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: You might want to stay out of sight and take all the crates ..."] = "", -- A_Classic_Fairytale:journey
@@ -972,27 +973,15 @@
-- ["Hogminator"] = "",
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
["Hogs in sight!"] = "Hogs en vue !", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1017,7 +1006,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "Cependant, si tu échoues, elle aura une mort encore plus violente ! Muahahaha!",
["However, my mates don't agree with me on letting you go..."] = "Mes amis ne sont pas d'accord pour vous laisser partit ...",
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1037,7 +1026,6 @@
["I can't believe what I'm hearing!"] = "Je ne peux pas croire ce que j'entends !",
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
["I can't wait any more, I have to save myself!"] = "Je ne peux plus attendre, je dois me sauver !",
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
["I could just teleport myself there..."] = "Je pourrais juste me téléporter là-bas...",
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1097,7 +1085,6 @@
["I just found out that they have captured your princess!"] = "Je viens de m'apercevoir qu'ils ont capturé ta princesse !",
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
["I just wonder where Ramon and Spiky disappeared..."] = "Je me demande seulement où Ramon et Spiky ont disparu",
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1125,6 +1112,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
["I'm not sure about that!"] = "Je n'en suis pas si sûr !",
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "Impressionnant...tu es aussi sec que le cadavre d'un faucon après une semaine dans le désert...",
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1302,7 +1290,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leaderbot"] = "",
["Leader"] = "Chef",
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "",
["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "Grosse Fuite, déprimé d'avoir tué l'élue de son coeur, échoua à sauver le village...",
["Leaks A Lot gave his life for his tribe! He should have survived!"] = "Grosse Fuite à donné sa vie pour sa tribu ! Il aurait dû survivre !",
@@ -1317,7 +1305,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1347,10 +1334,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
- ["Lonely Hog"] = "Hog tout seul", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
["Look, I had no choice!"] = "Écoute, je n'avais pas le choix !",
["Look out! There's more of them!"] = "Regarde, il y en a encore plus !",
@@ -1358,7 +1346,6 @@
["Looks like the whole world is falling apart!"] = "On dirait que le monde entier tombe en morceaux !",
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1378,7 +1365,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["- Massive weapon bonus on first turn"] = "- Gros bonus d'arme au premier tour !", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1433,7 +1419,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
- ["More Natives"] = "Plus d'indigènes",
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1453,7 +1438,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "",
- ["Nameless Heroes"] = "Héros sans noms",
-- ["Nancy Screw"] = "",
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1556,7 +1540,7 @@
["Oh, my! This is even more entertaining than I've expected!"] = "Oh mon dieu ! C'est encore plus amusant que ce que je pensais !",
["Oh no! Just try again!"] = "Eh non ! Essayez encore ! ", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Eh non ! Temps écoulé ! Essayez encore ! ", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1580,9 +1564,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1594,6 +1578,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
["Open that crate and we will continue!"] = "Ouvre cette caisse et nous pourrons continuer",
["Opposing Team: "] = "Équipe opposée",
-- ["Orange"] = "", --
@@ -1613,9 +1598,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1630,7 +1615,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1711,9 +1695,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Appuyez [Gauche] ou [Droite] pour vous déplacer, [Entrée] pour sauter",
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "appuie sur [precise] pour passer l'intro",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1725,10 +1710,9 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Protège toi ! |Astuce Grenade : Règle le compte à rebour avec [1-5], vise avec [haut]/[bas] et maintiens [Espace] pour la puissance",
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
@@ -1782,11 +1766,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "Righteous Beard",
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1795,8 +1777,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1836,10 +1818,17 @@
["Salvation was one step closer now..."] = "Le salut était tout proche...",
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
["Save Fell From Heaven!"] = "Sauve Tombée de l'Enfer ! ",
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1854,6 +1843,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1863,6 +1853,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1875,7 +1866,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1905,6 +1896,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1932,6 +1924,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1949,7 +1942,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1962,11 +1954,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
["Slippery"] = "Glissant",
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1980,6 +1972,7 @@
-- ["Smith 0.99f"] = "",
-- ["Smith 1.0"] = "",
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1988,10 +1981,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Entraînement au fusil de sniper",
- ["Sniperz"] = "Snipers",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
["So humiliating..."] = "Si humiliant...",
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -2001,11 +1992,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2106,8 +2098,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2124,7 +2114,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "Survis ! Les cinématique peuvent être passées avec la touche [Precise]. ",
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2143,6 +2133,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
["Swing, Leaks A Lot, on the wings of the wind!"] = "Balance toi Grosse Fuite, sur les ailes du vent",
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2156,6 +2147,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "",
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2164,6 +2156,8 @@
-- ["Tails"] = "", --
["Talk about mixed signals..."] = "Parlons des signaux mélangés",
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2179,9 +2173,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Équipe %d : ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2279,7 +2276,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
["The giant umbrella from the last crate should help break the fall."] = "La toile géante de la dernière caisse devrait aider à arrêter la chute.",
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
["The guardian"] = "Le gardien",
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2301,7 +2297,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Le sans nom",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2388,7 +2383,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2406,6 +2400,7 @@
["This rain is really something..."] = "Cette pluie, c'est vraiment quelque chose !",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
["This will be fun!"] = "Ce sera amusant !",
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2446,6 +2441,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2460,14 +2456,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "Pour placer une poutre, sélectionne-la, et utilise [gauche] et [droite] pour choisir l'angle et la taille, ensuite place la avec [Clic gauche]",
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
["Torn Muscle"] = "Muscle déchiré",
["To the caves..."] = "Aux cavernes...",
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2475,13 +2470,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Équipe toxique", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
["Traitors"] = "Traîtres",
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2498,7 +2490,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "Essaie de protéger le chef ! Tu ne perdras pas s'il meurt, mais il serait avisé qu'il survive",
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2517,7 +2508,6 @@
["Uhmm...ok no."] = "Humm... ok non.",
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
["Under Construction"] = "En construction",
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2563,7 +2553,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
- ["Use the parachute ([Space] while in air) to get the next crate"] = "Utilisez le parachute ([Espace] en vol) pour atteindre la prochaine caisse ",
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "Utilisez le fusil à portail pour atteindre la prochaine caisse, puis utilisez le nouveau fusil pour atteindre la destination finale",
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2616,9 +2606,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2664,9 +2651,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
["We have to protect the village!"] = "Nous devons protéger le village !",
["We have to unite and defeat those cylergs!"] = "Nous devons nous unir et battre ces cyborgs !",
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
["Welcome, Leaks A Lot!"] = "Bienvenue, Grosse Fuite !",
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2833,16 +2820,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "Tu ne pouvais pas croire qu'après avoir refusé mon offre, je te laisserais partir comme ça !",
-- ["You'd almost swear the water was rising!"] = "",
["You'd better watch your steps..."] = "Tu ferais mieux de regarder où tu marches....",
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2865,6 +2852,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
["You have been giving us out to the enemy, haven't you!"] = "Tu nous as vendu aux ennemis, n'est ce pas ?!",
["You have chosen the perfect moment to leave."] = "Tu as choisis le moment parfait pour partir.",
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2955,7 +2943,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
["You'll see what I mean!"] = "Vous allez comprendre ce que je veux dire !",
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2980,12 +2968,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
["Your death will not be in vain, Dense Cloud!"] = "Tu ne seras pas mort en vain, Nuage Dense !",
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"] = "Tu es...vivant ? Mais nous t'avons vu mourrir !",
["You're a pathetic liar!"] = "Tu es un menteur pathétique",
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
["You're funny!"] = "Tu es drôle !",
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -3009,9 +2997,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -310,21 +353,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -779,6 +826,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1432,6 +1483,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1658,6 +1728,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1886,6 +1957,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2007,10 +2079,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2018,6 +2086,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2057,6 +2129,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2665,6 +2741,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2976,7 +3053,7 @@
</message>
<message>
<source>Specify</source>
- <translation>تحديد</translation>
+ <translation type="vanished">تحديد</translation>
</message>
<message>
<source>Start</source>
@@ -3058,6 +3135,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3869,6 +3950,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">اسلحة</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">عام</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3939,10 +4483,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4235,10 +4775,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4302,5 +4838,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -313,21 +356,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -786,6 +833,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1439,6 +1490,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1665,6 +1735,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1889,6 +1960,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2010,10 +2082,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2021,6 +2089,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2060,6 +2132,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2688,6 +2764,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3004,7 +3081,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Указване</translation>
+ <translation type="vanished">Указване</translation>
</message>
<message>
<source>default</source>
@@ -3082,6 +3159,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3905,6 +3986,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Оръжия</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Общи</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3975,10 +4519,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4271,10 +4811,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4338,5 +4874,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -319,21 +362,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -792,6 +839,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1470,6 +1521,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1696,6 +1766,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1941,6 +2012,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2062,10 +2134,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2073,6 +2141,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2112,6 +2184,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2741,6 +2817,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3054,7 +3131,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Upřesnit</translation>
+ <translation type="vanished">Upřesnit</translation>
</message>
<message>
<source>Start</source>
@@ -3136,6 +3213,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3979,6 +4060,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Zbraně</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Obecné</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4049,10 +4593,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4345,10 +4885,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4412,5 +4948,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_da.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_da.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -317,21 +360,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -790,6 +837,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1461,6 +1512,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1687,6 +1757,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1931,6 +2002,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2052,10 +2124,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2063,6 +2131,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2102,6 +2174,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2738,6 +2814,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3050,7 +3127,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Specificer</translation>
+ <translation type="vanished">Specificer</translation>
</message>
<message>
<source>Start</source>
@@ -3132,6 +3209,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3979,6 +4060,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Våben</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Generelt</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4049,10 +4593,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4345,10 +4885,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4412,5 +4948,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Mon Jan 14 12:35:32 2019 -0500
@@ -90,6 +90,49 @@
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
<translation><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation>Mitwirkende</translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation>Andere Leute</translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation>%1 (alias %2)</translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation>%1 &lt;%2&gt;</translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation>%1: %2</translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation>%1: %2 &lt;%3&gt;</translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation>Mehr Mitwirkende</translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation>Eine erweiterte Liste der Mitwirkenden kann in der CREDITS-Textdatei gefunden werden.</translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation><a href="https://visualstudio.microsoft.com">VC++</a>: %1</translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation>Unbekannter Compiler: %1</translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -356,21 +399,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Verwendung</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>SCHALTER</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>VERBINDUNGSTEXT</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Schalter</translation>
</message>
<message>
@@ -878,6 +925,10 @@
<source>Style:</source>
<translation>Stil:</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation>Größe der gemalten Karte skalieren</translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1643,6 +1694,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation>Zum gewählten Server verbinden</translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation>Liste der Server aktualisieren</translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation>Die Adresse und Portnumer eines bekannten Servers festlegen und eine Verbindung aufbauen</translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation>Privaten Server starten</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1864,6 +1934,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>FEHLENDER SPRACHNAME [%1]</translation>
</message>
<message>
@@ -2105,6 +2176,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Basisschaden und -rückschlag in Prozent</translation>
</message>
<message>
@@ -2239,7 +2311,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Deine Fähigkeiten in verschiedenen Trainingsmissionen verbessern</translation>
+ <translation type="vanished">Deine Fähigkeiten in verschiedenen Trainingsmissionen verbessern</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2249,6 +2321,10 @@
<source>Load a previously saved game</source>
<translation>Ein vormals gespeichertes Spiel ansehen</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation>Einzelspielermissionen: Lerne in Übungen, wie man spielt, verbessere deine Fähigkeiten in Herausforderungen oder versuche, Ziele in Szenarios abzuschließen.</translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2292,6 +2368,10 @@
<source>Start fighting</source>
<translation>Auf in den Kampf!</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation>Team</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2781,6 +2861,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% Rückzugszeit</translation>
</message>
<message>
@@ -3390,7 +3471,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Verbinden zu …</translation>
+ <translation type="vanished">Verbinden zu …</translation>
</message>
<message>
<source>Start</source>
@@ -3488,6 +3569,10 @@
<source>Upload this video to your YouTube account</source>
<translation type="vanished">Dieses Video zu deinem YouTube-Benutzerkonto hochladen</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation>Adresse festlegen</translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4361,6 +4446,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation>Programmierung</translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation>Spiel-Engine</translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation>Ersteller</translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation>Viele Engine-Verbesserungen</translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation>Gamepad- und Lua-Integration</translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation>Kampagnenunterstützung</translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation>Mehr Anpassungsmöglichkeiten für Szenerien</translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation>Arbeit an Pas2C und GLES2</translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation>Videoaufzeichnung</translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation>Sonstige Verbesserungen</translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation>Kartengenerierung</translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation>Hauptkartengeneratoren</translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation>Perlinkarten und andere Verbesserungen</translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation>Labyrinthkarten</translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation>Waffen</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation>Die meisten Hauptwaffen</translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation>Luftmine, Gummi, Andere</translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation>Bohrkopfrakete, Ballkanone, Funkflugzeug</translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation>Eiskanone</translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation>Einstellungen für Mineanzahl und -zeitzünder</translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation>Benutzeroberfläche / Hauptmenü</translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation>Viele Benutzeroberflächenverbesserungen</translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation>Bedienelemente für Tastenbelegung, Feedback, Karten und Hüte</translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation>Login-Dialoge, andere Verbesserungen</translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation>Missionen und Stile</translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation>Ein klassisches Märchen</translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation>Ein Weltraumabenteuer</translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation>Erstellte Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation>Übungen, Zeitrennen, Zielübungen, Bazookaschlachtfeld, Tentakel-Terror, Großes Arsenal, Fehlerkorrekturen und Wartung</translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation>Einige Stile und Missionen</translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation>Battalion</translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation>Continental supplies</translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation>Teamwork 2</translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation>Nach Hause klettern</translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation>Knifflige Portalherausforderung</translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation>Spielserver</translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation>Portierungen</translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation>macOS-/iPhone-Portierung, OpenGL-ES-Konvertierung</translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation>Android-Portierung</translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation>Android-Netzwerkspiel, Portierbarkeitsabstraktion</translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation>WebGL-Portierung</translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation>iPhone-/iPad-Portierungen</translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation>Grafik</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation>Allgemein</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation>Szenerien</translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation>Nature, Snow, City, Castle, Halloween, Island</translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation>Bamboo, EarthRise, BambooPlinko</translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation>Golf, Hoggywood, Stage</translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation>Hoggywood</translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation>Cave, Olympics</translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation>Fruit, Cake</translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation>Art</translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation>Beach</translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation>Brick</translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation>Hell</translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation>Jungle</translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation>Sheep</translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation>Karten</translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation>Castle, PirateFlag</translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation>ShoppaKing, TrophyRace</translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation>Battlefield</translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation>CTF_Blizzard</translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation>Cheese</translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation>ClimbHome</translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation>Lonely_Island</translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation>Octorama</translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation>portal</translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation>Ruler</translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation>Sticks</translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation>Festungen</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation>EvilChicken</translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation>Olympic</translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation>Tank</translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation>Snail</translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation>SteelTower</translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation>Hüte, Grabsteine, Sonstiges</translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation>Siehe CREDITS-Textdatei</translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation>Toneffekte</translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation>Igelstimme</translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation>»Default_pl«- und »Russian_pl«-Stimmen</translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation>Diverse Autoren von www.freesound.org (siehe CREDITS-Textdatei)</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Musik</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation>City, Rock, andere</translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation>Compost</translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation>EarthRise, oriental, Pirate, snow</translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation>Fruit, Jungle</translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation>Nature</translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation>olympics_sd</translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation>sdmusic (Hitman [sheepluva edit])</translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation>Übersetzungen</translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation>Brasilianisches Portugiesisch</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarisch</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tschechisch</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinesisch</translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation>Finnisch</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Französisch</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Deutsch</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Griechisch</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italienisch</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japanisch</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreanisch</translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation>Litauisch</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polnisch</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation>Portugiesisch</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russisch</translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation>Schottisch-Gälisch</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slowakisch</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spanisch</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Schwedisch</translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation>Ukrainisch</translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation>Besonderes Dankeschön</translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation>Projektgründer</translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Authentication failed</source>
@@ -4448,7 +4996,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Verfügbare »callvote«-Befehle: kick <Spitzname>, map <Name>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Verfügbare »callvote«-Befehle: kick <Spitzname>, map <Name>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4907,7 +5455,7 @@
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>»Registered only«-Zustand umgeschaltet.</translation>
+ <translation type="vanished">»Registered only«-Zustand umgeschaltet.</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4973,5 +5521,21 @@
<source>This command is only available in rooms.</source>
<translation>Dieser Befehl ist nur in Räumen verfügbar.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation>Dieser Server lässt unregistrierte Spieler nicht mehr rein.</translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation>Dieser Server lässt ab jetzt unregistrierte Spieler zu.</translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation>Verfügbare callvote-Befehle: hedgehogs <Anzahl>, pause, newseed, map <Name>, kick <Spieler></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation>Bitte Serverneustart mit »/restart_server yes« bestätigen.</translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_el.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_el.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -309,21 +352,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -784,6 +831,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1451,6 +1502,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1677,6 +1747,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1921,6 +1992,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2042,10 +2114,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2053,6 +2121,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2092,6 +2164,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2716,6 +2792,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3028,7 +3105,7 @@
</message>
<message>
<source>Specify</source>
- <translation type="unfinished">Καθορισμός</translation>
+ <translation type="obsolete">Καθορισμός</translation>
</message>
<message>
<source>Start</source>
@@ -3110,6 +3187,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3953,6 +4034,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Όπλα</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Γενικά</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4023,10 +4567,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4319,10 +4859,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4386,5 +4922,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -320,21 +363,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Usage</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>OPTION</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>CONNECTSTRING</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Options</translation>
</message>
<message>
@@ -849,6 +896,10 @@
<source>Click to edit</source>
<translation>Click to edit</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1559,6 +1610,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Start private server</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1780,6 +1850,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>MISSING LANGUAGE NAME [%1]</translation>
</message>
<message>
@@ -2009,6 +2080,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Overall damage and knockback in percent</translation>
</message>
<message>
@@ -2131,7 +2203,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Practice your skills in a range of training missions</translation>
+ <translation type="vanished">Practice your skills in a range of training missions</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2141,6 +2213,10 @@
<source>Load a previously saved game</source>
<translation>Load a previously saved game</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2180,6 +2256,10 @@
<source>Scenarios</source>
<translation>Scenarios</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Team</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2831,6 +2911,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% Retreat Time</translation>
</message>
<message>
@@ -3198,7 +3279,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Specify</translation>
+ <translation type="vanished">Specify</translation>
</message>
<message>
<source>Start</source>
@@ -3296,6 +3377,10 @@
<source>Upload this video to your YouTube account</source>
<translation type="vanished">Upload this video to your YouTube account</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4153,6 +4238,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Weapons</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphics</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">General</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Forts</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Music</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4348,7 +4896,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4692,7 +5240,7 @@
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>‘Registered only’ state toggled.</translation>
+ <translation type="vanished">‘Registered only’ state toggled.</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4758,5 +5306,21 @@
<source>This command is only available in rooms.</source>
<translation>This command is only available in rooms.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -317,21 +360,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -790,6 +837,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1457,6 +1508,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1683,6 +1753,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1927,6 +1998,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2048,10 +2120,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2059,6 +2127,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2098,6 +2170,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2730,6 +2806,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3046,7 +3123,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Especificar</translation>
+ <translation type="vanished">Especificar</translation>
</message>
<message>
<source>Start</source>
@@ -3124,6 +3201,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3971,6 +4052,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Set de armas</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">General</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4041,10 +4585,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4337,10 +4877,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4404,5 +4940,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -316,21 +359,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Käyttö</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>PARAMETRI</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>YHTEYSOSOITE</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Valinnat</translation>
</message>
<message>
@@ -822,6 +869,10 @@
<source>Click to edit</source>
<translation>Klikkaa muokataksesi</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1512,6 +1563,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Käynnistä oma palvelin</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1734,6 +1804,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1934,6 +2005,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Mitä isompi luku, sitä enemmän vahinkoa kaikki tuottaa, prosentteina oletustasosta</translation>
</message>
<message>
@@ -2056,7 +2128,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Harjoittele taitojasi tehtäväradoilla</translation>
+ <translation type="vanished">Harjoittele taitojasi tehtäväradoilla</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2066,6 +2138,10 @@
<source>Load a previously saved game</source>
<translation>Avaa tallennettu peli</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2105,6 +2181,10 @@
<source>Scenarios</source>
<translation>Tilanteet</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Joukkue</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2751,6 +2831,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% Pakoaika</translation>
</message>
<message>
@@ -3100,7 +3181,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Määritä</translation>
+ <translation type="vanished">Määritä</translation>
</message>
<message>
<source>Start</source>
@@ -3190,6 +3271,10 @@
<source>Start private server</source>
<translation>Käynnistä oma palvelin</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4031,6 +4116,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Aseet</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafiikka</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Yleiset</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Linnakkeet</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Musiikki</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4226,7 +4774,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Käytössä äänestyskomennot: kick <nimi>, map <nimi>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Käytössä äänestyskomennot: kick <nimi>, map <nimi>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4541,10 +5089,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4608,5 +5152,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -336,21 +379,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Utilisation</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>OPTION</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>LIENDECONNEXION</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Options</translation>
</message>
<message>
@@ -835,6 +882,10 @@
<source>Click to edit</source>
<translation>Cliquez pour éditer</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1537,6 +1588,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Démarrer un serveur privé</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1763,6 +1833,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>NOM DE LANGAGE MANQUANT</translation>
</message>
<message>
@@ -2012,6 +2083,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Dégâts généraux et coût en pourcent</translation>
</message>
<message>
@@ -2134,7 +2206,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Améliorez vos compétences avec un large choix de missions</translation>
+ <translation type="vanished">Améliorez vos compétences avec un large choix de missions</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2144,6 +2216,10 @@
<source>Load a previously saved game</source>
<translation>Charger une partie</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2187,6 +2263,10 @@
<source>Scenarios</source>
<translation>Scénarios</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Équipe</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2879,6 +2959,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% temps de repli</translation>
</message>
<message>
@@ -3254,7 +3335,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Spécifier</translation>
+ <translation type="vanished">Spécifier</translation>
</message>
<message>
<source>default</source>
@@ -3344,6 +3425,10 @@
<source>Start private server</source>
<translation>Démarrer un serveur privé</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4213,6 +4298,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Armes</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Graphismes</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Général</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Forts</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Musique</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Authentication failed</source>
@@ -4408,7 +4956,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Commandes de vote disponible : kick <pseudo>, map <nom>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Commandes de vote disponible : kick <pseudo>, map <nom>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4723,10 +5271,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4790,5 +5334,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_gd.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts Mon Jan 14 12:35:32 2019 -0500
@@ -1,4 +1,6 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="gd" version="2.1">
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="gd">
<context>
<name>About</name>
<message>
@@ -7,7 +9,7 @@
</message>
<message>
<source>Hedgewars %1</source>
- <extracomment>%1 contains Hedgewars' version number</extracomment>
+ <extracomment>%1 contains Hedgewars' version number</extracomment>
<translation>Hedgewars %1</translation>
</message>
<message>
@@ -29,7 +31,7 @@
</message>
<message>
<source>Dependency versions:</source>
- <extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
+ <extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
<translation>Tionndaidhean na eisimeileachdan:</translation>
</message>
<message>
@@ -76,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -201,7 +246,12 @@
</message>
<message numerus="yes">
<source>Every %1 turn</source>
- <translation><numerusform>Gach %1d cuairt</numerusform><numerusform>Gach %1a cuairt</numerusform><numerusform>Gach %1mh cuairt</numerusform><numerusform>Gach %1mh cuairt</numerusform></translation>
+ <translation>
+ <numerusform>Gach %1d cuairt</numerusform>
+ <numerusform>Gach %1a cuairt</numerusform>
+ <numerusform>Gach %1mh cuairt</numerusform>
+ <numerusform>Gach %1mh cuairt</numerusform>
+ </translation>
</message>
</context>
<context>
@@ -230,10 +280,6 @@
<context>
<name>GameSchemeModel</name>
<message>
- <source>new</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>New</source>
<translation>Ùr</translation>
</message>
@@ -261,23 +307,48 @@
<name>HWApplication</name>
<message numerus="yes">
<source>%1 minutes</source>
- <translation><numerusform>%1 mhionaid</numerusform><numerusform>%1 mhionaid</numerusform><numerusform>%1 mionaidean</numerusform><numerusform>%1 mionaid</numerusform></translation>
+ <translation>
+ <numerusform>%1 mhionaid</numerusform>
+ <numerusform>%1 mhionaid</numerusform>
+ <numerusform>%1 mionaidean</numerusform>
+ <numerusform>%1 mionaid</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>%1 hour</source>
- <translation><numerusform>%1 uair</numerusform><numerusform>%1 uair</numerusform><numerusform>%1 uairean</numerusform><numerusform>%1 uair</numerusform></translation>
+ <translation>
+ <numerusform>%1 uair</numerusform>
+ <numerusform>%1 uair</numerusform>
+ <numerusform>%1 uairean</numerusform>
+ <numerusform>%1 uair</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>%1 hours</source>
- <translation><numerusform>%1 uair</numerusform><numerusform>%1 uair</numerusform><numerusform>%1 uairean</numerusform><numerusform>%1 uair</numerusform></translation>
+ <translation>
+ <numerusform>%1 uair</numerusform>
+ <numerusform>%1 uair</numerusform>
+ <numerusform>%1 uairean</numerusform>
+ <numerusform>%1 uair</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>%1 day</source>
- <translation><numerusform>%1 latha</numerusform><numerusform>%1 latha</numerusform><numerusform>%1 làithean</numerusform><numerusform>%1 latha</numerusform></translation>
+ <translation>
+ <numerusform>%1 latha</numerusform>
+ <numerusform>%1 latha</numerusform>
+ <numerusform>%1 làithean</numerusform>
+ <numerusform>%1 latha</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>%1 days</source>
- <translation><numerusform>%1 latha</numerusform><numerusform>%1 latha</numerusform><numerusform>%1 làithean</numerusform><numerusform>%1 latha</numerusform></translation>
+ <translation>
+ <numerusform>%1 latha</numerusform>
+ <numerusform>%1 latha</numerusform>
+ <numerusform>%1 làithean</numerusform>
+ <numerusform>%1 latha</numerusform>
+ </translation>
</message>
<message>
<source>Scheme '%1' not supported</source>
@@ -300,21 +371,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Cleachdadh</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>ROGHAINN</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>TEACSACEANGLAIDH</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Roghainnean</translation>
</message>
<message>
@@ -481,7 +556,7 @@
<translation>Hedgewars – Far-ainm clàraichte</translation>
</message>
<message>
- <source>This nick is registered, and you haven't specified a password.
+ <source>This nick is registered, and you haven't specified a password.
If this nick isn’t yours, please register your own nick at www.hedgewars.org
@@ -562,9 +637,9 @@
<translation>Sgioba %1</translation>
</message>
<message>
- <source>This nick is registered, and you haven't specified a password.
+ <source>This nick is registered, and you haven't specified a password.
-If this nick isn't yours, please register your own nick at www.hedgewars.org
+If this nick isn't yours, please register your own nick at www.hedgewars.org
Password:</source>
<translation>Tha am far-ainm seo clàraichte ’s cha chuir thu facal-faire a-steach.
@@ -607,7 +682,7 @@
We are very sorry for the inconvenience :(
-If this keeps happening, please click the '%1' button in the main menu!
+If this keeps happening, please click the '%1' button in the main menu!
Last two engine messages:
%2</source>
@@ -625,7 +700,7 @@
We are very sorry for the inconvenience. :-(
-If this keeps happening, please click the 'Feedback' button in the main menu!
+If this keeps happening, please click the 'Feedback' button in the main menu!
Last engine message:
%1</source>
@@ -829,6 +904,10 @@
<source>Click to edit</source>
<translation>Briog gus a dheasachadh</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -874,10 +953,6 @@
<translation>Thàinig %1 *** %2 a-steach dhan t-seòmar</translation>
</message>
<message>
- <source>%1 *** %2 has joined</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>%1 *** %2 has left (%3)</source>
<translation>Dh’fhalbh %1 *** %2 (%3)</translation>
</message>
@@ -937,7 +1012,7 @@
<message>
<source>To connect to the server, please log in.
-If you don't have an account on www.hedgewars.org,
+If you don't have an account on www.hedgewars.org,
just enter your nickname.</source>
<translation>Clàraich a-steach gus ceangal ris an fhrithealaiche.
@@ -995,13 +1070,6 @@
</message>
</context>
<context>
- <name>KB</name>
- <message>
- <source>SDL_ttf returned error while rendering text, most propably it is related to the bug in freetype2. It's recommended to update your freetype lib.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>KeyBinder</name>
<message>
<source>Category</source>
@@ -1073,7 +1141,12 @@
</message>
<message numerus="yes">
<source>%1 seconds</source>
- <translation><numerusform>%1 diog</numerusform><numerusform>%1 dhiog</numerusform><numerusform>%1 diogan</numerusform><numerusform>%1 diog</numerusform></translation>
+ <translation>
+ <numerusform>%1 diog</numerusform>
+ <numerusform>%1 dhiog</numerusform>
+ <numerusform>%1 diogan</numerusform>
+ <numerusform>%1 diog</numerusform>
+ </translation>
</message>
</context>
<context>
@@ -1360,32 +1433,67 @@
</message>
<message numerus="yes">
<source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source>
- <translation><numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> phuing.</numerusform><numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> phuing.</numerusform><numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> puingean.</numerusform><numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> puing.</numerusform></translation>
+ <translation>
+ <numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> phuing.</numerusform>
+ <numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> phuing.</numerusform>
+ <numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> puingean.</numerusform>
+ <numerusform>Bhuannaich <b>%1</b> duais an losgaidh as fhearr le <b>%2</b> puing.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source>
- <translation><numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> mharbhadh ann an cuairt.</numerusform><numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> mharbhadh ann an cuairt.</numerusform><numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> marbhaidhean ann an cuairt.</numerusform><numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> marbhadh ann an cuairt.</numerusform></translation>
+ <translation>
+ <numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> mharbhadh ann an cuairt.</numerusform>
+ <numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> mharbhadh ann an cuairt.</numerusform>
+ <numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> marbhaidhean ann an cuairt.</numerusform>
+ <numerusform>Is <b>%1</b> am marbhaiche as fhearr le <b>%2</b> marbhadh ann an cuairt.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source>
- <translation><numerusform>Chaidh <b>%1</b> ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh <b>%1</b> ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh <b>%1</b> gràineagan a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh <b>%1</b> gràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform></translation>
+ <translation>
+ <numerusform>Chaidh <b>%1</b> ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform>
+ <numerusform>Chaidh <b>%1</b> ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform>
+ <numerusform>Chaidh <b>%1</b> gràineagan a mharbhadh uile gu lèir sa chuairt seo.</numerusform>
+ <numerusform>Chaidh <b>%1</b> gràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source>(%1 kill)</source>
<extracomment>Number of kills in stats screen, written after the team name</extracomment>
- <translation><numerusform>(%1 mharbhadh)</numerusform><numerusform>(%1 mharbhadh)</numerusform><numerusform>(%1 marbhaidhean)</numerusform><numerusform>(%1 marbhadh)</numerusform></translation>
+ <translation>
+ <numerusform>(%1 mharbhadh)</numerusform>
+ <numerusform>(%1 mharbhadh)</numerusform>
+ <numerusform>(%1 marbhaidhean)</numerusform>
+ <numerusform>(%1 marbhadh)</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source><b>%1</b> thought it's good to shoot his own hedgehogs with <b>%2</b> pts.</source>
- <translation type="vanished"><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> phuing.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> phuing.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> puingean.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> puing.</numerusform></translation>
+ <translation type="vanished">
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> phuing.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> phuing.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> puingean.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh le <b>%2</b> puing.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source><b>%1</b> killed <b>%2</b> of his own hedgehogs.</source>
- <translation type="vanished"><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform></translation>
+ <translation type="vanished">
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aige fhèin.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source>
- <translation><numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> turas.</numerusform><numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> thuras.</numerusform><numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> tursan.</numerusform><numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> turas.</numerusform></translation>
+ <translation>
+ <numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> turas.</numerusform>
+ <numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> thuras.</numerusform>
+ <numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> tursan.</numerusform>
+ <numerusform>Thàinig an t-eagal air <b>%1</b> agus leig e seachad a chuairt <b>%2</b> turas.</numerusform>
+ </translation>
</message>
<message>
<source>Play again</source>
@@ -1398,15 +1506,30 @@
<message numerus="yes">
<source>(%1 %2)</source>
<extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
- <translation><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform></translation>
+ <translation>
+ <numerusform>(%1 %2)</numerusform>
+ <numerusform>(%1 %2)</numerusform>
+ <numerusform>(%1 %2)</numerusform>
+ <numerusform>(%1 %2)</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source>
- <translation><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> phuing.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> phuing.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> puingean.</numerusform><numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> puing.</numerusform></translation>
+ <translation>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> phuing.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> phuing.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> puingean.</numerusform>
+ <numerusform>Bha <b>%1</b> dhen bheachd gum b’ fheairrde e na gràineagan aige fhèin a mharbhadh airson <b>%2</b> puing.</numerusform>
+ </translation>
</message>
<message numerus="yes">
<source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source>
- <translation><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform><numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform></translation>
+ <translation>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform>
+ <numerusform>Mharbh <b>%1</b> <b>%2</b> dhe na gràineagan aca fhèin.</numerusform>
+ </translation>
</message>
<message>
<source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
@@ -1506,12 +1629,27 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Tòisich frithealaiche prìobhaideach</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
- <source>Control</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Edit game preferences</source>
<translation>Deasaich roghainnean a’ gheama</translation>
</message>
@@ -1727,6 +1865,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>THA AINM CÀNAIN A DHÌTH [%1]</translation>
</message>
<message>
@@ -1777,24 +1916,17 @@
<context>
<name>PageRoomsList</name>
<message>
- <source>Create</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Join</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Admin features</source>
<translation>Rianachd</translation>
</message>
- <message>
- <source>Room Name:</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%1 players online</source>
- <translation><numerusform>%1 chluicheadair air loidhne</numerusform><numerusform>%1 chluicheadair air loidhne</numerusform><numerusform>%1 cluicheadairean air loidhne</numerusform><numerusform>%1 cluicheadair air loidhne</numerusform></translation>
+ <translation>
+ <numerusform>%1 chluicheadair air loidhne</numerusform>
+ <numerusform>%1 chluicheadair air loidhne</numerusform>
+ <numerusform>%1 cluicheadairean air loidhne</numerusform>
+ <numerusform>%1 cluicheadair air loidhne</numerusform>
+ </translation>
</message>
<message>
<source>Search for a room:</source>
@@ -1820,14 +1952,6 @@
<context>
<name>PageScheme</name>
<message>
- <source>Defend your fort and destroy the opponents, two team colours max!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Teams will start on opposite sides of the terrain, two team colours max!</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Land can not be destroyed!</source>
<translation type="vanished">Cha ghabh an talamh a mhilleadh!</translation>
</message>
@@ -1953,6 +2077,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Dochainn coitcheann agus bualadh air ais ann an ceudad</translation>
</message>
<message>
@@ -2075,7 +2200,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Cuir gleus air na sgilean agad le miseanan trèanaidh</translation>
+ <translation type="vanished">Cuir gleus air na sgilean agad le miseanan trèanaidh</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2085,6 +2210,10 @@
<source>Load a previously saved game</source>
<translation>Luchdaich geama air a shàbhaladh</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2124,6 +2253,10 @@
<source>Scenarios</source>
<translation>Cnàmh-sgeulan</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Sgioba</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2137,7 +2270,12 @@
</message>
<message numerus="yes">
<source>%1 bytes</source>
- <translation><numerusform>%1 bhaidht</numerusform><numerusform>%1 bhaidht</numerusform><numerusform>%1 baidhtichean</numerusform><numerusform>%1 baidht</numerusform></translation>
+ <translation>
+ <numerusform>%1 bhaidht</numerusform>
+ <numerusform>%1 bhaidht</numerusform>
+ <numerusform>%1 baidhtichean</numerusform>
+ <numerusform>%1 baidht</numerusform>
+ </translation>
</message>
<message>
<source>(in progress...)</source>
@@ -2218,10 +2356,6 @@
<translation>Thoir air falbh o na caraidean</translation>
</message>
<message>
- <source>Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Restrict Unregistered Players Join</source>
<translation>Cuingich cluicheadairean gun chlàradh</translation>
</message>
@@ -2377,10 +2511,6 @@
<translation>Daonna</translation>
</message>
<message>
- <source>Level</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>(System default)</source>
<translation>(Bun-roghainn an t-siostaim)</translation>
</message>
@@ -2527,10 +2657,6 @@
<translation>Mèinnean</translation>
</message>
<message>
- <source>Version</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Weapons</source>
<translation>Airm</translation>
</message>
@@ -2595,10 +2721,6 @@
<translation>Ainm</translation>
</message>
<message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Grave</source>
<translation>Uaigh</translation>
</message>
@@ -2615,10 +2737,6 @@
<translation>Cànan</translation>
</message>
<message>
- <source>Explosives</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Quality</source>
<translation>Càileachd</translation>
</message>
@@ -2772,6 +2890,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% ùine cùlachaidh</translation>
</message>
<message>
@@ -2881,14 +3000,6 @@
<translation>Chaidh gach co-cheangal faidhle a shuidheachadh</translation>
</message>
<message>
- <source>Cannot create directory %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start the server: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Video upload - Error</source>
<translation type="vanished">Luchdadh suas video – Mearachd</translation>
</message>
@@ -2960,7 +3071,12 @@
</message>
<message numerus="yes">
<source>Do you really want to remove %1 file(s)?</source>
- <translation><numerusform>A bheil thu airson %1 fhaidhle a thoirt air falbh dha-rìribh?</numerusform><numerusform>A bheil thu airson an %1 fhaidhle a thoirt air falbh dha-rìribh?</numerusform><numerusform>A bheil thu airson na %1 faidhlichean a thoirt air falbh dha-rìribh?</numerusform><numerusform>A bheil thu airson am %1 faidhle a thoirt air falbh dha-rìribh?</numerusform></translation>
+ <translation>
+ <numerusform>A bheil thu airson %1 fhaidhle a thoirt air falbh dha-rìribh?</numerusform>
+ <numerusform>A bheil thu airson an %1 fhaidhle a thoirt air falbh dha-rìribh?</numerusform>
+ <numerusform>A bheil thu airson na %1 faidhlichean a thoirt air falbh dha-rìribh?</numerusform>
+ <numerusform>A bheil thu airson am %1 faidhle a thoirt air falbh dha-rìribh?</numerusform>
+ </translation>
</message>
<message>
<source>Do you really want to cancel uploading %1?</source>
@@ -3041,7 +3157,7 @@
Chan eil a h-uile cluicheadair ullamh.</translation>
</message>
<message>
- <source>Sorry, Hedgewars can't be played with more than 48 hedgehogs. Please try again with fewer hedgehogs.
+ <source>Sorry, Hedgewars can't be played with more than 48 hedgehogs. Please try again with fewer hedgehogs.
Current number of hedgehogs: %1</source>
<translation type="vanished">Tha sinn duilich ach chan urrainn dhut Hedgewars a chluiche le corr is 48 gràineag. Feuch ris a-rithist le nas lugha a grhàineagan.
@@ -3136,17 +3252,13 @@
</message>
<message>
<source>Specify</source>
- <translation>Sònraich</translation>
+ <translation type="vanished">Sònraich</translation>
</message>
<message>
<source>Start</source>
<translation>Tòisich</translation>
</message>
<message>
- <source>Go!</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Play demo</source>
<translation>Cluich demo</translation>
</message>
@@ -3234,6 +3346,10 @@
<source>Upload this video to your YouTube account</source>
<translation type="vanished">Luchdaich suas a’ video seo dhan chunntas YouTube agad</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3365,10 +3481,6 @@
<translation>Dàlaichean</translation>
</message>
<message>
- <source>new</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>New</source>
<translation>Ùr</translation>
</message>
@@ -3473,10 +3585,6 @@
<translation>dèan suids</translation>
</message>
<message>
- <source>find hedgehog</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>ammo menu</source>
<translation>clàr-taice a’ chonnaidh</translation>
</message>
@@ -3692,10 +3800,6 @@
<translation>Suidhich an tìmear air boma no arm eile le tìmear:</translation>
</message>
<message>
- <source>Move the camera to the active hog:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Move the cursor or camera without using the mouse:</source>
<translation>Gluais an cùrsair no an camara gun a bhith a’ cleachdadh na luchaige:</translation>
</message>
@@ -4091,6 +4195,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Airm</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafaigeachd</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Coitcheann</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Dùin</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Ceòl</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4286,7 +4853,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Àitheantan callvote a tha ri am faighinn: kick <far-ainm>, map <ainm>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Àitheantan callvote a tha ri am faighinn: kick <far-ainm>, map <ainm>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4630,7 +5197,7 @@
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>Chaidh an staid “Buill clàraichte a-mhàin” a thoglachadh.</translation>
+ <translation type="vanished">Chaidh an staid “Buill clàraichte a-mhàin” a thoglachadh.</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4696,5 +5263,21 @@
<source>This command is only available in rooms.</source>
<translation>Chan eil an àithne seo ri fhaighinn ach ann an seòmar.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
-</TS>
\ No newline at end of file
+</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_gl.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -309,21 +352,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -778,6 +825,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1431,6 +1482,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1657,6 +1727,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1889,6 +1960,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2010,10 +2082,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2021,6 +2089,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2060,6 +2132,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2660,6 +2736,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2971,7 +3048,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Especificar</translation>
+ <translation type="vanished">Especificar</translation>
</message>
<message>
<source>Start</source>
@@ -3053,6 +3130,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3896,6 +3977,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Armamento</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Xeral</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3966,10 +4510,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4262,10 +4802,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4329,5 +4865,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -303,21 +346,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -772,6 +819,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1416,6 +1467,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1642,6 +1712,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1873,6 +1944,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1994,10 +2066,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2005,6 +2073,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2044,6 +2116,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2651,6 +2727,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2961,7 +3038,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Specifikálás</translation>
+ <translation type="vanished">Specifikálás</translation>
</message>
<message>
<source>Start</source>
@@ -3043,6 +3120,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3886,6 +3967,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Fegyverek</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Általános</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3956,10 +4500,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4252,10 +4792,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4319,5 +4855,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -324,21 +367,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Utilizzo</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>OPTION</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>CONNECTSTRING</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Opzioni</translation>
</message>
<message>
@@ -830,6 +877,10 @@
<source>Click to edit</source>
<translation>Clicca per modificare</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1520,6 +1571,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Avvia un server privato</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1742,6 +1812,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1958,6 +2029,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Danni complessivi e perdite in percentuale</translation>
</message>
<message>
@@ -2080,7 +2152,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Metti alla prova le tue capacità in una vasta gamma di missioni di addestramento</translation>
+ <translation type="vanished">Metti alla prova le tue capacità in una vasta gamma di missioni di addestramento</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2090,6 +2162,10 @@
<source>Load a previously saved game</source>
<translation>Carica un gioco salvato in precedenza</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2133,6 +2209,10 @@
<source>Scenarios</source>
<translation>Scenari</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Squadra</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2791,6 +2871,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% Tempo di ritirata</translation>
</message>
<message>
@@ -3142,7 +3223,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Specifica</translation>
+ <translation type="vanished">Specifica</translation>
</message>
<message>
<source>Start</source>
@@ -3232,6 +3313,10 @@
<source>Start private server</source>
<translation>Avvia un server privato</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4081,6 +4166,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Armi</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafica</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Generale</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Forti</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Musica</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Not room master</source>
@@ -4280,7 +4828,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Comandi callvote disponibili: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Comandi callvote disponibili: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4595,10 +5143,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4662,5 +5206,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -302,21 +345,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>利用説明</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>設定</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>接続列</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>設定</translation>
</message>
<message>
@@ -789,6 +836,10 @@
<source>Click to edit</source>
<translation>編集</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1435,6 +1486,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">私用のサーバーを起動する</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1653,6 +1723,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>「%1」言語が欠けています</translation>
</message>
<message>
@@ -1857,6 +1928,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>総体的なダメージとノックバックの百分率。</translation>
</message>
<message>
@@ -1979,7 +2051,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>トレーニング任務の数々で技を磨く</translation>
+ <translation type="vanished">トレーニング任務の数々で技を磨く</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -1989,6 +2061,10 @@
<source>Load a previously saved game</source>
<translation>セーブから続ける</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2028,6 +2104,10 @@
<source>Scenarios</source>
<translation>シナリオ</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">チーム</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2615,6 +2695,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>後退時間(%)</translation>
</message>
<message>
@@ -2927,7 +3008,7 @@
</message>
<message>
<source>Specify</source>
- <translation>指定</translation>
+ <translation type="vanished">指定</translation>
</message>
<message>
<source>Start</source>
@@ -3005,6 +3086,10 @@
<source>Start private server</source>
<translation>私用のサーバーを起動する</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3837,6 +3922,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">武器</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">グラフィック</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">一般</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">要塞</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">音楽</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3912,7 +4460,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>使用可能なcallvote指令:kick <ニックネーム>, map <マップ名>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">使用可能なcallvote指令:kick <ニックネーム>, map <マップ名>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>The game can't be started with less than two clans!</source>
@@ -4072,7 +4620,7 @@
</message>
<message>
<source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
- <translation>/rnd <選択肢1> <選択肢2> 。。。:選択肢のうちの一つをランダムに出力する</translation>
+ <translation>/rnd <選択肢1> <選択肢2> 。。。:選択肢のうちの一つをランダムに出力する</translation>
</message>
<message>
<source>/watch <id>: Watch a demo stored on the server with the given ID</source>
@@ -4088,7 +4636,7 @@
</message>
<message>
<source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
- <translation>/vote <投票>:賛成「yes」か反対「no」で投票する</translation>
+ <translation>/vote <投票>:賛成「yes」か反対「no」で投票する</translation>
</message>
<message>
<source>/delegate <player>: Surrender room control to player</source>
@@ -4096,11 +4644,11 @@
</message>
<message>
<source>/maxteams <N>: Limit maximum number of teams to N</source>
- <translation>/maxteams <数>:最大のチーム数を指定する</translation>
+ <translation>/maxteams <数>:最大のチーム数を指定する</translation>
</message>
<message>
<source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
- <translation>/global <メッセージ>:グロリアチャットにメッセージを送る</translation>
+ <translation>/global <メッセージ>:グロリアチャットにメッセージを送る</translation>
</message>
<message>
<source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
@@ -4116,7 +4664,7 @@
</message>
<message>
<source>/force <yes/no>: Force vote result for active vote</source>
- <translation>/force <投票>:投票結果を強制的に賛成「yes」か反対「no」かにする</translation>
+ <translation>/force <投票>:投票結果を強制的に賛成「yes」か反対「no」かにする</translation>
</message>
<message>
<source>/fix: Force this room to stay open when it is empty</source>
@@ -4188,11 +4736,11 @@
</message>
<message>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
- <translation>/greeting <メッセージ>:歓迎メッセージを指定する</translation>
+ <translation>/greeting <メッセージ>:歓迎メッセージを指定する</translation>
</message>
<message>
<source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation>/save <コンフィグID> <コンフィグ名>:現在のルームコンフィグを「/callvote map」で投票できるようにします</translation>
+ <translation>/save <コンフィグID> <コンフィグ名>:現在のルームコンフィグを「/callvote map」で投票できるようにします</translation>
</message>
<message>
<source>/delete <config ID>: Delete a votable room configuration</source>
@@ -4200,15 +4748,15 @@
</message>
<message>
<source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
- <translation>/saveroom <ファイル名>:投票できるルームコンフィグを指定されたファイルに保存する</translation>
+ <translation>/saveroom <ファイル名>:投票できるルームコンフィグを指定されたファイルに保存する</translation>
</message>
<message>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
- <translation>/loadroom <ファイル名>:投票できるルームコンフィグを指定されたファイルから読み込む</translation>
+ <translation>/loadroom <ファイル名>:投票できるルームコンフィグを指定されたファイルから読み込む</translation>
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>登録専用状態が切り替えられました。</translation>
+ <translation type="vanished">登録専用状態が切り替えられました。</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4274,5 +4822,21 @@
<source>This command is only available in rooms.</source>
<translation>このコマンドはルーム専用です</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -299,21 +342,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -768,6 +815,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1393,6 +1444,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1615,6 +1685,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1810,6 +1881,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1931,10 +2003,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -1942,6 +2010,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -1981,6 +2053,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2568,6 +2644,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2861,10 +2938,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Specify</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -2940,6 +3013,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3727,6 +3804,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3797,10 +4337,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4093,10 +4629,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4160,5 +4692,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts Mon Jan 14 12:35:32 2019 -0500
@@ -4,95 +4,148 @@
<context>
<name>About</name>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="92"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="171"/>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="181"/>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="202"/>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="208"/>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="217"/>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="265"/>
<source>Hedgewars %1</source>
<extracomment>%1 contains Hedgewars' version number</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="267"/>
<source>Revision %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="269"/>
<source>Visit our homepage: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="83"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="272"/>
<source>This program is distributed under the %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="86"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="275"/>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="304"/>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="305"/>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="314"/>
<source>Dependency versions:</source>
<extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="317"/>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="319"/>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="321"/>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="323"/>
<source>Unknown Compiler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="331"/>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="338"/>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="135"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="352"/>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="150"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="367"/>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="382"/>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="392"/>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="179"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="396"/>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="184"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="401"/>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="189"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="406"/>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="196"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="413"/>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
@@ -277,22 +330,22 @@
<context>
<name>GameSchemeModel</name>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="924"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="974"/>
<source>New</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="929"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="979"/>
<source>New (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="938"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="988"/>
<source>Copy of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="943"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="993"/>
<source>Copy of %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -368,68 +421,72 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="172"/>
<source>Usage</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="154"/>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="175"/>
<source>OPTION</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="155"/>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="178"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="156"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="181"/>
<source>Options</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="157"/>
+ <extracomment>“Options” as in “command-line options”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="182"/>
<source>Display this help</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="158"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="183"/>
<source>Custom path for configuration data and user data</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="159"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="184"/>
<source>Custom path to the game data folder</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>Hedgewars can use a %1 (e.g. "%2") to connect on start.</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="205"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="443"/>
<source>Malformed option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="245"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="452"/>
<source>Unknown option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="337"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="382"/>
<source>Failed to open data directory:
%1
@@ -531,64 +588,64 @@
<context>
<name>HWForm</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="738"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="746"/>
<source>Game aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>No nickname supplied.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Someone already uses your nickname %1 on the server.
Please pick another nickname:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="170"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="519"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1507"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1526"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="171"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="524"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1520"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="527"/>
- <source>Team 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/hwform.cpp" line="532"/>
+ <source>Team 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="537"/>
<source>%1's Team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="551"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="556"/>
<source>Team %1</source>
<extracomment>Default team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="562"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="567"/>
<source>Computer %1</source>
<extracomment>Default computer team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1199"/>
<source>Hedgewars - Nick registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1200"/>
<source>This nick is registered, and you haven't specified a password.
If this nick isn't yours, please register your own nick at www.hedgewars.org
@@ -597,102 +654,102 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1215"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1228"/>
<source>Your nickname is not registered.
To prevent someone else from using it,
please register it at www.hedgewars.org</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1220"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1233"/>
<source>
Your password wasn't saved either.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>Hedgewars - Empty nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>Hedgewars - Wrong password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>You entered a wrong password.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>Room password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>The room is protected with password.
Please, enter the password:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1292"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1305"/>
<source>Try Again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>Hedgewars - Connection error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>You reconnected too fast.
Please wait a few seconds and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1830"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2216"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1844"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2275"/>
<source>Cannot save record to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2146"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2205"/>
<source>Hedgewars Demo File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2147"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
<source>Hedgewars Save File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2341"/>
<source>Unknown network error (possibly missing SSL library).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2286"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2345"/>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2291"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2350"/>
<source>Internal error: Reply object is invalid.</source>
<translation type="unfinished"></translation>
</message>
@@ -700,7 +757,7 @@
<context>
<name>HWGame</name>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="258"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="274"/>
<source>A fatal ERROR occured! The game engine had to stop.
We are very sorry for the inconvenience. :-(
@@ -712,14 +769,14 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="404"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="428"/>
<location filename="../../../../QTfrontend/net/recorder.cpp" line="114"/>
<source>en.txt</source>
<extracomment>IMPORTANT: This text has a special meaning, do not translate it directly. This is the file name of translation files for the game engine, found in Data/Locale/. Usually, you replace “en” with the ISO-639-1 language code of your language.</extracomment>
<translation>lt.txt</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="457"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="481"/>
<source>Cannot open demofile %1</source>
<translation type="unfinished"></translation>
</message>
@@ -895,53 +952,58 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="939"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="924"/>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="940"/>
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="971"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="973"/>
<source>Map size:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="978"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="980"/>
<source>Maze style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="985"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="987"/>
<source>Style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1000"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1002"/>
<source>Mission:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1020"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1022"/>
<source>Map:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1121"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1313"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1124"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1316"/>
<source>Theme: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Load drawn map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Drawn Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
@@ -1000,17 +1062,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="587"/>
<source>Server authentication error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="809"/>
<source>Room destroyed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="566"/>
<source>You got kicked</source>
<translation type="unfinished"></translation>
</message>
@@ -1030,23 +1092,23 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="752"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="884"/>
<source>%1 *** %2 has joined the room</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="899"/>
<source>%1 *** %2 has left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="895"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
<source>%1 *** %2 has left (%3)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>Reason:</source>
<translation type="unfinished"></translation>
</message>
@@ -1741,6 +1803,29 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="50"/>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="60"/>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="66"/>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="77"/>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="52"/>
@@ -1916,7 +2001,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="283"/>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="806"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="807"/>
<source>x</source>
<extracomment>Multiplication sign, to be used between two numbers. Note the “x” is only a dummy character, we recommend to use “×” if your language permits it</extracomment>
<translation type="unfinished"></translation>
@@ -2002,37 +2087,38 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="667"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="668"/>
<source>MISSING LANGUAGE NAME [%1]</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="699"/>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="700"/>
<source>Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="712"/>
- <source>Check for updates</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="713"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="714"/>
<source>Check now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="726"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="727"/>
<source>Video recording options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>Can't delete last team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>You can't delete the last team!</source>
<translation type="unfinished"></translation>
</message>
@@ -2235,137 +2321,138 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
<source>Overall damage and knockback in percent</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
- <source>Turn time in seconds</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="177"/>
- <source>Initial health of hedgehogs</source>
+ <source>Turn time in seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="178"/>
- <source>How many rounds have to be played before Sudden Death begins</source>
+ <source>Initial health of hedgehogs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="179"/>
- <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
+ <source>How many rounds have to be played before Sudden Death begins</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="180"/>
- <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
+ <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="181"/>
- <source>Maximum rope length in percent</source>
+ <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="182"/>
- <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
+ <source>Maximum rope length in percent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="183"/>
- <source>Likelihood of a crate dropping before a turn</source>
+ <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="184"/>
- <source>Health bonus for collecting a health crate</source>
+ <source>Likelihood of a crate dropping before a turn</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="185"/>
- <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
+ <source>Health bonus for collecting a health crate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="186"/>
- <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="187"/>
- <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
+ <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="188"/>
- <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="189"/>
- <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="190"/>
- <source>Affects the left and right boundaries of the map</source>
+ <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="191"/>
- <source>Time you get after an attack</source>
+ <source>Affects the left and right boundaries of the map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="192"/>
+ <source>Time you get after an attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="193"/>
<source>Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="490"/>
- <source>None (Default)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="491"/>
- <source>Wrap (World wraps)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="492"/>
- <source>Bounce (Edges reflect)</source>
+ <source>None (Default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="493"/>
+ <source>Wrap (World wraps)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="494"/>
+ <source>Bounce (Edges reflect)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="495"/>
<source>Sea (Edges connect to sea)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="518"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="520"/>
<source>Name of this scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="533"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="534"/>
- <source>New</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="535"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="536"/>
+ <source>New</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="537"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="699"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="702"/>
<source>%1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -2412,7 +2499,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="51"/>
- <source>Practice your skills in a range of training missions</source>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2429,48 +2516,53 @@
<context>
<name>PageTraining</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="91"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="96"/>
<source>Pick the training to play</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="94"/>
- <source>Pick the challenge to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="97"/>
- <source>Pick the scenario to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="99"/>
+ <source>Pick the challenge to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="102"/>
+ <source>Pick the scenario to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="104"/>
<source>Trainings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="100"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="105"/>
<source>Challenges</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="106"/>
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="116"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="315"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="109"/>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="127"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
<source>Start fighting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="324"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="341"/>
<source>No description available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="349"/>
<source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
@@ -2720,17 +2812,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="684"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
<source>Append date and time to record file name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="686"/>
<source>If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="706"/>
<source>Check for updates at startup</source>
<translation type="unfinished"></translation>
</message>
@@ -2751,12 +2843,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="768"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="769"/>
<source>Record audio</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="818"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="819"/>
<source>Use game resolution</source>
<translation type="unfinished"></translation>
</message>
@@ -2834,27 +2926,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="828"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
<source>24 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
- <source>25 FPS</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="830"/>
- <source>30 FPS</source>
+ <source>25 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="831"/>
- <source>50 FPS</source>
+ <source>30 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="832"/>
+ <source>50 FPS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="833"/>
<source>60 FPS</source>
<translation type="unfinished"></translation>
</message>
@@ -3026,17 +3118,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="673"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="674"/>
<source>This setting will be effective at next restart.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="794"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="795"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="839"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="840"/>
<source>Bitrate (Kibit/s)</source>
<extracomment>“Kibit/s” is the symbol for 1024 bits per second</extracomment>
<translation type="unfinished"></translation>
@@ -3077,97 +3169,98 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="195"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="196"/>
<source>Damage Modifier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="212"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="213"/>
<source>Turn Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="229"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="230"/>
<source>Initial Health</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="246"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="247"/>
<source>Sudden Death Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="275"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="276"/>
<source>Sudden Death Water Rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="292"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="293"/>
<source>Sudden Death Health Decrease</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="309"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="310"/>
<source>% Rope Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="326"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="327"/>
<source>Crate Drops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="342"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="343"/>
<source>% Health Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="359"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="360"/>
<source>Health in Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="376"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="377"/>
<source>Mines Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="393"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="394"/>
<source>Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="410"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="411"/>
<source>% Dud Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="427"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="428"/>
<source>Barrels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="461"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="463"/>
<source>% Retreat Time</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="444"/>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="445"/>
<source>Air Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="478"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="480"/>
<source>World Edge</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="499"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="501"/>
<source>Script parameter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="515"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="517"/>
<source>Scheme Name:</source>
<translation type="unfinished"></translation>
</message>
@@ -3209,22 +3302,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="735"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="736"/>
<source>Format</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="756"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="757"/>
<source>Audio codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="782"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="783"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="824"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="825"/>
<source>Framerate</source>
<translation type="unfinished"></translation>
</message>
@@ -3232,12 +3325,12 @@
<context>
<name>QLineEdit</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1054"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1067"/>
<source>unnamed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1060"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1073"/>
<source>unnamed (%1)</source>
<translation type="unfinished"></translation>
</message>
@@ -3252,7 +3345,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/team.cpp" line="44"/>
+ <location filename="../../../../QTfrontend/team.cpp" line="45"/>
<source>Hedgehog %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3288,38 +3381,38 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1092"/>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="643"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="646"/>
<source>Cannot delete default scheme '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1118"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1131"/>
<source>Please select a record from the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1213"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1226"/>
<source>Hedgewars - Nick not registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1623"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1636"/>
<source>Unable to start server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>The connection to the server is lost.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2299"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2358"/>
<source>Not all players are ready</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2300"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2359"/>
<source>Are you sure you want to start this game?
Not all players are ready.</source>
<translation type="unfinished"></translation>
@@ -3352,18 +3445,18 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2245"/>
<location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
<source>Hedgewars - Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2246"/>
<source>All file associations have been set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2192"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2251"/>
<source>File association failed.</source>
<translation type="unfinished"></translation>
</message>
@@ -3393,13 +3486,13 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="122"/>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
<source>Netgame - Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="123"/>
<source>Please select a server from the list</source>
<translation type="unfinished"></translation>
</message>
@@ -3430,27 +3523,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="642"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="645"/>
<source>Schemes - Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="651"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="654"/>
<source>Schemes - Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="652"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="655"/>
<source>Do you really want to delete the game scheme '%1'?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="712"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="715"/>
<source>Schemes - Name already taken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="713"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="716"/>
<source>A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'.</source>
<translation type="unfinished"></translation>
</message>
@@ -3477,7 +3570,7 @@
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="155"/>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="175"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1224"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1227"/>
<source>File error</source>
<translation type="unfinished"></translation>
</message>
@@ -3488,7 +3581,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="176"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1225"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1228"/>
<source>Cannot open '%1' for reading</source>
<translation type="unfinished"></translation>
</message>
@@ -3529,12 +3622,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="468"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="545"/>
<source>Welcome to Hedgewars</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="469"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="546"/>
<source>Welcome to Hedgewars!
You seem to be new around here. Would you like to play some training missions first to learn the basics of Hedgewars?</source>
@@ -3574,7 +3667,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="76"/>
<source>Start server</source>
<translation type="unfinished"></translation>
</message>
@@ -3584,13 +3677,13 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="58"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="59"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="63"/>
- <source>Specify</source>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="65"/>
+ <source>Specify address</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3616,7 +3709,7 @@
<message>
<location filename="../../../../QTfrontend/ui/page/pagecampaign.cpp" line="96"/>
<location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="115"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="126"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -3626,7 +3719,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="692"/>
<source>Associate file extensions</source>
<translation type="unfinished"></translation>
</message>
@@ -3658,12 +3751,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="853"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="854"/>
<source>Set default options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="854"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="855"/>
<source>Restore default coding parameters</source>
<translation type="unfinished"></translation>
</message>
@@ -3696,7 +3789,7 @@
<context>
<name>QSpinBox</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="847"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="848"/>
<source>Specify the bitrate of recorded videos as a multiple of 1024 bits per second</source>
<translation type="unfinished"></translation>
</message>
@@ -4672,59 +4765,627 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="2"/>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="3"/>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="4"/>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="5"/>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="6"/>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="7"/>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="8"/>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="9"/>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="10"/>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="11"/>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="12"/>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="13"/>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="14"/>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="15"/>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="16"/>
+ <source>Weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="17"/>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="18"/>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="19"/>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="20"/>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="21"/>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="22"/>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="23"/>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="24"/>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="25"/>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="26"/>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="27"/>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="28"/>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="29"/>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="30"/>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="31"/>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="32"/>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="33"/>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="34"/>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="35"/>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="36"/>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="37"/>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="38"/>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="39"/>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="40"/>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="41"/>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="42"/>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="43"/>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="44"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="45"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="46"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="47"/>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="48"/>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="49"/>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="50"/>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="51"/>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="52"/>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="53"/>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="54"/>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="55"/>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="56"/>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="57"/>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="58"/>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="59"/>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="60"/>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="61"/>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="62"/>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="63"/>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="64"/>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="65"/>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="66"/>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="67"/>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="68"/>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="69"/>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="70"/>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="71"/>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="72"/>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="73"/>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="74"/>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="75"/>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="76"/>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="77"/>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="78"/>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="79"/>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="80"/>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="81"/>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="82"/>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="83"/>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="84"/>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="85"/>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="86"/>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="87"/>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="88"/>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="89"/>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="90"/>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="91"/>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="92"/>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="93"/>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="94"/>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="95"/>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="96"/>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="97"/>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="98"/>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="99"/>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="100"/>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="101"/>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="102"/>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="103"/>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="104"/>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="105"/>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="106"/>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="107"/>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="108"/>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="109"/>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="110"/>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="111"/>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="112"/>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="113"/>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="114"/>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="115"/>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="116"/>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
- <source>New voting started</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="104"/>
- <source>kick</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
- <source>map</source>
+ <source>New voting started</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="106"/>
- <source>pause</source>
+ <source>kick</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="107"/>
+ <source>map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <source>pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
<source>new seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
<source>/maxteams: specify number from 2 to 8</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
- <source>'Registered only' state toggled.</source>
+ <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+ <source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="48"/>
- <source>Super power activated.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="862"/>
<source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="2"/>
<source>Nickname is already in use</source>
<translation type="unfinished"></translation>
@@ -4786,256 +5447,271 @@
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="14"/>
- <source>/info <player>: Show info about player</source>
+ <source>This server no longer allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="15"/>
- <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
+ <source>This server now allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="16"/>
- <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
+ <source>/info <player>: Show info about player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="17"/>
- <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+ <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="18"/>
- <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
+ <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="19"/>
- <source>/quit: Quit the server</source>
+ <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="20"/>
- <source>/help: Show chat command help</source>
+ <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="21"/>
- <source>/callvote [arguments]: Start a vote</source>
+ <source>/quit: Quit the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="22"/>
- <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
+ <source>/help: Show chat command help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <source>/callvote [arguments]: Start a vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="24"/>
- <source>/delegate <player>: Surrender room control to player</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
- <source>/maxteams <N>: Limit maximum number of teams to N</source>
+ <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="26"/>
- <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
+ <source>/delegate <player>: Surrender room control to player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="27"/>
- <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
+ <source>/maxteams <N>: Limit maximum number of teams to N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="28"/>
- <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+ <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="29"/>
- <source>/stats: Query server stats</source>
+ <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="30"/>
- <source>/force <yes/no>: Force vote result for active vote</source>
+ <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="31"/>
- <source>/fix: Force this room to stay open when it is empty</source>
+ <source>/stats: Query server stats</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+ <source>/force <yes/no>: Force vote result for active vote</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+ <source>/fix: Force this room to stay open when it is empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
<source>/unfix: Undo the /fix command</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
- <source>List of lobby chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
- <source>List of room chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="39"/>
+ <source>List of lobby chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <source>List of room chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
<source>Commands for server admins only:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<source>This command is only available in the lobby.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
- <source>room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="50"/>
- <source>lobby</source>
+ <source>room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="51"/>
- <source>(playing)</source>
+ <source>lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="52"/>
- <source>(spectating)</source>
+ <source>(playing)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="53"/>
- <source>Player is not online.</source>
+ <source>(spectating)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="54"/>
- <source>The game can't be started with less than two clans!</source>
+ <source>Player is not online.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="55"/>
- <source>Empty config entry.</source>
+ <source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="56"/>
- <source>Access denied.</source>
+ <source>Empty config entry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="57"/>
- <source>You're not the room master!</source>
+ <source>Access denied.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="58"/>
- <source>Corrupted hedgehogs info!</source>
+ <source>You're not the room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="59"/>
- <source>Too many teams!</source>
+ <source>Corrupted hedgehogs info!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="60"/>
- <source>Too many hedgehogs!</source>
+ <source>Too many teams!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="61"/>
- <source>There's already a team with same name in the list.</source>
+ <source>Too many hedgehogs!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="62"/>
- <source>Joining not possible: Round is in progress.</source>
+ <source>There's already a team with same name in the list.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="63"/>
- <source>This room currently does not allow adding new teams.</source>
+ <source>Joining not possible: Round is in progress.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="64"/>
- <source>Error: The team you tried to remove does not exist.</source>
+ <source>This room currently does not allow adding new teams.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="65"/>
- <source>You can't remove a team you don't own.</source>
+ <source>Error: The team you tried to remove does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="66"/>
- <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>You can't remove a team you don't own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="67"/>
- <source>A room with the same name already exists.</source>
+ <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="68"/>
- <source>You can't kick yourself!</source>
+ <source>A room with the same name already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="69"/>
- <source>You can't kick the only other player!</source>
+ <source>You can't kick yourself!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="70"/>
- <source>The player is not in your room.</source>
+ <source>You can't kick the only other player!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="71"/>
- <source>This player is protected from being kicked.</source>
+ <source>The player is not in your room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="72"/>
- <source>You're not the room master or a server admin!</source>
+ <source>This player is protected from being kicked.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+ <source>You're not the room master or a server admin!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
<source>You're already the room master.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
- <source>Greeting message cleared.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+ <source>Greeting message cleared.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
<source>Greeting message set.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
<source>/callvote kick: You need to specify a nickname.</source>
<translation type="unfinished"></translation>
</message>
@@ -5045,172 +5721,177 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
<source>/callvote kick: No such user!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
- <source>/callvote map: No maps available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="82"/>
- <source>/callvote map: No such map!</source>
+ <source>/callvote map: No maps available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="83"/>
- <source>/callvote pause: No game in progress!</source>
+ <source>/callvote map: No such map!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="84"/>
- <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+ <source>/callvote pause: No game in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="85"/>
- <source>/force: Please use 'yes' or 'no'.</source>
+ <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="86"/>
- <source>/vote: Please use 'yes' or 'no'.</source>
+ <source>/force: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="87"/>
- <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>/vote: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="88"/>
- <source>No such room.</source>
+ <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="89"/>
- <source>Room version incompatible to your Hedgewars version!</source>
+ <source>No such room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="90"/>
- <source>Access denied. This room currently doesn't allow joining.</source>
+ <source>Room version incompatible to your Hedgewars version!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="91"/>
- <source>Access denied. This room is for registered users only.</source>
+ <source>Access denied. This room currently doesn't allow joining.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="92"/>
- <source>You are banned from this room.</source>
+ <source>Access denied. This room is for registered users only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="93"/>
- <source>Nickname already provided.</source>
+ <source>You are banned from this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="94"/>
- <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="95"/>
- <source>Protocol already known.</source>
+ <source>Nickname already provided.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="96"/>
- <source>Bad number.</source>
+ <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="97"/>
- <source>There's no voting going on.</source>
+ <source>Protocol already known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="98"/>
- <source>You already have voted.</source>
+ <source>Bad number.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="99"/>
- <source>Your vote has been counted.</source>
+ <source>There's no voting going on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="100"/>
- <source>Voting closed.</source>
+ <source>You already have voted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="101"/>
- <source>Pause toggled.</source>
+ <source>Your vote has been counted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
+ <source>Voting closed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="103"/>
+ <source>Pause toggled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
<source>Voting expired.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="110"/>
<source>hedgehogs per team: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="111"/>
<source>You're the new room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
<source>Warning! Chat flood protection activated</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
- <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
- <source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="35"/>
- <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="36"/>
+ <source>/delete <config ID>: Delete a votable room configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
+ <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
- <source>Excess flood</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
- <source>Game messages flood detected - 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+ <source>Excess flood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <source>Game messages flood detected - 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
<source>Warning! Joins flood protection activated</source>
<translation type="unfinished"></translation>
</message>
--- a/share/hedgewars/Data/Locale/hedgewars_ms.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts Mon Jan 14 12:35:32 2019 -0500
@@ -4,95 +4,148 @@
<context>
<name>About</name>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="92"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="171"/>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="181"/>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="202"/>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="208"/>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="217"/>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="265"/>
<source>Hedgewars %1</source>
<extracomment>%1 contains Hedgewars' version number</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="267"/>
<source>Revision %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="269"/>
<source>Visit our homepage: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="83"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="272"/>
<source>This program is distributed under the %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="86"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="275"/>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="304"/>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="305"/>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="314"/>
<source>Dependency versions:</source>
<extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="317"/>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="319"/>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="321"/>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="323"/>
<source>Unknown Compiler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="331"/>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="338"/>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="135"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="352"/>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="150"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="367"/>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="382"/>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="392"/>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="179"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="396"/>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="184"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="401"/>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="189"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="406"/>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="196"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="413"/>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
@@ -275,22 +328,22 @@
<context>
<name>GameSchemeModel</name>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="924"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="974"/>
<source>New</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="929"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="979"/>
<source>New (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="938"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="988"/>
<source>Copy of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="943"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="993"/>
<source>Copy of %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -356,68 +409,72 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="172"/>
<source>Usage</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="154"/>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="175"/>
<source>OPTION</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="155"/>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="178"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="156"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="181"/>
<source>Options</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="157"/>
+ <extracomment>“Options” as in “command-line options”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="182"/>
<source>Display this help</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="158"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="183"/>
<source>Custom path for configuration data and user data</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="159"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="184"/>
<source>Custom path to the game data folder</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>Hedgewars can use a %1 (e.g. "%2") to connect on start.</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="205"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="443"/>
<source>Malformed option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="245"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="452"/>
<source>Unknown option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="337"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="382"/>
<source>Failed to open data directory:
%1
@@ -519,47 +576,47 @@
<context>
<name>HWForm</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="170"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="519"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1507"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1526"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="171"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="524"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1520"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="527"/>
- <source>Team 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/hwform.cpp" line="532"/>
+ <source>Team 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="537"/>
<source>%1's Team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="551"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="556"/>
<source>Team %1</source>
<extracomment>Default team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="562"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="567"/>
<source>Computer %1</source>
<extracomment>Default computer team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="738"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="746"/>
<source>Game aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1199"/>
<source>Hedgewars - Nick registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1200"/>
<source>This nick is registered, and you haven't specified a password.
If this nick isn't yours, please register your own nick at www.hedgewars.org
@@ -568,119 +625,119 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1215"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1228"/>
<source>Your nickname is not registered.
To prevent someone else from using it,
please register it at www.hedgewars.org</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1220"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1233"/>
<source>
Your password wasn't saved either.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Someone already uses your nickname %1 on the server.
Please pick another nickname:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>No nickname supplied.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>Hedgewars - Empty nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>Hedgewars - Wrong password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>You entered a wrong password.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>Room password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>The room is protected with password.
Please, enter the password:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1292"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1305"/>
<source>Try Again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>Hedgewars - Connection error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>You reconnected too fast.
Please wait a few seconds and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1830"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2216"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1844"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2275"/>
<source>Cannot save record to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2146"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2205"/>
<source>Hedgewars Demo File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2147"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
<source>Hedgewars Save File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2341"/>
<source>Unknown network error (possibly missing SSL library).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2286"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2345"/>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2291"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2350"/>
<source>Internal error: Reply object is invalid.</source>
<translation type="unfinished"></translation>
</message>
@@ -688,7 +745,7 @@
<context>
<name>HWGame</name>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="258"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="274"/>
<source>A fatal ERROR occured! The game engine had to stop.
We are very sorry for the inconvenience. :-(
@@ -700,14 +757,14 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="404"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="428"/>
<location filename="../../../../QTfrontend/net/recorder.cpp" line="114"/>
<source>en.txt</source>
<extracomment>IMPORTANT: This text has a special meaning, do not translate it directly. This is the file name of translation files for the game engine, found in Data/Locale/. Usually, you replace “en” with the ISO-639-1 language code of your language.</extracomment>
<translation>ms.txt</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="457"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="481"/>
<source>Cannot open demofile %1</source>
<translation type="unfinished"></translation>
</message>
@@ -883,53 +940,58 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="939"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="924"/>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="940"/>
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="971"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="973"/>
<source>Map size:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="978"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="980"/>
<source>Maze style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="985"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="987"/>
<source>Style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1000"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1002"/>
<source>Mission:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1020"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1022"/>
<source>Map:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1121"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1313"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1124"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1316"/>
<source>Theme: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Load drawn map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Drawn Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
@@ -988,28 +1050,28 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="566"/>
<source>You got kicked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="587"/>
<source>Server authentication error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="899"/>
<source>%1 *** %2 has left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="895"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
<source>%1 *** %2 has left (%3)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="752"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="884"/>
<source>%1 *** %2 has joined the room</source>
<translation type="unfinished"></translation>
</message>
@@ -1029,12 +1091,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="809"/>
<source>Room destroyed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>Reason:</source>
<translation type="unfinished"></translation>
</message>
@@ -1711,6 +1773,29 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="50"/>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="60"/>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="66"/>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="77"/>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="52"/>
@@ -1886,7 +1971,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="283"/>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="806"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="807"/>
<source>x</source>
<extracomment>Multiplication sign, to be used between two numbers. Note the “x” is only a dummy character, we recommend to use “×” if your language permits it</extracomment>
<translation type="unfinished"></translation>
@@ -1972,37 +2057,38 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="667"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="668"/>
<source>MISSING LANGUAGE NAME [%1]</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="699"/>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="700"/>
<source>Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="712"/>
- <source>Check for updates</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="713"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="714"/>
<source>Check now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="726"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="727"/>
<source>Video recording options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>Can't delete last team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>You can't delete the last team!</source>
<translation type="unfinished"></translation>
</message>
@@ -2203,137 +2289,138 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
<source>Overall damage and knockback in percent</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
- <source>Turn time in seconds</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="177"/>
- <source>Initial health of hedgehogs</source>
+ <source>Turn time in seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="178"/>
- <source>How many rounds have to be played before Sudden Death begins</source>
+ <source>Initial health of hedgehogs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="179"/>
- <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
+ <source>How many rounds have to be played before Sudden Death begins</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="180"/>
- <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
+ <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="181"/>
- <source>Maximum rope length in percent</source>
+ <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="182"/>
- <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
+ <source>Maximum rope length in percent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="183"/>
- <source>Likelihood of a crate dropping before a turn</source>
+ <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="184"/>
- <source>Health bonus for collecting a health crate</source>
+ <source>Likelihood of a crate dropping before a turn</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="185"/>
- <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
+ <source>Health bonus for collecting a health crate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="186"/>
- <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="187"/>
- <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
+ <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="188"/>
- <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="189"/>
- <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="190"/>
- <source>Affects the left and right boundaries of the map</source>
+ <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="191"/>
- <source>Time you get after an attack</source>
+ <source>Affects the left and right boundaries of the map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="192"/>
+ <source>Time you get after an attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="193"/>
<source>Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="490"/>
- <source>None (Default)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="491"/>
- <source>Wrap (World wraps)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="492"/>
- <source>Bounce (Edges reflect)</source>
+ <source>None (Default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="493"/>
+ <source>Wrap (World wraps)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="494"/>
+ <source>Bounce (Edges reflect)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="495"/>
<source>Sea (Edges connect to sea)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="518"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="520"/>
<source>Name of this scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="533"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="534"/>
- <source>New</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="535"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="536"/>
+ <source>New</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="537"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="699"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="702"/>
<source>%1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -2380,7 +2467,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="51"/>
- <source>Practice your skills in a range of training missions</source>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2397,48 +2484,53 @@
<context>
<name>PageTraining</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="91"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="96"/>
<source>Pick the training to play</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="94"/>
- <source>Pick the challenge to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="97"/>
- <source>Pick the scenario to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="99"/>
+ <source>Pick the challenge to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="102"/>
+ <source>Pick the scenario to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="104"/>
<source>Trainings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="100"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="105"/>
<source>Challenges</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="106"/>
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="116"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="315"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="109"/>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="127"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
<source>Start fighting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="324"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="341"/>
<source>No description available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="349"/>
<source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
@@ -2589,7 +2681,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="706"/>
<source>Check for updates at startup</source>
<translation type="unfinished"></translation>
</message>
@@ -2707,22 +2799,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="684"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
<source>Append date and time to record file name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="686"/>
<source>If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="768"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="769"/>
<source>Record audio</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="818"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="819"/>
<source>Use game resolution</source>
<translation type="unfinished"></translation>
</message>
@@ -2800,27 +2892,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="828"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
<source>24 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
- <source>25 FPS</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="830"/>
- <source>30 FPS</source>
+ <source>25 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="831"/>
- <source>50 FPS</source>
+ <source>30 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="832"/>
+ <source>50 FPS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="833"/>
<source>60 FPS</source>
<translation type="unfinished"></translation>
</message>
@@ -3019,17 +3111,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="673"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="674"/>
<source>This setting will be effective at next restart.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="794"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="795"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="839"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="840"/>
<source>Bitrate (Kibit/s)</source>
<extracomment>“Kibit/s” is the symbol for 1024 bits per second</extracomment>
<translation type="unfinished"></translation>
@@ -3070,117 +3162,118 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="195"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="196"/>
<source>Damage Modifier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="212"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="213"/>
<source>Turn Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="229"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="230"/>
<source>Initial Health</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="246"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="247"/>
<source>Sudden Death Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="275"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="276"/>
<source>Sudden Death Water Rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="292"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="293"/>
<source>Sudden Death Health Decrease</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="309"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="310"/>
<source>% Rope Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="326"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="327"/>
<source>Crate Drops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="342"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="343"/>
<source>% Health Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="359"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="360"/>
<source>Health in Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="376"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="377"/>
<source>Mines Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="393"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="394"/>
<source>Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="410"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="411"/>
<source>% Dud Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="427"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="428"/>
<source>Barrels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="461"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="463"/>
<source>% Retreat Time</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="444"/>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="445"/>
<source>Air Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="478"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="480"/>
<source>World Edge</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="499"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="501"/>
<source>Script parameter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="515"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="517"/>
<source>Scheme Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="735"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="736"/>
<source>Format</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="756"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="757"/>
<source>Audio codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="782"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="783"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="824"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="825"/>
<source>Framerate</source>
<translation type="unfinished"></translation>
</message>
@@ -3198,12 +3291,12 @@
<context>
<name>QLineEdit</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1054"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1067"/>
<source>unnamed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1060"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1073"/>
<source>unnamed (%1)</source>
<translation type="unfinished"></translation>
</message>
@@ -3218,7 +3311,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/team.cpp" line="44"/>
+ <location filename="../../../../QTfrontend/team.cpp" line="45"/>
<source>Hedgehog %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3254,38 +3347,38 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1092"/>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="643"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="646"/>
<source>Cannot delete default scheme '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1118"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1131"/>
<source>Please select a record from the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1213"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1226"/>
<source>Hedgewars - Nick not registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1623"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1636"/>
<source>Unable to start server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>The connection to the server is lost.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2299"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2358"/>
<source>Not all players are ready</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2300"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2359"/>
<source>Are you sure you want to start this game?
Not all players are ready.</source>
<translation type="unfinished"></translation>
@@ -3318,29 +3411,29 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2245"/>
<location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
<source>Hedgewars - Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2246"/>
<source>All file associations have been set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2192"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2251"/>
<source>File association failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="122"/>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
<source>Netgame - Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="123"/>
<source>Please select a server from the list</source>
<translation type="unfinished"></translation>
</message>
@@ -3371,27 +3464,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="642"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="645"/>
<source>Schemes - Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="651"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="654"/>
<source>Schemes - Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="652"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="655"/>
<source>Do you really want to delete the game scheme '%1'?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="712"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="715"/>
<source>Schemes - Name already taken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="713"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="716"/>
<source>A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'.</source>
<translation type="unfinished"></translation>
</message>
@@ -3416,7 +3509,7 @@
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="155"/>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="175"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1224"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1227"/>
<source>File error</source>
<translation type="unfinished"></translation>
</message>
@@ -3427,7 +3520,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="176"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1225"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1228"/>
<source>Cannot open '%1' for reading</source>
<translation type="unfinished"></translation>
</message>
@@ -3493,12 +3586,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="468"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="545"/>
<source>Welcome to Hedgewars</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="469"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="546"/>
<source>Welcome to Hedgewars!
You seem to be new around here. Would you like to play some training missions first to learn the basics of Hedgewars?</source>
@@ -3548,17 +3641,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="58"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="59"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="63"/>
- <source>Specify</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="65"/>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="76"/>
<source>Start server</source>
<translation type="unfinished"></translation>
</message>
@@ -3585,7 +3678,7 @@
<message>
<location filename="../../../../QTfrontend/ui/page/pagecampaign.cpp" line="96"/>
<location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="115"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="126"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -3595,7 +3688,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="692"/>
<source>Associate file extensions</source>
<translation type="unfinished"></translation>
</message>
@@ -3622,12 +3715,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="853"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="854"/>
<source>Set default options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="854"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="855"/>
<source>Restore default coding parameters</source>
<translation type="unfinished"></translation>
</message>
@@ -3660,7 +3753,7 @@
<context>
<name>QSpinBox</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="847"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="848"/>
<source>Specify the bitrate of recorded videos as a multiple of 1024 bits per second</source>
<translation type="unfinished"></translation>
</message>
@@ -4636,59 +4729,627 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="2"/>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="3"/>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="4"/>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="5"/>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="6"/>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="7"/>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="8"/>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="9"/>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="10"/>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="11"/>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="12"/>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="13"/>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="14"/>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="15"/>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="16"/>
+ <source>Weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="17"/>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="18"/>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="19"/>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="20"/>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="21"/>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="22"/>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="23"/>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="24"/>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="25"/>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="26"/>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="27"/>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="28"/>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="29"/>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="30"/>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="31"/>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="32"/>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="33"/>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="34"/>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="35"/>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="36"/>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="37"/>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="38"/>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="39"/>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="40"/>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="41"/>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="42"/>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="43"/>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="44"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="45"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="46"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="47"/>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="48"/>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="49"/>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="50"/>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="51"/>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="52"/>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="53"/>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="54"/>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="55"/>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="56"/>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="57"/>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="58"/>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="59"/>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="60"/>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="61"/>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="62"/>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="63"/>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="64"/>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="65"/>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="66"/>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="67"/>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="68"/>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="69"/>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="70"/>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="71"/>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="72"/>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="73"/>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="74"/>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="75"/>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="76"/>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="77"/>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="78"/>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="79"/>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="80"/>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="81"/>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="82"/>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="83"/>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="84"/>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="85"/>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="86"/>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="87"/>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="88"/>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="89"/>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="90"/>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="91"/>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="92"/>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="93"/>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="94"/>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="95"/>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="96"/>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="97"/>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="98"/>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="99"/>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="100"/>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="101"/>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="102"/>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="103"/>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="104"/>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="105"/>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="106"/>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="107"/>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="108"/>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="109"/>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="110"/>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="111"/>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="112"/>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="113"/>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="114"/>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="115"/>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="116"/>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
- <source>New voting started</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="104"/>
- <source>kick</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
- <source>map</source>
+ <source>New voting started</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="106"/>
- <source>pause</source>
+ <source>kick</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="107"/>
+ <source>map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <source>pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
<source>new seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
<source>/maxteams: specify number from 2 to 8</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
- <source>'Registered only' state toggled.</source>
+ <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+ <source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="48"/>
- <source>Super power activated.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="862"/>
<source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="2"/>
<source>Nickname is already in use</source>
<translation type="unfinished"></translation>
@@ -4750,256 +5411,271 @@
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="14"/>
- <source>/info <player>: Show info about player</source>
+ <source>This server no longer allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="15"/>
- <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
+ <source>This server now allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="16"/>
- <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
+ <source>/info <player>: Show info about player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="17"/>
- <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+ <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="18"/>
- <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
+ <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="19"/>
- <source>/quit: Quit the server</source>
+ <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="20"/>
- <source>/help: Show chat command help</source>
+ <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="21"/>
- <source>/callvote [arguments]: Start a vote</source>
+ <source>/quit: Quit the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="22"/>
- <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
+ <source>/help: Show chat command help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <source>/callvote [arguments]: Start a vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="24"/>
- <source>/delegate <player>: Surrender room control to player</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
- <source>/maxteams <N>: Limit maximum number of teams to N</source>
+ <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="26"/>
- <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
+ <source>/delegate <player>: Surrender room control to player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="27"/>
- <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
+ <source>/maxteams <N>: Limit maximum number of teams to N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="28"/>
- <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+ <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="29"/>
- <source>/stats: Query server stats</source>
+ <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="30"/>
- <source>/force <yes/no>: Force vote result for active vote</source>
+ <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="31"/>
- <source>/fix: Force this room to stay open when it is empty</source>
+ <source>/stats: Query server stats</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+ <source>/force <yes/no>: Force vote result for active vote</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+ <source>/fix: Force this room to stay open when it is empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
<source>/unfix: Undo the /fix command</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
- <source>List of lobby chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
- <source>List of room chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="39"/>
+ <source>List of lobby chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <source>List of room chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
<source>Commands for server admins only:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<source>This command is only available in the lobby.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
- <source>room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="50"/>
- <source>lobby</source>
+ <source>room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="51"/>
- <source>(playing)</source>
+ <source>lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="52"/>
- <source>(spectating)</source>
+ <source>(playing)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="53"/>
- <source>Player is not online.</source>
+ <source>(spectating)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="54"/>
- <source>The game can't be started with less than two clans!</source>
+ <source>Player is not online.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="55"/>
- <source>Empty config entry.</source>
+ <source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="56"/>
- <source>Access denied.</source>
+ <source>Empty config entry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="57"/>
- <source>You're not the room master!</source>
+ <source>Access denied.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="58"/>
- <source>Corrupted hedgehogs info!</source>
+ <source>You're not the room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="59"/>
- <source>Too many teams!</source>
+ <source>Corrupted hedgehogs info!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="60"/>
- <source>Too many hedgehogs!</source>
+ <source>Too many teams!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="61"/>
- <source>There's already a team with same name in the list.</source>
+ <source>Too many hedgehogs!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="62"/>
- <source>Joining not possible: Round is in progress.</source>
+ <source>There's already a team with same name in the list.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="63"/>
- <source>This room currently does not allow adding new teams.</source>
+ <source>Joining not possible: Round is in progress.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="64"/>
- <source>Error: The team you tried to remove does not exist.</source>
+ <source>This room currently does not allow adding new teams.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="65"/>
- <source>You can't remove a team you don't own.</source>
+ <source>Error: The team you tried to remove does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="66"/>
- <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>You can't remove a team you don't own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="67"/>
- <source>A room with the same name already exists.</source>
+ <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="68"/>
- <source>You can't kick yourself!</source>
+ <source>A room with the same name already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="69"/>
- <source>You can't kick the only other player!</source>
+ <source>You can't kick yourself!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="70"/>
- <source>The player is not in your room.</source>
+ <source>You can't kick the only other player!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="71"/>
- <source>This player is protected from being kicked.</source>
+ <source>The player is not in your room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="72"/>
- <source>You're not the room master or a server admin!</source>
+ <source>This player is protected from being kicked.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+ <source>You're not the room master or a server admin!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
<source>You're already the room master.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
- <source>Greeting message cleared.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+ <source>Greeting message cleared.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
<source>Greeting message set.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
<source>/callvote kick: You need to specify a nickname.</source>
<translation type="unfinished"></translation>
</message>
@@ -5009,172 +5685,177 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
<source>/callvote kick: No such user!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
- <source>/callvote map: No maps available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="82"/>
- <source>/callvote map: No such map!</source>
+ <source>/callvote map: No maps available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="83"/>
- <source>/callvote pause: No game in progress!</source>
+ <source>/callvote map: No such map!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="84"/>
- <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+ <source>/callvote pause: No game in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="85"/>
- <source>/force: Please use 'yes' or 'no'.</source>
+ <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="86"/>
- <source>/vote: Please use 'yes' or 'no'.</source>
+ <source>/force: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="87"/>
- <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>/vote: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="88"/>
- <source>No such room.</source>
+ <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="89"/>
- <source>Room version incompatible to your Hedgewars version!</source>
+ <source>No such room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="90"/>
- <source>Access denied. This room currently doesn't allow joining.</source>
+ <source>Room version incompatible to your Hedgewars version!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="91"/>
- <source>Access denied. This room is for registered users only.</source>
+ <source>Access denied. This room currently doesn't allow joining.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="92"/>
- <source>You are banned from this room.</source>
+ <source>Access denied. This room is for registered users only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="93"/>
- <source>Nickname already provided.</source>
+ <source>You are banned from this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="94"/>
- <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="95"/>
- <source>Protocol already known.</source>
+ <source>Nickname already provided.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="96"/>
- <source>Bad number.</source>
+ <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="97"/>
- <source>There's no voting going on.</source>
+ <source>Protocol already known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="98"/>
- <source>You already have voted.</source>
+ <source>Bad number.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="99"/>
- <source>Your vote has been counted.</source>
+ <source>There's no voting going on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="100"/>
- <source>Voting closed.</source>
+ <source>You already have voted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="101"/>
- <source>Pause toggled.</source>
+ <source>Your vote has been counted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
+ <source>Voting closed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="103"/>
+ <source>Pause toggled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
<source>Voting expired.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="110"/>
<source>hedgehogs per team: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="111"/>
<source>You're the new room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
<source>Warning! Chat flood protection activated</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
- <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
- <source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="35"/>
- <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="36"/>
+ <source>/delete <config ID>: Delete a votable room configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
+ <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
- <source>Excess flood</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
- <source>Game messages flood detected - 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+ <source>Excess flood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <source>Game messages flood detected - 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
<source>Warning! Joins flood protection activated</source>
<translation type="unfinished"></translation>
</message>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -305,21 +348,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -774,6 +821,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1408,6 +1459,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1630,6 +1700,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1826,6 +1897,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1947,10 +2019,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -1958,6 +2026,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -1997,6 +2069,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2585,6 +2661,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2879,10 +2956,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Specify</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -2958,6 +3031,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3745,6 +3822,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3815,10 +4355,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4111,10 +4647,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4178,5 +4710,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -336,21 +379,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Użycie</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>OPCJA</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>CONNECTSTRING</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Opcje</translation>
</message>
<message>
@@ -885,6 +932,10 @@
<source>Click to edit</source>
<translation>Kliknij aby edytować</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1616,6 +1667,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Uruchom prywatny serwer</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1842,6 +1912,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>BRAKUJĄCA NAZWA JĘZYKA [%1]</translation>
</message>
<message>
@@ -2091,6 +2162,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Ogólne obrażenia i odrzut w procentach</translation>
</message>
<message>
@@ -2213,7 +2285,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Sprawdź swoje umiejętności przwechodząc kilka misji</translation>
+ <translation type="vanished">Sprawdź swoje umiejętności przwechodząc kilka misji</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2223,6 +2295,10 @@
<source>Load a previously saved game</source>
<translation>Wczytaj zapisaną grę</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2266,6 +2342,10 @@
<source>Scenarios</source>
<translation>Scenariusze</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Drużyna</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2965,6 +3045,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% czasu odwrotu</translation>
</message>
<message>
@@ -3371,7 +3452,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Ustawienia własne</translation>
+ <translation type="vanished">Ustawienia własne</translation>
</message>
<message>
<source>Start</source>
@@ -3465,6 +3546,10 @@
<source>Upload this video to your YouTube account</source>
<translation type="vanished">Prześlij to wideo na swoje konto YouTube</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4343,6 +4428,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafika</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Ogólne</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Forty</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Muzyka</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4538,7 +5086,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Dostępne komendy callvote: kick <nick>, map <nazwa>, pauza, newseed, hedgehogs</translation>
+ <translation type="vanished">Dostępne komendy callvote: kick <nick>, map <nazwa>, pauza, newseed, hedgehogs</translation>
</message>
<message>
<source>callvote kick: specify nickname</source>
@@ -4882,7 +5430,7 @@
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>Stan 'tylko zarejestrowani' przełączony.</translation>
+ <translation type="vanished">Stan 'tylko zarejestrowani' przełączony.</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4948,5 +5496,21 @@
<source>This command is only available in rooms.</source>
<translation>Ta komenda jest dostępna tylko w pokojach.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -324,21 +367,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -812,6 +859,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1514,6 +1565,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Iniciar servidor privado</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1740,6 +1810,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1988,6 +2059,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2110,7 +2182,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Pratique suas perícias em missões de treinamento</translation>
+ <translation type="vanished">Pratique suas perícias em missões de treinamento</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2120,6 +2192,10 @@
<source>Load a previously saved game</source>
<translation>Carregue um jogo salvo</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2163,6 +2239,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2855,6 +2935,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3218,7 +3299,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Especificar</translation>
+ <translation type="vanished">Especificar</translation>
</message>
<message>
<source>Start</source>
@@ -3308,6 +3389,10 @@
<source>Start private server</source>
<translation>Iniciar servidor privado</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4169,6 +4254,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Armas</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Geral</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Música</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4239,10 +4787,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4535,10 +5079,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4602,5 +5142,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -328,21 +371,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -819,6 +866,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1522,6 +1573,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Iniciar o servidor privado</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Edit game preferences</source>
@@ -1744,6 +1814,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1972,6 +2043,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2094,7 +2166,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Pratica as tuas habilidades numa variedade de missões de treino</translation>
+ <translation type="vanished">Pratica as tuas habilidades numa variedade de missões de treino</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2104,6 +2176,10 @@
<source>Load a previously saved game</source>
<translation>Carrega um jogo gravado anteriormente</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2147,6 +2223,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2827,6 +2907,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3218,7 +3299,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Especificar</translation>
+ <translation type="vanished">Especificar</translation>
</message>
<message>
<source>Start</source>
@@ -3312,6 +3393,10 @@
<source>Start private server</source>
<translation>Iniciar o servidor privado</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4171,6 +4256,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Armamento</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Gráficos</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Geral</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Musica</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Not room master</source>
@@ -4329,10 +4877,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4625,10 +5169,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4692,5 +5232,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ro.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -315,21 +358,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -788,6 +835,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1450,6 +1501,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1676,6 +1746,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1905,6 +1976,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2026,10 +2098,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2037,6 +2105,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2076,6 +2148,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2685,6 +2761,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2998,7 +3075,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Specify</translation>
+ <translation type="vanished">Specify</translation>
</message>
<message>
<source>Start</source>
@@ -3080,6 +3157,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3891,6 +3972,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Weapons</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">General</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -3961,10 +4505,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4257,10 +4797,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4324,5 +4860,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Mon Jan 14 12:35:32 2019 -0500
@@ -27,7 +27,7 @@
<message>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source>Dependency versions:</source>
@@ -36,47 +36,90 @@
</message>
<message>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
+ </message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -330,21 +373,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Использование</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>ОПЦИЯ</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>СТРОКА ПОДКЛЮЧЕНИЯ</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Опции</translation>
</message>
<message>
@@ -815,6 +862,10 @@
<source>Click to edit</source>
<translation>Нажмите для изменения</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1297,11 +1348,11 @@
<message>
<source>CPU %1</source>
<extracomment>Name of a flag for computer-controlled enemies. %1 is replaced with the computer level</extracomment>
- <translation>CPU %1</translation><!--Intended. This is better, than ЦП or ИИ, in my opinion-->
+ <translation>CPU %1</translation>
</message>
<message>
<source>%1 (%2)</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
</context>
<context>
@@ -1490,6 +1541,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Запустить личный сервер</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1716,6 +1786,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation>ОТСУТСТВУЕТ ЯЗЫК [%1]</translation>
</message>
<message>
@@ -1961,6 +2032,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation>Процент урона и силы отбрасывания</translation>
</message>
<message>
@@ -2045,7 +2117,7 @@
</message>
<message>
<source>%1 (%2)</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
</context>
<context>
@@ -2083,7 +2155,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Тренировка мастерства в тренировочных миссиях</translation>
+ <translation type="vanished">Тренировка мастерства в тренировочных миссиях</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2093,6 +2165,10 @@
<source>Load a previously saved game</source>
<translation>Загрузить сохранённую игру</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2136,6 +2212,10 @@
<source>Scenarios</source>
<translation>Сценарии</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Команда</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2479,23 +2559,23 @@
</message>
<message>
<source>24 FPS</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source>25 FPS</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source>30 FPS</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source>50 FPS</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
<message>
<source>60 FPS</source>
- <translation></translation><!--Non-translatable text-->
+ <translation></translation>
</message>
</context>
<context>
@@ -2781,6 +2861,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation>% времени на отход</translation>
</message>
<message>
@@ -3093,7 +3174,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Указать</translation>
+ <translation type="vanished">Указать</translation>
</message>
<message>
<source>default</source>
@@ -3171,6 +3252,10 @@
<source>Start private server</source>
<translation>Запустить личный сервер</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3916,11 +4001,11 @@
</message>
<message>
<source>Back button</source>
- <translation>Кнопка "назад"</translation>
+ <translation>Кнопка "назад"</translation>
</message>
<message>
<source>Start button</source>
- <translation>Кнопка "старт"</translation>
+ <translation>Кнопка "старт"</translation>
</message>
<message>
<source>Left stick</source>
@@ -3991,6 +4076,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Оружие</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Графика</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Основные настройки</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Форты</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Музыка</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4062,7 +4610,7 @@
</message>
<message>
<source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation>Доступные для голосования команды: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
+ <translation type="vanished">Доступные для голосования команды: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
</message>
<message>
<source>The game can't be started with less than two clans!</source>
@@ -4358,7 +4906,7 @@
</message>
<message>
<source>'Registered only' state toggled.</source>
- <translation>Режим 'только для зарегистрированных' переключён</translation>
+ <translation type="vanished">Режим 'только для зарегистрированных' переключён</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -4424,5 +4972,21 @@
<source>This command is only available in rooms.</source>
<translation>Эта команда доступна только в комнате.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sk.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -326,21 +369,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Syntax</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>VOĽBA</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>PRIPOJOVACI_RETAZEC</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Voľby</translation>
</message>
<message>
@@ -804,6 +851,10 @@
<source>Click to edit</source>
<translation>Kliknite pre úpravy</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1510,6 +1561,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1736,6 +1806,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1981,6 +2052,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2103,7 +2175,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Cibrite si svoje schopnosti v rade tréningových misií</translation>
+ <translation type="vanished">Cibrite si svoje schopnosti v rade tréningových misií</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2113,6 +2185,10 @@
<source>Load a previously saved game</source>
<translation>Načítať uloženú hru</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2156,6 +2232,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2833,6 +2913,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3218,7 +3299,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Nastaviť</translation>
+ <translation type="vanished">Nastaviť</translation>
</message>
<message>
<source>Start</source>
@@ -3308,6 +3389,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4155,6 +4240,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Výzbroj</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Všeobecné</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Pevnosti</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4225,10 +4773,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4521,10 +5065,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4588,5 +5128,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sv.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -317,21 +360,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -790,6 +837,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1457,6 +1508,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1683,6 +1753,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1927,6 +1998,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2048,10 +2120,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation type="unfinished"></translation>
</message>
@@ -2059,6 +2127,10 @@
<source>Load a previously saved game</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2098,6 +2170,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2730,6 +2806,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3046,7 +3123,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Ange</translation>
+ <translation type="vanished">Ange</translation>
</message>
<message>
<source>Start</source>
@@ -3124,6 +3201,10 @@
<source>Start private server</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -3971,6 +4052,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Vapen</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Allmänt</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
@@ -4041,10 +4585,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4337,10 +4877,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4404,5 +4940,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -330,21 +373,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -820,6 +867,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1508,6 +1559,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Özel sunucuyu başlat</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1734,6 +1804,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1969,6 +2040,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2091,7 +2163,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Yeteneklerini çeşitli eğitim görevleri ile geliştir</translation>
+ <translation type="vanished">Yeteneklerini çeşitli eğitim görevleri ile geliştir</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2101,6 +2173,10 @@
<source>Load a previously saved game</source>
<translation>Önceden kayıtlı bir oyun yükle</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2144,6 +2220,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2831,6 +2911,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3215,7 +3296,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Elle Belirt</translation>
+ <translation type="vanished">Elle Belirt</translation>
</message>
<message>
<source>Start</source>
@@ -3313,6 +3394,10 @@
<source>Click to copy your unique server URL to your clipboard. Send this link to your friends and they will be able to join you.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4172,6 +4257,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Silahlar</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Grafik</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Genel</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Müzik</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Not room master</source>
@@ -4330,10 +4878,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4626,10 +5170,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4693,5 +5233,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -334,21 +377,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>Використання</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>OPTION</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation>CONNECTSTRING</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>Опції</translation>
</message>
<message>
@@ -829,6 +876,10 @@
<source>Click to edit</source>
<translation>Клацніть для зміни</translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1546,6 +1597,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">Запутити приватний сервер</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1772,6 +1842,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2017,6 +2088,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2139,7 +2211,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>Відточіть навики в тренувальних місіях</translation>
+ <translation type="vanished">Відточіть навики в тренувальних місіях</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2149,6 +2221,10 @@
<source>Load a previously saved game</source>
<translation>Завантажити збережену гру</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2192,6 +2268,10 @@
<source>Scenarios</source>
<translation>Сценарії</translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">Команда</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2875,6 +2955,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3235,7 +3316,7 @@
</message>
<message>
<source>Specify</source>
- <translation>Вказати</translation>
+ <translation type="vanished">Вказати</translation>
</message>
<message>
<source>Start</source>
@@ -3329,6 +3410,10 @@
<source>Start private server</source>
<translation>Запутити приватний сервер</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4178,6 +4263,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">Зброя</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">Графіка</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">Основні</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished">Форти</translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">Музика</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4344,10 +4892,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4640,10 +5184,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation>Суперсила активована.</translation>
</message>
@@ -4707,5 +5247,21 @@
<source>This command is only available in rooms.</source>
<translation>Ця команда працює лише в кімнатах.</translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Mon Jan 14 12:35:32 2019 -0500
@@ -4,95 +4,148 @@
<context>
<name>About</name>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="92"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="171"/>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="181"/>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="202"/>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="208"/>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="217"/>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="265"/>
<source>Hedgewars %1</source>
<extracomment>%1 contains Hedgewars' version number</extracomment>
<translation type="unfinished">刺猬大作战 %1</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="267"/>
<source>Revision %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="269"/>
<source>Visit our homepage: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="83"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="272"/>
<source>This program is distributed under the %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="86"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="275"/>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="304"/>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="305"/>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="314"/>
<source>Dependency versions:</source>
<extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="317"/>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="319"/>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="321"/>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="323"/>
<source>Unknown Compiler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="331"/>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="338"/>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="135"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="352"/>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="150"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="367"/>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="382"/>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="392"/>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="179"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="396"/>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="184"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="401"/>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="189"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="406"/>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="196"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="413"/>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
@@ -279,22 +332,22 @@
<translation type="obsolete">新</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="924"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="974"/>
<source>New</source>
<translation type="unfinished">新游戏</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="929"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="979"/>
<source>New (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="938"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="988"/>
<source>Copy of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="943"/>
+ <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="993"/>
<source>Copy of %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -360,68 +413,72 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="172"/>
<source>Usage</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="154"/>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="175"/>
<source>OPTION</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="155"/>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="178"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="156"/>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="181"/>
<source>Options</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/main.cpp" line="157"/>
+ <extracomment>“Options” as in “command-line options”</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/main.cpp" line="182"/>
<source>Display this help</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="158"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="183"/>
<source>Custom path for configuration data and user data</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="159"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="184"/>
<source>Custom path to the game data folder</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="160"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="185"/>
<source>Hedgewars can use a %1 (e.g. "%2") to connect on start.</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="205"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="443"/>
<source>Malformed option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="245"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="452"/>
<source>Unknown option argument: %1</source>
<comment>command-line</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="337"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="382"/>
<source>Failed to open data directory:
%1
@@ -523,47 +580,47 @@
<context>
<name>HWForm</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="170"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="519"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1507"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1526"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="171"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="524"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1520"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="527"/>
- <source>Team 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/hwform.cpp" line="532"/>
+ <source>Team 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="537"/>
<source>%1's Team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="551"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="556"/>
<source>Team %1</source>
<extracomment>Default team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="562"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="567"/>
<source>Computer %1</source>
<extracomment>Default computer team name</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="738"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="746"/>
<source>Game aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1199"/>
<source>Hedgewars - Nick registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1200"/>
<source>This nick is registered, and you haven't specified a password.
If this nick isn't yours, please register your own nick at www.hedgewars.org
@@ -572,119 +629,119 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1215"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1228"/>
<source>Your nickname is not registered.
To prevent someone else from using it,
please register it at www.hedgewars.org</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1220"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1233"/>
<source>
Your password wasn't saved either.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1232"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
<source>Someone already uses your nickname %1 on the server.
Please pick another nickname:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>No nickname supplied.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1237"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1560"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1250"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1573"/>
<source>Hedgewars - Empty nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>Hedgewars - Wrong password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1264"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1277"/>
<source>You entered a wrong password.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>Room password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1289"/>
<source>The room is protected with password.
Please, enter the password:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1292"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1305"/>
<source>Try Again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>Hedgewars - Connection error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1664"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1677"/>
<source>You reconnected too fast.
Please wait a few seconds and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2146"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2205"/>
<source>Hedgewars Demo File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2147"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
<source>Hedgewars Save File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2208"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2267"/>
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2341"/>
<source>Unknown network error (possibly missing SSL library).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2286"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2345"/>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2291"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2350"/>
<source>Internal error: Reply object is invalid.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1830"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2216"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1844"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2275"/>
<source>Cannot save record to file %1</source>
<translation>无法录入文件 %1</translation>
</message>
@@ -692,7 +749,7 @@
<context>
<name>HWGame</name>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="258"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="274"/>
<source>A fatal ERROR occured! The game engine had to stop.
We are very sorry for the inconvenience. :-(
@@ -704,14 +761,14 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="404"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="428"/>
<location filename="../../../../QTfrontend/net/recorder.cpp" line="114"/>
<source>en.txt</source>
<extracomment>IMPORTANT: This text has a special meaning, do not translate it directly. This is the file name of translation files for the game engine, found in Data/Locale/. Usually, you replace “en” with the ISO-639-1 language code of your language.</extracomment>
<translation>zh_CN.txt</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="457"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="481"/>
<source>Cannot open demofile %1</source>
<translation>DEMO %1 打不开</translation>
</message>
@@ -903,53 +960,58 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="939"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="924"/>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="940"/>
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="971"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="973"/>
<source>Map size:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="978"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="980"/>
<source>Maze style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="985"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="987"/>
<source>Style:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1000"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1002"/>
<source>Mission:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1020"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1022"/>
<source>Map:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1121"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1313"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1124"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1316"/>
<source>Theme: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Load drawn map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>Drawn Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1214"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1217"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
@@ -1011,23 +1073,23 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="587"/>
<source>Server authentication error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="899"/>
<source>%1 *** %2 has left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="895"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
<source>%1 *** %2 has left (%3)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="752"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="884"/>
<source>%1 *** %2 has joined the room</source>
<translation type="unfinished"></translation>
</message>
@@ -1036,17 +1098,17 @@
<translation type="vanished">退出原因:</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="809"/>
<source>Room destroyed</source>
<translation>房间损坏</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="566"/>
<source>You got kicked</source>
<translation>被踢出</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>Reason:</source>
<translation type="unfinished"></translation>
</message>
@@ -1730,6 +1792,29 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="50"/>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="60"/>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="66"/>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="77"/>
+ <source>Start private server</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="52"/>
@@ -1909,7 +1994,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="283"/>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="806"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="807"/>
<source>x</source>
<extracomment>Multiplication sign, to be used between two numbers. Note the “x” is only a dummy character, we recommend to use “×” if your language permits it</extracomment>
<translation type="unfinished"></translation>
@@ -1995,37 +2080,38 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="667"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="668"/>
<source>MISSING LANGUAGE NAME [%1]</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="699"/>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="700"/>
<source>Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="712"/>
- <source>Check for updates</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="713"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="714"/>
<source>Check now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="726"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="727"/>
<source>Video recording options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>Can't delete last team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="995"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="996"/>
<source>You can't delete the last team!</source>
<translation type="unfinished"></translation>
</message>
@@ -2234,137 +2320,138 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
<source>Overall damage and knockback in percent</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="176"/>
- <source>Turn time in seconds</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="177"/>
- <source>Initial health of hedgehogs</source>
+ <source>Turn time in seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="178"/>
- <source>How many rounds have to be played before Sudden Death begins</source>
+ <source>Initial health of hedgehogs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="179"/>
- <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
+ <source>How many rounds have to be played before Sudden Death begins</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="180"/>
- <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
+ <source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="181"/>
- <source>Maximum rope length in percent</source>
+ <source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="182"/>
- <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
+ <source>Maximum rope length in percent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="183"/>
- <source>Likelihood of a crate dropping before a turn</source>
+ <source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="184"/>
- <source>Health bonus for collecting a health crate</source>
+ <source>Likelihood of a crate dropping before a turn</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="185"/>
- <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
+ <source>Health bonus for collecting a health crate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="186"/>
- <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="187"/>
- <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
+ <source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="188"/>
- <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="189"/>
- <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
+ <source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="190"/>
- <source>Affects the left and right boundaries of the map</source>
+ <source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="191"/>
- <source>Time you get after an attack</source>
+ <source>Affects the left and right boundaries of the map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="192"/>
+ <source>Time you get after an attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="193"/>
<source>Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="490"/>
- <source>None (Default)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="491"/>
- <source>Wrap (World wraps)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="492"/>
- <source>Bounce (Edges reflect)</source>
+ <source>None (Default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="493"/>
+ <source>Wrap (World wraps)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="494"/>
+ <source>Bounce (Edges reflect)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="495"/>
<source>Sea (Edges connect to sea)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="518"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="520"/>
<source>Name of this scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="533"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="534"/>
- <source>New</source>
- <translation>新游戏</translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="535"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="536"/>
+ <source>New</source>
+ <translation>新游戏</translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="537"/>
<source>Delete</source>
<translation>删除</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="699"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="702"/>
<source>%1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -2411,7 +2498,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="51"/>
- <source>Practice your skills in a range of training missions</source>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2428,48 +2515,53 @@
<context>
<name>PageTraining</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="91"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="96"/>
<source>Pick the training to play</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="94"/>
- <source>Pick the challenge to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="97"/>
- <source>Pick the scenario to play</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="99"/>
+ <source>Pick the challenge to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="102"/>
+ <source>Pick the scenario to play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="104"/>
<source>Trainings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="100"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="105"/>
<source>Challenges</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="106"/>
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="116"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="315"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="109"/>
+ <source>Team</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="127"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
<source>Start fighting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="324"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="341"/>
<source>No description available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="332"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="349"/>
<source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
@@ -2726,12 +2818,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="686"/>
<source>If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="706"/>
<source>Check for updates at startup</source>
<translation type="unfinished"></translation>
</message>
@@ -2741,7 +2833,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="684"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="685"/>
<source>Append date and time to record file name</source>
<translation>记录名称中包含具体时间日期</translation>
</message>
@@ -2752,12 +2844,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="768"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="769"/>
<source>Record audio</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="818"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="819"/>
<source>Use game resolution</source>
<translation type="unfinished"></translation>
</message>
@@ -2839,27 +2931,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="828"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
<source>24 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="829"/>
- <source>25 FPS</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="830"/>
- <source>30 FPS</source>
+ <source>25 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="831"/>
- <source>50 FPS</source>
+ <source>30 FPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="832"/>
+ <source>50 FPS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="833"/>
<source>60 FPS</source>
<translation type="unfinished"></translation>
</message>
@@ -2965,17 +3057,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="673"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="674"/>
<source>This setting will be effective at next restart.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="794"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="795"/>
<source>Resolution</source>
<translation>分辨率</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="839"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="840"/>
<source>Bitrate (Kibit/s)</source>
<extracomment>“Kibit/s” is the symbol for 1024 bits per second</extracomment>
<translation type="unfinished"></translation>
@@ -3040,97 +3132,98 @@
<translation>初始音量</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="195"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="196"/>
<source>Damage Modifier</source>
<translation>伤害修改</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="212"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="213"/>
<source>Turn Time</source>
<translation>回合时间</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="229"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="230"/>
<source>Initial Health</source>
<translation>初始生命值</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="246"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="247"/>
<source>Sudden Death Timeout</source>
<translation>死亡模式倒计时</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="275"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="276"/>
<source>Sudden Death Water Rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="292"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="293"/>
<source>Sudden Death Health Decrease</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="309"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="310"/>
<source>% Rope Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="342"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="343"/>
<source>% Health Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="359"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="360"/>
<source>Health in Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="376"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="377"/>
<source>Mines Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="393"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="394"/>
<source>Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="410"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="411"/>
<source>% Dud Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="427"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="428"/>
<source>Barrels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="461"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="463"/>
<source>% Retreat Time</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="444"/>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="445"/>
<source>Air Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="478"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="480"/>
<source>World Edge</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="499"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="501"/>
<source>Script parameter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="515"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="517"/>
<source>Scheme Name:</source>
<translation>设置名称:</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="326"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="327"/>
<source>Crate Drops</source>
<translation>箱子降落</translation>
</message>
@@ -3208,22 +3301,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="735"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="736"/>
<source>Format</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="756"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="757"/>
<source>Audio codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="782"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="783"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="824"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="825"/>
<source>Framerate</source>
<translation type="unfinished"></translation>
</message>
@@ -3241,12 +3334,12 @@
<context>
<name>QLineEdit</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1054"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1067"/>
<source>unnamed</source>
<translation>无名</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1060"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1073"/>
<source>unnamed (%1)</source>
<translation type="unfinished"></translation>
</message>
@@ -3261,7 +3354,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/team.cpp" line="44"/>
+ <location filename="../../../../QTfrontend/team.cpp" line="45"/>
<source>Hedgehog %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3322,28 +3415,28 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1092"/>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="643"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="646"/>
<source>Cannot delete default scheme '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1118"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1131"/>
<source>Please select a record from the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1213"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1226"/>
<source>Hedgewars - Nick not registered</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1623"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1636"/>
<source>Unable to start server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1685"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1698"/>
<source>The connection to the server is lost.</source>
<translation type="unfinished"></translation>
</message>
@@ -3352,12 +3445,12 @@
<translation type="vanished">服务器连接丢失</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2299"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2358"/>
<source>Not all players are ready</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2300"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2359"/>
<source>Are you sure you want to start this game?
Not all players are ready.</source>
<translation type="unfinished"></translation>
@@ -3390,29 +3483,29 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2186"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2245"/>
<location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
<source>Hedgewars - Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2187"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2246"/>
<source>All file associations have been set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="2192"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="2251"/>
<source>File association failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="122"/>
<location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
<source>Netgame - Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="123"/>
<source>Please select a server from the list</source>
<translation type="unfinished"></translation>
</message>
@@ -3443,27 +3536,27 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="642"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="645"/>
<source>Schemes - Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="651"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="654"/>
<source>Schemes - Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="652"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="655"/>
<source>Do you really want to delete the game scheme '%1'?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="712"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="715"/>
<source>Schemes - Name already taken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="713"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="716"/>
<source>A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'.</source>
<translation type="unfinished"></translation>
</message>
@@ -3488,7 +3581,7 @@
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="155"/>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="175"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1224"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1227"/>
<source>File error</source>
<translation type="unfinished"></translation>
</message>
@@ -3499,7 +3592,7 @@
</message>
<message>
<location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="176"/>
- <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1225"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1228"/>
<source>Cannot open '%1' for reading</source>
<translation type="unfinished"></translation>
</message>
@@ -3540,12 +3633,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="468"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="545"/>
<source>Welcome to Hedgewars</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="469"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="546"/>
<source>Welcome to Hedgewars!
You seem to be new around here. Would you like to play some training missions first to learn the basics of Hedgewars?</source>
@@ -3579,6 +3672,11 @@
<translation>连接</translation>
</message>
<message>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="65"/>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Go!</source>
<translation type="obsolete">上场!</translation>
</message>
@@ -3605,7 +3703,7 @@
<message>
<location filename="../../../../QTfrontend/ui/page/pagecampaign.cpp" line="96"/>
<location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
- <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="115"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="126"/>
<source>Start</source>
<translation>开始</translation>
</message>
@@ -3615,12 +3713,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="76"/>
<source>Start server</source>
<translation>开始服务端</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="58"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="59"/>
<source>Update</source>
<translation>更新</translation>
</message>
@@ -3630,9 +3728,8 @@
<translation>读取</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="63"/>
<source>Specify</source>
- <translation>指定</translation>
+ <translation type="vanished">指定</translation>
</message>
<message>
<location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
@@ -3668,17 +3765,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="692"/>
<source>Associate file extensions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="853"/>
- <source>Set default options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="854"/>
+ <source>Set default options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="855"/>
<source>Restore default coding parameters</source>
<translation type="unfinished"></translation>
</message>
@@ -3711,7 +3808,7 @@
<context>
<name>QSpinBox</name>
<message>
- <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="847"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="848"/>
<source>Specify the bitrate of recorded videos as a multiple of 1024 bits per second</source>
<translation type="unfinished"></translation>
</message>
@@ -4699,59 +4796,627 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="2"/>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="3"/>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="4"/>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="5"/>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="6"/>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="7"/>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="8"/>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="9"/>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="10"/>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="11"/>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="12"/>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="13"/>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="14"/>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="15"/>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="16"/>
+ <source>Weapons</source>
+ <translation type="unfinished">武器</translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="17"/>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="18"/>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="19"/>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="20"/>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="21"/>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="22"/>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="23"/>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="24"/>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="25"/>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="26"/>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="27"/>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="28"/>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="29"/>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="30"/>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="31"/>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="32"/>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="33"/>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="34"/>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="35"/>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="36"/>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="37"/>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="38"/>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="39"/>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="40"/>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="41"/>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="42"/>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="43"/>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="44"/>
+ <source>Graphics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="45"/>
+ <source>General</source>
+ <translation type="unfinished">常规</translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="46"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="47"/>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="48"/>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="49"/>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="50"/>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="51"/>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="52"/>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="53"/>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="54"/>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="55"/>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="56"/>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="57"/>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="58"/>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="59"/>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="60"/>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="61"/>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="62"/>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="63"/>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="64"/>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="65"/>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="66"/>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="67"/>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="68"/>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="69"/>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="70"/>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="71"/>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="72"/>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="73"/>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="74"/>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="75"/>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="76"/>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="77"/>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="78"/>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="79"/>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="80"/>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="81"/>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="82"/>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="83"/>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="84"/>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="85"/>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="86"/>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="87"/>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="88"/>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="89"/>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="90"/>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="91"/>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="92"/>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="93"/>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="94"/>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="95"/>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="96"/>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="97"/>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="98"/>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="99"/>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="100"/>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="101"/>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="102"/>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="103"/>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="104"/>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="105"/>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="106"/>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="107"/>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="108"/>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="109"/>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="110"/>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="111"/>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="112"/>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="113"/>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="114"/>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="115"/>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/creditsmessages.h" line="116"/>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
- <source>New voting started</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="104"/>
- <source>kick</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
- <source>map</source>
+ <source>New voting started</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="106"/>
- <source>pause</source>
- <translation type="unfinished">暂停</translation>
+ <source>kick</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="107"/>
+ <source>map</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <source>pause</source>
+ <translation type="unfinished">暂停</translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
<source>new seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
<source>/maxteams: specify number from 2 to 8</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
- <source>'Registered only' state toggled.</source>
+ <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+ <source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="48"/>
- <source>Super power activated.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="862"/>
<source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="2"/>
<source>Nickname is already in use</source>
<translation type="unfinished"></translation>
@@ -4813,256 +5478,271 @@
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="14"/>
- <source>/info <player>: Show info about player</source>
+ <source>This server no longer allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="15"/>
- <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
+ <source>This server now allows unregistered players to join.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="16"/>
- <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
+ <source>/info <player>: Show info about player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="17"/>
- <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+ <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="18"/>
- <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
+ <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="19"/>
- <source>/quit: Quit the server</source>
+ <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="20"/>
- <source>/help: Show chat command help</source>
+ <source>/watch <id>: Watch a demo stored on the server with the given ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="21"/>
- <source>/callvote [arguments]: Start a vote</source>
+ <source>/quit: Quit the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="22"/>
- <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
+ <source>/help: Show chat command help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <source>/callvote [arguments]: Start a vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="24"/>
- <source>/delegate <player>: Surrender room control to player</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
- <source>/maxteams <N>: Limit maximum number of teams to N</source>
+ <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="26"/>
- <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
+ <source>/delegate <player>: Surrender room control to player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="27"/>
- <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
+ <source>/maxteams <N>: Limit maximum number of teams to N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="28"/>
- <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+ <source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="29"/>
- <source>/stats: Query server stats</source>
+ <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="30"/>
- <source>/force <yes/no>: Force vote result for active vote</source>
+ <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="31"/>
- <source>/fix: Force this room to stay open when it is empty</source>
+ <source>/stats: Query server stats</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+ <source>/force <yes/no>: Force vote result for active vote</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+ <source>/fix: Force this room to stay open when it is empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
<source>/unfix: Undo the /fix command</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
- <source>List of lobby chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
- <source>List of room chat commands:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="39"/>
+ <source>List of lobby chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <source>List of room chat commands:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
<source>Commands for server admins only:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
<source>This command is only available in the lobby.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
- <source>room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="50"/>
- <source>lobby</source>
+ <source>room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="51"/>
- <source>(playing)</source>
+ <source>lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="52"/>
- <source>(spectating)</source>
+ <source>(playing)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="53"/>
- <source>Player is not online.</source>
+ <source>(spectating)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="54"/>
- <source>The game can't be started with less than two clans!</source>
+ <source>Player is not online.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="55"/>
- <source>Empty config entry.</source>
+ <source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="56"/>
- <source>Access denied.</source>
+ <source>Empty config entry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="57"/>
- <source>You're not the room master!</source>
+ <source>Access denied.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="58"/>
- <source>Corrupted hedgehogs info!</source>
+ <source>You're not the room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="59"/>
- <source>Too many teams!</source>
+ <source>Corrupted hedgehogs info!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="60"/>
- <source>Too many hedgehogs!</source>
+ <source>Too many teams!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="61"/>
- <source>There's already a team with same name in the list.</source>
+ <source>Too many hedgehogs!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="62"/>
- <source>Joining not possible: Round is in progress.</source>
+ <source>There's already a team with same name in the list.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="63"/>
- <source>This room currently does not allow adding new teams.</source>
+ <source>Joining not possible: Round is in progress.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="64"/>
- <source>Error: The team you tried to remove does not exist.</source>
+ <source>This room currently does not allow adding new teams.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="65"/>
- <source>You can't remove a team you don't own.</source>
+ <source>Error: The team you tried to remove does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="66"/>
- <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>You can't remove a team you don't own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="67"/>
- <source>A room with the same name already exists.</source>
+ <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="68"/>
- <source>You can't kick yourself!</source>
+ <source>A room with the same name already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="69"/>
- <source>You can't kick the only other player!</source>
+ <source>You can't kick yourself!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="70"/>
- <source>The player is not in your room.</source>
+ <source>You can't kick the only other player!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="71"/>
- <source>This player is protected from being kicked.</source>
+ <source>The player is not in your room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="72"/>
- <source>You're not the room master or a server admin!</source>
+ <source>This player is protected from being kicked.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+ <source>You're not the room master or a server admin!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
<source>You're already the room master.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
- <source>Greeting message cleared.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+ <source>Greeting message cleared.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
<source>Greeting message set.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
<source>/callvote kick: You need to specify a nickname.</source>
<translation type="unfinished"></translation>
</message>
@@ -5072,172 +5752,177 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
<source>/callvote kick: No such user!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
- <source>/callvote map: No maps available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="82"/>
- <source>/callvote map: No such map!</source>
+ <source>/callvote map: No maps available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="83"/>
- <source>/callvote pause: No game in progress!</source>
+ <source>/callvote map: No such map!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="84"/>
- <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+ <source>/callvote pause: No game in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="85"/>
- <source>/force: Please use 'yes' or 'no'.</source>
+ <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="86"/>
- <source>/vote: Please use 'yes' or 'no'.</source>
+ <source>/force: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="87"/>
- <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>/vote: Please use 'yes' or 'no'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="88"/>
- <source>No such room.</source>
+ <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="89"/>
- <source>Room version incompatible to your Hedgewars version!</source>
+ <source>No such room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="90"/>
- <source>Access denied. This room currently doesn't allow joining.</source>
+ <source>Room version incompatible to your Hedgewars version!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="91"/>
- <source>Access denied. This room is for registered users only.</source>
+ <source>Access denied. This room currently doesn't allow joining.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="92"/>
- <source>You are banned from this room.</source>
+ <source>Access denied. This room is for registered users only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="93"/>
- <source>Nickname already provided.</source>
+ <source>You are banned from this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="94"/>
- <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="95"/>
- <source>Protocol already known.</source>
+ <source>Nickname already provided.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="96"/>
- <source>Bad number.</source>
+ <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="97"/>
- <source>There's no voting going on.</source>
+ <source>Protocol already known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="98"/>
- <source>You already have voted.</source>
+ <source>Bad number.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="99"/>
- <source>Your vote has been counted.</source>
+ <source>There's no voting going on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="100"/>
- <source>Voting closed.</source>
+ <source>You already have voted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="101"/>
- <source>Pause toggled.</source>
+ <source>Your vote has been counted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
+ <source>Voting closed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="103"/>
+ <source>Pause toggled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
<source>Voting expired.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="108"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="110"/>
<source>hedgehogs per team: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="109"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="111"/>
<source>You're the new room master!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
<source>Warning! Chat flood protection activated</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+ <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
- <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
- <source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="35"/>
- <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../../QTfrontend/servermessages.h" line="36"/>
+ <source>/delete <config ID>: Delete a votable room configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
+ <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
- <source>Excess flood</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
- <source>Game messages flood detected - 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+ <source>Excess flood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+ <source>Game messages flood detected - 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
<source>Warning! Joins flood protection activated</source>
<translation type="unfinished"></translation>
</message>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,49 @@
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other people</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 (alias %2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 &lt;%2&gt;</source>
+ <extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1: %2 &lt;%3&gt;</source>
+ <extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extended Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An extended credits list can be found in the CREDITS text file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown Compiler: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AbstractPage</name>
@@ -316,21 +359,25 @@
<message>
<source>Usage</source>
<comment>command-line</comment>
+ <extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
<translation>用法</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
<translation>選項</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
+ <extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
<translation type="unfinished">連接字串</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
+ <extracomment>“Options” as in “command-line options”</extracomment>
<translation>選項</translation>
</message>
<message>
@@ -815,6 +862,10 @@
<source>Click to edit</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Scale size of the drawn map</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWNetServersModel</name>
@@ -1505,6 +1556,25 @@
</message>
</context>
<context>
+ <name>PageNet</name>
+ <message>
+ <source>Connect to the selected server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update the list of servers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the address and port number of a known server and connect to it directly</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start private server</source>
+ <translation type="unfinished">啟動私人伺服器</translation>
+ </message>
+</context>
+<context>
<name>PageNetGame</name>
<message>
<source>Control</source>
@@ -1731,6 +1801,7 @@
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
+ <extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1962,6 +2033,7 @@
</message>
<message>
<source>Overall damage and knockback in percent</source>
+ <extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2084,7 +2156,7 @@
</message>
<message>
<source>Practice your skills in a range of training missions</source>
- <translation>透過一系列的培訓任務,練習你的技能</translation>
+ <translation type="vanished">透過一系列的培訓任務,練習你的技能</translation>
</message>
<message>
<source>Watch recorded demos</source>
@@ -2094,6 +2166,10 @@
<source>Load a previously saved game</source>
<translation>讀取以前保存的遊戲</translation>
</message>
+ <message>
+ <source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PageTraining</name>
@@ -2137,6 +2213,10 @@
<source>Scenarios</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Team</source>
+ <translation type="unfinished">隊伍</translation>
+ </message>
</context>
<context>
<name>PageVideos</name>
@@ -2802,6 +2882,7 @@
</message>
<message>
<source>% Retreat Time</source>
+ <extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3160,7 +3241,7 @@
</message>
<message>
<source>Specify</source>
- <translation>指定</translation>
+ <translation type="vanished">指定</translation>
</message>
<message>
<source>default</source>
@@ -3250,6 +3331,10 @@
<source>Start private server</source>
<translation>啟動私人伺服器</translation>
</message>
+ <message>
+ <source>Specify address</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QSpinBox</name>
@@ -4107,6 +4192,469 @@
</message>
</context>
<context>
+ <name>credits</name>
+ <message>
+ <source>Programming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many engine improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gamepad and Lua integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Campaign support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Theme customization improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some Pas2C and GLES2 work</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Video recording</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map generation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Core map generators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perlin maps and other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maze maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weapons</source>
+ <translation type="unfinished">武器</translation>
+ </message>
+ <message>
+ <source>Most core weapons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Air mine, rubber, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drill rocket, ballgun, RC plane</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freezer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mine number and time game settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frontend / main menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Many frontend improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keybinds, feedback, maps and hats interfaces</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Login dialogs, other improvements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missions and styles</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Classic Fairytale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A Space Adventure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some styles and missions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battalion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continental supplies</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Teamwork 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Climb Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portal Mind Challenge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>macOS/iPhone port, OpenGL-ES conversion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Android netplay, portability abstraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WebGL port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>iPhone/iPad ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphics</source>
+ <translation type="unfinished">圖像</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished">常規</translation>
+ </message>
+ <message>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature, Snow, City, Castle, Halloween, Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, EarthRise, BambooPlinko</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Golf, Hoggywood, Stage</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hoggywood</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cave, Olympics</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Cake</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Art</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brick</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hell</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sheep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Castle, PirateFlag</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ShoppaKing, TrophyRace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Battlefield</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CTF_Blizzard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cheese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ClimbHome</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lonely_Island</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octorama</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>portal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sticks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EvilChicken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Olympic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tank</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snail</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SteelTower</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hats, graves, other</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>See CREDITS text file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hedgehogs voice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default_pl, Russian_pl voices</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Various authors from www.freesound.org (see CREDITS text file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">音樂</translation>
+ </message>
+ <message>
+ <source>City, Rock, others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compost</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EarthRise, oriental, Pirate, snow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fruit, Jungle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>olympics_sd</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>sdmusic (Hitman [sheepluva edit])</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Translations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Brazilian Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Finnish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Lithuanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scottish Gaelic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ukrainian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Special thanks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Project founder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>server</name>
<message>
<source>Restricted</source>
@@ -4293,10 +4841,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation type="unfinished"></translation>
</message>
@@ -4589,10 +5133,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>'Registered only' state toggled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Super power activated.</source>
<translation type="unfinished"></translation>
</message>
@@ -4656,5 +5196,21 @@
<source>This command is only available in rooms.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This server no longer allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This server now allows unregistered players to join.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please confirm server restart with '/restart_server yes'.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/it.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/it.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
- ["Ace"] = "Asso",
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Una favola classica",
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
["Back Breaker"] = "Back Breaker", -- A_Classic_Fairytale:backstab
["Back in the village, after telling the villagers about the threat..."] = "Tornati al villaggio, dopo aver detto agli abitanti della minaccia...",
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
["Backstab"] = "Backstab", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Addestramento sull'utilizzo del Bazooka",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
["Bloodpie"] = "Dolce Sanguinoso", -- A_Classic_Fairytale:backstab
["Bloodrocutor"] = "Sputasangue", -- A_Classic_Fairytale:shadow
["Bloodsucker"] = "Sanguisuga", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Sanguinosi",
-- ["Blue"] = "", --
["Blue Team"] = "Squadra blu", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "Scegli da che parte vuoi stare! Se vuoi stare con quell'uomo strano, vai con lui.|Altrimenti, allontanatene. Se decidi di attacc... niente...",
@@ -342,7 +343,6 @@
["Cleaver"] = "Mannaia", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
["Cleaver Placement Mode"] = "Modalità posizionamento mannaia", -- Construction_Mode
- ["Climber"] = "Scalatore", -- ClimbHome
["Climb Home"] = "Scala fino a casa", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
["Collect or destroy all the health crates."] = "Raccogli o distruggi tutte le casse di salute.", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "Raccogli la cassa a destra. Suggerimento: Seleziona la corda, [Su] o [Giù] per puntare, [Spazio] per sparare, tasti direzionali per spostarti.", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "Raccogli le casse nel tempo limite! | Se non ci riesci dovrai riprovare.", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -458,7 +458,7 @@
-- ["Deer"] = "", --
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Sconfiggi i cannibali! | Suggerimento: imposta il timer con [1-5], mira con [Su] / [Giù] e tieni premuto [Spazio] per scegliere la potenza", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|"] = "Sconfiggi i cannibali!|",
["Defeat the cannibals"] = "Sconfiggi i cannibali",
@@ -483,10 +483,7 @@
["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "Distruggilo Leaks A Lot! E' responsabile della morte di molti di noi!", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "Distruggi gli obiettivi! Suggerimento: Seleziona il Pugno di Fuoco e premi [Spazio]|P.S. Puoi usarlo a mezz'aria.", -- A_Classic_Fairytale:first_blood
- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "Distruggi gli obiettivi! Suggerimento: [Su] [Giù] per mirare, [Spazio] per sparare", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
["Did anyone follow you?"] = "Ti ha seguito qualcuno?",
@@ -594,7 +591,6 @@
["Elderbot"] = "RoboSambuco", -- A_Classic_Fairytale:family
["Elimate your captor."] = "Elimita il tuo cacciatore", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Distruggi tutti gli obiettivi entro il tempo previsto.|Hai armi illimitate per questa missione.",
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Elimina i ricci nemici per vincere.",
["Eliminate the enemy specialists."] = "Elimina tutti i nemici specialisti.",
@@ -622,7 +618,7 @@
["Exactly, man! That was my dream."] = "Si, è quello che ho sognato anch'io.", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
["Eye Chewer"] = "Mangia Occhi", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
["Find your tribe!|Cross the lake!"] = "Trova la tua tribù!|Attraversa il lago!", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "Fine dell'allenamento | Suggerimento: puoi saltare le animazioni con il tasto [Mirino di Precisione].", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
["Get Dense Cloud out of the pit!"] = "Tira fuori Nuvola Densa dalla fossa!", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Vai fuori da qui ed eliminalo!",
- ["Get on the head of the mole"] = "Raggiungi la testa della talpa", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
["Get that crate!"] = "Prendi la cassa!", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "VAI! VAI! VAI!",
["Good birdy......"] = "Bell'uccellino......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
- ["Good Dude"] = "Bravo ragazzo",
["Good idea, they'll never find us there!"] = "Buona idea, qui non ci troveranno mai", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
["Good so far!"] = "Molto bene finora!",
["Good to go!"] = "Vai!!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
- ["Go on top of the flower"] = "Vai in cima al fiore", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
["Go, quick!"] = "Vai, veloce!", -- A_Classic_Fairytale:backstab
["Gorkij"] = "Gorkij", -- A_Classic_Fairytale:journey
["Go surf!"] = "Fai surf!", -- WxW
@@ -793,7 +790,6 @@
["Great! You will be contacted soon for assistance."] = "Ottimo! Sarai contattato presto per assistenza.", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
["Greetings, cloudy one!"] = "Saluti, Nuvola Densa!", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
["Grenade Training"] = "Allenamento granate", -- Basic_Training_-_Grenade
["Grenadiers"] = "Granatieri", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "Riccio proiettile: [Spara il tuo riccio come una bomba appiccicosa]", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
["Hedgibal Lecter"] = "Riccibal Lecter",
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
["Help me, Leaks!"] = "Aiutami, Leaks!", -- A_Classic_Fairytale:journey
["Help me, please!!!"] = "Aiutami, per favore!!!",
["Help me, please!"] = "Aiutami, per favore!",
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
- ["Hero Team"] = "Team Eroi", -- User_Mission_-_The_Great_Escape
["He's so brave..."] = "E' così coraggioso...",
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
["He won't be selling us out anymore!"] = "Ora non ci tradirà più!", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
["Hey, guys!"] = "Ciao, ragazzi!", -- A_Classic_Fairytale:backstab
["Hey guys!"] = "Ciao ragazzi!", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
["Hey! This is cheating!"] = "Ehi, questo è barare!", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
["Hint: Double Jump - Press [Backspace] twice"] = "Suggerimento: Doppio salto - Premi due volte [Backspace]", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: You might want to stay out of sight and take all the crates ..."] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
["Hogminator"] = "Ricc-minator",
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
["Hogs in sight!"] = "Ricci in vista!",
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "Tuttavia, se fallirai, morirà di una morte più violenta, proprio come il tuo amico! Muahahaha!", -- A_Classic_Fairytale:journey
["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "Tuttavia, se fallirai, morirà di una morte più violenta! Muahahaha!", -- A_Classic_Fairytale:journey
["However, my mates don't agree with me on letting you go..."] = "Tuttavia i miei compagni non vogliono lasciarti andare...", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
["I can't believe what I'm hearing!"] = "Non credo alle mie orecchie!",
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
["I can't wait any more, I have to save myself!"] = "Non posso più aspettare, devo salvarmi!",
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
["I could just teleport myself there..."] = "Potrei teletrasportarmi lì...", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
["I just found out that they have captured your princess!"] = "Ho appena scoperto che hanno catturato la tua principessa!", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
["I just wonder where Ramon and Spiky disappeared..."] = "Mi chiedo dove siano scomparsi Ramon e Spiky...", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
["I'm not sure about that!"] = "Non ne sono così sicuro!",
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "Impressionante... sei ancora asciutto come il cadavere di un falco dopo una settimana nel deserto", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
["Leaderbot"] = "Capobot", -- A_Classic_Fairytale:queen
["Leader"] = "Capo", -- A_Classic_Fairytale:enemy
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "Leaks A Lot, depresso per la morte dell'amata, non è riuscito a salvare il villaggio...", -- A_Classic_Fairytale:journey
["Leaks A Lot gave his life for his tribe! He should have survived!"] = "Leaks a Lot ha dato la sua vita per la sua tribù! Avrebbe dovuto sopravvivere!", -- A_Classic_Fairytale:first_blood
["Leaks A Lot"] = "Leaks A Lot", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
["Lively Lifeguard"] = "Bagnino Vivace",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
- ["Lonely Hog"] = "Riccio solitario", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
["Look, I had no choice!"] = "Scusa, non avevo scelta!", -- A_Classic_Fairytale:backstab
["Look out! There's more of them!"] = "Occhio, ce ne sono altri!", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
["Looks like the whole world is falling apart!"] = "Sembra che tutto il mondo si stia inabissando!", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["- Massive weapon bonus on first turn"] = "- Notevole bonus di armi al primo turno", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
- ["More Natives"] = "Altri nativi", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1439,7 +1424,6 @@
-- ["My flying saucer stopped working!"] = "", -- A_Space_Adventure:ice01
["Nade Boy"] = "Nud-uomo", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
- ["Nameless Heroes"] = "Eroi Senza Nome",
["Name"] = "Nome", -- A_Classic_Fairytale:queen
["Nancy Screw"] = "Vite di Nancy", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
["Napalm"] = "Napalm", -- Construction_Mode
@@ -1543,7 +1527,7 @@
["Oh, my! This is even more entertaining than I've expected!"] = "Ahahah! E' più divertente di quanto mi aspettassi!", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Oh no! Prova ancora!",
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Oh no! Tempo scaduto! Riprova!",
["Oh no! You failed! Just try again."] = "Oh no! Hai fallito! Riprova!", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
["Open that crate and we will continue!"] = "Apri quella cassa e continuiamo!", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Squadra Nemica: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
["Parachute"] = "Paracadute", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Resistenza Patetica",
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
["Piano Strike"] = "Strike con il piano", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Premi [Sinistra] o [Destra] per spostarti, [Invio] per saltare", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Premi [Mirino di Precisione] per saltare l'intro",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
["Prestigious Pilot"] = "Pilota prestigioso", -- User_Mission_-_RCPlane_Challenge
@@ -1712,10 +1697,9 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Proteggiti! |Suggerimento della granata: imposta il timer con [1-5], punta con [Su]/[Giù] e tieni premuto [Spazio] per la potenza.", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
["Righteous Beard"] = "Barba saggia", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
["Rope Training"] = "Allenamento corde", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
["Salvation was one step closer now..."] = "Salvezza è più vicina ora...", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Salva più ricci sfortunati che puoi!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
["Save Fell From Heaven!"] = "Salva Scesa dal Cielo", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
["Shotgun"] = "Fucile a pompa",
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Stupido",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
["Slippery"] = "Scivoloso", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
["Slot keys save time! (F1-F10 by default)"] = "Tasti slot fanno risparmiare tempo! (F1-F10 predefiniti)", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
["Smith 0.99f"] = "Smith 0.99f", -- A_Classic_Fairytale:enemy
["Smith 1.0"] = "Smith 1.0", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
["Sniper Rifle"] = "Fucile di precisione", -- Continental_supplies
["Sniper Training"] = "Addestramento sull'utilizzo del Fucile di Precisione",
- ["Sniperz"] = "Cecchini",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
["So humiliating..."] = "Così umiliante...", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
["Structure Placement Mode"] = "Modalità posizionamento strutture", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
["Surfer! +15 points!"] = "Surfista! +15 punti!", -- Space_Invasion
["Surfer!"] = "Surfista", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "Sopravvivi!|Suggerimento: Le animazioni possono essere saltate con il tasto [Mirino di Precisione]", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
["Swing, Leaks A Lot, on the wings of the wind!"] = "Vai, Leaks a Lot, ondeggia sulle ali del vento!", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["Switch: Drop ball of dirt from parachute (once)"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
["switch"] = "scambio", -- Continental_supplies
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
["Syntax Errol"] = "Ellole di Sintassi", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
["Talk about mixed signals..."] = "Devo recuperare le casse...", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
["Target Placement Mode"] = "Modalità posizionamento target", -- Construction_Mode
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
["Team %d: "] = "Squadra %d: ",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
["The giant umbrella from the last crate should help break the fall."] = "L'ombrello gigante nell'ultima cassa dovrebbe rallentare la caduta", -- A_Classic_Fairytale:first_blood
["The Great Escape"] = "La grande fuga", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
["The guardian"] = "Il guardiano", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
["The Mutant loses health quickly if he doesn't keep scoring kills."] = "Il Mutante perde vita velocemente se non fa uccisioni.", -- Mutant
- ["The Nameless One"] = "Il Senzanome",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Questa pioggia ha qualcosa di strano...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
["This will be fun!"] = "Questo sarà divertente!", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "Per posizionare un trave, selezionala, utilizza [Sinistra] e [Destra] per impostare angolo e lunghezza, posiziona con [Click Sinistro]", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
["Torn Muscle"] = "Muscolo strappato", -- A_Classic_Fairytale:journey
["To the caves..."] = "Alle grotte...", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Team Velenoso", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
["Traitors"] = "Traditori",
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "Cerca di proteggere il capo! Non perderai se muore, ma è meglio che sopravviva.", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
["Uhmm...ok no."] = "Uhmm...ok no.", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
["Under Construction"] = "In costruzione", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "Usa la spara-portali per prendere la prossima cassa, poi usala di nuovo per raggiungere la destinazione finale!|", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
- ["Wannabe Flyboys"] = "Volatori speranzosi", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
- ["Wannabe Shoppsta"] = "Shopper speranzosi", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
["We have to protect the village!"] = "Dobbiamo proteggere il villaggio", -- A_Classic_Fairytale:united
["We have to unite and defeat those cylergs!"] = "Dobbiamo unirci e difendere questi cylergs", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
["Welcome, Leaks A Lot!"] = "Benvenuto Leaks A Lot!", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "Non puoi aver pensato che dopo aver rifiutato la mia offerta ti avrei lasciata andare!", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Guarda, l'acqua si sta alzando rapidamente!",
["You'd better watch your steps..."] = "E' meglio che tu stia attento...", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
["You did not make it in time, try again!"] = "Non hai fatto in tempo, prova ancora!",
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
["You have been giving us out to the enemy, haven't you!"] = "Tu ci hai consegnati al nemico, vero?!", -- A_Classic_Fairytale:backstab
["You have chosen the perfect moment to leave."] = "Hai scelto il momento perfetto per andartene...", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
["You'll see what I mean!"] = "Vedrai cosa intendo!", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
["Your death will not be in vain, Dense Cloud!"] = "La tua morte non sarà invana, Nuvola Densa!", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"] = "Sei...vivo!? Noi ti abbiamo visto morire!",
["You're a pathetic liar!"] = "Sei un patetico bugiardo!",
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
["You're funny!"] = "Sei divertente!",
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/ko.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/ko.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
-- ["Bazooka Training"] = "",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
--- ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
-- ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
-- ["Eliminate the enemy specialists."] = "",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
-- ["Get on over there and take him out!"] = "",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
-- ["GO! GO! GO!"] = "",
-- ["Good birdy......"] = "",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
--- ["Nameless Heroes"] = "",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
-- ["Oh no! Just try again!"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
-- ["Oh no! Time's up! Just try again."] = "", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Opposing Team: "] = "",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
-- ["Sniper Training"] = "",
--- ["Sniperz"] = "",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
-- ["Team %d: "] = "",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
-- ["This rain is really something..."] = "",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-- ["You'd almost swear the water was rising!"] = "",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/lt.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/lt.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Bazukos Treniruotë",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Prakeikti Eiliniai", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Sunaikink Visus taikinius kol neiðseko laikas.|Ðitai misijai gausi nesibaigianèiu kulku.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
["Eliminate the enemy specialists."] = "Sunaikink prieðus specialistus.",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Nueik Ten Ir Nudauþk Ji!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "Bëk! Bëk! Bëk!",
["Good birdy......"] = "Geras Paukðtelis......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Bevardþiai Herojiai",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "O NE! Tiesiog Bandyk Vël", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "O NE! Baigësi Laikas! Tiesiog Bandyk Vël.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Pasiprieðinanti Komanda: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Spausk [TaikluNusitaikima kad baigtum iëjima",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Iðgelbëk kuo daugiau nelaimingu eþiu!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Durnelis",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Snaiperio Treniruotë",
- ["Sniperz"] = "Snaiperiai",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Komanda %d: ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Bevardis",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Ðis lietus tikrai kaþkas...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Toksinë Komanda", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Galima pamanyti kad vanduo tikrai kyla!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/missions_de.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/missions_de.txt Mon Jan 14 12:35:32 2019 -0500
@@ -17,7 +17,7 @@
Basic_Training_-_Flying_Saucer.desc="Mit einer fliegenden Untertasse erreicht man so ziemlich jeden Punkt, wenn man denn fliegen kann. Lern, wie man fliegt, wie man von einer fliegenden Untertasse aus angreift und probier ein paar coole Stunts aus."
User_Mission_-_Dangerous_Ducklings.name=Gefährliche Entchen
-User_Mission_-_Dangerous_Ducklings.desc="Nun gut, Rekrut! Es ist Zeit, dass du das in der Grundausbildung Gelernte in die Tag umsetzt!"
+User_Mission_-_Dangerous_Ducklings.desc="Nun gut, Rekrut! Es ist Zeit, dass du das in der Grundausbildung Gelernte in die Tat umsetzt!"
User_Mission_-_Diver.name=Taucher
User_Mission_-_Diver.desc="Diese amphibische Angriffsstrategie ist schwieriger, als sie aussieht."
@@ -59,7 +59,7 @@
Big_Armory.desc="Du bist alleine, hast ein volles Arsenal und musst 8 Igel besiegen, bevor die Zeit abläuft."
Bazooka_Battlefield.name=Bazookaschlachtfeld
-Bazooka_Battlefield.desc="Deine treuen Ritter haben den Feind in einen Hinterhalt gelockt. Zerstöre sie nur mit Bazookas! Aber trödel nicht zu lange, denn das Wasser wird bald steigen."
+Bazooka_Battlefield.desc="Deine treuen Igel haben den Feind in einen Hinterhalt gelockt. Zerstöre sie nur mit Bazookas! Aber trödel nicht zu lange, denn das Wasser wird bald steigen."
Tentacle_Terror.name=Tentakel-Terror
Tentacle_Terror.desc="Unter einem furchtbaren Monster versteckt sich dein Feind wie ein Feigling und wird dich mit Luftangriffen angreifen, sobald du aus der Deckung gehst. Zeig ihm, wer in der Hölle das Sagen hat! Aber du brauchst schon teuflisch gute Seilfähigkeiten, um überhaupt eine Chance zu haben."
--- a/share/hedgewars/Data/Locale/missions_en.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/missions_en.txt Mon Jan 14 12:35:32 2019 -0500
@@ -53,7 +53,7 @@
Big_Armory.desc="You are alone, have a full armory and must defeat 8 hedgehogs before the time runs out."
Bazooka_Battlefield.name=Bazooka Battlefield
-Bazooka_Battlefield.desc="Your loyal knights have ambushed the enemy. Destroy them only with bazookas! But don't take too long, the water will rise soon."
+Bazooka_Battlefield.desc="Your loyal hedgehogs have ambushed the enemy. Destroy them only with bazookas! But don't take too long, the water will rise soon."
Tentacle_Terror.name=Tentacle Terror
Tentacle_Terror.desc="Below a terrible monster, your enemy is hiding like a coward and will attack you with air strikes as soon you lose cover. Show him who's the real boss in Hell! But you need some devilish good roping skills to even stand a chance."
--- a/share/hedgewars/Data/Locale/pl.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/pl.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
["Above-average pilot"] = "Nadprzeciętny pilot", -- User_Mission_-_RCPlane_Challenge
["Accuracy Bonus! +15 points"] = "Bonus za celność! +15 punktów", -- Space_Invasion
["Accuracy bonus: +%d points"] = "Bonus za celność! +%d punktów", -- Basic_Training_-_Sniper_Rifle
- ["Ace"] = "As", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
["Achievement gotten: %s"] = "Osiągnięcie zdobyte: %s", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Klasyczna bajka", -- A_Classic_Fairytale:first_blood
["A crate critical to this mission has been destroyed."] = "Skrzynia krytyczna dla tej misji została zniszczona.", -- SimpleMission
@@ -141,13 +140,14 @@
["As you've seen, the dropped grenade roughly fell into your flying direction."] = "Jak widziałeś, upuszczony granat z grubsza spadł w kierunku twojego lotu.", -- Basic_Training_-_Flying_Saucer
["Athlete"] = "Atleta", -- Battalion
["Attack: Activate"] = "Atak: Aktywuj", -- Racer
- ["Attack Captain Lime before he attacks back"] = "Zaatakuj Kapitana Limonkę, zanim on zaatakuje", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
["Attack From Rope: %s"] = "Atak z liny: %s", -- WxW
["Attack From Rope: You may only attack from a rope."] = "Atak z liny: Możesz atakować tylko z liny", -- WxW
["Attack rule: %s"] = "Zasada ataku: %s", -- WxW
["Attack: Select this continent"] = "Atak: Wybierz ten kontynent", -- Continental_supplies
["Attack: [Space]"] = "Atak: [Spacja]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
- ["Attack the assassins before they attack back"] = "Zaatakuj zabójców, zanim oni zaatakują", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
["Attack: Throw ball"] = "Atak: Rzuć kulę", -- Knockball
["At the end of the game your health was %d."] = "Na końcu gry, twoje zdrowie wynasiło %d.", -- A_Space_Adventure:ice01
["At the start of the game each enemy hog has only the weapon that he is named after."] = "Na początku gry, każdy wrogi jeż ma tylko tę broń, po której jest nazwany.", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
["Available weapon specials:"] = "Dostępne speciały broni:", -- Continental_supplies
["Average pilot"] = "Przeciętny pilot", -- User_Mission_-_RCPlane_Challenge
["Avoid bazookas, red and blue invaders."] = "Unikaj bazook, czerwonych i niebieskich najeźdźców.", -- Space_Invasion
- ["Avoid the mines!"] = "Unikaj min!", -- Basic_Training_-_Rope
["Axes"] = "Osie", -- Bazooka_Battlefield
["Aye! Fellow! Let me exit this chamber of doom!"] = "Tak! Kolega! Daj mi wyjść z komnaty zagłady!", -- A_Classic_Fairytale:epil
["Back Breaker"] = "Łamacz Pleców", -- A_Classic_Fairytale:backstab
["Back in the village, after telling the villagers about the threat..."] = "Tymczasem w wiosce, po powiadomieniu mieszkańców o zagrożeniu...", -- A_Classic_Fairytale:united
["Back in the village, the two tribes finally started to live in harmony."] = "Tymczasem w wiosce, dwa plemienia w końcu zaczęły żyć w harmonii.", -- A_Classic_Fairytale:epil
["Back Jump: [Backspace] ×2"] = "Skok w tył: [Backspace] x2", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
["Back Jumping (1/2)"] = "Skok w tył (1/2)", -- Basic_Training_-_Movement
["Back Jumping (2/2)"] = "Skok w tył (2/2)", -- Basic_Training_-_Movement
["Backstab"] = "Zdrada", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
["Bazooka Battlefield"] = "Bazookowe pole bitwy", -- Bazooka_Battlefield
["Bazooka Master"] = "Mistrz bazooki", -- Basic_Training_-_Bazooka
["Bazookas are influenced by wind."] = "Wiatr ma wpływ na bazookę.", -- Basic_Training_-_Bazooka
- ["Bazooka Team"] = "Drużyna Bazooki", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Trening bazooki",
["Bearded Beast"] = "Brodata Bestia",
["Be careful, the future of Hogera is in your hands!"] = "Bądź ostrożny, przyszłość Jeżery leży w twoich rękach!", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
["Bloodpie"] = "Krwiociasto", -- A_Classic_Fairytale:backstab
["Bloodrocutor"] = "Krwiolokator", -- A_Classic_Fairytale:shadow
["Bloodsucker"] = "Krwiowysysacz", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Krwawe Żółtodzioby",
["Blue"] = "Niebieski",
["Blue Team"] = "Niebieska Drużyna", -- User_Mission_-_Dangerous_Ducklings
["Bob"] = "Bob", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
["Challenge over!"] = "Wyzwanie skończone!", -- User_Mission_-_Rope_Knock_Challenge
["Challenge"] = "Wyzwanie", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
["Change Content: [Left], [Right]"] = "Zmień zawartość: [Lewo], [Prawo]", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
["Change direction: [Left]/[Right]"] = "Zmień kierunek: [Lewo]/[Prawo]", -- Basic_Training_-_Grenade
["Change Health Boost: [Left], [Right]"] = "Zmień wzrost zdrowia: [Lewo], [Prawo]", -- HedgeEditor
["Change Health: [Left], [Right]"] = "Zmień zdrowie: [Lewo], [Prawo]", -- HedgeEditor
@@ -334,6 +333,8 @@
["Chicken"] = "Kurczak",
["Chief Sandologist"] = "Naczelny Piaskolog", -- A_Space_Adventure:desert01
["Chikorita"] = "Chikorita",
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
["Choose Selection/Placement/Deletion: [Left], [Right]"] = "Wybierz Zaznaczanie/Ustawianie/Usuwanie: [Lewo], [Prawo]", -- HedgeEditor
["Choose your continent wisely, as your decision will be permanent."] = "Wybierz swój kontynent mądrze, bo twoja decyzja będzie trwała.", -- Continental_supplies
["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "Wybierz swoją stronę! Jeśli chcesz dołączyć do dziwnego mężczyzny, podejdź do niego.|W innym przypadku, odejdź od niego. Jeśli zdecydujesz się zaata... nieważne...", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
["Cleaver Placement Mode"] = "Tryb Stawiania Tasaków", -- Construction_Mode
["CLEAVER PLACEMENT MODE"] = "TRYB STAWIANIA TASAKÓW", -- HedgeEditor
["Cleaver"] = "Tasak", -- Construction_Mode
- ["Climber"] = "Wspinacz", -- ClimbHome
["Climb Home"] = "Wspinaczka do domu", -- ClimbHome
["Closing in"] = "Nadejście", -- A_Classic_Fairytale:queen
["Clown"] = "Klaun", -- HedgeEditor
@@ -356,7 +356,7 @@
["Collect or destroy all the health crates."] = "Zbierz lub zniszcz wszystkie skrzynki ze zdrowiem.", -- User_Mission_-_RCPlane_Challenge
["Collect or destroy the final crate to finish the training."] = "Zbierz lub zniszcz ostatnią skrzynkę, by zakończyć trening.", -- Basic_Training_-_Flying_Saucer
["Collect the crate and attack!"] = "Zbierz skrzynię i atakuj!", -- WxW
- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "Zbierz skrzynię po prawej.|Porada: Wybierz linę, [Góra] lub [Dół], by celować, [Spacja], by wystrzelić, klawisze kierunku, by się poruszać.|Liny mogą być wystrzelone ponownie w powietrzu!", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "Zbierz skrzynie na czas!|Jeśli i się nie uda, będziesz musiał spróbować ponownie.", -- A_Classic_Fairytale:first_blood
["Collect the first crate to begin!"] = "Zbierz pierwszą skrzynię, by zacząć!", -- Basic_Training_-_Flying_Saucer
["Collect the freezer and get the device part from Thanta."] = "Zbierz zamrażarkę i zabierz część urządzenia Tancie.", -- A_Space_Adventure:ice01
@@ -458,8 +458,8 @@
["Deer"] = "Jeleń",
["Defeat all enemies!"] = "Pokonaj wszystkich wrogów!", -- portal
["Defeat Professor Hogevil!"] = "Pokonaj Profesora Jeżozło!", -- A_Space_Adventure:death01
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Pokonaj kanibali!|Porada do granatów: ustaw zapalnik używając [1-5], celuj [Góra]/[Dół] i przytrzymaj [Spację], by ustawić moc", -- A_Classic_Fairytale:shadow
- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Pokonaj kanibali!|Porada do granatów: ustaw zapalnik używając [1-5], celuj [Góra]/[Dół] i przytrzymaj [Spację], by ustawić moc", -- A_Classic_Fairytale:shadow
["Defeat the cannibals"] = "Pokonaj kanibali", -- A_Classic_Fairytale:backstab
["Defeat the cannibals!|"] = "Pokonaj kanibali!|", -- A_Classic_Fairytale:united
["Defeat the cyborgs!"] = "Pokonaj cyborgów!", -- A_Classic_Fairytale:enemy
@@ -482,11 +482,8 @@
["Destroyer of planes"] = "Niszczyciel samolotów", -- User_Mission_-_RCPlane_Challenge
["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "Zniszcz go, Spory Przecieku! On jest odpowiedzalny za śmierć wielu z nas!", -- A_Classic_Fairytale:first_blood
["Destroy invaders and collect bonuses to score points."] = "Niszcz najeźdźców i zbieraj bonusy, by zaliczać punkty.", -- Space_Invasion
- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "Zniszcz cele!|Porada: Wybierz Ognistą Pięść i wciśnij [Spację]|P.S. Możesz używać jej także w powietrzu.", -- A_Classic_Fairytale:first_blood
- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "Zniszcz cele!|Porada: [Góra], [Dół], by celować; [Spacja] by strzelić", -- A_Classic_Fairytale:first_blood
["Destroy the targets!"] = "Zniszcz cele!", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["+%d flamer fuel!"] = "+%d paliwa miotacza ognia!", -- Tumbler
- ["%d Hapless Hogs left"] = "Zostało %d nieszczęśliwych jeży", -- User_Mission_-_That_Sinking_Feeling
["+%d health"] = "+%d zdrowia", -- Mutant
["%d-Hit Combo! +%d points!"] = "%d-krotne kombo! +%d punktów!", -- Space_Invasion
["Did anyone follow you?"] = "Czy ktoś cię śledził?", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
["Elderbot"] = "Starszyrobot", -- A_Classic_Fairytale:family
["Elimate your captor."] = "Wyeliminuj swojego porywacza.", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Wyeliminuj wszystkie cele, zanim upłynie czas.|W tej misji masz nieskończoną ilość amunicji.",
- ["Eliminate the Blue Team before the time runs out."] = "Wyeliminuj Niebieską Drużynę, zanim upłynie czas.", -- User_Mission_-_Dangerous_Ducklings
["Eliminate the enemy before the time runs out."] = "Wyeliminuj wroga, zanim upłynie czas.", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Wybij jeże przeciwnika by wygrać.",
["Eliminate the enemy specialists."] = "Zabij specjalistów wroga.",
@@ -622,7 +618,7 @@
["Exactly, man! That was my dream."] = "Dokładnie ziom! To był mój sen.", -- A_Classic_Fairytale:backstab
["Except me, of course! I just saved a whole planet!"] = "Oprócz mnie, oczywiście! Właśnie uratowałem całą planetę!", -- A_Space_Adventure:final
["Experienced beginner"] = "Doświadczony początkujący", -- User_Mission_-_RCPlane_Challenge
- ["Explore the tunnel with the other hedgehogs and search for the device"] = "Przeszukaj tunel z innymi jeżami i szukaj urządzenia", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
["Exploring the tunnel"] = "Eksploracja tunelu", -- A_Space_Adventure:fruit02
["Eye Chewer"] = "Przeżuwacz Oczu", -- A_Classic_Fairytale:journey
["Fair Wind"] = "Sprawiedliwy Wiatr",
@@ -648,11 +644,12 @@
["Final result"] = "Końcowy rezultat", -- Mutant
["Final Targets"] = "Ostatnie cele", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["Final team scores:"] = "Końcowe wyniki drużyn:", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
["Find a way to detonate all the explosives and stay alive!"] = "Znajdź sposób, by zdetonować wszystkie ładunki wybuchowe i przeżyć!", -- A_Space_Adventure:final
["Find your tribe!|Cross the lake!"] = "Znajdź swoje plemie!|Przekrocz jezioro!", -- A_Classic_Fairytale:dragon
["Finish this challenge as fast as possible to earn bonus points."] = "Ukończ to wyzwanie najszybciej, jak to możliwe, by zdobyć dodaktowe punkty.", -- User_Mission_-_Rope_Knock_Challenge
["Finish waypoint placement"] = "Zakończ stawianie punktów kontrolnych", -- Racer
- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "Ukończ swój trening|Porada: Animacje mogą być pominięte przyciskiem [Precyzja]", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
["Finite Ropes"] = "Skończone liny", -- Basic_Training_-_Rope
["Fire a rocket with napalm."] = "Strzel rakietą z napalmem.", -- Continental_supplies
["Fire: [Precise]"] = "Strzel: [Precyzja]", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
["Flying Saucer Training"] = "Trening latającego talerza", -- Basic_Training_-_Flying_Saucer
["Fly into space to fight off the invaders with barrels!"] = "Leć w kosmos, by odeprzeć najeźdźców beczkami!", -- Space_Invasion
["Fly to the meteorite and detonate the explosives"] = "Poleć do meteorytu i zdetonuj ładunki", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
["Forgetfulness: You will lose all your weapons each turn."] = "Zapominalstwo: W każdej turze stracisz wszystkie swoje bronie.", -- Continental_supplies
["For the next crate, you have to do back jumps."] = "Do następnej skrzyni musisz zrobić skoki w tył.", -- Basic_Training_-_Movement
["Four Eyes"] = "Czterooki",
@@ -713,15 +711,15 @@
["Gear information hidden"] = "Informacje o rzeczach ukryte", -- HedgeEditor
["Gear information shown"] = "Informacje o rzeczach pokazane", -- HedgeEditor
["Gear Placement Tool"] = "Narzędzie Ustawiania Rzeczy", -- HedgeEditor
+ ["General information"] = "Ogólne informacje", -- Continental_supplies
["General information:"] = "Ogólne informacje:", -- Continental_supplies
- ["General information"] = "Ogólne informacje", -- Continental_supplies
["General Lemon"] = "Generał Cytryna", -- A_Space_Adventure:fruit01
["Generator: Generates energy."] = "Generator: Generuje energię.", -- Construction_Mode
["Generator"] = "Generator", -- Construction_Mode
["Get Dense Cloud out of the pit!"] = "Wydostań Gęstą Chmurę z dołu!", -- A_Classic_Fairytale:journey
["Get him, Spike!"] = "Bierz go, Kolczasy!", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Dostań się tam i go wykończ!",
- ["Get on the head of the mole"] = "Wejdź na głowę kreta", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
["Get past the flower."] = "Przejdź przez kwiatek.", -- A_Classic_Fairytale:journey
["Get ready to fight!"] = "Przygotuj się do walki!", -- A_Space_Adventure:moon01
["Get that crate!"] = "Zdobądź tę skrzynię!", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "RUCHY! RUCHY! RUCHY!",
["Good birdy......"] = "Dobry ptaszek......",
["Good bye!"] = "Do widzenia!", -- Basic_Training_-_Flying_Saucer
- ["Good Dude"] = "Dobry Kolo", -- User_Mission_-_The_Great_Escape
["Good idea, they'll never find us there!"] = "Dobry pomysł, nigdy nas tu nie znajdą!", -- A_Classic_Fairytale:united
["Good job! Defeat the rest of the aliens!"] = "Dobra robota! Pokonaj resztę obcych!", -- A_Classic_Fairytale:queen
["Good job!"] = "Dobra robota!", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
@@ -770,7 +767,7 @@
["Good so far!"] = "Jak dotąd idzie dobrze!",
["Good to go!"] = "Gotowi do akcji!",
["Good! You now control Cappy."] = "Dobrze! Teraz kontrolujesz Czapeczkę.", -- Basic_Training_-_Movement
- ["Go on top of the flower"] = "Wejdź na szczyt kwiatka", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
["Go, quick!"] = "Idź szybko!", -- A_Classic_Fairytale:backstab
["Gorkij"] = "Gorkij", -- A_Classic_Fairytale:journey
["Go surf!"] = "Idź serfować!", -- WxW
@@ -791,7 +788,6 @@
["Great!"] = "Świetnie!", -- Basic_Training_-_Rope
["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "Świetna robota! Teraz uderz go swoim kijem bejsbolowym!|Porada: Możesz zmienić broń 'Prawym kliknięciem'!", -- Basic_Training_-_Rope
["Great! You will be contacted soon for assistance."] = "Świetnie! Niedługo skontaktujemy się z tobą po pomoc.", -- A_Classic_Fairytale:shadow
- ["Green Bananas won!"] = "Zielone Banany wygrywają!", -- A_Space_Adventure:fruit01
["Green Bananas"] = "Zielone Banany", -- A_Space_Adventure:fruit01
["Green double rings also give you a new flying saucer."] = "Zielone podwójne pierścienie również dają nowy latający talerz.", -- A_Space_Adventure:ice02
["Green Hog Grape"] = "Zielonojeżowy Winogron", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
["Greetings, cloudy one!"] = "Witaj, chmurzysty", -- A_Classic_Fairytale:shadow
["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "Pozdrowienia od Marynarki, %s (%s), za bycie w odległości %d od lądu!", -- ClimbHome
["Greetings, %s!"] = "Pozdrowienia, %s!", -- A_Classic_Fairytale:dragon
- ["Greg"] = "Grzegorz", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["Grenade Group"] = "Granatowa Grupa", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
["Grenades explode after 1 to 5 seconds (you decide)."] = "Granat wybucha po 1 do 5 sekundach (ty wybierasz).", -- Basic_Training_-_Grenade
["Grenades with high bounciness bounce a lot and behave chaotic."] = "Granat z dużą odbijalnością odbija się bardzo dużo i zachowuje chaotycznie.", -- Basic_Training_-_Grenade
- ["Grenade Team"] = "Granatowa drużyna", -- Basic_Training_-_Grenade
["Grenade Training"] = "Trening Granatowy", -- Basic_Training_-_Grenade
["Grenadier"] = "Grenadier", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
["Grenadiers"] = "Grenadierzy", -- Basic_Training_-_Grenade
@@ -857,9 +852,10 @@
["HEDGEEDITOR"] = "JEŻEDYTOR", -- HedgeEditor
["HedgeEditor tool"] = "Narzędzie JeżEdytora", -- HedgeEditor
["Hedgehog"] = "Jeż",
+ ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "Jeżowy pocisk: [Wystrzel swojego jeża jak minę samoprzylepną]", -- Continental_supplies
["Hedgehog Projectile"] = "Pocisk jeżowy", -- Continental_supplies
- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "Jeżowy pocisk: [Wystrzel swojego jeża jak minę samoprzylepną]", -- Continental_supplies
["Hedgehogs can not be deleted."] = "Jeże nie mogą być usunięte", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
["Hedgehogs will be revived after their death."] = "Jeże zostaną ożywione po śmierci.", -- Mutant
["Hedgehogs will start in the first waypoint."] = "Jeże zaczną na pierwszym punkcie kontrolnym.", -- Racer
["Hedgibal Lecter"] = "Hanijeż Lekter", -- A_Classic_Fairytale:backstab
@@ -875,7 +871,6 @@
["Help Enabled"] = "Pomoc włączona", -- HedgeEditor
["Helpers: Each team starts with %d helper points"] = "Pomocnicy: Każda drużyna zaczyna z %d punktami pomocniczymi", -- Battalion
["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "Pomocnicy: Jeże dostaną losowo 1 z 2 pomocników co turę", -- Battalion
- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "Pomóż Hogowi Solo znaleźć wszystkie części urządzenia antygrawitacyjnego.", -- A_Space_Adventure:cosmos
["Help me, Leaks!"] = "Przeciek, pomóż mi!", -- A_Classic_Fairytale:journey
["Help me, please!!!"] = "Pomóż mi, proszę!!!", -- A_Classic_Fairytale:journey
["Help me, please!"] = "Pomóż mi, proszę!", -- A_Classic_Fairytale:journey
@@ -890,20 +885,20 @@
["Here you will find the current mission instructions."] = "Tutaj znajdziesz instrukcje do aktualnej misji", -- Basic_Training_-_Movement
["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "Tutaj poznasz jak lata się latającym talerzem|i będziesz mieć szansę poznać odlotowe sztuczki.", -- Basic_Training_-_Flying_Saucer
["Heroic Wind"] = "Heroiczny wiatr", -- Continental_supplies
- ["Hero Team"] = "Drużyna Bohatera", -- User_Mission_-_The_Great_Escape
["He's so brave..."] = "Jest taki odważny...", -- A_Classic_Fairytale:first_blood
["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "Był asystentem laboratoryjnym Dr Dobrojeża, wynalazcy urządzenia antygrawitacyjnego.", -- A_Space_Adventure:moon02
["He won't be selling us out anymore!"] = "On już nas nie sprzeda!", -- A_Classic_Fairytale:backstab
["Hey, don't forget us! We still need to climb up!"] = "Hej, nie zapomnij o nas! Nadal potrzebujemy się wspiąć!", -- A_Classic_Fairytale:family
["Hey, guys!"] = "Hej, koledzy!", -- A_Classic_Fairytale:backstab
["Hey guys!"] = "Hej koledzy!", -- A_Classic_Fairytale:united
- ["Hey, Hog Solo! Finally you have come!"] = "Hej, Hog Solo! Nareszcie przybyłeś!", -- A_Space_Adventure:moon01
["Hey! I was supposed to collect it!"] = "Hej! Miałem ją zebrać!", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
["Hey, %s! Look, someone is stealing the saucer!"] = "Hej, %s! Zobacz, ktoś kradnie nasz talerz!", -- A_Space_Adventure:cosmos
["Hey! This is cheating!"] = "Hej! To oszukiwanie!", -- A_Classic_Fairytale:journey
["Hidden"] = "Ukryte", -- portal
["High Gravity: Gravity is %i%%"] = "Wysoka grawitacja: Grawitacja wynosi %i%%", -- Gravity
["High Jump: [Backspace]"] = "Wysoki skok: [Backspace]", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
["Highlander: Eliminate hogs to take their weapons"] = "Highlander: Wyeliminuj jeże, by zabrać ich bronie", -- Highlander
["Highland: Hogs get %d random weapons from their pool"] = "Wyżyna: Jeże dostają %d losowych broni ze swoich pul", -- Battalion
["--- Highland Mode ---"] = "Tryb wyżyny", -- Battalion
@@ -913,20 +908,26 @@
["Hightower"] = "Wysowieża",
["Hill Guard"] = "Straż górna", -- Bazooka_Battlefield
["Hi! Nice to meet you."] = "Cześć! Miło cię poznać.", -- A_Space_Adventure:ice01
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
["Hint: Double Jump - Press [Backspace] twice"] = "Wskazówka: Podwójny skok - Wciśnij [Backspace] dwa razy", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
["Hint: Drilling holes should solve everything."] = "Wywiercenie dziur powinno wszystko rozwiązać.", -- A_Classic_Fairytale:family
["Hint: Hold down [M] to review the mission texts."] = "Wskazówka: Przytrzymaj [M], by zobaczyć teksty misji.", -- A_Classic_Fairytale:first_blood
["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "Wskazówka: Jeśli panel misji zniknie, możesz zobaczyć go ponownie, wciskając Pauzę lub Wyjście.", -- Basic_Training_-_Movement
["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "Wskazówka: To może być dobry pomysł, by ustawić belki przed rozpoczęciem wiercenia. Tylko mówię.", -- A_Classic_Fairytale:family
["Hint: It might be easier if you vary the angle only slightly."] = "Wskazówka: Może być łatwiej, jeśli zmienisz kąt tylko trochę.", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "Wskazówka: Zabójstwa nie przetransferują puli jeża do puli zabójcy", -- Battalion
["Hint: Launch the bazooka horizontally at full power."] = "Wskazówka: Wystrzel bazookę poziomo z pełną mocą.", -- Basic_Training_-_Bazooka
- ["Hint: Press [Esc] to review the mission texts."] = "Porada: Wciśnij [Esc], by zobaczyć teksty misji.", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "Porada: Wybierz palnik, wyceluj i wciśnij [Strzał]. Wciśnij ponownie [Strzał], by się zatrzymać.", -- A_Classic_Fairytale:journey
["Hint: Select the low gravity and press [Fire]."] = "Porada: Wybierz niską grawitację i wciśnij [Strzał].", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
["Hint: %s needs to get really close to the princess!"] = "Wskazówka: %s potrzebuje dostać się naprawdę blisko księżniczki!", -- A_Classic_Fairytale:family
["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "Wskazówka: Lina owija się jedynie wokół obiektów.|Jeśli nic nie uderzy, zawsze jest prosta.", -- Basic_Training_-_Rope
["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "Wskazówka: By skoczyć wyżej, poczekaj trochę zanim ponownie wciśniesz \"Wysoki skok\".", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
["Hint: Use the quit key to see the team’s continent."] = "Porada: Uzyj klawisza wyjścia, by zobaczyć kontynent drużyny", -- Continental_supplies
["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "Wskazówka: Kiedy skrócisz linę poruszasz się szybciej!|A kiedy ją wydłużysz, poruszasz się wolniej.", -- Basic_Training_-_Rope
["--- Hint ---"] = "--- Wskazówka ---", -- Battalion
@@ -962,27 +963,15 @@
["Hogminator"] = "Jeżminator", -- A_Classic_Fairytale:family
["Hog nueve"] = "Jeż nueve", -- A_Space_Adventure:fruit03
["Hog octo"] = "Jeż okto", -- A_Space_Adventure:fruit03
- ["Hogonauts"] = "Jeżonauci", -- Basic_Training_-_Flying_Saucer
["Hog onze"] = "Jeż onze", -- A_Space_Adventure:fruit03
["Hog Saturn"] = "Jeż Saturn", -- A_Space_Adventure:fruit03
["Hogs in sight!"] = "Jeż na widoku!", -- Continental_supplies
["Hog Solo and GB"] = "Hog Solo i ZB", -- A_Space_Adventure:fruit02
- ["Hog Solo arrived at the Desert Planet!"] = "Hog Solo przybył na Pustynną Planetę!", -- A_Space_Adventure:cosmos
- ["Hog Solo arrived at the Fruit Planet!"] = "Hog Solo przybył na Planetę Owoców!", -- A_Space_Adventure:cosmos
- ["Hog Solo arrived at the Ice Planet!"] = "Hog Solo przybył na Lodową Planetę!", -- A_Space_Adventure:cosmos
- ["Hog Solo arrived at the meteorite!"] = "Hog Solo przybył na meteoryt!", -- A_Space_Adventure:cosmos
- ["Hog Solo arrived at the moon!"] = "Hog Solo przybył na księżyć!", -- A_Space_Adventure:cosmos
- ["Hog Solo arrived at the Planet of Death!"] = "Hog Solo przybył na Planetę Śmierci!", -- A_Space_Adventure:cosmos
- ["Hog Solo couldn't escape, try again!"] = "Hog Solo nie mógł uciec, spróbuj ponownie!", -- A_Space_Adventure:fruit01
- ["Hog Solo escaped successfully!"] = "Hog Solo uciekł pomyślnie!", -- A_Space_Adventure:fruit01
- ["Hog Solo has to reach the last crates"] = "Hog Solo musi dostać się do ostatnich skrzyń", -- A_Space_Adventure:fruit02
- ["Hog Solo has to refuel his saucer."] = "Hog Solo musi uzupełnić paliwo w swoim spodku.", -- A_Space_Adventure:moon01
["Hog Solo"] = "Hog Solo", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
- ["Hog Solo lost, try again!"] = "Hog Solo przegrał, spróbuj ponownie!", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
- ["Hog Solo wins, congratulations!"] = "Hog Solo wygrywa, gratulacje!", -- A_Space_Adventure:moon01
["- Hogs will be revived"] = "- Jeże zostaną ożywione", -- Capture_the_Flag
["- Hogs will drop the flag when killed"] = "Jeże upuszczą flagę po zginięciu", -- Capture_the_Flag
["Hog two"] = "Jeż dwa", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
["Hold [Attack] to attach the rope."] = "Wciśnij [Atak], by zaczepić linę", -- Basic_Training_-_Rope
["Hold the Attack key pressed for more power."] = "Przytrzymaj klawisz ataku po więcej mocy.", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
["Holy shit!"] = "Jasna cholera!", -- Mutant
@@ -1007,7 +996,7 @@
["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "Jednakże, jeśli nie uda ci się tego zrobić, ona umrze najbardziej brutalną śmiercią, tak jak twój przyjaciel! Muahahaha!", -- A_Classic_Fairytale:journey
["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "Jednakże, jeśli nie uda ci się tego zrobić, ona umrze najbardziej brutalną śmiercią! Muahahaha!", -- A_Classic_Fairytale:journey
["However, my mates don't agree with me on letting you go..."] = "Jednakże, moi kumple nie zgodzą się ze mną, by cię wypuścić...", -- A_Classic_Fairytale:dragon
- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "Jednakże, armia Żółtych Arbuzów może zaatakować w każdej chwili.", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
["How to Rope"] = "Jak używać liny", -- Basic_Training_-_Rope
["How would you like being discriminated against?"] = "Jak podoba ci się bycie dyskryminowanym?", -- A_Classic_Fairytale:queen
["Huh?"] = "Huh?", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1028,7 +1017,6 @@
["I can't let you go further because …"] = "Nie mogę pozwolić ci pójść dalej, bo...", -- A_Classic_Fairytale:queen
["I can't wait any more, I have to save myself!"] = "Nie mogę już dłużej czekać, muszę się ratować!", -- A_Classic_Fairytale:shadow
["Ice Jake"] = "Lodowy Dżejk", -- A_Space_Adventure:ice01
- ["Ice"] = "Lód", -- Basic_Training_-_Movement
["I could just teleport myself there..."] = "Mógłbym się tam po prostu teleportować.", -- A_Classic_Fairytale:family
["Icy Girder: [3]"] = "Lodowa Belka: [3]", -- HedgeEditor
["Icy Land: [3]"] = "Lodowy Teren: [3]", -- HedgeEditor
@@ -1085,7 +1073,6 @@
["I just found out that they have captured your princess!"] = "Właśnie się dowiedziałem, że porwali waszą księżniczkę!", -- A_Classic_Fairytale:family
["I just want the strange device you found!"] = "Chcę po prostu to dziwne urządzenie, które znalazłeś!", -- A_Space_Adventure:ice01
["I just wonder where Ramon and Spiky disappeared..."] = "Zastanawiam się, gdzie podziali się Ramon i Kolczasty.", -- A_Classic_Fairytale:journey
- ["Ikeda"] = "Ikeda", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
["I know and I'm terribly sorry!"] = "Wiem, i strasznie mi przykro!", -- A_Classic_Fairytale:epil
["I know, my hero!"] = "Wiem, mój bohaterze!", -- A_Classic_Fairytale:epil
["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "Wiem, że twoje zasoby są na wyczerpaniu z powodu bitwy, ale wyślę dwóch z moich najlepszych jeży, by cię wsparli.", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
["I'm living a dream!"] = "Przeżywam sen!", -- A_Classic_Fairytale:queen
["I'm not sure about that!"] = "Nie jestem tego pewny!", -- A_Classic_Fairytale:united
["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "WAŻNE: By ponownie zobaczyć panel misji, przytrzymaj klawisz panelu misji.", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
["IMPORTANT: To see the mission panel again, use the quit or pause key."] = "WAŻNE: By zobaczyć panel misji ponownie, użyj przycisku wyjścia lub pauzy.", -- Basic_Training_-_Movement
["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "Imponujące... nadal jesteś suchy, jak zwłoki jastrzębia po tygodniu na pustyni...", -- A_Classic_Fairytale:first_blood
["%i ms"] = "%i ms", -- Gravity
@@ -1291,7 +1279,7 @@
["Launch some bazookas to destroy the targets!"] = "Wystrzel trochę bazook i zniszcz cele!", -- Basic_Training_-_Bazooka
["Leaderbot"] = "Dowódcobot", -- A_Classic_Fairytale:queen
["Leader"] = "Dowódca", -- A_Classic_Fairytale:enemy
- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "Poprowadź Zielone Banany do walki i wyeliminuj wszystkich wrogów!", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "Spory Przeciek, przygnębiony po zabiciu ukochanej, zawiódł w ratowaniu wioski...", -- A_Classic_Fairytale:journey
["Leaks A Lot gave his life for his tribe! He should have survived!"] = "Spory Przeciek oddał swoje życie dla jego plemienia! Powinien był przeżyć!", -- A_Classic_Fairytale:first_blood
["Leaks A Lot must survive!"] = "Spory Przeciek musi przeżyć!", -- A_Classic_Fairytale:journey
@@ -1306,7 +1294,6 @@
["Left/right: Choose crate contents"] = "Left/right: Wybierz zawartość skrzyni", -- Construction_Mode
["Left/right: Choose structure type|Cursor: Build structure"] = "Left/right: Wybierz rodzaj struktury|Kursor: Zbuduj strukturę", -- Construction_Mode
["Left/right: Choose structure type"] = "Lewo/Prawo: Wybierz typ struktury", -- Construction_Mode
- ["Left Tong"] = "Lewy Tong", -- Bazooka_Battlefield
["Legs"] = "Nogi",
["Less tools, more fun"] = "Mniej narzędzi, więcej zabawy", -- Battalion
["Lestat"] = "Lestat", -- portal
@@ -1333,12 +1320,13 @@
["Little did they know that this hunt will mark them forever..."] = "Nie zdają sobie sprawy, że to polowanie naznaczy ich na zawsze...", -- A_Classic_Fairytale:shadow
["Little Obstacle Course"] = "Mały tor przeszkód", -- Basic_Training_-_Rope
["Lively Lifeguard"] = "Żwawy Ratownik",
+ ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "Samotne łkanie: [Podnosi wodę, jeśli nie ma jeża w kole i zadaje 6 obrażeń każdemu wrogiemu jeżowi.]", -- Continental_supplies
["Lonely Cries"] = "Samotne łkanie", -- Continental_supplies
- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "Samotne łkanie: [Podnosi wodę, jeśli nie ma jeża w kole i zadaje 6 obrażeń każdemu wrogiemu jeżowi.]", -- Continental_supplies
- ["Lonely Hog"] = "Samotny Jeż", -- ClimbHome
["Long Jump: [Enter]"] = "Długi skok: [Enter]", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
["Long Live The Queen"] = "Niech żyje królowa", -- A_Classic_Fairytale:queen
["Look around: [Mouse movement]"] = "Rozejrzyj się: [Ruch myszą]", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
["Look, boss! There is the target!"] = "Zobacz, szefie! Tam jest cel!", -- A_Space_Adventure:moon01
["Look, I had no choice!"] = "Słuchaj, nie miałem wyboru!", -- A_Classic_Fairytale:backstab
["Look out! There's more of them!"] = "Uważaj! Jest ich więcej!", -- A_Classic_Fairytale:backstab
@@ -1346,7 +1334,6 @@
["Looks like the whole world is falling apart!"] = "Wygląda, jakby cały świat się walił!", -- A_Classic_Fairytale:enemy
["Loon"] = "Gbur", -- The_Specialists
["Loopy"] = "Wariat",
- ["Lord Evil"] = "Lord Zło", -- Tentacle_Terror
["Losing Condition: Destroy"] = "Warunek przegranej: Zniszcz", -- HedgeEditor
["Low Gravity: Gravity is %i%%"] = "Niska grawitacja: Grawitacja wynosi %i%%", -- Gravity
["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "Lojalny Highlander: Wyeliminuj jeże wroga, by przejąć ich bronie", -- Highlander
@@ -1365,7 +1352,6 @@
["Many meters below the surface ..."] = "Wiele metrów pod ziemią...", -- A_Space_Adventure:desert02
["Mario"] = "Mario",
["Mark gears for win/lose conditions"] = "Zaznacz rzeczy jako warunki wygranej/przegranej", -- HedgeEditor
- ["Mark"] = "Marek", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["Mark/unmark gear: [Left Click]"] = "Zaznacz/odznacz rzecz: [Lewy klik]", -- HedgeEditor
["- Massive weapon bonus on first turn"] = "- Masywny bonus broni w pierwszej turze", -- Continental_supplies
["Max Citrus"] = "Maks Cytrus", -- A_Space_Adventure:fruit01
@@ -1374,8 +1360,8 @@
["Maybe you should try easier waypoints next time."] = "Może następnym razem powinieneś spróbować łatwiejszych punktów kontrolnych.", -- Racer
["May the spirits aid you in all your quests!"] = "Niech dusze pomogą wam w waszych zadaniach!", -- A_Classic_Fairytale:backstab
["Meals"] = "Mils",
+ ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "Lekarstwo: [Wystrzel trochę eksplodującego leku, który uleczy wszystkie jeże w jej zasięgu]", -- Continental_supplies
["Medicine"] = "Lekarstwo", -- Continental_supplies
- ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "Lekarstwo: [Wystrzel trochę eksplodującego leku, który uleczy wszystkie jeże w jej zasięgu]", -- Continental_supplies
["Medic"] = "Medyk", -- Battalion
["MEDIUM"] = "ŚREDNI", -- Continental_supplies
["Mega kill!"] = "Mega zabójstwo!", -- Mutant
@@ -1421,7 +1407,6 @@
["Monster kill!"] = "Potworne zabójstwo!", -- Mutant
["Monsters"] = "Potwory",
["Mooney"] = "Muni",
- ["More Natives"] = "Więcej Tubylców", -- A_Classic_Fairytale:epil
["Morris"] = "Moris",
["Most mines are not active."] = "Większość min jest nieaktywna", -- A_Space_Adventure:desert02
["Most of the destructible terrain in marked with blue color"] = "Większość zniszczalnego terenu jest zaznaczone na niebieski kolor", -- A_Space_Adventure:desert01
@@ -1441,11 +1426,10 @@
["Nade Boy"] = "Natowy Chłopak", -- Basic_Training_-_Grenade
["Nah, probably everyone was just stupid."] = "Nie, prawdopodobnie każdy był po prostu głupi.", -- A_Space_Adventure:final
["Name"] = "Imię", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Bezimienni Bohaterowie",
["Nancy Screw"] = "Nansi Gwóźdź", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
["Napalm"] = "Napalm", -- Construction_Mode
+ ["Napalm rocket: [Fire a bomb with napalm!]"] = "Napalmowa rakieta: [Wystrzel bombę z napalmem!]", -- Continental_supplies
["Napalm Rocket"] = "Rakieta napalmowa", -- Continental_supplies
- ["Napalm rocket: [Fire a bomb with napalm!]"] = "Napalmowa rakieta: [Wystrzel bombę z napalmem!]", -- Continental_supplies
["Naranja Jed"] = "Narandża Dżed", -- A_Space_Adventure:fruit01
["Natives"] = "Tubylcy", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
["Naughty Ninja"] = "Niegrzeczny Ninja", -- User_Mission_-_Dangerous_Ducklings
@@ -1544,7 +1528,7 @@
["Oh, my! This is even more entertaining than I've expected!"] = "Ojejku! To jest bardziej zabawne, niż myślałem!", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Ojojoj! Spróbuj jeszcze raz!",
["Oh no, not %s!"] = "O nie, to %s!", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "O nie, Zielone Banany zdradziły Hoga Solo i ukradły część urządzenia antygrawitacyjnego!", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Ajajaj! Koniec czasu! Spróbuj jeszcze raz.",
["Oh no! You failed! Just try again."] = "O nie! Nie udało ci się! Spróbuj jeszcze raz.", -- Basic_Training_-_Cluster_Bomb
["Oh no! You have died. Try again!"] = "Och nie! Umarłeś. Spróbuj jeszcze raz!", -- Basic_Training_-_Flying_Saucer
@@ -1568,9 +1552,9 @@
["One shall not judge one by one's appearance!"] = "Nie powinno się kogoś sądzić po jego wyglądzie!", -- A_Classic_Fairytale:epil
["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
["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
@@ -1582,6 +1566,7 @@
["Oops, I've been spotted and I have no weapons! I am doomed!"] = "Ups, zostałem zauważony i nie mam broni! Już po mnie!", -- A_Space_Adventure:moon01
["Oops! You have selected the wrong hedgehog! Just try again."] = "Ups! Wybrałeś złego jeża! Po prostu spróbuj ponownie.", -- Basic_Training_-_Movement
["Open ammo menu: [Right click]"] = "Otwórz menu amunicji: [Prawy klik]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
["Open that crate and we will continue!"] = "Otwórz tę skrzynię i będziemy kontynuować!", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Przeciwna Drużyna",
["Orange"] = "Pomarańcz",
@@ -1601,13 +1586,13 @@
["PAotH"] = "PSJ", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:desert01, A_Space_Adventure:moon01
["Parachute"] = "Spadochron", -- Continental_supplies
["Patches"] = "Łatek",
- ["Pathetic Resistance"] = "Żałosny Opór", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
["Paul McHoggy"] = "Paul McJeżu", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
["Pause: [P]"] = "Pauza: [P]", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
["Penalty: If you violate above rule, you have to skip in the next turn."] = "Kara: Jeśli naruszysz powyższą zasadę, będziesz musiał opuścić następną turę.", -- WxW
- ["Penguin Roar"] = "Ryk pingwina", -- Continental_supplies
["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "Ryk pingwina: [Zadaj 15 obrażeń + 10% zdrowia twojego jeża wszystkim jeżom wokół ciebie i otrzymaj 2/3 z powrotem]", -- Continental_supplies
["Penguin roar: [Deal 15 damage + 10% of your hogs health to all hogs around you and get 2/3 back]"] = "Ryk pingwina: [Zadaje 15 obrażeń + 10% zdrowia twojego jeża wszystkim jeżom dookoła i dostaje 2/3 z powrotem]", -- Continental_supplies
+ ["Penguin Roar"] = "Ryk pingwina", -- Continental_supplies
["Perfect! Now try to get the next crate without hurting yourself!"] = "Idealnie! Teraz spróbuj zdobyć następną skrzynię bez zranienia się!", -- A_Classic_Fairytale:first_blood
["Per-Hog Ammo"] = "Oddzielna amunicja dla jeży",
["Per-hog Ammo: Weapons are not shared between hogs"] = "Oddzielna amunicja dla jeży: Bronie nie są dzielone między jeżami", -- User_Mission_-_Nobody_Laugh
@@ -1618,7 +1603,6 @@
["Physicist"] = "Fizyk", -- HedgeEditor
["Piano Strike"] = "Zrzut pianina", -- Construction_Mode
["Pikachu"] = "Pikachu",
- ["Pincer Knights"] = "Szczypcowi Rycerze", -- Bazooka_Battlefield
["Pings left: %d"] = "Pozostałe sygnały: %d", -- Space_Invasion
["Pink"] = "Róż",
["Pirates"] = "Piraci",
@@ -1653,8 +1637,8 @@
["- Place your clan flag at the end of your first turn"] = "- Ustaw flagę swojego klanu na końcu swojej pierwszej tury", -- Capture_the_Flag
["- Place your team flag at the end of your first turn"] = "- Postaw flagę twojej drużyny na końcu swojej pierwszej tury", -- Capture_the_Flag
["Planes used: %d"] = "Użyte samoloty: %d", -- User_Mission_-_RCPlane_Challenge
+ ["Planes Used"] = "Użyte Samoloty", -- User_Mission_-_RCPlane_Challenge
["Planes Used:"] = "Użyte Samoloty:", -- User_Mission_-_RCPlane_Challenge
- ["Planes Used"] = "Użyte Samoloty", -- User_Mission_-_RCPlane_Challenge
["Planets with all missions completed will be marked with two flowers."] = "Planety ze wszystkimi misjami ukończonymi będą zaznaczone dwoma kwiatkami.", -- A_Space_Adventure:cosmos
["Planets with completed main missions will be marked with a flower."] = "Planety z ukończonymi głównymi misjami będą zaznaczone kwiatkiem.", -- A_Space_Adventure:cosmos
["Play with me!"] = "Zagraj ze mną", -- A_Classic_Fairytale:shadow
@@ -1699,9 +1683,10 @@
["Press [Attack] to confirm."] = "Wciśnik [Atak], by zatwierdzić.", -- Continental_supplies
["Press [Attack] to select this continent!"] = "Wciśnij [Atak], by wybrać ten kontynent!", -- Continental_supplies
["Press [Left] and [Right] to change the difficulty."] = "Wciśnij [Lewo] i [Prawo], by zmienić trudność.", -- A_Classic_Fairytale:first_blood
- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Wciśnij [Lewo] lub [Prawo], by poruszaćsię, [Enter] by skoczyć.", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "Wciśnij [Długi skok] by zaakceptować tę konfigurację i zacząć ustawiać jeże.", -- WxW
["Press [Long jump] to accept this configuration and start the game."] = "Wciśnij [Długi skok] by zaakceptować tę konfigurację i zacząć grę.", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Naciśnij [Precyzja] by pominąć intro",
["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "Wciśnij [Góra] i [Dół], by poruszać się między pozycjami menu.|Wciśnij [Atak], [Lewo] lub [Prawo], by przełączyć.", -- WxW
["Prestigious Pilot"] = "Prestiżowy pilot", -- User_Mission_-_RCPlane_Challenge
@@ -1713,10 +1698,9 @@
["Professional stunt pilot"] = "Profesjonalny pilot kaskaderski", -- User_Mission_-_RCPlane_Challenge
["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "Profesor Jeżozło, wtedy znany jako Jakub Jeżus, za moich czasów pracował dla PSJ.", -- A_Space_Adventure:moon02
["Professor"] = "Profesor", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
["Prof. Hogevil"] = "Prof. Jeżozło", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
- ["Pro Killers"] = "Pro Zabójcy", -- Big_Armory
["Protect the King: When the king dies, so does the team"] = "Chroń Króla: Kiedy król umiera, drużyna ginie razem z nim", -- Battalion
- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Brońcie się!|Wskazówka do granatów: Ustaw zaplnik używając [1-5], celuj [Góra]/[Dół] i przytrzymaj [Spację], by ustawić moc", -- A_Classic_Fairytale:shadow
["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Broń się!|Porada do granatu: ustaw zapalnik używając [1-5], celuj za pomocą [Góra]/[Dół] i przytrzymaj spację, by ustawić moc", -- A_Classic_Fairytale:shadow
["Purple"] = "Fiolet",
["Pyromancer"] = "Piromanta", -- Battalion
@@ -1770,11 +1754,9 @@
["Return to the mission menu by pressing the \"Go back\" button."] = "Wróć do menu misji, wciskając przycisk \"Wstecz\".", -- A_Space_Adventure:cosmos
["Return to the Surface"] = "Wróć na Powierzchnię", -- A_Space_Adventure:fruit02
["Return to the training menu by pressing the “Go back” button."] = "Wróć do menu treningu, wciskając przycisk \"Powrót\".", -- Basic_Training_-_Movement
- ["Rhombus"] = "Romb", -- Basic_Training_-_Movement
["Rider"] = "Jeźdźec", -- portal
["Rifleman"] = "Strzelec", -- Battalion
["Righteous Beard"] = "Cnotliwa Broda", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
- ["Right Tong"] = "Prawy Tong", -- Bazooka_Battlefield
["Ripe"] = "Dojrzały",
["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "Podwyższ wodę, jeśli nikt inny nie jest w kole i zadaj 6 obrażeń wszystkim wrogim jeżom.", -- Continental_supplies
["Robert Yellow Apple"] = "Robert Żółte Jabłko", -- A_Space_Adventure:fruit01
@@ -1783,8 +1765,8 @@
["Roof"] = "Dach", -- WxW
["Rope-knocking Challenge"] = "Wyzwania Uderzania Liną", -- User_Mission_-_Rope_Knock_Challenge
["Rope Master"] = "Mistrz Liny", -- Basic_Training_-_Rope
- ["Roper"] = "Liniacz", -- SpeedShoppa
["Ropes and Crates"] = "Liny i Skrzynie", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
["Rope Team"] = "Linowa Drużyna", -- Basic_Training_-_Rope
["Rope Training"] = "Trening linowy", -- Basic_Training_-_Rope
["Rope Weapons"] = "Linowe bronie", -- Basic_Training_-_Rope
@@ -1825,10 +1807,17 @@
["Salvation was one step closer now..."] = "Odkupienie było teraz o krok bliżej...", -- A_Classic_Fairytale:dragon
["Sam"] = "Sam", -- A_Space_Adventure:cosmos
["Sandals?! I thought you left your ring!"] = "Sandały?! Myślałem, że zostawiłeś swój pierścień!", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
["%s and %s enter the battlefield"] = "%s i %s wchodzą na pole bitwy", -- A_Space_Adventure:fruit01
["Sandstorm"] = "Burza piaskowa", -- A_Space_Adventure:desert01
["Sandy"] = "Piaskowy", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Uratuj jak najwięcej nieszczęsnych jeży jak to możliwe!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
["Save Fell From Heaven!"] = "Uratuj Upadłego z Niebios!", -- A_Classic_Fairytale:journey
["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "Uratuj Sporego Przecieka!|Porada: narzędzie zmiany jeża może być dla ciebe pomocne.", -- A_Classic_Fairytale:shadow
["Save Level: [Precise]+[4]"] = "Zapisz poziom: [Precyzja]+[4]", -- HedgeEditor
@@ -1843,6 +1832,7 @@
["Scenario"] = "Scenariusz", -- Big_Armory, portal, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Newton_and_the_Hammock, User_Mission_-_Nobody_Laugh, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork_2, User_Mission_-_Teamwork, User_Mission_-_The_Great_Escape
["Scientist"] = "Naukowiec", -- Battalion
["%s climbed home in %d seconds!"] = "%s wspiął się do domu w %d sekund!", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
["Score: %d"] = "Wynik: %d", -- Space_Invasion
["Score goal: %d"] = "Wymagany wynik: %d", -- Control
["Score graph"] = "Graf wyniku", -- Mutant, Space_Invasion
@@ -1852,8 +1842,8 @@
["Scores"] = "Wyniki", -- Mutant
["Scores:"] = "Wyniki:", -- Mutant
["Scoring: "] = "Wynki: ", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
["Script parameter examples:"] = "Przykłady parametrów skryptu:", -- Gravity
- ["%s (%d)"] = "%s (%d)", -- Continental_supplies
["%s: %d (deaths: %d)"] = "%s: %d (śmierci: %d)", -- Mutant
["%s (%d), %d sec"] = "%s (%d), %d sekund", -- Continental_supplies
["%s: Did not finish"] = "%s: Nie ukończył", -- Racer, TechRacer
@@ -1863,8 +1853,9 @@
["%s doesn’t really know how to handle a rope properly."] = "%s nie wie tak naprawdę jak posługiwać się liną.", -- ClimbHome
["%s (+%d)"] = "%s (+%d)", -- Battalion
["%s: %d"] = "%s: %d", -- Capture_the_Flag, Control
+ ["%s (%d)"] = "%s (%d)", -- Continental_supplies
["%s, %d sec"] = "%s, %d sekund", -- Continental_supplies
- ["Search for the device with the help of the other hedgehogs "] = "Poszukaj urządzenia z pomocą innych jeży", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
["Searching in the dust"] = "Poszukiwanie w kurzu", -- A_Space_Adventure:desert01
["Searching the stars!"] = "Szukanie gwiazd!", -- A_Space_Adventure:cosmos
["seconds"] = "sekund", -- ClimbHome
@@ -1874,8 +1865,8 @@
["See ya!"] = "Do zobaczenia!",
["Segmentation Paul"] = "Naruszenie Pawła", -- A_Classic_Fairytale:dragon
["Select a placement mode and read the infos|in the mission panel to learn how to use it."] = "Wybierz tryb ustawiania i przeczytaj informacje|w panelu misji, by dowiedzieć się jak go używać.", -- HedgeEditor
+ ["Select continent!"] = "Wybierz kontynent!", -- Continental_supplies
["Select continent"] = "Wybierz kontynent", -- Continental_supplies
- ["Select continent!"] = "Wybierz kontynent!", -- Continental_supplies
["Selection Mode"] = "Tryb Wyboru", -- HedgeEditor
["Select, modify, or delete girders, rubbers and sprites"] = "Wybierz, modyfikuj lub usuń belki, gumy i grafiki", -- HedgeEditor
["Select/Place/Delete Gear: [Left Click]"] = "Wybierz/Ustaw/Usuń rzecz: [Lewy klik]", -- HedgeEditor
@@ -1894,6 +1885,7 @@
["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "Wybierz swój kotnynent używając [Góra]/[Dół] lub wybierając reprezentatywną broń.", -- Continental_supplies
["%s enters the battlefield"] = "%s wchodzi na pole bitwy", -- A_Space_Adventure:fruit01
["Sergey"] = "Sergiusz",
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
["Set bounciness: [Left Shift] + [1]-[5]"] = "Wybierz odbijalność: [Lewy Shift] + [1]-[5]", -- Basic_Training_-_Grenade
["Set detonation timer: [1]-[5]"] = "Wybierz czas detonacji: [1]-[5]", -- Basic_Training_-_Grenade
["Set Health: [Left Click]"] = "Ustaw zdrowie: [Lewy klik]", -- HedgeEditor
@@ -1921,6 +1913,7 @@
["%s has mutated! +2 points"] = "%s zmutował! +2 punkty", -- Mutant
["%s has passed the best height of %s!"] = "%s przekroczył najlepszą wysokość %s!", -- ClimbHome
["%s has scored!"] = "%s zapunktował!", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
["%s hates Newton."] = "%s nienawidzi Newtona.", -- User_Mission_-_Rope_Knock_Challenge
["She endangered the whole tribe!"] = "Ona naraziła całe plemię!", -- A_Classic_Fairytale:epil
["sheepluva"] = "sheepluva",
@@ -1938,7 +1931,6 @@
["%s hit the ground."] = "%s uderza w ziemię", -- User_Mission_-_Rope_Knock_Challenge
["Shoppa Love"] = "Kochamy Shoppa", -- Challenge_-_Speed_Shoppa_-_Hedgelove
["Shoppa Union"] = "Unia Shoppa", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
- ["Shoppers"] = "Shopperzy", -- SpeedShoppa
["Shotgun"] = "Strzelba", -- Continental_supplies
["Sigh."] = "Ech.", -- A_Classic_Fairytale:epil
["Silly"] = "Głuptas",
@@ -1951,11 +1943,11 @@
["%s is now as poor as a church mouse"] = "%s jest teraz tak biedny, jak mysz kościelna", -- Construction_Mode
["%s is now a zombie hedgehog"] = "%s jest teraz zombie jeżem", -- Construction_Mode
["%s is suddenly low on ammo"] = "%s nagle ma mało amunicji", -- Construction_Mode
- ["Skip your turn to try again."] = "Pomiń turę, by spróbować ponownie.", -- Basic_Training_-_Rope
["Skulls"] = "Czaszki", -- Bazooka_Battlefield
["Slimer"] = "Szlamiarz",
["Slippery"] = "Śliski", -- A_Classic_Fairytale:journey
["%s lost all the weapons"] = "%s stracił wszystkie bronie", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
["Slot %d: %s"] = "Slot %d: %s", -- Frenzy
["Slot keys save time! (F1-F10 by default)"] = "Klawisze slotów oszczędzają czas! (domyślnie F1-F10)", -- Frenzy
["Slowpoke"] = "Slowpoke",
@@ -1969,6 +1961,7 @@
["Smith 0.99f"] = "Smith 0.99f", -- A_Classic_Fairytale:enemy
["Smith 1.0"] = "Smith 1.0", -- A_Classic_Fairytale:enemy
["Smugglers"] = "Przemytnicy", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
["%s must skip this turn for rule violation."] = "%s musi opuścić swoją turę za naruszenie zasad.", -- WxW
["Sneaks"] = "Donosiciele", -- Bazooka_Battlefield
["%s never got the ninja diploma."] = "%s nigdy nie zdobył dyplomu ninja.", -- ClimbHome
@@ -1977,10 +1970,8 @@
["Sniper Rifle"] = "Karabin snajperski", -- Continental_supplies
["Sniper"] = "Snajper", -- HedgeEditor, The_Specialists
["Sniper Training"] = "Trening snajperski",
- ["Sniperz"] = "Snajperzy",
["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "Więc jak obiecałem, przyprowadziłem cię tam, gdzie myślę, że jest schowane urządzenie, którego szukasz.", -- A_Space_Adventure:fruit02
["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "Dotąd miałeś nieskończone liny, ale w prawdziwym|świecie, liny są zazwyczaj ograniczone.", -- Basic_Training_-_Rope
- ["So Hog Solo, here we are ..."] = "Więc, Hog Solo, oto jesteśmy...", -- A_Space_Adventure:cosmos
["So humiliating..."] = "Tak upokarzające...", -- A_Classic_Fairytale:first_blood
["So, I believe that it's a good place to start."] = "A więc, wierzę, że to jest dobre miejsce, by zacząć.", -- A_Space_Adventure:desert01
["So, I kindly ask for your help."] = "Więc, grzecznie proszę o twoją pomoc.", -- A_Space_Adventure:fruit01
@@ -1990,11 +1981,12 @@
["Some parts of the land are indestructible."] = "Niektóre części lądu są niezniszczalne.", -- A_Space_Adventure:fruit03
["Some sick game of yours?!"] = "Jakaś twoja chora gra?!", -- A_Classic_Fairytale:queen
["Some weapons can be dropped from the rope."] = "Niektóre bronie mogą być upuszczone z liny.", -- Basic_Training_-_Rope
- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "Gdzieś indziej na planecie owoców, Kapitan Limonka pomaga Hogowi Solo", -- A_Space_Adventure:fruit02
- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "Gdzieś indziej na planecie owoców, Hog Solo zbliża się do urządzenia", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "Gdzieś na Planecie Owoców, straszliwa wojna ma właśnie się rozpocząć...", -- A_Space_Adventure:fruit01
["Somewhere on the uninhabitable Death Planet ..."] = "Gdzieś na niezamieszkalnej Planecie Śmierci...", -- A_Space_Adventure:death01
["So, now I got the last part and I have your friends captured."] = "Więc, mam teraz ostatnią część i przetrzymuję twoich przyjaciół.", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
["So the princess was never heard of again ..."] = "Więc o księżniczce nigdy więcej nie słyszano...", -- A_Classic_Fairytale:family
["So, uhmm, how did you manage to teleport them so far?"] = "Więc, um, jak ci się udało ich teleportować tak daleko?", -- A_Classic_Fairytale:epil
["Sour"] = "Surowy",
@@ -2032,7 +2024,6 @@
["Squirtle"] = "Squirtle",
["Squishy"] = "Grząski",
["%s reached home in %.3f seconds. Congratulations!"] = "%s dotarł do domu w %.3f sekund. Gratulacje!", -- ClimbHome
- ["%s: %s"] = "%s: %s", -- Continental_supplies
["%s (%s) destroyed %d invaders in one round."] = "%s (%s) zniszczył %d najeźdźców w jednej rundzie.", -- Space_Invasion
["%s (%s) does not have to feel ashamed for their best height of %d."] = "%s (%s) nie musi się wstydzić swojej najlepszej wysokości %d.", -- ClimbHome
["%s, select your continent!"] = "%s, wybierz swój kontynent!", -- Continental_supplies
@@ -2054,6 +2045,7 @@
["%s (%s) reached for the sky and beyond with a height of %d!"] = "%s (%s) dosięgnął nieba i dalej, z wysokością %d!", -- ClimbHome
["%s (%s) reached home in %.3f seconds."] = "%s (%s) dotarł do domu w %.3f sekund.", -- ClimbHome
["%s (%s) shot %d invaders and never missed in the best round!"] = "%s (%s) zestrzelił %d najeźdźców i nigdy nie spudłował w najlepszej rundzie!", -- Space_Invasion
+ ["%s: %s"] = "%s: %s", -- Continental_supplies
["%s (%s) struck like a meteor: %d points in only one round!"] = "%s (%s) uderzył jak meteor: %d punktów w tylko jednej rundzie!", -- Space_Invasion
["%s still had a long way to go."] = "%s nadal miał daleką drogę do przejścia.", -- ClimbHome
["%s stumbled."] = "%s potknął się.", -- User_Mission_-_Rope_Knock_Challenge
@@ -2095,8 +2087,6 @@
["Structure Placement Mode"] = "Tryb Ustawiania Struktur", -- Construction_Mode
["Structure Placer"] = "Stawiacz Struktur", -- Construction_Mode
["Stupid, stupid Hogerians!"] = "Głupi, głupi Jeżarianie!", -- A_Space_Adventure:final
- ["Subject 1"] = "Podmiot 1", -- portal
- ["Subjects"] = "Podmioty", -- portal
["Subtract %d"] = "Odejmij %d", -- HedgeEditor
["--- Sudden Death ---"] = "--- Nagła Śmierć ---", -- Battalion
["Summer Squash"] = "Kabaczek", -- A_Space_Adventure:fruit01
@@ -2113,7 +2103,7 @@
["Surfer! +15 points!"] = "Surfer! +15 punktów!", -- Space_Invasion
["Surfer!"] = "Surfer!", -- WxW
["Surprise supplies: Get 1-3 random weapons each turn."] = "Niespodziewane posiłki: Dostań 1-3 losowych broni w każdej turze.", -- Continental_supplies
- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "Przetrwaj!Porada: Przerywniki mogą zostać pominięte przyciskiem [Precyzja].", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
["%s violated the “All But Last” rule and will be penalized."] = "%s narusza zasadę \"Wszyscy Oprócz Ostatniego\" i będzie ukarany.", -- WxW
["%s violated the “Kill The Leader” rule and will be penalized."] = "%s narusza zasadę \"Zabij przywódcę\" i będzie ukarany.", -- WxW
["Swap place with a random enemy in the circle."] = "Zamień miejsce z losowym wrogiem w kole.", -- Continental_supplies
@@ -2132,6 +2122,7 @@
["%s! Why?!"] = "%s! Czemu?!", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
["Swing, Leaks A Lot, on the wings of the wind!"] = "Huśtaj się, Spory Przecieku, na skrzydłach wiatru!", -- A_Classic_Fairytale:first_blood
["Swing: [Left]/[Right]"] = "Huśtaj się: [Lewo]/[Prawo]", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
["%s wins!"] = "%s wygrywa!", -- Racer, Space_Invasion, TechRacer, ClimbHome
["%s wins with a best time of %.1fs."] = "%s wygrywa z najlepszym czasem %.1fs.", -- Racer, TechRacer
["Switch: Drop ball of dirt from parachute (once)"] = "Zmiana: Upuść kulę ziemi ze spadochronu (raz)", -- Continental_supplies
@@ -2145,6 +2136,7 @@
["switch"] = "przełącz", -- Continental_supplies
["Switch: Select weapon special"] = "Zmiana: Wybierz speciał broni", -- Continental_supplies
["Switch: Toggle crate radar"] = "Zmiana: Przełącz radar skrzyń", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
["Swords"] = "Miecze", -- Bazooka_Battlefield
["Syntax Errol"] = "Błąt Składni", -- A_Classic_Fairytale:dragon
["%s, you may choose the rules."] = "%s, możesz wybrać zasady.", -- WxW
@@ -2153,6 +2145,8 @@
["Tails"] = "Reszka",
["Talk about mixed signals..."] = "Mów o pomieszanych sygnałach...", -- A_Classic_Fairytale:dragon
["Tall Potato"] = "Wysoki Ziemniak", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
["Target"] = "Cel", -- HedgeEditor
["Target Placement Mode"] = "Tryb Stawiania Celów", -- Construction_Mode
["TARGET PLACEMENT MODE"] = "TRYB STAWIANIA CELÓW", -- HedgeEditor
@@ -2168,9 +2162,12 @@
["Tatters"] = "Szmaciarze",
["Team %d: "] = "Drużyna %d: ",
["Team %d"] = "Drużyna %d", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
["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
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
["Teams are tied! Continue playing rounds until we have a winner!"] = "Drużyny remisują! Grajcie rundy, aż nie wyłonimy zwycięzcy!", -- Space_Invasion
["Team Scores:"] = "Wyniki drużyn:", -- Control
["Team scores:"] = "Wyniki drużyn:", -- Space_Invasion
@@ -2268,7 +2265,6 @@
["The forgotten continent"] = "Zapomniany kontynent", -- Continental_supplies
["The giant umbrella from the last crate should help break the fall."] = "Ogromna parasolka z ostatniej skrzyni powinna pomóc pokonać upadek.", -- A_Classic_Fairytale:first_blood
["The Great Escape"] = "Wielka ucieczka", -- User_Mission_-_The_Great_Escape
- ["The Green Bananas lost, try again!"] = "Zielone Banany przegrały, spróbuj ponownie!", -- A_Space_Adventure:fruit01
["The guardian"] = "Stróż", -- A_Classic_Fairytale:shadow
["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "Trudy wojny zamieniły %s (%s) w maszynę do zabijania: %d najeźdźców zniszczonych w jednej rundzie!", -- Space_Invasion
["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "Jeż z najmniejszą ilością punktów (lub największą śmierci) stanie się Pasożytem.", -- Mutant
@@ -2290,7 +2286,6 @@
["The Mutant has super-weapons and a lot of health."] = "Mutant ma super bronie i dużo zdrowia.", -- Mutant
["The Mutant loses health quickly, but gains health by killing."] = "Mutant szybko traci zdrowie, ale je odnawia zabijając.", -- Mutant
["The Mutant loses health quickly if he doesn't keep scoring kills."] = "Mutant szybko traci zdrowie, jeśli przestanie zaliczać zabójstwa.", -- Mutant
- ["The Nameless One"] = "Bezimienny",
["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "Marynarka pozdrawia jeża %s, za zdołanie dostać się na odległość %d z dala od lądu!", -- ClimbHome
["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "Przez następne 4 razy, w których zagrasz misję \"Ostateczne spotkanie\", dostaniesz 20 więcej punktów zdrowia i celownik laserowy.", -- A_Space_Adventure:death02
["The next crate is an utility crate."] = "Następna skrzynia zawiera narzędzia.", -- Basic_Training_-_Movement
@@ -2376,7 +2371,6 @@
["This almost concludes our tutorial."] = "To prawie kończy nasz samouczek.", -- Basic_Training_-_Flying_Saucer
["This also increases the effectiveness of Medicine."] = "To również zwiększa efektywność Lekarstwa.", -- Continental_supplies
["This game wasn’t really exciting."] = "Ta gra nie była naprawdę ekscytująca.", -- Space_Invasion
- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "Ten Hog Solo jest taki naiwny! Kiedy wróci, zastrzelę go i zatrzymam urządzenie dla siebie!", -- A_Space_Adventure:fruit02
["This is a new personal best, congratulations!"] = "To nowy osobisty rekord, gratulacje!", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
["This is a new personal best time, congratulations!"] = "To nowy osobisty najlepszy czas, gratulacje!", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
["This is Cappy."] = "To jest Czapeczka", -- Basic_Training_-_Movement
@@ -2384,8 +2378,8 @@
["This island is the only place left on Earth with grass on it!"] = "Ta wyspa to jedyne pozostałe miejsce na Ziemi, w którym jest trawa!", -- A_Classic_Fairytale:enemy
["This is seems like a wealthy hedgehog, nice ..."] = "On wygląda jak bogaty jeż, nieźle...", -- A_Space_Adventure:desert01
["This is the mission panel."] = "To jest panel misji.", -- Basic_Training_-_Movement
+ ["This is the Olympic stadium of saucer flying."] = "To jest Stadion Olimpijski Latania Spodkiem.", -- A_Space_Adventure:ice02
["This is the Olympic Stadium of Saucer Flying."] = "To jest Stadion Olimpijski Latania Spodkiem.", -- A_Space_Adventure:ice02
- ["This is the Olympic stadium of saucer flying."] = "To jest Stadion Olimpijski Latania Spodkiem.", -- A_Space_Adventure:ice02
["This is typical!"] = "To typowe!", -- A_Classic_Fairytale:dragon
["This must be some kind of sorcery!"] = "To musi być jakaś magia!", -- A_Classic_Fairytale:shadow
["This must be the caves!"] = "To muszą być jaskinie!", -- A_Classic_Fairytale:backstab
@@ -2394,6 +2388,7 @@
["This rain is really something..."] = "Ten deszcz to naprawdę coś...",
["This round’s award for ultimate disappointment goes to: Everyone!"] = "Nagroda tej rundy za ostateczne rozczarowanie idzie do: Każdego!", -- ClimbHome
["This seems like a wealthy hedgehog, nice ..."] = "To wygląda jak bogaty jeż, nieźle...", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "To było niesamowite przedstawienie! Ale to wyzwanie może być ukończone tyko jednym samolocikiem. Potrafsz wykombinować jak?", -- User_Mission_-_RCPlane_Challenge
["This will be fun!"] = "To będzie zabawne!", -- A_Classic_Fairytale:enemy
["This will be useful when I need a new platform or if I want to rise."] = "To będzie żyteczne, kiedy będę potrzebował platformy albo chciał się wznieść.", -- portal
@@ -2434,6 +2429,7 @@
["To begin with the training, hit the attack key!"] = "By zacząć trening, wciśnij przycisk ataku!", -- Basic_Training_-_Movement
["To begin with the training, select the bazooka from the ammo menu!"] = "By zacząć trening, wybierz bazookę z menu amunicji!", -- Basic_Training_-_Bazooka
["To begin with the training, select the grenade from the ammo menu!"] = "By zacząć trening, wybierz granat z menu amunicji!", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
["To finish hedgehog selection, just do anything|with him, like walking."] = "By skończyć wybierać jeża, zrób z nim cokolwiek,|np. rusz się", -- Basic_Training_-_Movement
["To get over the next obstacles, keep some distance from the wall before you back jump."] = "By przekroczyć następną przeszkodę, utrzymaj trochę dystansu od ściany zanim skoczysz w tył.", -- Basic_Training_-_Movement
["To get over the water, you have to do multiple|rope shots and swings."] = "By przejść przez wodę, musisz wykonać wielokrotne|strzały i zamachy liną.", -- Basic_Training_-_Rope
@@ -2448,14 +2444,13 @@
["Too bad! Then you should really leave!"] = "Jaka szkoda! Więc musisz naprawdę odejść!", -- A_Space_Adventure:fruit01
["Too slow! Try again ..."] = "Za wolno! Spróbuj ponownie...", -- A_Space_Adventure:moon02
["Top-class elite pilot"] = "Elitarny pilot najwyższej klasy", -- User_Mission_-_RCPlane_Challenge
- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "By postawić belkę wybierz ją, użyj [Lewo] i [Prawo], by wybrać kąt i długość, ustaw używając [Lewy Klik]", -- A_Classic_Fairytale:shadow
["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "By dostać się na wyższy poziom, wejdź na krawędz, spójrz w lewo i wykonaj skok w tył.", -- Basic_Training_-_Movement
["Torn Muscle"] = "Rozerwany Mięsień", -- A_Classic_Fairytale:journey
["To the caves..."] = "Do jaskiń...", -- A_Classic_Fairytale:united
["Touch all waypoints as fast as you can!"] = "Dotknij wszystkich punktów kontrolnych najszybciej jak potrafisz!", -- Racer
- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "By wygrać tę grę, Hog Solo musi dostać się do skrzyń na dnie i wrócić z powrotem na powierzchnię.", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
["To win the game you had to collect the 2 crates with no specific order."] = "By wygrać grę, musisz zebrać 2 skrzynie, bez specjalnej kolejności.", -- A_Space_Adventure:desert01
- ["To win the game you have to eliminate all your enemies."] = "By wygrać grę, musisz wyeliminować wszystkich swoich wrogów.", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
["To win the game you have to find the right crate."] = "By wygrać grę, musisz znaleźć odpowiednią skrzynię.", -- A_Space_Adventure:desert01
["To win the game you have to go next to Thanta."] = "By wygrać grę, musisz pójść obok Tanty.", -- A_Space_Adventure:ice01
["To win the game you have to go to the surface."] = "By wygrać grę, musisz pójść na powierzchnię.", -- A_Space_Adventure:desert02
@@ -2463,13 +2458,10 @@
["To win the game you have to stand next to Thanta."] = "By wygrać grę, musisz stanąć obok Tanty.", -- A_Space_Adventure:ice01
["Toxic Team"] = "Toksyczny Zespół",
["Track completed!"] = "Trasa ukończona!", -- Racer, TechRacer
- ["Trainee"] = "Trenujący", -- TargetPractice
["Training complete!"] = "Trening ukończony!", -- Basic_Training_-_Flying_Saucer
- ["Training Team"] = "Drużyna Treningowa", -- TargetPractice
["Training"] = "Trening", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
["Traitors don't get to shout around here!"] = "Zdrajcy tutaj nie krzyczą!", -- A_Classic_Fairytale:epil
["Traitors"] = "Zdrajcy", -- A_Classic_Fairytale:epil
- ["Trapped"] = "Uwięziony", -- Basic_Training_-_Movement
["Trapper"] = "Traper", -- HedgeEditor
["Travel carefully as your fuel is limited"] = "Lataj ostrożnie, gdyż twoje paliwo jest ograniczone", -- A_Space_Adventure:cosmos
["Travel to all the neighbor planets and collect all the pieces"] = "Poleć na wszystkie sąsiednie planety i zbierz wszystkie części", -- A_Space_Adventure:cosmos
@@ -2486,7 +2478,6 @@
["Try to land softly, as you can still take fall damage!"] = "Spróbuj wylądować miękko, bo nadal możesz otrzymać obrażenia od upadku!", -- Basic_Training_-_Flying_Saucer
["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "Spróbuj ochronić wodza! Nie przegramy, gdy on umrze, ale zalecane jest, by przeżył.", -- A_Classic_Fairytale:united
["Try to reach and destroy the next target quickly."] = "Spróbuj dostać się i zniszczyć następny cel szybko.", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
["Tumbler"] = "Akrobata", -- Tumbler
["Turn around: [Left Shift] + [Left]/[Right]"] = "Obróć się: [Lewy Shift] + [Lewo]/[Prawo]", -- Basic_Training_-_Movement
["Turning Around"] = "Obracanie się", -- Basic_Training_-_Movement
@@ -2505,7 +2496,6 @@
["Uhmm...ok no."] = "Umm... niedobrze.", -- A_Classic_Fairytale:enemy
["Ukemi"] = "Ukemi",
["Ultra kill!"] = "Ultra zabójstwo!", -- Mutant
- ["Ultrasoldier"] = "Ultrażołnierz", -- Big_Armory
["unC0Rr"] = "unC0Rr",
["Under Construction"] = "W Trakcie Budowy", -- A_Classic_Fairytale:shadow
["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "W normalnych okolicznościach pokonalibyśmy ich z łatwością, ale życzliwie wysłaliśmy większość naszych ludzi do Królestwa Piasku, by pomóc z corocznym odkurzaniu pałacu króla.", -- A_Space_Adventure:fruit01
@@ -2551,7 +2541,7 @@
["Use the flying saucer from the crate to fly to the moon."] = "Użyj latającego talerza ze skrzyni, by polecieć na księżyc.", -- A_Space_Adventure:cosmos
["Use the flying saucer to fly to other planets."] = "Użyj latającego talerza, by polecieć na inne planety.", -- A_Space_Adventure:cosmos
["Use the flying saucer to fly to the other planets."] = "Użyj latającego talerza, by polecieć na inne planety.", -- A_Space_Adventure:cosmos
- ["Use the parachute ([Space] while in air) to get the next crate"] = "Użyj spadochronu ([Spacja] w powietrzu), by zdobyć następną skrzynię", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "Użyj wyrzutnika portali, by zdobyć następną skrzynię, potem użyj nowej broni, by dostać sie do ostatniego celu!|", -- A_Classic_Fairytale:dragon
["Use the RC plane and destroy the all the targets."] = "Użyj radiowego samolociku i zniszcz wszystkie cele.", -- A_Space_Adventure:desert03
["Use the rope in order to catch the blue hedgehog"] = "Użyj liny, żeby złapać niebieskiego jeża", -- A_Space_Adventure:moon02
@@ -2604,9 +2594,6 @@
["Walls left: %d"] = "Pozostałe ściany: %d", -- WxW
["Wall to wall"] = "Ściana do ściany", -- WxW
["Waluigi"] = "Waluigi",
- ["Wannabe Flyboys"] = "Lotniczy Pozerzy", -- User_Mission_-_RCPlane_Challenge
- ["Wannabe Ropers"] = "Niedoszli liniarze", -- Basic_Training_-_Rope
- ["Wannabe Shoppsta"] = "Shoppi Pozerzy", -- User_Mission_-_Rope_Knock_Challenge
["Wario"] = "Wario",
["Warming Up"] = "Rozgrzewka", -- Basic_Training_-_Grenade
["Warning: Fire cake detected"] = "Ostrzeżenie: Ogniste ciasto wykryte", -- ClimbHome
@@ -2652,9 +2639,9 @@
["We have to hurry! Are you armed?"] = "Musimy się pośpieszyć! Jesteś uzbrojony?", -- A_Space_Adventure:moon01
["We have to protect the village!"] = "Musimy bronić wioski!", -- A_Classic_Fairytale:united
["We have to unite and defeat those cylergs!"] = "Musimy się zjednoczyć i pokonać cylergów!", -- A_Classic_Fairytale:enemy
- ["Welcome Hog Solo, surprised to see me?"] = "Witaj, Hogu Solo, zaskoczony moim widokiem?", -- A_Space_Adventure:death01
["Welcome home! Please take a seat"] = "Witaj w domu! Usiądź proszę", -- ClimbHome
["Welcome, Leaks A Lot!"] = "Witaj, Spory Przecieku!", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
["Welcome to the Death Planet!"] = "Witaj na Planecie Śmierci!", -- A_Space_Adventure:cosmos
["Welcome to the Desert Planet!"] = "Witaj na Planecie Pustyni!", -- A_Space_Adventure:cosmos
["Welcome to the Fruit Planet!"] = "Witaj na Planecie Owoców!", -- A_Space_Adventure:cosmos
@@ -2821,16 +2808,16 @@
["You can’t open a portal on the blue surface."] = "Nie możesz otworzyć portalu na niebieskiej powierzchni.", -- portal
["You can use the other 2 hogs to assist you."] = "Możesz użyć 2 innych jeży, by ci pomogli.", -- A_Space_Adventure:fruit02
["You can use the rope to reach new places."] = "Możesz użyć liny, by dostać się do nowych miejsc.", -- Basic_Training_-_Rope
- ["You choose well, Hog Solo!"] = "Wybierz dobrze, Hog Solo!", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
["You completed the mission in %.3f seconds."] = "Ukończyłeś tę misję w %.3f sekund.", -- A_Space_Adventure:ice02
["You completed the mission in %d rounds."] = "Ukończyłeś tę misję w %d rund.", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
- ["You couldn't have come to a worse time, Hog Solo!"] = "Nie mógłbyś przyjść w gorszym czasie, Hogu Solo!", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "Nie mógłbyś chyba wierzyć, że po odrzuceniu mojej oferty po prostu puściłbym cię wolno!", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Prawie byś przysiągł, że woda zdaje się podnosić!",
["You'd better watch your steps..."] = "Lepiej patrz po nogi...", -- A_Classic_Fairytale:journey
["You defended yourself against Captain Lime."] = "Obroniłeś się przed Kapitanem Limonką.", -- A_Space_Adventure:fruit02
["You defended yourself against the Fruit Assassins."] = "Obroniłeś się przed Owocowymi Zabójcami.", -- A_Space_Adventure:fruit02
- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "Dobrze się spisałeś, Hog Solo! Jednakże, wciąż nie jesteśmy bezpieczni!", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
["You did not make it in time, try again!"] = "Nie udało ci się na czas, spróbuj ponownie!", -- Basic_Training_-_Rope
["You don't deserve my sacrifice!"] = "Nie zasługujesz na moje poświęcenie!", -- A_Classic_Fairytale:queen
["You drove Professor Hogevil away."] = "Odpędziłeś Profesora Jeżozło.", -- A_Space_Adventure:moon01
@@ -2852,6 +2839,7 @@
["You have acquired the last device part."] = "Zdobyłeś ostatnią część urządzenia.", -- A_Space_Adventure:death01
["You have activated Switch Hedgehog!"] = "Aktywowałeś Zmianę Jeża!", -- Basic_Training_-_Movement
["You have beaten the challenge!"] = "Pokonałeś wyzwanie!", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
["You have been giving us out to the enemy, haven't you!"] = "Wydawałeś nas wrogom, co nie!", -- A_Classic_Fairytale:backstab
["You have chosen the perfect moment to leave."] = "Wybrałeś idealny moment, by odejść.", -- A_Classic_Fairytale:united
["You have chosen to fight!"] = "Wybrałeś bitwę!", -- A_Space_Adventure:fruit01
@@ -2943,7 +2931,7 @@
["You'll have only 2 watermelon bombs during the game."] = "Będziesz miał tylko 2 arbuzowe bomby podczas tej gry.", -- A_Space_Adventure:fruit03
["You'll have only one RC plane at the start of the mission."] = "Będziesz miał tylko jeden radiowy samolocik na początku misji.", -- A_Space_Adventure:desert03
["You'll have to eliminate Captain Lime at the end."] = "Będziesz musiał na koniec wyeliminować Kapitana Limonkę.", -- A_Space_Adventure:fruit02
- ["You'll have to eliminate the Fruit Assassins at the end."] = "Będziesz musiał wyeliminować na koniec Owocowych Zabójców.", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
["You'll lose if you die or if your time is up."] = "Przegrasz, jeśli zginiesz lub skończy ci się czas.", -- A_Space_Adventure:moon02
["You'll see what I mean!"] = "Zobaczysz, co mam na myśli!", -- A_Classic_Fairytale:enemy
["You lose!"] = "Przegrywasz!", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2968,12 +2956,12 @@
["Your accuracy was %.1f%% (+%d points)."] = "Twoja celność wynosiła %.1f%% (+%d punktów).", -- TargetPractice
["Your accuracy was %.1f%%."] = "Twoja celność wynosiła %.1f%%.", -- Basic_Training_-_Bazooka, TargetPractice
["Your ammo is limited this time."] = "Twoja amunicja jest teraz ograniczona.", -- Basic_Training_-_Bazooka
- ["Your deaths will be avenged, Cannibals!"] = "Wasze śmierci zostaną pomszczone, Kanibale!", -- A_Classic_Fairytale:enemy
- ["Your deaths will be avenged, Natives!"] = "Wasze śmierci zostaną pomszczone, Tubylcy!", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
["Your death will not be in vain, Dense Cloud!"] = "Twoja śmierć nie pójdzie na marne, Gęsta Chmuro!", -- A_Classic_Fairytale:shadow
["You're a coward!"] = "Jesteś tchórzem!", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"] = "Ty... żyjesz?! Ale widzieliśmy jak umierasz!", -- A_Classic_Fairytale:backstab
["You're a pathetic liar!"] = "Jesteś żałosnym kłamcą!", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
["You're funny!"] = "Jesteś zabawny!", -- A_Classic_Fairytale:journey
["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "Stajesz się całkiem dobry!|Porada: Kiedy skrócisz swoją linę, poruszasz się szybciej!|A kiedy ją wydłużysz, poruszasz się wolniej.", -- Basic_Training_-_Rope
["You're on your way to freeing your tribe!"] = "Jesteś na swojej drodze, by uwolnić twoje plemię!", -- A_Classic_Fairytale:queen
@@ -2997,9 +2985,11 @@
["Your next task is to collect some crates by using the rope!"] = "Twoje następne zadanie to zebrać trochę skrzyń, używając liny!", -- A_Classic_Fairytale:first_blood
["Your personal best time so far: %.3f seconds"] = "Twój osobisty najlepszy czas jak dotąd: %.3f sekund", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
["Your rank: %s"] = "Twoja ranga: %s", -- User_Mission_-_RCPlane_Challenge
- ["You saved %d of 8 Hapless Hogs."] = "Uratowałeś %d z 8 Nieszczęśliwych Jeży.", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
["You see, hedgehog spikes are very, very valuable."] = "Widzisz, kolce jeża są bardzo, bardzo cenne.", -- A_Classic_Fairytale:queen
["You see the wind strength at the bottom right corner."] = "Możesz zobaczyć siłę wiatru w prawym dolnym rogu.", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
["You should have known that we don't rely on meatbags!"] = "Powinienieś wiedzieć, że nie polegamy na mięsnych workach!", -- A_Classic_Fairytale:queen
["You should know this more than anyone, Leaks!"] = "Powinieneś to wiedzieć lepiej niż wszyscy, Przecieku!", -- A_Classic_Fairytale:queen
["You speak great truth, Hannibal. Here, take a sip!"] = "Mówisz wielką prawdę, Hannibalu. Masz, weź łyka!", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/pt_BR.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/pt_BR.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
- ["Ace"] = "Ás", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Um conto de fadas clássico", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Treino com a Bazuca",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
--- ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "Pegue a caixa à direita.|Dica: Selecione a corda, [Cima] ou [Baixo] para mirar, [Espaço] para atirar, teclas direcionais para se mover.|Cordas podem ser disparadas novamente no ar!", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "Colete as caixas dentro do limite de tempo!|Se falhar, você terá que tentar de novo.", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "Destrua-o, Vaza Demais! Ele é responsável pelas mortes de muitos de nós!", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "Destrua os alvos!|Dica: Selecione o Shoryuken e aperte [Espaço]|Obs.: Você pode usá-lo em pleno ar.", -- A_Classic_Fairytale:first_blood
- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "Destrua os alvos!|Dica: [Cima], [Baixo] para mirar, [Espaço] para atirar", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Destrua todos os alvos antes que o tempo acabe.|Você tem munição infinita para esta missão.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
-- ["Eliminate the enemy specialists."] = "",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
-- ["Get on over there and take him out!"] = "",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
-- ["GO! GO! GO!"] = "",
-- ["Good birdy......"] = "",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
--- ["Nameless Heroes"] = "",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
-- ["Oh no! Just try again!"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Oh não! O tempo acabou! Tente novamente.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Opposing Team: "] = "",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Treino com o Rifle Sniper",
- ["Sniperz"] = "Franco-Atiradores",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Equipe %d: ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
-- ["This rain is really something..."] = "",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-- ["You'd almost swear the water was rising!"] = "",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/pt_PT.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/pt_PT.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
- ["Ace"] = "Ás", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Um Clássico Conto de Fadas", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "Parte Costas", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "De volta à\Mais tarde na aldeia, depois de ter avisado os aldeões sobre a ameaça...", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Treino com Bazuca",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
--- ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "Escolhe o teu lado! Se quiseres juntar-te ao homem estranho, aproxima-te dele! Caso contrario, afastate dele. Se decidires atac...esquece...", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
["Did anyone follow you?"] = "Foste seguido por alguém?", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "Elimina o teu raptor.", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Destrói todos os alvos antes do tempo terminar.|Tens munições infinitas para esta missão.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "Elimina os ouriços inimigos para ganhar.",
-- ["Eliminate the enemy specialists."] = "Elimina os especialistas inimigos.",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "Exactamente, homem! Esse era o meu sonho.", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
["Find your tribe!|Cross the lake!"] = "Encontra a tua tribo|Atravessa o lago!", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "Acaba o teu treino|Ajuda: As animações podem ser saltadas com a tecla [Precisão].", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "Tira o Nuvem Densa do precipicio(?)", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Chega-te aqui e acaba com ele!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "Vai buscar aquela caixa!", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "GO! GO! GO!",
["Good birdy......"] = "Lindo passarito......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
- ["Good Dude"] = "Boa Bacano", -- User_Mission_-_The_Great_Escape
["Good idea, they'll never find us there!"] = "Boa ideia, eles nunca nos vão encontrar aqui!", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
["Good so far!"] = "Até agora tudo bem!",
-- ["Good to go!"] = "Pronto para seguir!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
- ["Go on top of the flower"] = "Vai para cima da flor", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
["Go, quick!"] = "Vai, rápido!", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "Vai 'surfar'!", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "Treino com Granadas", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "Hedgibal Lecter", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
["Help me, Leaks!"] = "Ajuda-me, Leaks!", -- A_Classic_Fairytale:journey
["Help me, please!!!"] = "Ajuda-me, por favor!!!", -- A_Classic_Fairytale:journey
["Help me, please!"] = "Ajuda-me, por favor!", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "Equipa Heroi", -- User_Mission_-_The_Great_Escape
["He's so brave..."] = "Ele é tão corajoso...", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
["Hey, guys!"] = "Hey, pessoal!", -- A_Classic_Fairytale:backstab
["Hey guys!"] = "Hey pessoal!", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "Hey! Isto\Isso é batota!", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "Dica: Duplo Salto - Carrega [Retroceder] duas vezes", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "No entanto, os meus colegas não concordam com eu deixar-vos ir...", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
["I can't believe what I'm hearing!"] = "Não posso acreditar no que estou a ouvir!", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
["I can't wait any more, I have to save myself!"] = "Não tenho paciencia para esperar mais, tenho de me salvar a mim mesmo!", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "Podia simplesmente teletransportar-me para la...", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
["I just found out that they have captured your princess!"] = "Acabei de descobrir que eles capturaram a princesa!", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
["I just wonder where Ramon and Spiky disappeared..."] = "Só gostava de saber para onde o Ramom e o Spiky desapareceram...", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
["I'm not sure about that!"] = "Não tenho a certeza quanto a isso!", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "Impressionante...ainda estás seco tal e qual um cadáver de um falcão depois de uma semana no deserto...", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
-- ["Leader"] = "Lider", -- A_Classic_Fairytale:enemy
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "O Leaks A Lot, deprimido por ter morto a sua amada, não conseguiu salvar a aldeia...", -- A_Classic_Fairytale:journey
["Leaks A Lot gave his life for his tribe! He should have survived!"] = "Leaks A Lot deu a sua vida pela tribo! Ele devia ter sobrevivido!", -- A_Classic_Fairytale:first_blood
["Leaks A Lot"] = "Leaks A Lot", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
["Look, I had no choice!"] = "Olha, eu não tive escolha!", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "Cuidado! Existem mais!", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
- ["More Natives"] = "Mais Nativos", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1439,7 +1424,6 @@
-- ["My flying saucer stopped working!"] = "", -- A_Space_Adventure:ice01
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
--- ["Nameless Heroes"] = "",
["Name"] = "Nome", -- A_Classic_Fairytale:queen
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
@@ -1543,7 +1527,7 @@
["Oh, my!"] = "Uau!", -- A_Classic_Fairytale:first_blood
["Oh no! Just try again!"] = "Oh não! Tenta novamente!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Oh não! Terminou o tempo! Tenta novamente.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
["Open that crate and we will continue!"] = "Abre a caixa e podemos prosseguir!", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Equipa adversária",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
["Parachute"] = "Pára-quedas", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "Pátetica Resistencia", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Pressiona [Esquerda] ou [Direita] para te moveres, [Enter] para saltar", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "Pressiona [] para saltar a introdução",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Salva o máximo de ouriços desafortunados possível!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
["Shotgun"] = "Caçadeira", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "Escorregadio", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Treino com Sniper",
- ["Sniperz"] = "Sniperz",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
["So humiliating..."] = "Tão humilhante...", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Equipa %d: ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "O guarda-chuva gigante que estava na ultima caixa deve ajudar a amparar a tua queda.", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "O guardião", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
["This rain is really something..."] = "Esta chuva é mesmo qualquer coisa...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
["This will be fun!"] = "Isto vai ser divertido!", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,14 +2456,11 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
["Traitores"] = "Traidores", -- A_Classic_Fairytale:epil
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2485,7 +2477,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "Tenta protejer o chefe! Não perdes se ele morrer, mas é recomendado que ele sobreviva.", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2504,7 +2495,6 @@
-- ["Uhmm...ok no."] = "Uhm...ok não.", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
["Under Construction"] = "Em Construção", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2550,7 +2540,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2603,9 +2593,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2651,9 +2638,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
["We have to protect the village!"] = "Temos de protejer a aldeia!", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "Temos de nos unir e derrotar estes ciber-pernudos!", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
["Welcome, Leaks A Lot!"] = "Bem vindo, Leaks a Lot!", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2820,16 +2807,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Quase eras capaz jurar que a água estava a subir!",
-- ["You'd better watch your steps..."] = "É melhor teres cuidado onde pôes os pés...", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "Não chegaste a tempo, tenta novamente!", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2851,6 +2838,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "Escolheste o momento perfeito para ir embora\sair.", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2941,7 +2929,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "Já vais perceber o que quero dizer!", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2966,12 +2954,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
["Your death will not be in vain, Dense Cloud!"] = "A tua morte não será em vão, Nuvem Densa!", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"] = "Estás...vivo!? Mas nós vimos-te morrer!", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "És engraçado!", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2995,9 +2983,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/ru.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/ru.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
["Above-average pilot"] = "Пилот выше среднего", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
["Accuracy bonus: +%d points"] = "Бонус за точность: +%d очков", -- Basic_Training_-_Sniper_Rifle
- ["Ace"] = "Ас", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
["Average pilot"] = "Средний Пилот", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Тренировка с базукой",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Новобранцы", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
["Blue Team"] = "Синяя Команда", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
["Challenge"] = "Испытание", -- SpeedShoppa
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
["Choose your continent wisely, as your decision will be permanent."] = "Выбирайте ваш континент ответственно, это решение нельзя будет изменить.", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,11 +343,10 @@
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
["Cleaver"] = "Секач", -- Construction_Mode
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
+ ["Clowns"] = "Клоуны", -- User_Mission_-_Nobody_Laugh
["Clown"] = "Клоун", -- HedgeEditor
- ["Clowns"] = "Клоуны", -- User_Mission_-_Nobody_Laugh
-- ["Cluck-cluck time: [Fire an egg ~ Sabotages and cures poison ~ Cannot be fired close to another hog]"] = "", -- Continental_supplies
["Clumsy"] = "Неуклюжий",
["Cluster Bomb Training"] = "Тренировка с Касcетной бомбой", -- Basic_Training_-_Cluster_Bomb
@@ -356,7 +356,7 @@
["Collect or destroy all the health crates."] = "Собери или уничтожь все аптечки.", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -458,9 +458,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -482,10 +482,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
- ["%d Hapless Hogs left"] = "%d Несчастных Ёжиков осталось",
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -593,7 +590,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
["Elimate your captor."] = "Уничтожь твоего похитителя.", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Уничтожь все цели, пока время не вышло.|Для этой миссии доступен неограниченный боезапас.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
["Eliminate the enemy specialists."] = "Уничтожьте вражеских специалистов.",
@@ -621,7 +617,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
["Except me, of course! I just saved a whole planet!"] = "Кроме меня, конечно! Я только что спас целую планету!", -- A_Space_Adventure:final
["Experienced beginner"] = "Продвинутый новичок", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -647,11 +643,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -679,6 +676,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -720,7 +718,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Доберись туда и уничтожь его!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -758,7 +756,6 @@
["GO! GO! GO!"] = "ВПЕРЁД! ВПЕРЁД! ВПЕРЁД!",
["Good birdy......"] = "Хорошая птичка...",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
- ["Good Dude"] = "Хороший", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -769,7 +766,7 @@
["Good so far!"] = "Пока хорошо!",
["Good to go!"] = "Пошёл!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
["Go surf!"] = "Теперь сёрфить!", -- WxW
@@ -792,7 +789,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -802,11 +798,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
["Grenade Group"] = "Группа Гренадеров", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
["Grenade Training"] = "Тренировка с Гранатой", -- Basic_Training_-_Grenade
["Grenadiers"] = "Гренадеры", -- Basic_Training_-_Grenade
["Grenadier"] = "Гренадер", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
@@ -859,6 +854,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -874,7 +870,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -889,20 +884,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
- ["Hero Team"] = "Герои", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -913,20 +908,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
["Hint: Double Jump - Press [Backspace] twice"] = "Подсказка: Двойной прыжок - нажмите [Backspace] дважды", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
["Hint: Launch the bazooka horizontally at full power."] = "Подсказка: Выстрелите из базуки горизонтально на полной мощности.", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
["Hint: Select the low gravity and press [Fire]."] = "Подсказка: Активируйте низкую гравитацию и нажмите [Огонь].", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -960,27 +961,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1005,7 +994,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1025,7 +1014,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1083,7 +1071,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
- ["Ikeda"] = "Икэда", -- User_Mission_-_Bamboo_Thicket
["I know and I'm terribly sorry!"] = "Я знаю и мне ужасно жаль!", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1111,6 +1098,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
["I'm not sure about that!"] = "Я не уверен насчёт этого!", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
["I'm so glad this is finally over!"] = "Я так рад, что это наконец-то закончилось!", -- A_Space_Adventure:final
@@ -1288,7 +1276,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1303,7 +1291,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
["Lestat"] = "Лестат", -- portal
@@ -1332,10 +1319,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1343,7 +1331,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
["Loon"] = "Псих", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1363,7 +1350,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1418,7 +1404,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1438,7 +1423,6 @@
["Nade Boy"] = "Снайперок", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Герои Без Имен",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1541,7 +1525,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "О, нет! Попробуй еще раз!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "О, нет! Время вышло! Попробуй еще раз.", --Bazooka, Shotgun, SniperRifle
["Oh no! You failed! Just try again."] = "О, нет! Ты проиграл! Попробуй еще раз.", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1565,9 +1549,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1579,6 +1563,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Команда Соперника: ",
-- ["Orange"] = "", --
@@ -1598,9 +1583,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
["Parachute"] = "Парашют", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Жалкое Сопротивление", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1615,7 +1600,6 @@
-- ["Physicist"] = "", -- HedgeEditor
["Piano Strike"] = "Фортепьяновый удар", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1694,9 +1678,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
["Prestigious Pilot"] = "Престижный Пилот", -- User_Mission_-_RCPlane_Challenge
@@ -1708,11 +1693,10 @@
["Professional stunt pilot"] = "Профессиональный пилот-трюкач", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyromancer"] = "", -- Battalion
["Pyro"] = "Пироман", -- The_Specialists
@@ -1765,11 +1749,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
["Rider"] = "Адский Всадник", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1778,8 +1760,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
- ["Roper"] = "Верёвочник", -- SpeedShoppa
["Ropes and Crates"] = "Верёвки и Ящики", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
["Rope Team"] = "Верёвочники", -- Basic_Training_-_Rope
["Rope Training"] = "Тренировка с Верёвкой", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1819,10 +1801,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Спасите как можно больше несчастных ёжиков!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1837,6 +1826,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1846,6 +1836,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1858,7 +1849,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1888,6 +1879,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1915,6 +1907,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1932,7 +1925,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
["Shoppa Union"] = "Союз Шоппы", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
- ["Shoppers"] = "Шопперы", -- SpeedShoppa
["Shotgun"] = "Дробовик", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Глупый",
@@ -1945,11 +1937,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1963,6 +1955,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1970,11 +1963,9 @@
-- ["Sniper! +8 points!"] = "", -- Space_Invasion
["Sniper Rifle"] = "Снайперская винтовка", -- Continental_supplies
["Sniper Training"] = "Тренировка снайпера",
- ["Sniperz"] = "Снайперы",
["Sniper"] = "Снайпер", -- The_Specialists
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1984,11 +1975,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2089,8 +2081,6 @@
["Structure Placement Mode"] = "Режим Размещения Сооружений", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2107,7 +2097,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2126,6 +2116,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2139,6 +2130,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2147,6 +2139,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2162,9 +2156,12 @@
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
["Team %d: "] = "Команда %d: ",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
["Team of Hearts"] = "Команда сердец", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2261,7 +2258,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
["The Great Escape"] = "Великий Побег", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2283,7 +2279,6 @@
["The Mutant has super-weapons and a lot of health."] = "У Мутанта есть супер-оружие и много здоровья.", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
["The Mutant loses health quickly if he doesn't keep scoring kills."] = "Мутант быстро теряет здоровье, если не зарабатывает очки за убийства.", -- Mutant
- ["The Nameless One"] = "Дед Мазай",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2369,7 +2364,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2387,6 +2381,7 @@
["This rain is really something..."] = "Этот дождь нескончаем...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "Потрясающее исполнение! Но это испытание можно пройти всего с одним самолётом. Знаете как?", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2427,6 +2422,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2441,14 +2437,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
["Top-class elite pilot"] = "Элитный пилот топ класса", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2456,13 +2451,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Токсичные", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
- ["Trainee"] = "Ученик", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
- ["Training Team"] = "Обучающиеся", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2479,7 +2471,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2498,7 +2489,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2544,7 +2534,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2597,9 +2587,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
- ["Wannabe Flyboys"] = "Хочу быть Пилотом", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
- ["Wannabe Shoppsta"] = "Хочу быть Шоппером", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2645,9 +2632,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2814,16 +2801,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Могу поклясться, что вода прибывает!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
["You did not make it in time, try again!"] = "Время вышло, попробуй еще раз!", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2845,6 +2832,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2935,7 +2923,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
["You lose!"] = "Вы проиграли!", -- Basic_Training_-_Bazooka
@@ -2960,12 +2948,12 @@
["Your accuracy was %.1f%% (+%d points)."] = "Ваша точность составила %.1f%% (+%d очков).", -- TargetPractice
["Your accuracy was %.1f%%."] = "Ваша точность составила %.1f%%.", -- Basic_Training_-_Bazooka
["Your ammo is limited this time."] = "В этот раз ваши боезапасы ограничены.", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2989,9 +2977,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
["Your rank: %s"] = "Ваш ранк: %s", -- User_Mission_-_RCPlane_Challenge
- ["You saved %d of 8 Hapless Hogs."] = "Вы спасли %d из 8 Несчастных Ёжиков", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/sk.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/sk.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Tréning s bazukou",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Mizerní zelenáči", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Zneškodnite všetky ciele pred vypršaním času.|Na túto misiu máte neobmedzené množstvo streliva.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Výhru si zaslúžite, ked zneškodníte nepriateľských ježkov.",
["Eliminate the enemy specialists."] = "Zneškodnite nepriateľských špecialistov.",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Okamžite sa tam presuň a zneškodni ho!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "POHYB! POHYB! POHYB!",
["Good birdy......"] = "Dobrý vtáčik......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "", -- Basic_Training_-_Sniper_Rifle
-- ["Good to go!"] = "", -- Racer, Tumbler
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Hrdinovia bez mena",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Áále nie! Tak to skúste znovu!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Áále nie! Čas vypršal! Tak to skúste znovu.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Nepriateľský tím",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Stlačte [Presnejšie mierenie] pre preskočenie intra",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Zachráňte toľko bezmocných ježkov, koľko len viete!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
["Shots Left: "] = "Zostáva striel: ", -- GaudyRacer, Tumbler
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
@@ -1950,11 +1942,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1968,6 +1960,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1976,10 +1969,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Tréning pre ostreľovačov",
- ["Sniperz"] = "Ostreľovači",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1989,11 +1980,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2094,8 +2086,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2112,7 +2102,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2131,6 +2121,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2144,6 +2135,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2152,6 +2144,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2167,9 +2161,12 @@
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
["Team %d: "] = "Tím %d: ",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2267,7 +2264,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2289,7 +2285,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Bez mena",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2375,7 +2370,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2393,6 +2387,7 @@
["This rain is really something..."] = "Ten dážď naozaj stojí za to...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2434,6 +2429,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2448,14 +2444,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2464,13 +2459,10 @@
["Toxic Team"] = "Toxic tím", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
["Track Time: "] = "Čas: ",
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2487,7 +2479,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2506,7 +2497,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2552,7 +2542,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2606,9 +2596,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2654,9 +2641,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2823,16 +2810,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Prisahal by si, že voda stúpa!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2854,6 +2841,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2944,7 +2932,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2969,12 +2957,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2998,9 +2986,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/stub.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/stub.lua Mon Jan 14 12:35:32 2019 -0500
@@ -23,7 +23,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -134,13 +133,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -148,13 +148,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -189,7 +189,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
-- ["Be careful, your fuel is limited from now on!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -221,7 +220,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
--- ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -304,6 +302,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- SpeedShoppa
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -323,6 +322,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -331,7 +332,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -344,7 +344,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -437,8 +437,8 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -458,10 +458,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "",
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
-- ["Did I miss something?"] = "", -- Space_Invasion
@@ -558,7 +555,6 @@
-- ["Ehm, okay ..."] = "", -- A_Space_Adventure:moon01
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
-- ["Eliminate the enemy specialists."] = "",
@@ -584,7 +580,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -609,11 +605,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -639,6 +636,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -678,7 +676,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
-- ["Get on over there and take him out!"] = "",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -713,7 +711,6 @@
-- ["GO! GO! GO!"] = "",
-- ["Good birdy......"] = "",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -724,7 +721,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -746,7 +743,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Greenhorn"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -754,11 +750,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
-- ["Grey"] = "", --
-- ["Guards"] = "", -- A_Space_Adventure:cosmos
@@ -805,6 +800,7 @@
-- ["Hedgehog"] = "", --
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -820,7 +816,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
-- ["He moves like an eagle in the sky."] = "", -- A_Classic_Fairytale:first_blood
@@ -834,20 +829,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
-- ["--- Highland Mode ---"] = "", -- Battalion
@@ -857,19 +852,25 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: You might want to stay out of sight and take all the crates ..."] = "", -- A_Classic_Fairytale:journey
@@ -901,27 +902,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -945,7 +934,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -965,7 +954,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1019,7 +1007,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1047,6 +1034,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1220,7 +1208,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1234,7 +1222,6 @@
-- ["[Left], [Right]: Change health value."] = "", -- HedgeEditor
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1261,10 +1248,11 @@
-- ["Little Obstacle Course"] = "", -- Basic_Training_-_Rope
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1272,7 +1260,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1292,7 +1279,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
-- ["Maybe you should try an easier TechRacer map."] = "", -- TechRacer
@@ -1336,7 +1322,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain is marked with dashed lines."] = "", -- A_Space_Adventure:desert01
@@ -1354,7 +1339,6 @@
-- ["My flying saucer stopped working!"] = "", -- A_Space_Adventure:ice01
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
--- ["Nameless Heroes"] = "",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm Rocket"] = "", -- Continental_supplies
-- ["Naranja Jed"] = "", -- A_Space_Adventure:fruit01
@@ -1449,7 +1433,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
-- ["Oh no! Just try again!"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
-- ["Oh no! Time's up! Just try again."] = "", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1473,8 +1457,8 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1486,6 +1470,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Orange"] = "", --
-- ["Orlando Boom!"] = "", -- A_Classic_Fairytale:queen
@@ -1502,9 +1487,9 @@
-- ["PAotH"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:desert01, A_Space_Adventure:moon01
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Perfect! Now try to get the next crate without hurting yourself!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1515,7 +1500,6 @@
-- ["Phosphat"] = "", -- portal
-- ["Physicist"] = "", -- HedgeEditor
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1589,9 +1573,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1603,10 +1588,9 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyromancer"] = "", -- Battalion
-- ["Pyro"] = "", -- The_Specialists
@@ -1655,11 +1639,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1667,8 +1649,8 @@
-- ["Ronald"] = "", -- portal
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
-- ["Roshi"] = "", --
-- ["Rot Molester"] = "", -- A_Classic_Fairytale:shadow
@@ -1703,10 +1685,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1721,12 +1710,14 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
-- ["Score points by killing other hedgehogs."] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s (%d)"] = "", -- Continental_supplies
@@ -1738,7 +1729,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1764,6 +1755,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1791,6 +1783,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1808,7 +1801,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
-- ["Silver"] = "", --
@@ -1819,11 +1811,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1837,6 +1829,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1844,10 +1837,8 @@
-- ["Sniper! +8 points!"] = "", -- Space_Invasion
-- ["Sniper"] = "", -- The_Specialists
-- ["Sniper Training"] = "",
--- ["Sniperz"] = "",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1857,11 +1848,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -1958,8 +1950,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -1976,7 +1966,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -1995,6 +1985,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["Switch: Drop ball of dirt from parachute (once)"] = "", -- Continental_supplies
@@ -2005,6 +1996,7 @@
-- ["Switch hedgehog: [Tabulator]"] = "", -- Basic_Training_-_Movement
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2013,6 +2005,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2027,9 +2021,12 @@
-- ["Tatsujin"] = "", --
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
-- ["Teamwork"] = "", -- User_Mission_-_Teamwork
@@ -2118,7 +2115,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2138,7 +2134,6 @@
-- ["The Moonwalk"] = "", -- A_Classic_Fairytale:journey
-- ["The Mutant has super weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2219,7 +2214,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2235,6 +2229,7 @@
-- ["This rain is really something..."] = "",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2269,6 +2264,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2283,14 +2279,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2298,13 +2293,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2321,7 +2313,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2339,7 +2330,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2381,7 +2371,7 @@
-- ["Use the bazooka and the flying saucer to get the freezer."] = "", -- A_Space_Adventure:ice01
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2432,9 +2422,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2477,9 +2464,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2638,16 +2625,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-- ["You'd almost swear the water was rising!"] = "",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
-- ["You drove the minions away."] = "", -- A_Space_Adventure:moon01
@@ -2664,6 +2651,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2750,7 +2738,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!] = "", -- Basic_Training_-_Bazooka
@@ -2776,12 +2764,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
-- ["You're pathetic! You are not worthy of my attention..."] = "", -- A_Classic_Fairytale:shadow
@@ -2803,9 +2791,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/sv.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/sv.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Bazookaträning",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Blodiga gröngölingar", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Förstör alla målen innan din tid tar slut.|Du har obegränsad ammunition för deta uppdrag", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
-- ["Eliminate the enemy specialists."] = "",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Ta dig bort där och gör dig av med honom!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "Kör! Kör! Kör!",
["Good birdy......"] = "Fin fågel......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
--- ["Nameless Heroes"] = "",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Å nej! Bara att försöka igen!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Åh nej! Tiden är ute! Pröva igen.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Motståndarlag: ",
-- ["Orange"] = "", --
@@ -1600,9 +1585,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1617,7 +1602,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1698,9 +1682,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1712,11 +1697,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1769,11 +1753,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1782,8 +1764,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1823,10 +1805,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1841,6 +1830,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1850,6 +1840,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1862,7 +1853,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1892,6 +1883,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1919,6 +1911,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1936,7 +1929,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1949,11 +1941,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1967,6 +1959,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1975,10 +1968,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Prickskyttesträning",
- ["Sniperz"] = "Prickskyttarna",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1988,11 +1979,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2093,8 +2085,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2111,7 +2101,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2130,6 +2120,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2143,6 +2134,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2151,6 +2143,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2166,9 +2160,12 @@
-- ["Tatters"] = "", --
["Team %d: "] = "Lag %d: ",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2266,7 +2263,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2288,7 +2284,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2374,7 +2369,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2392,6 +2386,7 @@
-- ["This rain is really something..."] = "",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2432,6 +2427,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2446,14 +2442,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2461,13 +2456,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Förgiftade laget", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2484,7 +2476,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2503,7 +2494,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2549,7 +2539,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2602,9 +2592,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2650,9 +2637,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2819,16 +2806,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-- ["You'd almost swear the water was rising!"] = "",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2850,6 +2837,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2940,7 +2928,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2965,12 +2953,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2994,9 +2982,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/tr.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/tr.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Roketatar Eğitimi",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Kanlı Acemiler", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Süren dolmadan tüm hedefleri yoket.|Bu görevde sınırsız mermin var.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Vernichte alle gegnerischen Igel um zu gewinnen",
["Eliminate the enemy specialists."] = "Vernichte die gegnerischen Spezialisten",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Mach, dass du hinüber kommst und schalte ihn aus!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "Bewegung, Bewegung, Bewegung!",
["Good birdy......"] = "Braver Vogel......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
["Good so far!"] = "Gut soweit!",
["Good to go!"] = "Startklar!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1441,7 +1426,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Namenlose Helden",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1544,7 +1528,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "Oh nein! Versuch's nochmal!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "Oh nein! Die Zeit ist um! Versuche es nochmal.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1568,9 +1552,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1582,6 +1566,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Gegnerisches Team: ",
-- ["Orange"] = "", --
@@ -1601,9 +1586,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Erbärmlicher Widerstand", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1618,7 +1603,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1699,9 +1683,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1713,11 +1698,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1770,11 +1754,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1783,8 +1765,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1824,10 +1806,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Rette so viele glücklose Igel als möglich!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1842,6 +1831,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1851,6 +1841,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1863,7 +1854,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1893,6 +1884,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1920,6 +1912,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1937,7 +1930,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Doofi",
@@ -1950,11 +1942,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1968,6 +1960,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1976,10 +1969,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Scharfschützen-Training",
- ["Sniperz"] = "Heckenschützen",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1989,11 +1980,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2094,8 +2086,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2112,7 +2102,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2131,6 +2121,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2144,6 +2135,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2152,6 +2144,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2167,9 +2161,12 @@
-- ["Tatters"] = "", --
-- ["Team %d: "] = "",
-- ["Team %d"] = "", -- SimpleMission
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2267,7 +2264,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2289,7 +2285,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Der Namenlose",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2375,7 +2370,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2393,6 +2387,7 @@
["This rain is really something..."] = "Das nenne ich mal einen Regenschauer...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2434,6 +2429,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2448,14 +2444,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2463,13 +2458,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Giftige Gegner", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2486,7 +2478,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
--- ["T_T"] = "",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2505,7 +2496,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2551,7 +2541,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2604,9 +2594,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2652,9 +2639,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2821,16 +2808,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Suyun yükseldiğine yemin edebilirdin!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2852,6 +2839,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2942,7 +2930,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2967,12 +2955,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2996,9 +2984,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/uk.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/uk.lua Mon Jan 14 12:35:32 2019 -0500
@@ -6,8 +6,8 @@
-- ["15+%d damage, %d invulnerable left"] = "", -- Continental_supplies
-- ["1-5, Precise + 1-4: Choose structure type"] = "", -- Construction_Mode
-- ["+1 barrel!"] = "+1 бочка!", -- Tumbler
+-- ["%.1fs"] = "%.1fс", -- Racer, TechRacer
-- ["%.1f seconds were remaining."] = "", -- Basic_Training_-_Bazooka
--- ["%.1fs"] = "%.1fс", -- Racer, TechRacer
-- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
-- ["+1 mine!"] = "+1 міна!", -- Tumbler
-- ["+1 point"] = "+1 очко", -- Mutant
@@ -25,7 +25,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "Бонус Точності! +15 очок", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "Бонус точності: +%d очок", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "Досягнення: %s", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
["A Classic Fairytale"] = "Класична казка", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -140,13 +139,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -154,13 +154,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -196,7 +196,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "Тренування з базукою",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -230,7 +229,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "Криваві Салаги", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "Блакитна команда", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -314,6 +312,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -333,6 +332,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -341,7 +342,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -355,7 +355,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -378,7 +378,6 @@
-- ["Configuration accepted."] = "Привітання прийняті.", -- WxW
-- ["Configuration phase"] = "Привітальна фраза", -- WxW
-- ["Congrats! You won!"] = "Вітання! Ви перемогли!", -- A_Space_Adventure:moon01
--- ["Congratulations"] = "Вітання", -- Basic_Training_-_Rope
-- ["Congratulations, you acquired the device part!"] = "", -- A_Space_Adventure:ice01
-- ["Congratulations, you are the best!"] = "", -- A_Space_Adventure:desert03
-- ["Congratulations, you are the fastest!"] = "", -- A_Space_Adventure:moon02
@@ -392,6 +391,7 @@
-- ["Congratulations! You win."] = "", -- Big_Armory
-- ["Congratulations, you won!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice02
["Congratulations!"] = "Вітаємо!",
+-- ["Congratulations"] = "Вітання", -- Basic_Training_-_Rope
-- ["Conquering the galaxy"] = "", -- A_Space_Adventure:cosmos
-- ["CONSTRUCTION MODE"] = "", -- Construction_Mode
-- ["Construction Mode tool"] = "", -- Construction_Mode
@@ -409,8 +409,8 @@
-- ["Corporationals"] = "", -- A_Classic_Fairytale:queen
-- ["Corpsemonger"] = "", -- A_Classic_Fairytale:shadow
-- ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
+-- ["Cost: %d"] = "Ціна: %d", -- Construction_Mode
-- ["Cost"] = "Ціна", -- Construction_Mode
--- ["Cost: %d"] = "Ціна: %d", -- Construction_Mode
-- ["Cotton Needer"] = "", -- Mutant
-- ["Count Hogula"] = "", --
-- ["Coward"] = "Боягуз", -- A_Classic_Fairytale:queen
@@ -444,9 +444,9 @@
-- ["+%d Ammo"] = "", -- Space_Invasion
["Dangerous Ducklings"] = "Небезпечні Каченята",
-- ["Dark Strawberry"] = "", -- A_Space_Adventure:fruit02
--- ["+%d"] = "+%d", -- Battalion
-- ["%d crate(s) remaining"] = "", -- SpeedShoppa
-- ["%d damage was dealt in this game."] = "", -- Mutant
+-- ["+%d"] = "+%d", -- Battalion
-- ["%d / %d"] = "%d / %d", -- Battalion
-- ["%d | %d"] = "%d | %d", -- Mutant
-- ["%d/%d"] = "%d/%d", -- SpeedShoppa
@@ -458,9 +458,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -482,10 +482,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "Знищіть загарбників і зберіть бонуси, щоб набрати очки.", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -497,9 +494,9 @@
-- ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
-- ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
-- ["Die, die, die!"] = "Вмри, вмри, вмри!", -- A_Classic_Fairytale:dragon
--- ["Difficulty: "] = "Складність: ", -- Continental_supplies
-- ["Difficulty: Easy"] = "", -- A_Classic_Fairytale:first_blood
-- ["Difficulty: Hard"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Difficulty: "] = "Складність: ", -- Continental_supplies
-- ["Dimitry"] = "", --
-- ["%d invaders have been destroyed in this game."] = "", -- Space_Invasion
-- ["Disabled"] = "", -- WxW
@@ -523,8 +520,8 @@
-- ["Don't hit yourself!"] = "", -- Basic_Training_-_Bazooka
-- ["Don't touch the flames!"] = "", -- ClimbHome
-- ["Don't you dare harming our tribe!"] = "", -- A_Classic_Fairytale:queen
+ ["Double Kill!"] = "Подвійне Вбивство!",
-- ["Double kill!"] = "Подвійне вбивство!", -- Mutant
- ["Double Kill!"] = "Подвійне Вбивство!",
-- ["Do you have any idea how bad an exploding arrow hurts?"] = "", -- A_Classic_Fairytale:queen
-- ["Do you have any idea how valuable grass is?"] = "", -- A_Classic_Fairytale:enemy
-- ["Do you have any idea what it's like in the village for a woman?"] = "", -- A_Classic_Fairytale:queen
@@ -593,7 +590,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Знищіть всі цілі до закінчення часу.|У вас безмежні боєприпаси.", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
["Eliminate the enemy hogs to win."] = "Знешкодьте ворожих їжаків щоб перемогти.",
["Eliminate the enemy specialists."] = "Знешкодьте ворожих спеціалістів.",
@@ -621,7 +617,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -647,11 +643,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -679,6 +676,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -699,8 +697,8 @@
-- ["“g=50, g2=150, period=4000” for gravity changing|from 50 to 150 and back with period of 4000 ms."] = "", -- Gravity
-- ["Galaxy Guardians"] = "Охоронці Галактики", -- Big_Armory
["Game Modifiers: "] = "Модифікатори Гри: ",
+ ["GAME OVER!"] = "КІНЕЦЬ ГРИ!",
-- ["Game over!"] = "Кінець гри!", -- Space_Invasion
- ["GAME OVER!"] = "КІНЕЦЬ ГРИ!",
["Game Started!"] = "Гра почалась!",
["Game? Was this a game to you?!"] = "Гра? Це для тебе була лише гра?!", -- A_Classic_Fairytale:enemy
-- ["Gangsters"] = "Гангстери", --
@@ -720,7 +718,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "Залізь туди і прикінчи його!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -758,7 +756,6 @@
["GO! GO! GO!"] = "ДАВАЙ! ДАВАЙ! РУХАЙСЯ!",
["Good birdy......"] = "Гарна пташка......",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -769,7 +766,7 @@
["Good so far!"] = "Покищо добре!",
["Good to go!"] = "Так тримати!",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
- ["Go on top of the flower"] = "Йди на верхівку квітки", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
["Go, quick!"] = "Йди, швидше!", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -792,7 +789,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -802,11 +798,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -860,6 +855,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -875,7 +871,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
["Help me, please!!!"] = "Допоможіть мені, будь ласка!!!", -- A_Classic_Fairytale:journey
["Help me, please!"] = "Допоможіть мені, будь ласка!", -- A_Classic_Fairytale:journey
@@ -890,20 +885,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
- ["Hero Team"] = "Команда героїв", -- User_Mission_-_The_Great_Escape
["He's so brave..."] = "Він такий сміливий...", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
["Hey, guys!"] = "Гей, хлопці!", -- A_Classic_Fairytale:backstab
["Hey guys!"] = "Гей хлопці!", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "Ей! Так не чесно!", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -914,20 +909,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -961,27 +962,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1006,7 +995,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1026,7 +1015,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1084,7 +1072,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1112,6 +1099,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1236,8 +1224,8 @@
-- ["Jimmy"] = "", --
-- ["Jingo"] = "", --
-- ["Joe"] = "", -- A_Space_Adventure:moon01
+-- ["John Snow"] = "Джон Сноу", -- A_Space_Adventure:ice01
-- ["John"] = "Джон", -- A_Classic_Fairytale:journey
--- ["John Snow"] = "Джон Сноу", -- A_Space_Adventure:ice01
-- ["Jolly Roger"] = "", --
-- ["Jones"] = "", --
-- ["Judas"] = "", -- A_Classic_Fairytale:backstab
@@ -1268,10 +1256,10 @@
-- ["Kill The Leader"] = "", -- WxW
-- ["Kill The Leader: You must also hit the team with the most health."] = "", -- WxW
-- ["Kill the traitor, %s, or spare his life!"] = "", -- A_Classic_Fairytale:backstab
+-- ["King Customer"] = "", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
+-- ["--- King Mode ---"] = "", -- Battalion
-- ["--- King ---"] = "--- Король ---", -- Battalion
-- ["King"] = "Король", -- Battalion
--- ["King Customer"] = "", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["--- King Mode ---"] = "", -- Battalion
-- ["Knight"] = "Лицар", -- Battalion
-- ["Knives"] = "", --
-- ["Knockball"] = "", -- Knockball
@@ -1289,7 +1277,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
["Leader"] = "Лідер", -- A_Classic_Fairytale:enemy
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1304,7 +1292,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1333,10 +1320,11 @@
["Lively Lifeguard"] = "Жвавий Рятівник",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1344,7 +1332,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1364,7 +1351,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1419,7 +1405,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1439,7 +1424,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
- ["Nameless Heroes"] = "Безіменні Герої",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1542,7 +1526,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "О, ні! Давай, спробуй ще раз!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "О, ні! Час йде! Спробуй ще раз.", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1566,9 +1550,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1580,6 +1564,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "Команда-Противник: ",
-- ["Orange"] = "", --
@@ -1599,9 +1584,9 @@
-- ["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"] = "", -- A_Space_Adventure:cosmos
-- ["Parachute"] = "", -- Continental_supplies
-- ["Patches"] = "", --
- ["Pathetic Resistance"] = "Жалюгідний Опір", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1616,7 +1601,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "Пірати", --
@@ -1697,9 +1681,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
["Press [Precise] to skip intro"] = "Натисніть [Приціл] щоб пропустити вступ",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1711,18 +1696,17 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
-- ["Quit: [Esc]"] = "", -- Basic_Training_-_Movement
-- ["Race complexity limit reached"] = "Досягнута межа складності гонки", -- Racer, TechRacer
+-- ["Racer tool"] = "", -- Racer
-- ["Racer"] = "Гонщик", -- Racer
--- ["Racer tool"] = "", -- Racer
-- ["Race"] = "", -- TrophyRace
-- ["Rachel"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
-- ["Radar: Off"] = "", -- WxW
@@ -1768,11 +1752,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1781,8 +1763,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1822,10 +1804,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
- ["Save as many hapless hogs as possible!"] = "Врятуйте якнайбільше нещасних їжаків!",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1840,6 +1829,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1849,6 +1839,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1861,7 +1852,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1891,6 +1882,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1918,6 +1910,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1935,7 +1928,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
["Shotgun"] = "Рушниця", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
["Silly"] = "Дурник",
@@ -1948,11 +1940,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1966,6 +1958,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1974,10 +1967,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "Снайперське тренування",
--- ["Sniperz"] = "",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1987,11 +1978,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2092,8 +2084,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2110,7 +2100,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2129,6 +2119,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2142,6 +2133,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2150,6 +2142,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2163,11 +2157,14 @@
-- ["Targets left: %d"] = "", -- TargetPractice
-- ["Tatsujin"] = "", --
-- ["Tatters"] = "", --
+ ["Team %d: "] = "Команда %d: ",
-- ["Team %d"] = "Команда %d", -- SimpleMission
- ["Team %d: "] = "Команда %d: ",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "Очки Команди", -- Control
-- ["Team scores:"] = "Очки команди", -- Space_Invasion
@@ -2265,7 +2262,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2287,7 +2283,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
- ["The Nameless One"] = "Безіменний",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2373,7 +2368,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2391,6 +2385,7 @@
["This rain is really something..."] = "Цей дощ дійсно дещо...",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2431,6 +2426,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2445,14 +2441,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2460,13 +2455,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "Токсична Команда", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "Трасу пройдено", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
+-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Training"] = "Тренування", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
--- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2483,7 +2475,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "Ааааа!!!",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2502,7 +2493,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2548,7 +2538,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2601,9 +2591,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2649,9 +2636,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2818,16 +2805,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
["You'd almost swear the water was rising!"] = "Ти ледь не присягався, що вода піднімається!",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2849,6 +2836,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2939,7 +2927,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
["You'll see what I mean!"] = "Ти побачиш про що я!", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2964,12 +2952,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
["You're...alive!? But we saw you die!"] = "Ти...живий!? Але ми бачили як ти помер!", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
["You're funny!"] = "А ти кумедний!", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2993,9 +2981,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Locale/zh_CN.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Locale/zh_CN.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,6 @@
-- ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Accuracy Bonus! +15 points"] = "", -- Space_Invasion
-- ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
--- ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-- ["Achievement gotten: %s"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_That_Sinking_Feeling, User_Mission_-_Bamboo_Thicket, User_Mission_-_Dangerous_Ducklings, Basic_Training_-_Rope, Tumbler
-- ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
-- ["A crate critical to this mission has been destroyed."] = "", -- SimpleMission
@@ -141,13 +140,14 @@
-- ["As you've seen, the dropped grenade roughly fell into your flying direction."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Athlete"] = "", -- Battalion
-- ["Attack: Activate"] = "", -- Racer
--- ["Attack Captain Lime before he attacks back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack Captain Lime before he attacks back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack From Rope: %s"] = "", -- WxW
-- ["Attack From Rope: You may only attack from a rope."] = "", -- WxW
-- ["Attack rule: %s"] = "", -- WxW
-- ["Attack: Select this continent"] = "", -- Continental_supplies
-- ["Attack: [Space]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
--- ["Attack the assassins before they attack back"] = "", -- A_Space_Adventure:fruit02
+-- ["Attack: Tap the [Bomb]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+-- ["Attack the assassins before they attack back."] = "", -- A_Space_Adventure:fruit02
-- ["Attack: Throw ball"] = "", -- Knockball
-- ["At the end of the game your health was %d."] = "", -- A_Space_Adventure:ice01
-- ["At the start of the game each enemy hog has only the weapon that he is named after."] = "", -- A_Space_Adventure:death02
@@ -155,13 +155,13 @@
-- ["Available weapon specials:"] = "", -- Continental_supplies
-- ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Avoid bazookas, red and blue invaders."] = "", -- Space_Invasion
--- ["Avoid the mines!"] = "", -- Basic_Training_-_Rope
-- ["Axes"] = "", -- Bazooka_Battlefield
-- ["Aye! Fellow! Let me exit this chamber of doom!"] = "", -- A_Classic_Fairytale:epil
-- ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
-- ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
-- ["Back in the village, the two tribes finally started to live in harmony."] = "", -- A_Classic_Fairytale:epil
-- ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+-- ["Back Jump: Double-tap the [Curvy Arrow]"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (1/2)"] = "", -- Basic_Training_-_Movement
-- ["Back Jumping (2/2)"] = "", -- Basic_Training_-_Movement
-- ["Backstab"] = "", -- A_Classic_Fairytale:backstab
@@ -197,7 +197,6 @@
-- ["Bazooka Battlefield"] = "", -- Bazooka_Battlefield
-- ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
-- ["Bazookas are influenced by wind."] = "", -- Basic_Training_-_Bazooka
--- ["Bazooka Team"] = "", -- Basic_Training_-_Bazooka
["Bazooka Training"] = "火箭筒训练",
-- ["Bearded Beast"] = "", --
-- ["Be careful, the future of Hogera is in your hands!"] = "", -- A_Space_Adventure:cosmos
@@ -231,7 +230,6 @@
-- ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
-- ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
-- ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
- ["Bloody Rookies"] = "雉儿飞", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Blue"] = "", --
-- ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Bob"] = "", -- A_Space_Adventure:cosmos
@@ -315,6 +313,7 @@
-- ["Challenge over!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge, User_Mission_-_That_Sinking_Feeling, SpeedShoppa, ClimbHome
-- ["Change Content: [Left], [Right]"] = "", -- HedgeEditor
+-- ["Change detonation timer: Tap the [Clock]"] = "", -- Basic_Training_-_Grenade, A_Classic_Fairytale:shadow
-- ["Change direction: [Left]/[Right]"] = "", -- Basic_Training_-_Grenade
-- ["Change Health Boost: [Left], [Right]"] = "", -- HedgeEditor
-- ["Change Health: [Left], [Right]"] = "", -- HedgeEditor
@@ -334,6 +333,8 @@
-- ["Chicken"] = "", --
-- ["Chief Sandologist"] = "", -- A_Space_Adventure:desert01
-- ["Chikorita"] = "", --
+-- ["Choose location: Left click"] = "", -- A_Classic_Fairytale:shadow
+-- ["Choose location: Tap the [Target] button, then tap on the spot you want to choose"] = "", -- A_Classic_Fairytale:shadow
-- ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "", -- HedgeEditor
-- ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
-- ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
@@ -342,7 +343,6 @@
-- ["Cleaver"] = "", -- Construction_Mode
-- ["Cleaver Placement Mode"] = "", -- Construction_Mode
-- ["CLEAVER PLACEMENT MODE"] = "", -- HedgeEditor
--- ["Climber"] = "", -- ClimbHome
-- ["Climb Home"] = "", -- ClimbHome
-- ["Closing in"] = "", -- A_Classic_Fairytale:queen
-- ["Clown"] = "", -- HedgeEditor
@@ -356,7 +356,7 @@
-- ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Collect or destroy the final crate to finish the training."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the crate and attack!"] = "", -- WxW
--- ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Collect the crate on the right."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
-- ["Collect the first crate to begin!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Collect the freezer and get the device part from Thanta."] = "", -- A_Space_Adventure:ice01
@@ -459,9 +459,9 @@
-- ["Defeat all enemies!"] = "", -- portal
-- ["Defeat Professor Hogevil!"] = "", -- A_Space_Adventure:death01
-- ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+-- ["Defeat the cannibals!"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
-- ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
-- ["Defeat the enemy!"] = "", -- A_Classic_Fairytale:queen
-- ["Delete Waypoint"] = "", -- HedgeEditor
@@ -483,10 +483,7 @@
-- ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Destroy invaders and collect bonuses to score points."] = "", -- Space_Invasion
-- ["Destroy the targets!"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
--- ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
--- ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
-- ["+%d flamer fuel!"] = "", -- Tumbler
--- ["%d Hapless Hogs left"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["+%d health"] = "", -- Mutant
-- ["%d-Hit Combo! +%d points!"] = "", -- Space_Invasion
-- ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
@@ -594,7 +591,6 @@
-- ["Elderbot"] = "", -- A_Classic_Fairytale:family
-- ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "时间限制内清除全部目标。弹药无限。", --Bazooka, Shotgun, SniperRifle
--- ["Eliminate the Blue Team before the time runs out."] = "", -- User_Mission_-_Dangerous_Ducklings
-- ["Eliminate the enemy before the time runs out."] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree
-- ["Eliminate the enemy hogs to win."] = "",
-- ["Eliminate the enemy specialists."] = "",
@@ -622,7 +618,7 @@
-- ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
-- ["Except me, of course! I just saved a whole planet!"] = "", -- A_Space_Adventure:final
-- ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Explore the tunnel with the other hedgehogs and search for the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Explore the tunnel with the other hedgehogs and search for the device."] = "", -- A_Space_Adventure:fruit02
-- ["Exploring the tunnel"] = "", -- A_Space_Adventure:fruit02
-- ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
-- ["Fair Wind"] = "", --
@@ -648,11 +644,12 @@
-- ["Final result"] = "", -- Mutant
-- ["Final Targets"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Final team scores:"] = "", -- Space_Invasion
+-- ["Find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Find a way to detonate all the explosives and stay alive!"] = "", -- A_Space_Adventure:final
-- ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
-- ["Finish this challenge as fast as possible to earn bonus points."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Finish waypoint placement"] = "", -- Racer
--- ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Finish your training."] = "", -- A_Classic_Fairytale:first_blood
-- ["Finite Ropes"] = "", -- Basic_Training_-_Rope
-- ["Fire a rocket with napalm."] = "", -- Continental_supplies
-- ["Fire: [Precise]"] = "", -- Space_Invasion, Tumbler
@@ -680,6 +677,7 @@
-- ["Flying Saucer Training"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Fly into space to fight off the invaders with barrels!"] = "", -- Space_Invasion
-- ["Fly to the meteorite and detonate the explosives"] = "", -- A_Space_Adventure:cosmos
+-- ["Follow the path and destroy the next target."] = "", -- Basic_Training_-_Rope
-- ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
-- ["For the next crate, you have to do back jumps."] = "", -- Basic_Training_-_Movement
-- ["Four Eyes"] = "", --
@@ -721,7 +719,7 @@
-- ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-- ["Get him, Spike!"] = "", -- A_Space_Adventure:desert01
["Get on over there and take him out!"] = "上去把它拉下来!",
--- ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Get on the head of the mole."] = "", -- A_Classic_Fairytale:first_blood
-- ["Get past the flower."] = "", -- A_Classic_Fairytale:journey
-- ["Get ready to fight!"] = "", -- A_Space_Adventure:moon01
-- ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
@@ -759,7 +757,6 @@
["GO! GO! GO!"] = "上!",
["Good birdy......"] = "乖鸟儿",
-- ["Good bye!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
-- ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
-- ["Good job!"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Good job! Defeat the rest of the aliens!"] = "", -- A_Classic_Fairytale:queen
@@ -770,7 +767,7 @@
-- ["Good so far!"] = "",
-- ["Good to go!"] = "",
-- ["Good! You now control Cappy."] = "", -- Basic_Training_-_Movement
--- ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Go on top of the flower."] = "", -- A_Classic_Fairytale:first_blood
-- ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
-- ["Gorkij"] = "", -- A_Classic_Fairytale:journey
-- ["Go surf!"] = "", -- WxW
@@ -793,7 +790,6 @@
-- ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-- ["Green"] = "", --
-- ["Green Bananas"] = "", -- A_Space_Adventure:fruit01
--- ["Green Bananas won!"] = "", -- A_Space_Adventure:fruit01
-- ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
-- ["Green Hog Grape"] = "", -- A_Space_Adventure:fruit01
-- ["Green hogs won't intentionally hurt you."] = "", -- A_Space_Adventure:fruit01
@@ -803,11 +799,10 @@
-- ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
-- ["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["Greetings, %s!"] = "", -- A_Classic_Fairytale:dragon
--- ["Greg"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+-- ["Grenade hint: Set timer with the [Timer] controls, aim with [Up]/[Down]."] = "", -- A_Classic_Fairytale:shadow
-- ["Grenades explode after 1 to 5 seconds (you decide)."] = "", -- Basic_Training_-_Grenade
-- ["Grenades with high bounciness bounce a lot and behave chaotic."] = "", -- Basic_Training_-_Grenade
--- ["Grenade Team"] = "", -- Basic_Training_-_Grenade
-- ["Grenade Training"] = "", -- Basic_Training_-_Grenade
-- ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-- ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard, HedgeEditor
@@ -861,6 +856,7 @@
-- ["Hedgehog Projectile"] = "", -- Continental_supplies
-- ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-- ["Hedgehogs can not be deleted."] = "", -- HedgeEditor
+-- ["Hedgehogs left: %d"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Hedgehogs will be revived after their death."] = "", -- Mutant
-- ["Hedgehogs will start in the first waypoint."] = "", -- Racer
-- ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
@@ -876,7 +872,6 @@
-- ["Help Enabled"] = "", -- HedgeEditor
-- ["Helpers: Each team starts with %d helper points"] = "", -- Battalion
-- ["Helpers: Hogs will get 1 out of 2 helpers randomly each turn"] = "", -- Battalion
--- ["Help Hog Solo to find all the parts of the anti-gravity device."] = "", -- A_Space_Adventure:cosmos
-- ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
-- ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
@@ -891,20 +886,20 @@
-- ["Here you will find the current mission instructions."] = "", -- Basic_Training_-_Movement
-- ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "", -- Basic_Training_-_Flying_Saucer
-- ["Heroic Wind"] = "", -- Continental_supplies
--- ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
-- ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
-- ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "", -- A_Space_Adventure:moon02
-- ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey, don't forget us! We still need to climb up!"] = "", -- A_Classic_Fairytale:family
-- ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
-- ["Hey guys!"] = "", -- A_Classic_Fairytale:united
--- ["Hey, Hog Solo! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey! I was supposed to collect it!"] = "", -- A_Space_Adventure:fruit02
+-- ["Hey, %s! Finally you have come!"] = "", -- A_Space_Adventure:moon01
-- ["Hey, %s! Look, someone is stealing the saucer!"] = "", -- A_Space_Adventure:cosmos
-- ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-- ["Hidden"] = "", -- portal
-- ["High Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["High Jump: [Backspace]"] = "", -- Basic_Training_-_Movement
+-- ["High Jump: Tap the [Curvy Arrow] shortly"] = "", -- Basic_Training_-_Movement
-- ["--- Highland ---"] = "", -- Battalion
-- ["Highlander: Eliminate hogs to take their weapons"] = "", -- Highlander
-- ["Highland: Hogs get %d random weapons from their pool"] = "", -- Battalion
@@ -915,20 +910,26 @@
-- ["Hill Guard"] = "", -- Bazooka_Battlefield
-- ["Hi! Nice to meet you."] = "", -- A_Space_Adventure:ice01
-- ["--- Hint ---"] = "", -- Battalion
+-- ["Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
-- ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Double Jump - Tap the [Curvy Arrow] twice"] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Drilling holes should solve everything."] = "", -- A_Classic_Fairytale:family
-- ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "", -- Basic_Training_-_Movement
-- ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "", -- A_Classic_Fairytale:family
-- ["Hint: It might be easier if you vary the angle only slightly."] = "", -- Basic_Training_-_Bazooka
+-- ["Hint: Just select the parachute, it opens automatically when you fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Kills won't transfer a hog's pool to the killer's pool"] = "", -- Battalion
-- ["Hint: Launch the bazooka horizontally at full power."] = "", -- Basic_Training_-_Bazooka
--- ["Hint: Press [Esc] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Pause the game to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: Select the blow torch, aim and press [Fire]. Press [Fire] again to stop."] = "", -- A_Classic_Fairytale:journey
-- ["Hint: Select the low gravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+-- ["Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move."] = "", -- A_Classic_Fairytale:first_blood
+-- ["Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
-- ["Hint: %s needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
-- ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "", -- Basic_Training_-_Rope
-- ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
+-- ["Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder."] = "", -- A_Classic_Fairytale:shadow
-- ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
-- ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
@@ -962,27 +963,15 @@
-- ["Hogminator"] = "", -- A_Classic_Fairytale:family
-- ["Hog nueve"] = "", -- A_Space_Adventure:fruit03
-- ["Hog octo"] = "", -- A_Space_Adventure:fruit03
--- ["Hogonauts"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Hog onze"] = "", -- A_Space_Adventure:fruit03
-- ["Hog Saturn"] = "", -- A_Space_Adventure:fruit03
-- ["Hogs in sight!"] = "", -- Continental_supplies
-- ["Hog Solo and GB"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
--- ["Hog Solo arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
-- ["Hog Solo"] = "", -- A_Space_Adventure:cosmos, A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:ice02, A_Space_Adventure:moon01, A_Space_Adventure:moon02
--- ["Hog Solo couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo escaped successfully!"] = "", -- A_Space_Adventure:fruit01
--- ["Hog Solo has to reach the last crates"] = "", -- A_Space_Adventure:fruit02
--- ["Hog Solo has to refuel his saucer."] = "", -- A_Space_Adventure:moon01
--- ["Hog Solo lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
--- ["Hog Solo wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["- Hogs will be revived"] = "", -- Capture_the_Flag
-- ["- Hogs will drop the flag when killed"] = "", -- Capture_the_Flag
-- ["Hog two"] = "", -- A_Space_Adventure:fruit03
+-- ["Hold [Attack] pressed to throw with more power."] = "", -- A_Classic_Fairytale:shadow
-- ["Hold [Attack] to attach the rope."] = "", -- Basic_Training_-_Rope
-- ["Hold the Attack key pressed for more power."] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
-- ["Holy shit!"] = "", -- Mutant
@@ -1007,7 +996,7 @@
-- ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
-- ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
--- ["However, the army of Yellow Watermelons is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
+-- ["However, the army of %s is about to attack any moment now."] = "", -- A_Space_Adventure:fruit01
-- ["How to Rope"] = "", -- Basic_Training_-_Rope
-- ["How would you like being discriminated against?"] = "", -- A_Classic_Fairytale:queen
-- ["Huh?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:queen
@@ -1027,7 +1016,6 @@
-- ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
-- ["I can't let you go further because …"] = "", -- A_Classic_Fairytale:queen
-- ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
--- ["Ice"] = "", -- Basic_Training_-_Movement
-- ["Ice Jake"] = "", -- A_Space_Adventure:ice01
-- ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
-- ["Icy Girder: [3]"] = "", -- HedgeEditor
@@ -1085,7 +1073,6 @@
-- ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
-- ["I just want the strange device you found!"] = "", -- A_Space_Adventure:ice01
-- ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
--- ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["I know and I'm terribly sorry!"] = "", -- A_Classic_Fairytale:epil
-- ["I know, my hero!"] = "", -- A_Classic_Fairytale:epil
-- ["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."] = "", -- A_Space_Adventure:fruit02
@@ -1113,6 +1100,7 @@
-- ["I'm living a dream!"] = "", -- A_Classic_Fairytale:queen
-- ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
-- ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+-- ["IMPORTANT: To see the mission panel again, pause the game."] = "", -- Basic_Training_-_Movement
-- ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
-- ["%i ms"] = "", -- Gravity
-- ["I'm so glad this is finally over!"] = "", -- A_Space_Adventure:final
@@ -1290,7 +1278,7 @@
-- ["Launch some bazookas to destroy the targets!"] = "", -- Basic_Training_-_Bazooka
-- ["Leader"] = "", -- A_Classic_Fairytale:enemy
-- ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
--- ["Lead the Green Bananas to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
+-- ["Lead your allies to battle and eliminate all the enemies!"] = "", -- A_Space_Adventure:fruit01
-- ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
-- ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
-- ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
@@ -1305,7 +1293,6 @@
-- ["Left/right: Choose crate contents"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type"] = "", -- Construction_Mode
-- ["Left/right: Choose structure type|Cursor: Build structure"] = "", -- Construction_Mode
--- ["Left Tong"] = "", -- Bazooka_Battlefield
-- ["Legs"] = "", --
-- ["Less tools, more fun"] = "", -- Battalion
-- ["Lestat"] = "", -- portal
@@ -1334,10 +1321,11 @@
-- ["Lively Lifeguard"] = "",
-- ["Lonely Cries"] = "", -- Continental_supplies
-- ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "", -- Continental_supplies
--- ["Lonely Hog"] = "", -- ClimbHome
-- ["Long Jump: [Enter]"] = "", -- Basic_Training_-_Movement
+-- ["Long Jump: Tap the [Curvy Arrow] button for long"] = "", -- Basic_Training_-_Movement, A_Classic_Fairytale:first_blood
-- ["Long Live The Queen"] = "", -- A_Classic_Fairytale:queen
-- ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+-- ["Look around: [Tap or swipe on the screen]"] = "", -- Basic_Training_-_Movement
-- ["Look, boss! There is the target!"] = "", -- A_Space_Adventure:moon01
-- ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
-- ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
@@ -1345,7 +1333,6 @@
-- ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
-- ["Loon"] = "", -- The_Specialists
-- ["Loopy"] = "", --
--- ["Lord Evil"] = "", -- Tentacle_Terror
-- ["Losing Condition: Destroy"] = "", -- HedgeEditor
-- ["Low Gravity: Gravity is %i%%"] = "", -- Gravity
-- ["Loyal Highlander: Eliminate enemy hogs to take their weapons"] = "", -- Highlander
@@ -1365,7 +1352,6 @@
-- ["Mario"] = "", --
-- ["Mark gears for win/lose conditions"] = "", -- HedgeEditor
-- ["Mark/unmark gear: [Left Click]"] = "", -- HedgeEditor
--- ["Mark"] = "", -- User_Mission_-_Teamwork_2, User_Mission_-_Teamwork
-- ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
-- ["Max Citrus"] = "", -- A_Space_Adventure:fruit01
-- ["Maybe you should try an easier map next time."] = "", -- Racer
@@ -1420,7 +1406,6 @@
-- ["Monster kill!"] = "", -- Mutant
-- ["Monsters"] = "", --
-- ["Mooney"] = "", --
--- ["More Natives"] = "", -- A_Classic_Fairytale:epil
-- ["Morris"] = "", --
-- ["Most mines are not active."] = "", -- A_Space_Adventure:desert02
-- ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
@@ -1440,7 +1425,6 @@
-- ["Nade Boy"] = "", -- Basic_Training_-_Grenade
-- ["Nah, probably everyone was just stupid."] = "", -- A_Space_Adventure:final
-- ["Name"] = "", -- A_Classic_Fairytale:queen
--- ["Nameless Heroes"] = "",
-- ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
-- ["Napalm"] = "", -- Construction_Mode
-- ["Napalm Rocket"] = "", -- Continental_supplies
@@ -1543,7 +1527,7 @@
-- ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
["Oh no! Just try again!"] = "不!重新再来。", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Oh no, not %s!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
--- ["Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
+-- ["Oh no, the companions have betrayed %s and stole the anti-gravity device part!"] = "", -- A_Space_Adventure:fruit02
["Oh no! Time's up! Just try again."] = "不!到点了,需要重新来。", --Bazooka, Shotgun, SniperRifle
-- ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
-- ["Oh no! You have died. Try again!"] = "", -- Basic_Training_-_Flying_Saucer
@@ -1567,9 +1551,9 @@
-- ["One shall not judge one by one's appearance!"] = "", -- A_Classic_Fairytale:epil
-- ["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 %s can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
-- ["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
@@ -1581,6 +1565,7 @@
-- ["Oops, I've been spotted and I have no weapons! I am doomed!"] = "", -- A_Space_Adventure:moon01
-- ["Oops! You have selected the wrong hedgehog! Just try again."] = "", -- Basic_Training_-_Movement
-- ["Open ammo menu: [Right click]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
+-- ["Open ammo menu: Tap the [Suitcase]"] = "", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
-- ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
["Opposing Team: "] = "对方队伍",
-- ["Orange"] = "", --
@@ -1602,9 +1587,9 @@
-- ["Patches"] = "", --
["Pathetic Hog #1"] = "可怜刺猬一号",
["Pathetic Hog #2"] = "可怜刺猬二号",
--- ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-- ["Paul McHoggy"] = "", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
-- ["Pause: [P]"] = "", -- Basic_Training_-_Movement
+-- ["Pause: Tap the [Pause] button"] = "", -- Basic_Training_-_Movement
-- ["Penalty: If you violate above rule, you have to skip in the next turn."] = "", -- WxW
-- ["Penguin Roar"] = "", -- Continental_supplies
-- ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
@@ -1619,7 +1604,6 @@
-- ["Physicist"] = "", -- HedgeEditor
-- ["Piano Strike"] = "", -- Construction_Mode
-- ["Pikachu"] = "", --
--- ["Pincer Knights"] = "", -- Bazooka_Battlefield
-- ["Pings left: %d"] = "", -- Space_Invasion
-- ["Pink"] = "", --
-- ["Pirates"] = "", --
@@ -1700,9 +1684,10 @@
-- ["Press [Attack] to confirm."] = "", -- Continental_supplies
-- ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
-- ["Press [Left] and [Right] to change the difficulty."] = "", -- A_Classic_Fairytale:first_blood
--- ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Press [Left] or [Right] to move around, [Long Jump] to jump forwards."] = "", -- A_Classic_Fairytale:first_blood
-- ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
-- ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
+-- ["Press [M] to see the mission texts"] = "", -- Basic_Training_-_Movement
-- ["Press [Precise] to skip intro"] = "",
-- ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
-- ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
@@ -1714,11 +1699,10 @@
-- ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["Professor"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
-- ["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time."] = "", -- A_Space_Adventure:moon02
+-- ["Professor's Team"] = "", -- A_Space_Adventure:death01
-- ["Prof. Hogevil"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:moon01
--- ["Pro Killers"] = "", -- Big_Armory
-- ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
-- ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
--- ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-- ["Purple"] = "", --
-- ["Pyro"] = "", -- HedgeEditor, The_Specialists
-- ["Pyromancer"] = "", -- Battalion
@@ -1771,11 +1755,9 @@
-- ["Return to the mission menu by pressing the \"Go back\" button."] = "", -- A_Space_Adventure:cosmos
-- ["Return to the Surface"] = "", -- A_Space_Adventure:fruit02
-- ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
--- ["Rhombus"] = "", -- Basic_Training_-_Movement
-- ["Rider"] = "", -- portal
-- ["Rifleman"] = "", -- Battalion
-- ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
--- ["Right Tong"] = "", -- Bazooka_Battlefield
-- ["Ripe"] = "", --
-- ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
-- ["Robert Yellow Apple"] = "", -- A_Space_Adventure:fruit01
@@ -1784,8 +1766,8 @@
-- ["Roof"] = "", -- WxW
-- ["Rope-knocking Challenge"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Rope Master"] = "", -- Basic_Training_-_Rope
--- ["Roper"] = "", -- SpeedShoppa
-- ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+-- ["Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Rope Team"] = "", -- Basic_Training_-_Rope
-- ["Rope Training"] = "", -- Basic_Training_-_Rope
-- ["Rope Weapons"] = "", -- Basic_Training_-_Rope
@@ -1825,10 +1807,17 @@
-- ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-- ["Sam"] = "", -- A_Space_Adventure:cosmos
-- ["Sandals?! I thought you left your ring!"] = "", -- A_Classic_Fairytale:queen
+-- ["%s and GB"] = "", -- A_Space_Adventure:fruit02
-- ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sandstorm"] = "", -- A_Space_Adventure:desert01
-- ["Sandy"] = "", -- A_Space_Adventure:desert01
--- ["Save as many hapless hogs as possible!"] = "",
+-- ["%s arrived at the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Ice Planet!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the meteorite!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the moon!"] = "", -- A_Space_Adventure:cosmos
+-- ["%s arrived at the Planet of Death!"] = "", -- A_Space_Adventure:cosmos
+-- ["Save as many hogs as possible!"] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
-- ["Save Leaks A Lot!|Hint: The switch hedgehog utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
-- ["Save Level: [Precise]+[4]"] = "", -- HedgeEditor
@@ -1843,6 +1832,7 @@
-- ["Scenario failed!"] = "", -- SimpleMission
-- ["Scientist"] = "", -- Battalion
-- ["%s climbed home in %d seconds!"] = "", -- ClimbHome
+-- ["%s (contd.)"] = "", -- A_Classic_Fairytale:epil
-- ["Score: %d"] = "", -- Space_Invasion
-- ["Score goal: %d"] = "", -- Control
-- ["Score graph"] = "", -- Mutant, Space_Invasion
@@ -1852,6 +1842,7 @@
-- ["Scores"] = "", -- Mutant
-- ["Scores:"] = "", -- Mutant
-- ["Scoring: "] = "", -- Mutant
+-- ["%s couldn't escape, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["Script parameter examples:"] = "", -- Gravity
-- ["%s (+%d)"] = "", -- Battalion
-- ["%s: %d"] = "", -- Capture_the_Flag, Control
@@ -1864,7 +1855,7 @@
-- ["%s died … and lives again!"] = "", -- Construction_Mode
-- ["%s doesn’t really know how to handle a rope properly."] = "", -- ClimbHome
-- ["%s, %d sec"] = "", -- Continental_supplies
--- ["Search for the device with the help of the other hedgehogs "] = "", -- A_Space_Adventure:fruit02
+-- ["Search for the device with the help of the other hedgehogs."] = "", -- A_Space_Adventure:fruit02
-- ["Searching in the dust"] = "", -- A_Space_Adventure:desert01
-- ["Searching the stars!"] = "", -- A_Space_Adventure:cosmos
-- ["seconds"] = "", -- ClimbHome
@@ -1894,6 +1885,7 @@
-- ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
-- ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
-- ["Sergey"] = "", --
+-- ["%s escaped successfully!"] = "", -- A_Space_Adventure:fruit01
-- ["Set bounciness: [Left Shift] + [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set detonation timer: [1]-[5]"] = "", -- Basic_Training_-_Grenade
-- ["Set Health: [Left Click]"] = "", -- HedgeEditor
@@ -1921,6 +1913,7 @@
-- ["%s has mutated! +2 points"] = "", -- Mutant
-- ["%s has passed the best height of %s!"] = "", -- ClimbHome
-- ["%s has scored!"] = "", -- Capture_the_Flag
+-- ["%s has to refuel the saucer."] = "", -- A_Space_Adventure:moon01
-- ["%s hates Newton."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["She endangered the whole tribe!"] = "", -- A_Classic_Fairytale:epil
-- ["sheepluva"] = "", --
@@ -1938,7 +1931,6 @@
-- ["%s hit the ground."] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Shoppa Love"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
-- ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
--- ["Shoppers"] = "", -- SpeedShoppa
-- ["Shotgun"] = "", -- Continental_supplies
-- ["Sigh."] = "", -- A_Classic_Fairytale:epil
-- ["Silly"] = "",
@@ -1951,11 +1943,11 @@
-- ["%s is now as poor as a church mouse"] = "", -- Construction_Mode
-- ["%s is now a zombie hedgehog"] = "", -- Construction_Mode
-- ["%s is suddenly low on ammo"] = "", -- Construction_Mode
--- ["Skip your turn to try again."] = "", -- Basic_Training_-_Rope
-- ["Skulls"] = "", -- Bazooka_Battlefield
-- ["Slimer"] = "", --
-- ["Slippery"] = "", -- A_Classic_Fairytale:journey
-- ["%s lost all the weapons"] = "", -- Construction_Mode
+-- ["%s lost, try again!"] = "", -- A_Space_Adventure:death01, A_Space_Adventure:death02, A_Space_Adventure:desert01, A_Space_Adventure:desert02, A_Space_Adventure:desert03, A_Space_Adventure:final, A_Space_Adventure:fruit01, A_Space_Adventure:fruit02, A_Space_Adventure:fruit03, A_Space_Adventure:ice01, A_Space_Adventure:moon01
-- ["Slot %d: %s"] = "", -- Frenzy
-- ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
-- ["Slowpoke"] = "", --
@@ -1969,6 +1961,7 @@
-- ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
-- ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
-- ["Smugglers"] = "", -- A_Space_Adventure:desert01
+-- ["%s must collect the final crates."] = "", -- A_Space_Adventure:fruit02
-- ["%s must skip this turn for rule violation."] = "", -- WxW
-- ["Sneaks"] = "", -- Bazooka_Battlefield
-- ["%s never got the ninja diploma."] = "", -- ClimbHome
@@ -1977,10 +1970,8 @@
-- ["Sniper"] = "", -- HedgeEditor, The_Specialists
-- ["Sniper Rifle"] = "", -- Continental_supplies
["Sniper Training"] = "狙击训练",
- ["Sniperz"] = "狙击手",
-- ["So, as promised I have brought you where I think that the device you are looking for is hidden."] = "", -- A_Space_Adventure:fruit02
-- ["So far, you had infinite ropes, but in the|real world, ropes are usually limited."] = "", -- Basic_Training_-_Rope
--- ["So Hog Solo, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
-- ["So, I believe that it's a good place to start."] = "", -- A_Space_Adventure:desert01
-- ["So, I kindly ask for your help."] = "", -- A_Space_Adventure:fruit01
@@ -1990,11 +1981,12 @@
-- ["Some parts of the land are indestructible."] = "", -- A_Space_Adventure:fruit03
-- ["Some sick game of yours?!"] = "", -- A_Classic_Fairytale:queen
-- ["Some weapons can be dropped from the rope."] = "", -- Basic_Training_-_Rope
--- ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"] = "", -- A_Space_Adventure:fruit02
--- ["Somewhere else on the planet of fruits Hog Solo gets closer to the device"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, Captain Lime helps %s"] = "", -- A_Space_Adventure:fruit02
+-- ["Somewhere else on the planet of fruits, %s gets closer to the device"] = "", -- A_Space_Adventure:fruit02
-- ["Somewhere on the Planet of Fruits a terrible war is about to begin ..."] = "", -- A_Space_Adventure:fruit01
-- ["Somewhere on the uninhabitable Death Planet ..."] = "", -- A_Space_Adventure:death01
-- ["So, now I got the last part and I have your friends captured."] = "", -- A_Space_Adventure:death01
+-- ["So, %s, here we are ..."] = "", -- A_Space_Adventure:cosmos
-- ["So the princess was never heard of again ..."] = "", -- A_Classic_Fairytale:family
-- ["So, uhmm, how did you manage to teleport them so far?"] = "", -- A_Classic_Fairytale:epil
-- ["Sour"] = "", --
@@ -2095,8 +2087,6 @@
-- ["Structure Placement Mode"] = "", -- Construction_Mode
-- ["Structure Placer"] = "", -- Construction_Mode
-- ["Stupid, stupid Hogerians!"] = "", -- A_Space_Adventure:final
--- ["Subject 1"] = "", -- portal
--- ["Subjects"] = "", -- portal
-- ["Subtract %d"] = "", -- HedgeEditor
-- ["--- Sudden Death ---"] = "", -- Battalion
-- ["Summer Squash"] = "", -- A_Space_Adventure:fruit01
@@ -2113,7 +2103,7 @@
-- ["Surfer! +15 points!"] = "", -- Space_Invasion
-- ["Surfer!"] = "", -- WxW
-- ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
--- ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+-- ["Survive!"] = "", -- A_Classic_Fairytale:shadow
-- ["%s violated the “All But Last” rule and will be penalized."] = "", -- WxW
-- ["%s violated the “Kill The Leader” rule and will be penalized."] = "", -- WxW
-- ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
@@ -2132,6 +2122,7 @@
-- ["%s! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-- ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Swing: [Left]/[Right]"] = "", -- Basic_Training_-_Rope
+-- ["%s wins, congratulations!"] = "", -- A_Space_Adventure:moon01
-- ["%s wins!"] = "", -- Racer, Space_Invasion, TechRacer, ClimbHome
-- ["%s wins with a best time of %.1fs."] = "", -- Racer, TechRacer
-- ["switch"] = "", -- Continental_supplies
@@ -2145,6 +2136,7 @@
-- ["Switch Hog"] = "", -- Construction_Mode
-- ["Switch: Select weapon special"] = "", -- Continental_supplies
-- ["Switch: Toggle crate radar"] = "", -- WxW
+-- ["%s won!"] = "", -- A_Space_Adventure:fruit01
-- ["Swords"] = "", -- Bazooka_Battlefield
-- ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
-- ["%s, you may choose the rules."] = "", -- WxW
@@ -2153,6 +2145,8 @@
-- ["Tails"] = "", --
-- ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
-- ["Tall Potato"] = "", -- A_Space_Adventure:fruit01
+-- ["Tap [Pause] to see the mission texts"] = "", -- Basic_Training_-_Movement
+-- ["Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!"] = "", -- Basic_Training_-_Movement
-- ["Target"] = "", -- HedgeEditor
-- ["Target Placement Mode"] = "", -- Construction_Mode
-- ["TARGET PLACEMENT MODE"] = "", -- HedgeEditor
@@ -2168,9 +2162,12 @@
-- ["Tatters"] = "", --
-- ["Team %d"] = "", -- SimpleMission
["Team %d: "] = "队伍 %d",
+-- ["Team high score: %d"] = "", -- Utils
-- ["Team Identity Mode"] = "", -- HedgeEditor
-- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
-- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+-- ["Team record: %.3fs"] = "", -- Utils
+-- ["Team record: %d"] = "", -- Utils
-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
-- ["Team Scores:"] = "", -- Control
-- ["Team scores:"] = "", -- Space_Invasion
@@ -2268,7 +2265,6 @@
-- ["The forgotten continent"] = "", -- Continental_supplies
-- ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
-- ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
--- ["The Green Bananas lost, try again!"] = "", -- A_Space_Adventure:fruit01
-- ["The guardian"] = "", -- A_Classic_Fairytale:shadow
-- ["The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!"] = "", -- Space_Invasion
-- ["The hedgehog with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
@@ -2290,7 +2286,6 @@
-- ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
-- ["The Mutant loses health quickly, but gains health by killing."] = "", -- Mutant
-- ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
--- ["The Nameless One"] = "",
-- ["The Navy greets %s for managing to get in a distance of %d away from the mainland!"] = "", -- ClimbHome
-- ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "", -- A_Space_Adventure:death02
-- ["The next crate is an utility crate."] = "", -- Basic_Training_-_Movement
@@ -2376,7 +2371,6 @@
-- ["This almost concludes our tutorial."] = "", -- Basic_Training_-_Flying_Saucer
-- ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
-- ["This game wasn’t really exciting."] = "", -- Space_Invasion
--- ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This is a new personal best, congratulations!"] = "", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
-- ["This is a new personal best time, congratulations!"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["This is Cappy."] = "", -- Basic_Training_-_Movement
@@ -2394,6 +2388,7 @@
-- ["This rain is really something..."] = "",
-- ["This round’s award for ultimate disappointment goes to: Everyone!"] = "", -- ClimbHome
-- ["This seems like a wealthy hedgehog, nice ..."] = "", -- A_Space_Adventure:desert01
+-- ["This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"] = "", -- A_Space_Adventure:fruit02
-- ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
-- ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
-- ["This will be useful when I need a new platform or if I want to rise."] = "", -- portal
@@ -2434,6 +2429,7 @@
-- ["To begin with the training, hit the attack key!"] = "", -- Basic_Training_-_Movement
-- ["To begin with the training, select the bazooka from the ammo menu!"] = "", -- Basic_Training_-_Bazooka
-- ["To begin with the training, select the grenade from the ammo menu!"] = "", -- Basic_Training_-_Grenade
+-- ["To begin with the training, tap the attack button!"] = "", -- Basic_Training_-_Movement
-- ["To finish hedgehog selection, just do anything|with him, like walking."] = "", -- Basic_Training_-_Movement
-- ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
-- ["To get over the water, you have to do multiple|rope shots and swings."] = "", -- Basic_Training_-_Rope
@@ -2448,14 +2444,13 @@
-- ["Too bad! Then you should really leave!"] = "", -- A_Space_Adventure:fruit01
-- ["Too slow! Try again ..."] = "", -- A_Space_Adventure:moon02
-- ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
-- ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
-- ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
-- ["To the caves..."] = "", -- A_Classic_Fairytale:united
-- ["Touch all waypoints as fast as you can!"] = "", -- Racer
--- ["To win the game, Hog Solo has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
+-- ["To win the game, %s has to get the bottom crates and come back to the surface."] = "", -- A_Space_Adventure:fruit02
-- ["To win the game you had to collect the 2 crates with no specific order."] = "", -- A_Space_Adventure:desert01
--- ["To win the game you have to eliminate all your enemies."] = "", -- A_Space_Adventure:death01
+-- ["To win the game you have to eliminate Professor Hogevil."] = "", -- A_Space_Adventure:death01
-- ["To win the game you have to find the right crate."] = "", -- A_Space_Adventure:desert01
-- ["To win the game you have to go next to Thanta."] = "", -- A_Space_Adventure:ice01
-- ["To win the game you have to go to the surface."] = "", -- A_Space_Adventure:desert02
@@ -2463,13 +2458,10 @@
-- ["To win the game you have to stand next to Thanta."] = "", -- A_Space_Adventure:ice01
["Toxic Team"] = "腐坏的队伍", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-- ["Track completed!"] = "", -- Racer, TechRacer
--- ["Trainee"] = "", -- TargetPractice
-- ["Training"] = "", -- Basic_Training_-_Flying_Saucer, Basic_Training_-_Rope
-- ["Training complete!"] = "", -- Basic_Training_-_Flying_Saucer
--- ["Training Team"] = "", -- TargetPractice
-- ["Traitors"] = "", -- A_Classic_Fairytale:epil
-- ["Traitors don't get to shout around here!"] = "", -- A_Classic_Fairytale:epil
--- ["Trapped"] = "", -- Basic_Training_-_Movement
-- ["Trapper"] = "", -- HedgeEditor
-- ["Travel carefully as your fuel is limited"] = "", -- A_Space_Adventure:cosmos
-- ["Travel to all the neighbor planets and collect all the pieces"] = "", -- A_Space_Adventure:cosmos
@@ -2486,7 +2478,6 @@
-- ["Try to land softly, as you can still take fall damage!"] = "", -- Basic_Training_-_Flying_Saucer
-- ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
-- ["Try to reach and destroy the next target quickly."] = "", -- Basic_Training_-_Rope
- ["T_T"] = "T_T",
-- ["Tumbler"] = "", -- Tumbler
-- ["Turn around: [Left Shift] + [Left]/[Right]"] = "", -- Basic_Training_-_Movement
-- ["Turning Around"] = "", -- Basic_Training_-_Movement
@@ -2505,7 +2496,6 @@
-- ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
-- ["Ukemi"] = "", --
-- ["Ultra kill!"] = "", -- Mutant
--- ["Ultrasoldier"] = "", -- Big_Armory
-- ["unC0Rr"] = "", --
-- ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
-- ["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."] = "", -- A_Space_Adventure:fruit01
@@ -2551,7 +2541,7 @@
-- ["Use the flying saucer from the crate to fly to the moon."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly the other planets."] = "", -- A_Space_Adventure:cosmos
-- ["Use the flying saucer to fly to the other planets."] = "", -- A_Space_Adventure:cosmos
--- ["Use the parachute ([Space] while in air) to get the next crate"] = "", -- A_Classic_Fairytale:first_blood
+-- ["Use the parachute to get the next crate."] = "", -- A_Classic_Fairytale:first_blood
-- ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
-- ["Use the RC plane and destroy the all the targets."] = "", -- A_Space_Adventure:desert03
-- ["Use the rope in order to catch the blue hedgehog"] = "", -- A_Space_Adventure:moon02
@@ -2604,9 +2594,6 @@
-- ["Walls left: %d"] = "", -- WxW
-- ["Wall to wall"] = "", -- WxW
-- ["Waluigi"] = "", --
--- ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["Wannabe Ropers"] = "", -- Basic_Training_-_Rope
--- ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-- ["Wario"] = "", --
-- ["Warming Up"] = "", -- Basic_Training_-_Grenade
-- ["Warning: Fire cake detected"] = "", -- ClimbHome
@@ -2652,9 +2639,9 @@
-- ["We have to hurry! Are you armed?"] = "", -- A_Space_Adventure:moon01
-- ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
-- ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
--- ["Welcome Hog Solo, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome home! Please take a seat"] = "", -- ClimbHome
-- ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+-- ["Welcome, %s, surprised to see me?"] = "", -- A_Space_Adventure:death01
-- ["Welcome to the Death Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Desert Planet!"] = "", -- A_Space_Adventure:cosmos
-- ["Welcome to the Fruit Planet!"] = "", -- A_Space_Adventure:cosmos
@@ -2821,16 +2808,16 @@
-- ["You can’t open a portal on the blue surface."] = "", -- portal
-- ["You can use the other 2 hogs to assist you."] = "", -- A_Space_Adventure:fruit02
-- ["You can use the rope to reach new places."] = "", -- Basic_Training_-_Rope
--- ["You choose well, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You choose well, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You completed the mission in %.3f seconds."] = "", -- A_Space_Adventure:ice02
-- ["You completed the mission in %d rounds."] = "", -- A_Space_Adventure:death02, A_Space_Adventure:fruit03
--- ["You couldn't have come to a worse time, Hog Solo!"] = "", -- A_Space_Adventure:fruit01
+-- ["You couldn't have come to a worse time, %s!"] = "", -- A_Space_Adventure:fruit01
-- ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-- ["You'd almost swear the water was rising!"] = "",
-- ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
-- ["You defended yourself against Captain Lime."] = "", -- A_Space_Adventure:fruit02
-- ["You defended yourself against the Fruit Assassins."] = "", -- A_Space_Adventure:fruit02
--- ["You did great, Hog Solo! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
+-- ["You did great, %s! However, we aren't out of danger yet!"] = "", -- A_Space_Adventure:cosmos
-- ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
-- ["You don't deserve my sacrifice!"] = "", -- A_Classic_Fairytale:queen
-- ["You drove Professor Hogevil away."] = "", -- A_Space_Adventure:moon01
@@ -2852,6 +2839,7 @@
-- ["You have acquired the last device part."] = "", -- A_Space_Adventure:death01
-- ["You have activated Switch Hedgehog!"] = "", -- Basic_Training_-_Movement
-- ["You have beaten the challenge!"] = "", -- ClimbHome
+-- ["You have beaten the team record, congratulations!"] = "", -- Utils
-- ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
-- ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
-- ["You have chosen to fight!"] = "", -- A_Space_Adventure:fruit01
@@ -2942,7 +2930,7 @@
-- ["You'll have only 2 watermelon bombs during the game."] = "", -- A_Space_Adventure:fruit03
-- ["You'll have only one RC plane at the start of the mission."] = "", -- A_Space_Adventure:desert03
-- ["You'll have to eliminate Captain Lime at the end."] = "", -- A_Space_Adventure:fruit02
--- ["You'll have to eliminate the Fruit Assassins at the end."] = "", -- A_Space_Adventure:fruit02
+-- ["You'll have to eliminate %s at the end."] = "", -- A_Space_Adventure:fruit02
-- ["You'll lose if you die or if your time is up."] = "", -- A_Space_Adventure:moon02
-- ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
-- ["You lose!"] = "", -- Basic_Training_-_Sniper_Rifle, Big_Armory, Basic_Training_-_Bazooka, TargetPractice, ClimbHome
@@ -2967,12 +2955,12 @@
-- ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka, TargetPractice
-- ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
-- ["Your ammo is limited this time."] = "", -- Basic_Training_-_Bazooka
--- ["Your deaths will be avenged, Cannibals!"] = "", -- A_Classic_Fairytale:enemy
--- ["Your deaths will be avenged, Natives!"] = "", -- A_Classic_Fairytale:enemy
+-- ["Your deaths will be avenged, %s!"] = "", -- A_Classic_Fairytale:enemy
-- ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
-- ["You're a coward!"] = "", -- A_Classic_Fairytale:queen
-- ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
-- ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+-- ["You're doing well! Here are more targets for you."] = "", -- Basic_Training_-_Grenade
-- ["You're funny!"] = "", -- A_Classic_Fairytale:journey
-- ["You're getting pretty good! |Tip: When you shorten you rope, you move faster!|And when you lengthen it, you move slower."] = "", -- Basic_Training_-_Rope
-- ["You're on your way to freeing your tribe!"] = "", -- A_Classic_Fairytale:queen
@@ -2996,9 +2984,11 @@
-- ["Your next task is to collect some crates by using the rope!"] = "", -- A_Classic_Fairytale:first_blood
-- ["Your personal best time so far: %.3f seconds"] = "", -- A_Space_Adventure:ice02, A_Space_Adventure:moon02
-- ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
--- ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
+-- ["Your rope is gone! Try again!"] = "", -- Basic_Training_-_Rope
+-- ["You saved %d of 8 hegehogs."] = "", -- User_Mission_-_That_Sinking_Feeling
-- ["You see, hedgehog spikes are very, very valuable."] = "", -- A_Classic_Fairytale:queen
-- ["You see the wind strength at the bottom right corner."] = "", -- Basic_Training_-_Bazooka
+-- ["You see the wind strength at the top."] = "", -- Basic_Training_-_Bazooka
-- ["You should have known that we don't rely on meatbags!"] = "", -- A_Classic_Fairytale:queen
-- ["You should know this more than anyone, Leaks!"] = "", -- A_Classic_Fairytale:queen
-- ["You speak great truth, Hannibal. Here, take a sip!"] = "", -- A_Classic_Fairytale:epil
--- a/share/hedgewars/Data/Maps/Basketball/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Basketball/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/Basketball/map.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Basketball/map.lua Mon Jan 14 12:35:32 2019 -0500
@@ -10,7 +10,6 @@
CaseFreq = 0
MinesNum = 0
Explosives = 0
- Delay = 500
Map = 'BasketballField'
-- Disable Sudden Death
WaterRise = 0
--- a/share/hedgewars/Data/Maps/BasketballField/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/BasketballField/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/Bubbleflow/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Bubbleflow/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/ClimbHome/map.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua Mon Jan 14 12:35:32 2019 -0500
@@ -128,9 +128,14 @@
function onGameStart()
--SetClanColor(ClansCount-1, 0x0000ffff) appears to be broken
SendHealthStatsOff()
+ local recordInfo = ""
+ if isSinglePlayer then
+ recordInfo = getReadableChallengeRecord("Highscore")
+ end
ShowMission(loc("Climb Home"),
loc("Challenge"),
- loc("You are far from home, and the water is rising, climb up as high as you can!|Your score will be based on your height."),
+ loc("You are far from home, and the water is rising, climb up as high as you can!|Your score will be based on your height.")
+ .. "|" .. recordInfo,
-amRope, 0)
local x = 1818
for h,i in pairs(HH) do
@@ -419,7 +424,8 @@
end
end
- local finishTime = (GameTime-startTime)/1000
+ local rawFinishTime = GameTime-startTime
+ local finishTime = rawFinishTime/1000
local roundedFinishTime = math.ceil(math.floor(finishTime+0.5))
if isSinglePlayer then
if distanceFromWater < 0 and not YouLost and not YouWon then
@@ -428,6 +434,7 @@
end
-- FIXME: Hog is also in winning box if it just walks into the chair from the left, touching it. Intentional?
if not YouWon and not YouLost and gearIsInBox(CurrentHedgehog, 1920, 252, 50, 50) then
+ SaveMissionVar("Won", "true")
AddCaption(loc("Victory!"), capcolDefault, capgrpGameState)
ShowMission(loc("Climb Home"),
loc("Made it!"),
@@ -438,9 +445,11 @@
SendStat(siGameResult, loc("You have beaten the challenge!"))
SendStat(siGraphTitle, loc("Your height over time"))
SendStat(siCustomAchievement, string.format(loc("%s reached home in %.3f seconds. Congratulations!"), GetHogName(CurrentHedgehog), finishTime))
+ updateChallengeRecord("TimeRecord", rawFinishTime, false)
SendStat(siCustomAchievement, string.format(loc("%s bravely climbed up to a dizzy height of %d to reach home."), GetHogName(CurrentHedgehog), getActualHeight(RecordHeight)))
- SendStat(siPointType, loc("seconds"))
- SendStat(siPlayerKills, tostring(roundedFinishTime), GetHogTeamName(CurrentHedgehog))
+ updateChallengeRecord("Highscore", getActualHeight(RecordHeight))
+ SendStat(siPointType, "!TIME")
+ SendStat(siPlayerKills, tostring(rawFinishTime), GetHogTeamName(CurrentHedgehog))
EndGame()
onAchievementsDeclaration()
@@ -682,7 +691,9 @@
else
SendStat(siCustomAchievement, string.format(text, RecordHeightHogName))
end
- SendStat(siPointType, loc("points"))
+
+ updateChallengeRecord("Highscore", actualHeight)
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, actualHeight, GetHogTeamName(CurrentHedgehog))
EndGame()
onAchievementsDeclaration()
@@ -738,7 +749,7 @@
end
checkAwards()
for i = #ranking, 1, -1 do
- SendStat(siPointType, loc("points"))
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(ranking[i].score), ranking[i].name)
end
end
--- a/share/hedgewars/Data/Maps/FlightJoust/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/FlightJoust/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/FlightJoust/map.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/FlightJoust/map.lua Mon Jan 14 12:35:32 2019 -0500
@@ -31,7 +31,6 @@
CaseFreq = 0
MinesNum = 0
Explosives = 0
- Delay = 500
SuddenDeathTurns = 99999 -- "disable" sudden death
Theme = Compost
end
--- a/share/hedgewars/Data/Maps/Hammock/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Hammock/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/Hedgewars/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Hedgewars/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/Knockball/map.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Knockball/map.lua Mon Jan 14 12:35:32 2019 -0500
@@ -10,7 +10,6 @@
CaseFreq = 0
MinesNum = 0
Explosives = 0
- Delay = 500
-- Disable Sudden Death
WaterRise = 0
HealthDecrease = 0
--- a/share/hedgewars/Data/Maps/Ropes/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Ropes/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Maps/Tree/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Maps/Tree/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/backstab.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/backstab.lua Mon Jan 14 12:35:32 2019 -0500
@@ -143,6 +143,11 @@
highJumped = false
TurnsLeft = 0
startNativesNum = 0
+nativesTeamName = nil
+tribeTeamName = nil
+cyborgTeamName = nil
+cannibalsTeamName1 = nil
+cannibalsTeamName2 = nil
startAnim = {}
afterChoiceAnim = {}
@@ -588,7 +593,7 @@
SetGearMessage(speakerHog, 0)
SetState(speakerHog, 0)
SetTurnTimeLeft(MAX_TURN_TIME)
- ShowMission(loc("Backstab"), loc("The food bites back"), loc("Defeat the cannibals"), 1, 4000)
+ ShowMission(loc("Backstab"), loc("The food bites back"), loc("Defeat the cannibals!"), 1, 4000)
SpawnCrates()
end
@@ -659,7 +664,6 @@
function AfterStartAnim()
AnimSwitchHog(natives[leaksNum])
- EndTurn(true)
stage = spyKillStage
AddEvent(CheckChoice, {}, DoChoice, {}, 0)
AddEvent(CheckKilledOther, {}, DoKilledOther, {}, 0)
@@ -681,9 +685,9 @@
function DoDeployedDead()
ShowMission(loc("Backstab"), loc("Brutus"), loc("You have failed to save the tribe!"), 0, 6000)
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Tribe"))
- DismissTeam(loc("011101001"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(tribeTeamName)
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
@@ -726,8 +730,8 @@
function DoKilledOther()
ShowMission(loc("Backstab"), loc("Brutus"), loc("You have killed an innocent hedgehog!"), 0, 6000)
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Tribe"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(tribeTeamName)
EndTurn(true)
end
@@ -834,10 +838,10 @@
end
end
- DismissTeam(loc("Tribe"))
- DismissTeam(loc("Assault Team"))
- DismissTeam(loc("Reinforcements"))
- DismissTeam(loc("011101001"))
+ DismissTeam(tribeTeamName)
+ DismissTeam(cannibalsTeamName1)
+ DismissTeam(cannibalsTeamName2)
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
@@ -957,28 +961,28 @@
end
function AddHogs()
- AddTeam(loc("Tribe"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ tribeTeamName = AddTeam(loc("Tribe"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
for i = 8, 9 do
natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
end
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ nativesTeamName = AddMissionTeam(-2)
for i = 1, 7 do
natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
end
nativesNum = 7
- AddTeam(loc("Assault Team"), -1, "skull", "Island", "Pirate", "cm_vampire")
+ cannibalsTeamName1 = AddTeam(loc("Assault Team"), -1, "skull", "Island", "Pirate", "cm_vampire")
for i = 1, 6 do
cannibals[i] = AddHog(cannibalNames[i], 3, 50, "vampirichog")
end
- AddTeam(loc("Reinforcements"), -1, "skull", "Island", "Pirate", "cm_vampire")
+ cannibalsTeamName2 = AddTeam(loc("Reinforcements"), -1, "skull", "Island", "Pirate", "cm_vampire")
for i = 7, 9 do
cannibals[i] = AddHog(cannibalNames[i], 2, 50, "vampirichog")
end
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
for i = 1, 9 do
@@ -1016,7 +1020,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "Cave"
Theme = "Nature"
WaterRise = 0
@@ -1120,21 +1123,23 @@
AddCaption(string.format(loc("Turns until arrival: %d"), TurnsLeft))
end
if deployedHog then
- if GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ if GetHogTeamName(CurrentHedgehog) == nativesTeamName then
AnimSwitchHog(deployedHog)
end
end
if stage == spyKillStage then
- if CurrentHedgehog == spyHog or GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then
+ if GetHogTeamName(CurrentHedgehog) ~= nativesTeamName then
EndTurn(true)
else
+ if CurrentHedgehog == spyHog then
+ AnimSwitchHog(natives[leaksNum])
+ end
SetGearMessage(CurrentHedgehog, 0)
- --AnimSwitchHog(natives[leaksNum])
SetTurnTimeLeft(MAX_TURN_TIME)
end
else
- if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == nativesTeamName then
SetupHogDeadAnim(freshDead)
AddAnim(hogDeadAnim)
AddFunction({func = AfterHogDeadAnim, args = {}})
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Mon Jan 14 12:35:32 2019 -0500
@@ -170,6 +170,8 @@
cyborgsPos = {{2937, 831}, {2945, 1264}, {2335, 1701}, {448, 484}}
cyborgsDir = {"Left", "Left", "Left", "Right"}
+cyborgTeamName, fighterTeamName = nil, nil
+
cratePos = {
{{788, 1919, amGirder, 2}, true}, {{412, 1615, amGirder, 1}, true},
{{209, 1474, amSniperRifle, 1}}, {{1178, 637, amDEagle, 1}},
@@ -625,17 +627,17 @@
end
function AddHogs()
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ AddMissionTeam(-2)
for i = 1, 7 do
natives[i] = AddHog(nativeNames[i], 0, 200, nativeHats[i])
gearDead[natives[i]] = false
end
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
gearDead[cyborg] = false
- AddTeam(loc("011101000"), -9, "ring", "UFO", "Robot", "cm_binary")
+ fighterTeamName = AddTeam(loc("011101000"), -9, "ring", "UFO", "Robot", "cm_binary")
for i = 1, 4 do
cyborgs[i] = AddHog(cyborgNames[i], 2, 100, "cyborg2")
gearDead[cyborgs[i]] = false
@@ -710,7 +712,7 @@
function onGearDelete(gear)
gearDead[gear] = true
if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == loc("011101000") then
+ if GetHogTeamName(gear) == fighterTeamName then
freshDead = GetHogName(gear)
cyborgsLeft = cyborgsLeft - 1
end
@@ -740,13 +742,13 @@
AddFunction({func = AfterStartAnim, args = {}})
firstTurn = false
end
- if GetHogTeamName(CurrentHedgehog) == loc("011101000") then
+ if GetHogTeamName(CurrentHedgehog) == fighterTeamName then
if TotalRounds % 6 == 0 then
AddAmmo(CurrentHedgehog, amSniperRifle, 1)
AddAmmo(CurrentHedgehog, amDEagle, 1)
end
SetTurnTimeLeft(30000)
- elseif GetHogTeamName(CurrentHedgehog) == loc("011101001") then
+ elseif GetHogTeamName(CurrentHedgehog) == cyborgTeamName then
EndTurn(true)
end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Mon Jan 14 12:35:32 2019 -0500
@@ -78,6 +78,12 @@
leaderPos = {3474, 151}
leaderDir = "Left"
+cyborgTeamName = nil
+nativesTeamName = nil
+cannibalsTeamName = nil
+hedgecogsTeamName = nil
+leaderTeamName = nil
+
-----------------------------Variables---------------------------------
natives = {}
origNatives = {}
@@ -419,9 +425,9 @@
end
function LoseMission()
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Cannibals"))
- DismissTeam(loc("011101001"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(cannibalsTeamName)
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
@@ -437,7 +443,7 @@
if progress and progress<9 then
SaveCampaignVar("Progress", "9")
end
- DismissTeam(loc("011101001"))
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
-----------------------------Misc--------------------------------------
@@ -519,10 +525,10 @@
end
function AddHogs()
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ nativesTeamName = AddMissionTeam(-2)
-- There are 3-4 natives in this mission
natives[1] = AddHog(nativeNames[leaksNum], 0, 100, nativeHats[leaksNum])
if m5DeployedNum ~= leaksNum and m8DeployedLeader == 0 then
@@ -540,7 +546,7 @@
table.insert(players, natives[i])
end
- AddTeam(loc("Cannibals"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ cannibalsTeamName = AddTeam(loc("Cannibals"), -2, "skull", "Island", "Pirate", "cm_vampire")
for i = 1, cannibalsNum do
cannibals[i] = AddHog(cannibalNames[i], 0, 100, "Zombi")
table.insert(players, cannibals[i])
@@ -548,13 +554,13 @@
playersNum = #players
playersLeft = playersNum
- AddTeam(loc("Hedge-cogs"), -9, "ring", "UFO", "Robot", "cm_cyborg")
+ hedgecogsTeamName = AddTeam(loc("Hedge-cogs"), -9, "ring", "UFO", "Robot", "cm_cyborg")
for i = 1, cyborgsNum do
cyborgs[i] = AddHog(cyborgNames[i], 2, 80, "cyborg2")
end
if m8EnemyFled == 1 then
- AddTeam(loc("Leader"), -9, "ring", "UFO", "Robot", "cm_cyborg")
+ leaderTeamName = AddTeam(loc("Leader"), -9, "ring", "UFO", "Robot", "cm_cyborg")
if m8Scene == denseScene then
leader = AddHog(loc("Dense Cloud"), 2, 200, nativeHats[denseNum])
elseif m8Scene == waterScene then
@@ -598,7 +604,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "Islands"
Theme = "EarthRise"
SuddenDeathTurns = 20
@@ -629,7 +634,7 @@
function onGearDelete(gear)
gearDead[gear] = true
if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == loc("Natives") then
+ if GetHogTeamName(gear) == nativesTeamName then
for i = 1, nativesLeft do
if natives[i] == gear then
table.remove(natives, i)
@@ -638,7 +643,7 @@
playersLeft = playersLeft - 1
end
end
- elseif GetHogTeamName(gear) == loc("Cannibals") then
+ elseif GetHogTeamName(gear) == cannibalsTeamName then
for i = 1, cannibalsLeft do
if cannibals[i] == gear then
table.remove(cannibals, i)
@@ -647,7 +652,7 @@
playersLeft = playersLeft - 1
end
end
- elseif GetHogTeamName(gear) == loc("Hedge-cogs") then
+ elseif GetHogTeamName(gear) == hedgecogsTeamName then
for i = 1, cyborgsLeft do
if cyborgs[i] == gear then
table.remove(cyborgs, i)
@@ -685,11 +690,11 @@
elseif cyborgsDeadFresh then
cyborgsDeadFresh = false
WonMission()
- elseif nativesDeadFresh and GetHogTeamName(CurrentHedgehog) == loc("Cannibals") then
- AnimSay(CurrentHedgehog, loc("Your deaths will be avenged, Natives!"), SAY_SHOUT, 0)
+ elseif nativesDeadFresh and GetHogTeamName(CurrentHedgehog) == cannibalsTeamName then
+ AnimSay(CurrentHedgehog, string.format(loc("Your deaths will be avenged, %s!"), nativesTeamName), SAY_SHOUT, 0)
nativesDeadFresh = false
- elseif cannibalsDeadFresh and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
- AnimSay(CurrentHedgehog, loc("Your deaths will be avenged, Cannibals!"), SAY_SHOUT, 0)
+ elseif cannibalsDeadFresh and GetHogTeamName(CurrentHedgehog) == nativesTeamName then
+ AnimSay(CurrentHedgehog, string.format(loc("Your deaths will be avenged, %s!"), cannibalsTeamName), SAY_SHOUT, 0)
cannibalsDeadFresh = false
end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua Mon Jan 14 12:35:32 2019 -0500
@@ -311,23 +311,24 @@
end
function AddHogs()
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ local nativesTeamName = AddMissionTeam(-2)
for i = 1, 5 do
natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
end
- AddTeam(loc("More Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ local grave, voice, flag = GetHogGrave(natives[1]), GetHogVoicepack(natives[1]), GetHogFlag(natives[1])
+ AddTeam(string.format(loc("%s (contd.)"), nativesTeamName), -2, grave, "Island", voice, flag)
for i = 6, 10 do
natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
end
- AddTeam(loc("Cannibals"), -2, "skull", "Island", "HillBilly", "cm_birdy")
+ AddTeam(loc("Cannibals"), -2, "skull", "Island", "Pirate", "cm_vampire")
for i = 1, 5 do
cannibals[i] = AddHog(cannibalNames[i], 0, 100, cannibalHats[i])
end
if m8Scene == denseScene or m8Scene == waterScene then
- AddTeam(loc("Traitors"), -2, "Bone", "Island", "HillBilly", "cm_bloodyblade")
+ AddTeam(loc("Traitors"), -2, grave, "Island", voice, "cm_bloodyblade")
if m8Scene == denseScene then
DeleteGear(natives[2])
natives[2] = AddHog(nativeNames[2], 0, 100, nativeHats[2])
@@ -395,7 +396,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "Hogville"
Theme = "Nature"
-- Disable Sudden Death
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua Mon Jan 14 12:35:32 2019 -0500
@@ -104,6 +104,11 @@
{3749, 1040}, {2475, 1338}, {3853, 881}}
cyborgsDir = {"Left", "Left", "Left", "Left", "Left", "Right"}
+princessTeamName = nil
+nativesTeamName = nil
+biomechanicTeamName = nil
+cyborgTeamName = nil
+
princessPos = {3737, 1181}
crateConsts = {}
reactions = {}
@@ -379,7 +384,7 @@
SaveCampaignVar("Progress", "7")
end
princessFreed = true
- DismissTeam(loc("011101001"))
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
end
@@ -435,8 +440,8 @@
RemoveEventFunc(CheckCloseToPrincess)
RemoveEventFunc(CheckPrincessFreed)
AddCaption(loc("So the princess was never heard of again ..."))
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Princess"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(princessTeamName)
EndTurn(true)
end
end
@@ -519,22 +524,22 @@
end
function AddHogs()
- AddTeam(loc("Princess"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ princessTeamName = AddTeam(loc("Princess"), -2, "Bone", "Island", "HillBilly", "cm_female")
princess = AddHog(loc("Fell From Heaven"), 0, 333, "tiara")
SetGearAIHints(princess, aihDoesntMatter)
gearDead[princess] = false
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ nativesTeamName = AddMissionTeam(-2)
for i = 7, 9 do
natives[i-6] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
gearDead[natives[i-6]] = false
end
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
gearDead[cyborg] = false
- AddTeam(loc("Biomechanic Team"), -1, "ring", "UFO", "Robot", "cm_cyborg")
+ biomechanicTeamName = AddTeam(loc("Biomechanic Team"), -1, "ring", "UFO", "Robot", "cm_cyborg")
for i = 1, cyborgsNum do
cyborgs[i] = AddHog(cyborgNames[i], cyborgsDif[i], cyborgsHealth[i], "cyborg2")
gearDead[cyborgs[i]] = false
@@ -580,7 +585,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
MapGen = mgDrawn
Theme = "Hell"
SuddenDeathTurns = 35
@@ -614,7 +618,7 @@
function onGearDelete(gear)
gearDead[gear] = true
if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == loc("Biomechanic Team") then
+ if GetHogTeamName(gear) == biomechanicTeamName then
cyborgsLeft = cyborgsLeft - 1
end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/first_blood.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/first_blood.lua Mon Jan 14 12:35:32 2019 -0500
@@ -150,20 +150,32 @@
princessFace = "Left"
elderFace = "Left"
+local ctrlJump, ctrlMissionPanel, ctrlAttack
+if INTERFACE == "touch" then
+ ctrlJump = loc("Long Jump: Tap the [Curvy Arrow] button for long")
+ ctrlMissionPanel = loc("Hint: Pause the game to review the mission texts.")
+ ctrlAttack = loc("Attack: Tap the [Bomb]")
+else
+ ctrlJump = loc("Long Jump: [Enter]")
+ ctrlMissionPanel = loc("Hint: Hold down [M] to review the mission texts.")
+ ctrlAttack = loc("Attack: [Space]")
+end
+
goals = {
- [startDialogue] = {loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Enter] to jump"), 1, 4000},
- [onShroomAnim] = {loc("First Blood"), loc("A leap in a leap"), loc("Go on top of the flower") .. "|" .. loc("Hint: Hold down [M] to review the mission texts."), 1, 7000},
- [onFlowerAnim] = {loc("First Blood"), loc("Hightime"), loc("Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"), 1, 7000},
- [tookParaAnim] = {loc("First Blood"), loc("Omnivore"), loc("Get on the head of the mole"), 1, 4000},
- [onMoleHeadAnim] = {loc("First Blood"), loc("The Leap of Faith"), loc("Use the parachute ([Space] while in air) to get the next crate"), 1, 4000},
+ [startDialogue] = {loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Long Jump] to jump forwards.") .. "| |" .. ctrlJump, 1, 4000},
+ [onShroomAnim] = {loc("First Blood"), loc("A leap in a leap"), loc("Go on top of the flower.") .. "|" .. ctrlMissionPanel, 1, 7000},
+ [onFlowerAnim] = {loc("First Blood"), loc("Hightime"), loc("Collect the crate on the right.") .. "|" .. loc("Hint: Select the rope, [Up] or [Down] to aim, [Attack] to fire, directional keys to move.") .. "|" .. loc("Ropes can be fired again in the air!") .. "| |" .. ctrlAttack, 1, 7000},
+ [tookParaAnim] = {loc("First Blood"), loc("Omnivore"), loc("Get on the head of the mole."), 1, 4000},
+ [onMoleHeadAnim] = {loc("First Blood"), loc("The Leap of Faith"), loc("Use the parachute to get the next crate.") .. "|" .. loc("Hint: Just select the parachute, it opens automatically when you fall."), 1, 4000},
[tookRope2Anim] = {loc("First Blood"), loc("The Rising"), loc("Get that crate!"), 1, 4000},
- [tookPunchAnim] = {loc("First Blood"), loc("The Slaughter"), loc("Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."), 1, 5000},
+ [tookPunchAnim] = {loc("First Blood"), loc("The Slaughter"), loc("Destroy the targets!") .. "|" .. loc("Hint: Select the Shoryuken and hit [Attack].|P.S.: You can use it mid-air.") .. "| |" .. ctrlAttack, 1, 5000},
[challengeAnim] = {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},
[challengeFailedAnim] = {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},
[challengeCompletedAnim] = {loc("First Blood"), loc("The Ultimate Weapon"), loc("Get that crate!"), 1, 5000},
[beforeKillAnim] = {loc("First Blood"), loc("The First Blood"), loc("Kill the cannibal!"), 1, 5000},
- [closeCannim] = {loc("First Blood"), loc("The First Blood"), loc("KILL IT!"), 1, 5000}
+ [closeCannim] = {loc("First Blood"), loc("The First Blood"), loc("KILL IT!"), 1, 5000},
}
+
-----------------------------Animations--------------------------------
function Skipanim(anim)
AnimSwitchHog(youngh)
@@ -214,7 +226,7 @@
table.insert(startDialogue, {func = AnimJump, args = {youngh, "long"}})
table.insert(startDialogue, {func = AnimTurn, args = {princess, "Right"}})
table.insert(startDialogue, {func = AnimSwitchHog, args = {youngh}})
- table.insert(startDialogue, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Enter] to jump"), 1, 4000}})
+ table.insert(startDialogue, {func = AnimShowMission, args = {youngh, unpack(goals[startDialogue])}})
AddSkipFunction(onShroomAnim, SkipOnShroom, {onShroomAnim})
table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("I can see you have been training diligently."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onShroomAnim})
@@ -224,14 +236,14 @@
table.insert(onShroomAnim, {func = AnimTurn, args = {elderh, "Left"}})
table.insert(onShroomAnim, {func = AnimSay, args = {princess, loc("He moves like an eagle in the sky."), SAY_THINK, 4000}})
table.insert(onShroomAnim, {func = AnimSwitchHog, args = {youngh}})
- table.insert(onShroomAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("A leap in a leap"), loc("Go on top of the flower") .. "|" .. loc("Hint: Press [Esc] to review the mission texts."), 1, 7000}})
+ table.insert(onShroomAnim, {func = AnimShowMission, args = {youngh, unpack(goals[onShroomAnim])}})
AddSkipFunction(onFlowerAnim, Skipanim, {onFlowerAnim})
table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, loc("See that crate farther on the right?"), SAY_SAY, 4000}})
table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, loc("Swing, Leaks A Lot, on the wings of the wind!"), SAY_SAY, 6000}})
table.insert(onFlowerAnim, {func = AnimSay, args = {princess, loc("His arms are so strong!"), SAY_THINK, 4000}})
table.insert(onFlowerAnim, {func = AnimSwitchHog, args = {youngh}})
- table.insert(onFlowerAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("Hightime"), loc("Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"), 1, 7000}})
+ table.insert(onFlowerAnim, {func = AnimShowMission, args = {youngh, unpack(goals[onFlowerAnim])}})
AddSkipFunction(tookParaAnim, Skipanim, {tookParaAnim})
table.insert(tookParaAnim, {func = AnimGearWait, args = {youngh, 1000}, skipFunc = Skipanim, skipArgs = tookParaAnim})
@@ -239,14 +251,14 @@
table.insert(tookParaAnim, {func = AnimSay, args = {elderh, loc("Worry not, for it is a peaceful animal! There is no reason to be afraid..."), SAY_SHOUT, 5000}})
table.insert(tookParaAnim, {func = AnimSay, args = {elderh, loc("We all know what happens when you get frightened..."), SAY_SAY, 4000}})
table.insert(tookParaAnim, {func = AnimSay, args = {youngh, loc("So humiliating..."), SAY_SAY, 4000}})
- table.insert(tookParaAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("Omnivore"), loc("Get on the head of the mole"), 1, 4000}})
+ table.insert(tookParaAnim, {func = AnimShowMission, args = {youngh, unpack(goals[tookParaAnim])}})
table.insert(tookParaAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(onMoleHeadAnim, Skipanim, {onMoleHeadAnim})
table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, loc("Perfect! Now try to get the next crate without hurting yourself!"), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onMoleHeadAnim})
table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, loc("The giant umbrella from the last crate should help break the fall."), SAY_SAY, 4000}})
table.insert(onMoleHeadAnim, {func = AnimSay, args = {princess, loc("He's so brave..."), SAY_THINK, 4000}})
- table.insert(onMoleHeadAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Leap of Faith"), loc("Use the parachute ([Space] while in air) to get the next crate"), 1, 4000}})
+ table.insert(onMoleHeadAnim, {func = AnimShowMission, args = {youngh, unpack(goals[onMoleHeadAnim])}})
table.insert(onMoleHeadAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(pastMoleHeadAnim, Skipanim, {pastMoleHeadAnim})
@@ -257,13 +269,13 @@
AddSkipFunction(tookRope2Anim, Skipanim, {tookRope2Anim})
table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, loc("Impressive...you are still dry as the corpse of a hawk after a week in the desert..."), SAY_SAY, 5000}, skipFunc = Skipanim, skipArgs = tookRope2Anim})
table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, loc("You probably know what to do next..."), SAY_SAY, 4000}})
- table.insert(tookRope2Anim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Rising"), loc("Get that crate!"), 1, 4000}})
+ table.insert(tookRope2Anim, {func = AnimShowMission, args = {youngh, unpack(goals[tookRope2Anim])}})
table.insert(tookRope2Anim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(tookPunchAnim, Skipanim, {tookPunchAnim})
table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, loc("It is time to practice your fighting skills."), SAY_SAY, 4000}})
table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, loc("Imagine those targets are the wolves that killed your parents! Take your anger out on them!"), SAY_SAY, 5000}})
- table.insert(tookPunchAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Slaughter"), loc("Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."), 1, 5000}})
+ table.insert(tookPunchAnim, {func = AnimShowMission, args = {youngh, unpack(goals[tookPunchAnim])}})
table.insert(tookPunchAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(challengeAnim, Skipanim, {challengeAnim})
@@ -276,7 +288,7 @@
AddSkipFunction(challengeFailedAnim, Skipanim, {challengeFailedAnim})
table.insert(challengeFailedAnim, {func = AnimSay, args = {elderh, loc("Hmmm...perhaps a little more time will help."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeFailedAnim})
- table.insert(challengeFailedAnim, {func = AnimShowMission, args = {youngh, 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}})
+ table.insert(challengeFailedAnim, {func = AnimShowMission, args = {youngh, unpack(goals[challengeFailedAnim])}})
table.insert(challengeFailedAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(challengeCompletedAnim, Skipanim, {challengeCompletedAnim})
@@ -284,7 +296,7 @@
table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("You have proven yourself worthy to see our most ancient secret!"), SAY_SAY, 4000}})
table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("The weapon in that last crate was bestowed upon us by the ancients!"), SAY_SAY, 4000}})
table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("Use it with precaution!"), SAY_SAY, 4000}})
- table.insert(challengeCompletedAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Ultimate Weapon"), loc("Get that crate!"), 1, 5000}})
+ table.insert(challengeCompletedAnim, {func = AnimShowMission, args = {youngh, unpack(goals[challengeCompletedAnim])}})
table.insert(challengeCompletedAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(beforeKillAnim, Skipanim, {beforeKillAnim})
@@ -294,7 +306,7 @@
table.insert(beforeKillAnim, {func = AnimWait, args = {cannibal, 1000}})
table.insert(beforeKillAnim, {func = AnimSay, args = {elderh, loc("Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"), SAY_SHOUT, 4000}})
table.insert(beforeKillAnim, {func = AnimSay, args = {cannibal, loc("Oh, my!"), SAY_THINK, 4000}})
- table.insert(beforeKillAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The First Blood"), loc("Kill the cannibal!"), 1, 5000}})
+ table.insert(beforeKillAnim, {func = AnimShowMission, args = {youngh, unpack(goals[beforeKillAnim])}})
table.insert(beforeKillAnim, {func = AnimSwitchHog, args = {youngh}})
AddSkipFunction(closeCannim, Skipanim, {closeCannim})
@@ -303,7 +315,7 @@
table.insert(closeCannim, {func = AnimSay, args = {cannibal, loc("If only I were given a chance to explain my being here..."), SAY_SAY, 4000}})
table.insert(closeCannim, {func = AnimSay, args = {elderh, loc("Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"), SAY_SAY, 6000}})
table.insert(closeCannim, {func = AnimSay, args = {elderh, loc("Here...pick your weapon!"), SAY_SAY, 5000}})
- table.insert(closeCannim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The First Blood"), loc("KILL IT!"), 1, 5000}})
+ table.insert(closeCannim, {func = AnimShowMission, args = {youngh, unpack(goals[closeCannim])}})
table.insert(closeCannim, {func = AnimSwitchHog, args = {youngh}})
table.insert(cannKilledAnim, {func = AnimSay, args = {elderh, loc("Yes, yeees! You are now ready to enter the real world!"), SAY_SHOUT, 6000}})
@@ -410,7 +422,13 @@
end
function DoMovedUntilJump()
- ShowMission(loc("First Blood"), loc("Step By Step"), loc("Hint: Double Jump - Press [Backspace] twice"), -amSkip, 0)
+ local msg
+ if INTERFACE == "touch" then
+ msg = loc("Hint: Double Jump - Tap the [Curvy Arrow] twice")
+ else
+ msg = loc("Hint: Double Jump - Press [Backspace] twice")
+ end
+ ShowMission(loc("First Blood"), loc("Step By Step"), msg, -amSkip, 0)
AddEvent(CheckOnShroom, {}, DoOnShroom, {}, 0)
end
@@ -601,7 +619,7 @@
PutTargets(1)
AddEvent(CheckTargetsKilled, {}, DoTargetsKilled, {}, 1)
AddEvent(CheckCannibalKilled, {}, DoCannibalKilledEarly, {}, 0)
- ShowMission(loc("First Blood"), loc("The Bull's Eye"), loc("Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"), 1, 5000)
+ ShowMission(loc("First Blood"), loc("The Bull's Eye"), loc("Destroy the targets!") .. "| |" .. ctrlAttack, 1, 5000)
end
function CheckTargetsKilled()
@@ -725,13 +743,12 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "A_Classic_Fairytale_first_blood"
Theme = "Nature"
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
- youngh = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
+ AddMissionTeam(-2)
+ youngh = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
elderh = AddHog(loc("Righteous Beard"), 0, 99, "IndianChief")
princess = AddHog(loc("Fell From Heaven"), 0, 300, "tiara")
AnimSetGearPosition(princess, 1911, 1361)
@@ -754,7 +771,14 @@
progress = tonumber(GetCampaignVar("Progress"))
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)
+ local msgSkip
+ if INTERFACE == "touch" then
+ -- FIXME: Precise key is not available in Touch
+ msgSkip = ""
+ else
+ msgSkip = "|" .. loc("Hint: Cinematics can be skipped with the [Precise] key.")
+ end
+ ShowMission(loc("A Classic Fairytale"), loc("First Blood"), loc("Finish your training.") .. msgSkip, -amSkip, 0)
HideHog(cannibal)
AddAnim(startDialogue)
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua Mon Jan 14 12:35:32 2019 -0500
@@ -135,6 +135,12 @@
TurnsLeft = 0
stage = 0
+nativesTeamName = nil
+princessTeamName = nil
+cannibalsTeamName = nil
+cyborgTeamName = nil
+
+startAnimStarted = false
blowTaken = false
fireTaken = false
gravityTaken = false
@@ -178,8 +184,8 @@
--/////////////////////////Animation Functions///////////////////////
function AfterMidFailAnim()
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Princess"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(princessTeamName)
EndTurn(true)
end
@@ -782,8 +788,6 @@
end
SetupPlaceAlone()
SetupEventsAlone()
- AddAnim(startAnim)
- AddFunction({func = AfterStartAnim, args = {}})
else
if m2Choice == choiceAccepted then
SetupAnimAcceptedLived()
@@ -792,8 +796,6 @@
end
SetupPlaceDuo()
SetupEventsDuo()
- AddAnim(startAnim)
- AddFunction({func = AfterStartAnim, args = {}})
end
HideHedge(cyborg)
HideHedge(princess)
@@ -913,8 +915,8 @@
if not princessDead then
EndTurn(true)
AddCaption(loc("The village, unprepared, was destroyed by the cyborgs..."))
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Princess"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(princessTeamName)
end
end
@@ -926,8 +928,8 @@
if not princessDead then
EndTurn(true)
AddCaption(loc("The village, unprepared, was destroyed by the cyborgs..."))
- DismissTeam(loc("Natives"))
- DismissTeam(loc("Princess"))
+ DismissTeam(nativesTeamName)
+ DismissTeam(princessTeamName)
end
end
@@ -1015,8 +1017,8 @@
if not (leaksDead or denseDead) then
AddAnim(endFailAnim)
end
- AddFunction({func = DismissTeam, args = {loc("Natives")}})
- AddFunction({func = DismissTeam, args = {loc("Princess")}})
+ AddFunction({func = DismissTeam, args = {nativesTeamName}})
+ AddFunction({func = DismissTeam, args = {princessTeamName}})
AddFunction({func = EndTurn, args = {true}})
end
@@ -1035,8 +1037,8 @@
function FinishWon()
SwitchHog(leaks)
- DismissTeam(loc("Cannibal Sentry"))
- DismissTeam(loc("011101001"))
+ DismissTeam(cannibalsTeamName)
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
@@ -1080,7 +1082,6 @@
MinesTime = 5000
end
Explosives = 0
- Delay = 5
Map = "A_Classic_Fairytale_journey"
Theme = "Nature"
@@ -1088,14 +1089,16 @@
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ AnimInit(true)
+
+ nativesTeamName = AddMissionTeam(-2)
leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood")
- AddTeam(loc("Princess"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ princessTeamName = AddTeam(loc("Princess"), -2, "Bone", "Island", "HillBilly", "cm_female")
princess = AddHog(loc("Fell From Heaven"), 0, 200, "tiara")
- AddTeam(loc("Cannibal Sentry"), -1, "skull", "Island", "Pirate","cm_vampire")
+ cannibalsTeamName = AddTeam(loc("Cannibal Sentry"), -1, "skull", "Island", "Pirate","cm_vampire")
cannibals = {}
for i = 1, 4 do
cannibals[i] = AddHog(cannibalNames[i], 3, 40, "Zombi")
@@ -1109,15 +1112,13 @@
SetEffect(cannibals[i], heArtillery, 1)
end
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Y3K1337"), 0, 200, "cyborg1")
AnimSetGearPosition(dense, 0, 0)
AnimSetGearPosition(leaks, 0, 0)
AnimSetGearPosition(cyborg, 0, 0)
AnimSetGearPosition(princess, 0, 0)
-
- AnimInit()
end
function onGameStart()
@@ -1187,6 +1188,11 @@
end
function onNewTurn()
+ if not startAnimStarted then
+ AddAnim(startAnim)
+ AddFunction({func = AfterStartAnim, args = {}})
+ startAnimStarted = true
+ end
if AnimInProgress() then
SetTurnTimeLeft(MAX_TURN_TIME)
elseif victory then
@@ -1195,7 +1201,7 @@
AnimSwitchHog(leaks)
SetGearMessage(leaks, 0)
SetTurnTimeLeft(MAX_TURN_TIME)
- elseif GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then
+ elseif GetHogTeamName(CurrentHedgehog) ~= nativesTeamName then
SetTurnTimeLeft(20000)
else
TurnsLeft = TurnsLeft - 1
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua Mon Jan 14 12:35:32 2019 -0500
@@ -499,7 +499,7 @@
if anim == startAnim then
SetGearPosition(enemy, unpack(enemyPos))
end
- if GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then
+ if GetHogTeamName(CurrentHedgehog) ~= nativesTeamName then
EndTurn(true)
end
AnimWait(enemy, 1)
@@ -555,9 +555,9 @@
function KillEnemy()
if enemyFled == "1" then
- DismissTeam(loc("Leaderbot"))
+ DismissTeam(leaderbotTeamName)
end
- DismissTeam(loc("011101001"))
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
@@ -722,8 +722,14 @@
AddAmmo(natives[1], amMolotov, 0)
end
+nativesTeamName = nil
+beepTeamName = nil
+corpTeamName = nil
+leaderbotTeamName = nil
+cyborgTeamName = nil
+
function AddHogs()
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ nativesTeamName = AddMissionTeam(-2)
for i = 7, 9 do
natives[i-6] = AddHog(nativeNames[i], 0, 100, nativeHats[i])
origNatives[i-6] = natives[i-6]
@@ -732,21 +738,21 @@
origNatives[4] = natives[4]
nativesLeft = nativesNum
- AddTeam(loc("Beep Loopers"), -1, "ring", "UFO", "Robot", "cm_cyborg")
+ beepTeamName = AddTeam(loc("Beep Loopers"), -1, "ring", "UFO", "Robot", "cm_cyborg")
for i = 1, cyborgsTeamNum[1] do
cyborgs[i] = AddHog(cyborgNames[i], cyborgsDif[i], cyborgsHealth[i], "cyborg2")
end
- AddTeam(loc("Corporationals"), -1, "ring", "UFO", "Robot", "cm_cyborg")
+ corpTeamName = AddTeam(loc("Corporationals"), -1, "ring", "UFO", "Robot", "cm_cyborg")
for i = cyborgsTeamNum[1] + 1, cyborgsNum do
cyborgs[i] = AddHog(cyborgNames[i], cyborgsDif[i], cyborgsHealth[i], "cyborg2")
end
cyborgsLeft = cyborgsTeamNum[1] + cyborgsTeamNum[2]
- AddTeam(loc("Leaderbot"), -1, "ring", "UFO", "Robot", "cm_cyborg")
+ leaderbotTeamName = AddTeam(loc("Leaderbot"), -1, "ring", "UFO", "Robot", "cm_cyborg")
enemy = AddHog(loc("Name"), 2, 200, "cyborg1")
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
SetGearPosition(cyborg, unpack(cyborgHidePos))
@@ -784,7 +790,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
MapGen = mgDrawn
Theme = "Hell"
SuddenDeathTurns = 20
@@ -824,7 +829,7 @@
local toRemove = nil
gearDead[gear] = true
if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == loc("Beep Loopers") or GetHogTeamName(gear) == loc("Corporationals") then
+ if GetHogTeamName(gear) == beepTeamName or GetHogTeamName(gear) == corpTeamName then
cyborgsLeft = cyborgsLeft - 1
elseif GetHogTeamName(gear) == loc("Natives") then
for i = 1, nativesLeft do
@@ -860,7 +865,7 @@
SetTurnTimeLeft(MAX_TURN_TIME)
return
end
- if GetHogTeamName(CurrentHedgehog) == loc("011101001") then
+ if GetHogTeamName(CurrentHedgehog) == cyborgTeamName then
EndTurn(true)
end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/shadow.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/shadow.lua Mon Jan 14 12:35:32 2019 -0500
@@ -94,6 +94,9 @@
HogNames = {loc("Brainiac"), loc("Corpsemonger"), loc("Femur Lover"), loc("Glark"), loc("Bonely"), loc("Rot Molester"), loc("Bloodrocutor"), loc("Muscle Dissolver"), loc("Bloodsucker")}
+nativesTeamName = nil
+weaklingsTeamName = nil
+
---POSITIONS---
cannibalPos = {{3108, 1127},
@@ -144,7 +147,6 @@
cannibalDead = {}
isHidden = {}
-
--------------------------Anim skip functions--------------------------
function AfterRefusedAnim()
if stage == loseStage then
@@ -316,7 +318,7 @@
return
end
stage = aloneStage
- ShowMission(loc("The Shadow Falls"), loc("The Individualist"), loc("Defeat the cannibals!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"), 1, 8000)
+ ShowMission(loc("The Shadow Falls"), loc("The Individualist"), loc("Defeat the cannibals!"), 1, 12000)
AddAmmo(cannibals[6], amGrenade, 1)
AddAmmo(cannibals[6], amFirePunch, 0)
AddAmmo(cannibals[6], amBaseballBat, 0)
@@ -603,13 +605,13 @@
end
function AddHogs()
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
+ nativesTeamName = AddMissionTeam(-2)
ramon = AddHog(loc("Ramon"), 0, 100, "rasta")
leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood")
spiky = AddHog(loc("Spiky Cheese"), 0, 100, "hair_yellow")
- AddTeam(loc("Weaklings"), -1, "skull", "Island", "Pirate","cm_vampire")
+ weaklingsTeamName = AddTeam(loc("Weaklings"), -1, "skull", "Island", "Pirate","cm_vampire")
cannibals = {}
cannibals[1] = AddHog(loc("Brainiac"), 5, 20, "Zombi")
@@ -783,7 +785,7 @@
AddAnim(stronglingsAnim)
AddFunction({func = AfterStronglingsAnim, args = {}})
stage = interWeakStage
- DismissTeam(loc("Weaklings"))
+ DismissTeam(weaklingsTeamName)
end
function CheckRefuse()
@@ -844,7 +846,13 @@
if stage == loseStage then
return
end
- ShowMission(loc("The Shadow Falls"), loc("Under Construction"), loc("Return to Leaks A Lot!") .. "|" .. loc("To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"), 1, 6000)
+ local ctrl = loc("Hint: To place a girder, select it,|then use [Left] and [Right] to select angle and length,|then choose a location for the girder.")
+ if INTERFACE == "touch" then
+ ctrl = ctrl .. "|" .. loc("Choose location: Tap the [Target] button, then tap on the spot you want to choose")
+ else
+ ctrl = ctrl .. "|" .. loc("Choose location: Left click")
+ end
+ ShowMission(loc("The Shadow Falls"), loc("Under Construction"), loc("Return to Leaks A Lot!") .. "|" .. ctrl, 1, 6000)
end
function CheckNeedWeapons()
@@ -874,7 +882,8 @@
if stage == loseStage then
return
end
- ShowMission(loc("The Shadow Falls"), loc("The guardian"), loc("Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power").."|"..loc("Leaks A Lot must survive!"), 1, 8000)
+
+ ShowMission(loc("The Shadow Falls"), loc("The guardian"), loc("Defeat the cannibals!") .."|".. loc("Leaks A Lot must survive!"), 1, 12000)
AddAmmo(dense, amSkip, 100)
AddAmmo(dense, amSwitch, 100)
AddAmmo(leaks, amSkip, 100)
@@ -985,7 +994,7 @@
end
AddCaption(loc("...and so the cyborgs took over the world..."))
stage = loseStage
- DismissTeam(loc("Natives"))
+ DismissTeam(nativesTeamName)
end
function CheckDenseDead()
@@ -1002,7 +1011,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "A_Classic_Fairytale_shadow"
Theme = "Nature"
-- Disable Sudden Death
@@ -1027,7 +1035,14 @@
AddAnim(startDialogue)
AddFunction({func = AfterStartDialogue, args = {}})
AddEvent(CheckBrainiacDead, {}, DoBrainiacDead, {}, 0)
- ShowMission(loc("The Shadow Falls"), loc("The First Encounter"), loc("Survive!|Hint: Cinematics can be skipped with the [Precise] key."), 1, 0)
+ local hint
+ if INTERFACE == "touch" then
+ -- FIXME: No precise key available in Touch yet.
+ hint = ""
+ else
+ hint = "|" .. loc("Hint: Cinematics can be skipped with the [Precise] key.")
+ end
+ ShowMission(loc("The Shadow Falls"), loc("The First Encounter"), loc("Survive!") .. hint, 1, 0)
end
function onGameTick()
@@ -1064,9 +1079,9 @@
end
function onGearAdd(gear)
- if GetGearType(gear) == gtGrenade and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ if GetGearType(gear) == gtGrenade and GetHogTeamName(CurrentHedgehog) == nativesTeamName then
grenadeUsed = true
- elseif GetGearType(gear) == gtShotgunShot and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ elseif GetGearType(gear) == gtShotgunShot and GetHogTeamName(CurrentHedgehog) == nativesTeamName then
shotgunUsed = true
end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua Mon Jan 14 12:35:32 2019 -0500
@@ -63,6 +63,10 @@
startAnim = {}
wave2Anim = {}
finalAnim = {}
+
+nativesTeamName = nil
+cyborgTeamName = nil
+
--------------------------Anim skip functions--------------------------
function AfterHogDeadAnim()
freshDead = nil
@@ -70,10 +74,10 @@
end
function AfterStartAnim()
- local goal = loc("Defeat the cannibals!|")
+ 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.")
SetTurnTimeLeft(TurnTime)
- ShowMission(loc("United We Stand"), loc("Invasion"), goal .. chiefgoal, 1, 6000)
+ ShowMission(loc("United We Stand"), loc("Invasion"), goal .. "|" .. chiefgoal, 1, 6000)
end
function SkipStartAnim()
@@ -136,7 +140,7 @@
if progress and progress<4 then
SaveCampaignVar("Progress", "4")
end
- DismissTeam(loc("011101001"))
+ DismissTeam(cyborgTeamName)
EndTurn(true)
end
-----------------------------Animations--------------------------------
@@ -323,8 +327,8 @@
end
function AddHogs()
- AddTeam(loc("Natives"), -2, "Bone", "Island", "HillBilly", "cm_birdy")
- leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
+ nativesTeamName = AddMissionTeam(-2)
+ leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood")
water = AddHog(loc("Fiery Water"), 0, 100, "pirate_jack")
buffalo = AddHog(loc("Raging Buffalo"), 0, 100, "zoo_Bunny")
@@ -342,7 +346,7 @@
cannibals[i] = AddHog(HogNames[i], 2, 55, "vampirichog")
end
- AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
+ cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary")
cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
AnimSetGearPosition(leaks, unpack(leaksPos))
@@ -432,7 +436,6 @@
MinesNum = 0
MinesTime = 3000
Explosives = 2
- Delay = 10
Map = "Hogville"
Theme = "Nature"
-- Disable Sudden Death
@@ -535,7 +538,7 @@
SetTurnTimeLeft(MAX_TURN_TIME)
return
end
- if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == nativesTeamName then
SetupHogDeadAnim(freshDead)
AddAnim(hogDeadAnim)
AddFunction({func = AfterHogDeadAnim, args = {}})
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/cosmos.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/cosmos.lua Mon Jan 14 12:35:32 2019 -0500
@@ -32,7 +32,7 @@
local dialog09 = {}
-- mission objectives
local goals = {
- ["init"] = {missionName, loc("Getting ready"), loc("Help Hog Solo to find all the parts of the anti-gravity device.")..
+ ["init"] = {missionName, loc("Getting ready"), loc("Find all the parts of the anti-gravity device.")..
"|"..loc("Travel to all the neighbor planets and collect all the pieces"), 1, 0},
[dialog01] = {missionName, loc("Getting ready"), loc("Go and collect the crate").."|"..loc("Try not to get spotted by the guards!"), 1, 4500},
[dialog02] = {missionName, loc("The adventure begins!"), loc("Use the saucer and fly to the moon").."|"..loc("Travel carefully as your fuel is limited"), 1, 4500},
@@ -107,7 +107,6 @@
CaseFreq = 0
MinesNum = 0
Explosives = 0
- Delay = 5
-- Disable Sudden Death
WaterRise = 0
HealthDecrease = 0
@@ -119,19 +118,20 @@
Map = "cosmos_map" -- custom map included in file
end
Theme = "Nature"
- -- I had originally hero in PAotH team and changed it, may reconsider though
- -- PAotH
- AddTeam(teamC.name, teamC.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamC.name = AddMissionTeam(teamC.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
- AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
+ -- PAotH
+ teamA.name = AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
director.gear = AddHog(director.name, 0, 100, "hair_yellow")
AnimSetGearPosition(director.gear, director.x, director.y)
doctor.gear = AddHog(doctor.name, 0, 100, "Glasses")
AnimSetGearPosition(doctor.gear, doctor.x, doctor.y)
-- Guards
- AddTeam(teamB.name, teamB.color, "Statue", "Island", "Default", "cm_swordshield2")
+ teamB.name = AddTeam(teamB.name, teamB.color, "Statue", "Island", "Default", "cm_swordshield2")
guard1.gear = AddHog(guard1.name, 1, 100, "policecap")
AnimSetGearPosition(guard1.gear, guard1.x, guard1.y)
guard2.gear = AddHog(guard2.name, 1, 100, "policecap")
@@ -475,7 +475,7 @@
SaveCampaignVar("Mission1", "2")
SaveCampaignVar("Mission2", "13")
SaveCampaignVar("Mission3", "1")
- sendStats(loc("Hog Solo arrived at the moon!"))
+ sendStats(string.format(loc("%s arrived at the moon!"), hero.name))
end
end
@@ -508,7 +508,7 @@
SaveCampaignVar("Mission2", "10")
SaveCampaignVar("Mission3", "1")
end
- sendStats(loc("Hog Solo arrived at the Fruit Planet!"))
+ sendStats(string.format(loc("%s arrived at the Fruit Planet!"), hero.name))
end
end
@@ -523,7 +523,7 @@
SaveCampaignVar("Mission2", "7")
SaveCampaignVar("Mission3", "12")
SaveCampaignVar("Mission4", "1")
- sendStats(loc("Hog Solo arrived at the Desert Planet!"))
+ sendStats(string.format(loc("%s arrived at the Desert Planet!"), hero.name))
end
end
@@ -537,7 +537,7 @@
SaveCampaignVar("Mission1", "5")
SaveCampaignVar("Mission2", "6")
SaveCampaignVar("Mission3", "1")
- sendStats(loc("Hog Solo arrived at the Ice Planet!"))
+ sendStats(string.format(loc("%s arrived at the Ice Planet!"), hero.name))
end
end
@@ -553,7 +553,7 @@
SaveCampaignVar("Mission1", "9")
SaveCampaignVar("Mission2", "11")
SaveCampaignVar("Mission3", "1")
- sendStats(loc("Hog Solo arrived at the Planet of Death!"))
+ sendStats(string.format(loc("%s arrived at the Planet of Death!"), hero.name))
end
end
@@ -569,7 +569,7 @@
SaveCampaignVar("UnlockedMissions", "2")
SaveCampaignVar("Mission1", "14")
SaveCampaignVar("Mission2", "1")
- sendStats(loc("Hog Solo arrived at the meteorite!"))
+ sendStats(string.format(loc("%s arrived at the meteorite!"), hero.name))
end
end
@@ -600,9 +600,9 @@
end
end
if status.desert01 then
- vgear = AddVisualGear(4015, 316, vgtBeeTrace, 0, false)
+ vgear = AddVisualGear(3759, 28, vgtBeeTrace, 0, false)
if status.desert02 and status.desert03 then
- vgear = AddVisualGear(4015, 296, vgtBeeTrace, 0, false)
+ vgear = AddVisualGear(3759, 8, vgtBeeTrace, 0, false)
end
end
if status.fruit01 and status.fruit02 then
@@ -650,7 +650,7 @@
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {doctor.gear, 3000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Near Secret Base 17 of PAotH in the rural Hogland ..."), 4000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("So Hog Solo, here we are ..."), SAY_SAY, 2000}})
+ table.insert(dialog01, {func = AnimSay, args = {director.gear, string.format(loc("So, %s, here we are ..."), hero.name), SAY_SAY, 2000}})
table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("Behind these trees on the east side there is Secret Base 17."), SAY_SAY, 4000}})
table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("You have to continue alone from now on."), SAY_SAY, 3000}})
table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("Be careful, the future of Hogera is in your hands!"), SAY_SAY, 7200}})
@@ -706,7 +706,7 @@
-- DIALOG 08 - Hero wins death01
AddSkipFunction(dialog08, Skipanim, {dialog08})
table.insert(dialog08, {func = AnimCaption, args = {hero.gear, loc("Under the meteorite’s shadow ..."), 4000}})
- table.insert(dialog08, {func = AnimSay, args = {doctor.gear, loc("You did great, Hog Solo! However, we aren't out of danger yet!"), SAY_SHOUT, 4500}})
+ table.insert(dialog08, {func = AnimSay, args = {doctor.gear, string.format(loc("You did great, %s! However, we aren't out of danger yet!"), hero.name), SAY_SHOUT, 4500}})
table.insert(dialog08, {func = AnimSay, args = {doctor.gear, loc("The meteorite has come too close and the anti-gravity device isn't powerful enough to stop it now."), SAY_SHOUT, 5000}})
table.insert(dialog08, {func = AnimSay, args = {doctor.gear, loc("We need it to get split into at least two parts."), SAY_SHOUT, 3000}})
table.insert(dialog08, {func = AnimSay, args = {doctor.gear, loc("PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"), SAY_SHOUT, 5000}})
@@ -745,7 +745,9 @@
function sendStatsOnRetry()
SendStat(siGameResult, loc("You have to travel again"))
- SendStat(siCustomAchievement, loc("Your first destination is the moon in order to get more fuel."))
+ if checkPointReached < 4 then
+ SendStat(siCustomAchievement, loc("Your first destination is the moon in order to get more fuel."))
+ end
SendStat(siCustomAchievement, loc("You have to be careful and must not die!"))
sendSimpleTeamRankings({teamC.name})
EndGame()
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death01.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death01.lua Mon Jan 14 12:35:32 2019 -0500
@@ -3,7 +3,7 @@
-- This is the mission to acquire the last part.
-- This mission is the cameo of Professor Hogevil
-- who has took hostages H and Dr. Cornelius.
--- Hog Solo has to defeat him and his thugs.
+-- The hero has to defeat him and his thugs.
HedgewarsScriptLoad("/Scripts/Locale.lua")
HedgewarsScriptLoad("/Scripts/Animate.lua")
@@ -43,6 +43,7 @@
local teamA = {}
local teamB = {}
local teamC = {}
+local teamD = {}
-- hedgehogs values
hero.name = loc("Hog Solo")
hero.x = 520
@@ -82,8 +83,10 @@
teamA.color = -6
teamB.name = loc("PAotH")
teamB.color = teamA.color
-teamC.name = loc("Professor")
+teamC.name = loc("Professor's Team")
teamC.color = -2
+teamD.name = loc("Professor")
+teamD.color = -2
-------------- LuaAPI EVENT HANDLERS ------------------
@@ -94,7 +97,6 @@
MinesNum = 3
MinesTime = 1500
Explosives = 2
- Delay = 3
HealthCaseAmount = 50
-- gfTagTeam makes it easier to skip the PAotH team
GameFlags = gfTagTeam
@@ -104,13 +106,14 @@
Map = "death01_map"
Theme = "Hell"
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
- -- PAotH
- AddTeam(teamB.name, teamB.color, "Earth", "Island", "Default", "cm_galaxy")
+ -- PAotH (passive team)
+ teamB.name = AddTeam(teamB.name, teamB.color, "Earth", "Island", "Default", "cm_galaxy")
paoth1.gear = AddHog(paoth1.name, 0, 100, "hair_yellow")
AnimSetGearPosition(paoth1.gear, paoth1.x, paoth1.y)
HogTurnLeft(paoth1.gear, true)
@@ -120,8 +123,8 @@
HogTurnLeft(paoth2.gear, true)
SetGearAIHints(paoth2.gear, aihDoesntMatter)
- -- Professor and Thugs
- AddTeam(teamC.name, teamC.color, "eyecross", "Island", "Default", "cm_sine")
+ -- Professor's Team (computer enemy)
+ teamC.name = AddTeam(teamC.name, teamC.color, "eyecross", "Island", "Default", "cm_sine")
professor.bot = AddHog(professor.name, 1, 300, "tophats")
AnimSetGearPosition(professor.bot, paoth1.x - 100, paoth1.y)
HogTurnLeft(professor.bot, true)
@@ -132,8 +135,10 @@
HogTurnLeft(thugs[i].gear, not thugs[i].turnLeft)
end
- AddTeam(teamC.name, teamC.color, "star", "Island", "Default", "cm_sine")
+ -- Professor (special team for cut sequence only)
+ teamD.name = AddTeam(teamD.name, teamD.color, "star", "Island", "Default", "cm_sine")
professor.human = AddHog(professor.name, 0, 300, "tophats")
+ -- hog will be removed and replaced by professor.bot after cut sequence
AnimSetGearPosition(professor.human, hero.x + 70, hero.y)
HogTurnLeft(professor.human, true)
@@ -144,6 +149,8 @@
end
function onGameStart()
+ ShowMission(unpack(goals[dialog01]))
+ HideMission()
AnimWait(hero.gear, 3000)
FollowGear(hero.gear)
@@ -273,8 +280,8 @@
-------------- ACTIONS ------------------
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
- SendStat(siCustomAchievement, loc("To win the game you have to eliminate all your enemies."))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
+ SendStat(siCustomAchievement, loc("To win the game you have to eliminate Professor Hogevil."))
sendSimpleTeamRankings({teamC.name, teamA.name, teamB.name})
EndGame()
end
@@ -302,7 +309,7 @@
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Somewhere on the uninhabitable Death Planet ..."), 5000}})
- table.insert(dialog01, {func = AnimSay, args = {professor.human, loc("Welcome Hog Solo, surprised to see me?"), SAY_SAY, 4000}})
+ table.insert(dialog01, {func = AnimSay, args = {professor.human, string.format(loc("Welcome, %s, surprised to see me?"), hero.name), SAY_SAY, 4000}})
if profDiedOnMoon then
table.insert(dialog01, {func = AnimSay, args = {professor.human, loc("After you left the moon, my other loyal minions came and resurrected me so I could complete my master plan."), SAY_SAY, 6000}})
else
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death02.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death02.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,7 +26,7 @@
local hero = {
name = loc("Hog Solo"),
x = 850,
- y = 460,
+ y = 469,
mortarAmmo = 2,
firepunchAmmo = 1,
deagleAmmo = 4,
@@ -35,11 +35,11 @@
}
local heroTurns = 0
local enemies = {
- { name = GetAmmoName(amMortar), x = 1890, y = 520, weapon = amMortar, additionalWeapons = {}},
- { name = GetAmmoName(amDEagle), x = 1390, y = 790, weapon = amDEagle, additionalWeapons = {}},
- { name = GetAmmoName(amGrenade), x = 186, y = 48, weapon = amGrenade, additionalWeapons = {}},
- { name = GetAmmoName(amFirePunch), x = 330, y = 270, weapon = amFirePunch, additionalWeapons = {}},
- { name = GetAmmoName(amBazooka), x = 1950, y = 150, weapon = amBazooka, additionalWeapons = {}},
+ { name = GetAmmoName(amMortar), x = 1890, y = 535, weapon = amMortar, additionalWeapons = {}},
+ { name = GetAmmoName(amDEagle), x = 1390, y = 815, weapon = amDEagle, additionalWeapons = {}},
+ { name = GetAmmoName(amGrenade), x = 186, y = 62, weapon = amGrenade, additionalWeapons = {}},
+ { name = GetAmmoName(amFirePunch), x = 330, y = 285, weapon = amFirePunch, additionalWeapons = {}},
+ { name = GetAmmoName(amBazooka), x = 1950, y = 152, weapon = amBazooka, additionalWeapons = {}},
}
-- teams
local teamA = {
@@ -66,21 +66,24 @@
Explosives = 0
Map = "death02_map"
Theme = "Hell"
- Delay = 600 -- this makes the messages between turns more readable
-- Disable Sudden Death
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
- AnimSetGearPosition(hero.gear, hero.x, hero.y)
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
+ SetGearPosition(hero.gear, hero.x, hero.y)
-- enemies
shuffleHogs(enemies)
- AddTeam(teamB.name, teamB.color, "skull", "Island", "Default", "cm_skull")
+ teamB.name = AddTeam(teamB.name, teamB.color, "skull", "Island", "Default", "cm_skull")
for i=1,table.getn(enemies) do
enemies[i].gear = AddHog(enemies[i].name, 1, 100, "war_desertgrenadier1")
- AnimSetGearPosition(enemies[i].gear, enemies[i].x, enemies[i].y)
+ SetGearPosition(enemies[i].gear, enemies[i].x, enemies[i].y)
+ if enemies[i].x > hero.x then
+ HogTurnLeft(enemies[i].gear, true)
+ end
end
initCheckpoint("death02")
@@ -209,7 +212,7 @@
-------------- ACTIONS ------------------
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to eliminate all the enemies."))
SendStat(siCustomAchievement, loc("Read the challenge objectives from within the mission for more details."))
sendSimpleTeamRankings({teamB.name, teamA.name})
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,6 +1,6 @@
------------------- ABOUT ----------------------
--
--- In the desert planet Hero will have to explore
+-- In the desert planet, the hero will have to explore
-- the dunes below the surface and find the hidden
-- crates. It is told that one crate contains the
-- lost part.
@@ -91,28 +91,30 @@
MinesNum = 0
MinesTime = 1
Explosives = 0
- Delay = 3
HealthCaseAmount = 30
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
Map = "desert01_map"
Theme = "Desert"
+ -- To prevent victory when smugglers have been defeated
+ GameFlags = gfOneClanMode
-- get hero health
local heroHealth = 100
- -- Hog Solo
- AddTeam(teamC.name, teamC.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
+ -- Hero
+ teamC.name = AddMissionTeam(teamC.color)
+ hero.gear = AddMissionHog(heroHealth)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
-- PAotH undercover scientist and chief Sandologist
- AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
+ teamA.name = AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
ally.gear = AddHog(ally.name, 0, 100, "Cowboy")
AnimSetGearPosition(ally.gear, ally.x, ally.y)
-- Smugglers
- AddTeam(teamB.name, teamB.color, "chest", "Island", "Default", "cm_bloodyblade")
+ teamB.name = AddTeam(teamB.name, teamB.color, "chest", "Island", "Default", "cm_bloodyblade")
smuggler1.gear = AddHog(smuggler1.name, 1, 100, "hair_orange")
AnimSetGearPosition(smuggler1.gear, smuggler1.x, smuggler1.y)
smuggler2.gear = AddHog(smuggler2.name, 1, 100, "lambda")
@@ -541,7 +543,7 @@
end
function lose()
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("To win the game you have to find the right crate."))
SendStat(siCustomAchievement, loc("You can avoid some battles."))
SendStat(siCustomAchievement, loc("Use your ammo wisely."))
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert02.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert02.lua Mon Jan 14 12:35:32 2019 -0500
@@ -22,6 +22,7 @@
local cratesCollected = 0
local totalCrates = 0
local damageTaken = false
+local record
-- health crates
healthX = 565
health1Y = 1400
@@ -63,7 +64,6 @@
GameFlags = gfOneClanMode
Seed = 1
TurnTime = 8000
- Delay = 2
CaseFreq = 0
HealthCaseAmount = 50
MinesNum = 500
@@ -76,12 +76,14 @@
Map = "desert02_map"
Theme = "Desert"
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
+ record = tonumber(GetCampaignVar("FastestMineEscape"))
initCheckpoint("desert02")
AnimInit(true)
@@ -97,6 +99,9 @@
AnimWait(hero.gear, 3000)
FollowGear(hero.gear)
+ if record ~= nil then
+ goals[dialog01][3] = goals[dialog01][3] .. "|" .. string.format(loc("Fastest escape: %d turns"), record)
+ end
ShowMission(unpack(goals[dialog01]))
HideMission()
@@ -112,6 +117,9 @@
function onNewTurn()
SetWeapon(amRope)
+ if TotalRounds >= 0 and record ~= nil then
+ SetTeamLabel(teamA.name, tostring(TotalRounds))
+ end
end
function onGameTick()
@@ -173,7 +181,7 @@
-------------- ACTIONS ------------------
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("To win the game you have to go to the surface."))
SendStat(siCustomAchievement, loc("Most mines are not active."))
SendStat(siCustomAchievement, loc("From the second turn and beyond the water rises."))
@@ -185,7 +193,6 @@
SendStat(siGameResult, loc("Congratulations, you won!"))
SendStat(siCustomAchievement, loc("You have escaped successfully."))
SendStat(siCustomAchievement, string.format(loc("Your escape took you %d turns."), TotalRounds))
- local record = tonumber(GetCampaignVar("FastestMineEscape"))
if record ~= nil and TotalRounds >= record then
SendStat(siCustomAchievement, string.format(loc("Your fastest escape so far: %d turns"), record))
end
@@ -231,4 +238,7 @@
function challengeStart()
startChallenge = true
EndTurn(true)
+ if record ~= nil then
+ SetTeamLabel(teamA.name, "0")
+ end
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert03.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert03.lua Mon Jan 14 12:35:32 2019 -0500
@@ -73,9 +73,10 @@
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 1, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(1)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
initCheckpoint("desert03")
@@ -235,7 +236,7 @@
end
function gameOver()
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to destroy all the targets."))
SendStat(siCustomAchievement, loc("You will fail if you run out of ammo and there are still targets available."))
SendStat(siCustomAchievement, loc("Read the challenge objectives from within the mission for more details."))
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua Mon Jan 14 12:35:32 2019 -0500
@@ -50,9 +50,10 @@
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 1, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(1)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
initCheckpoint("final")
@@ -151,7 +152,7 @@
-------------- ACTIONS ------------------
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to destroy all the explosives without dying!"))
SendStat(siCustomAchievement, loc("Areas surrounded by a security border are indestructible."))
SendStat(siCustomAchievement, loc("Areas surrounded by a green dashed outline are portal-proof and repel portals."))
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit01.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit01.lua Mon Jan 14 12:35:32 2019 -0500
@@ -39,7 +39,7 @@
loc("What do you want to do?").."| |"..
loc("Fight: Press [Attack]").."|"..
loc("Flee: Press [Jump]"), 1, 9999000, true},
- [dialog02] = {missionName, loc("Battle Starts Now!"), loc("You have chosen to fight!").."|"..loc("Lead the Green Bananas to battle and eliminate all the enemies!"), 1, 5000},
+ [dialog02] = {missionName, loc("Battle Starts Now!"), loc("You have chosen to fight!").."|"..loc("Lead your allies to battle and eliminate all the enemies!"), 1, 5000},
[dialog03] = {missionName, loc("Time to run!"), loc("You have chosen to flee.").."|"..loc("You have to reach the left-most place on the map."), 1, 5000},
["fight"] = {missionName, loc("Ready for Battle?"), loc("You have chosen to fight!"), 1, 2000},
["flee"] = {missionName, loc("Ready for Battle?"), loc("You have chosen to flee."), 1, 2000},
@@ -112,7 +112,6 @@
MinesNum = 0
MinesTime = 1
Explosives = 0
- Delay = 3
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
@@ -120,17 +119,18 @@
Map = "fruit01_map"
Theme = "Fruit"
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
-- Captain Lime
- AddTeam(teamD.name, teamD.color, "Cherry", "Island", "Default", "congo-brazzaville")
+ teamD.name = AddTeam(teamD.name, teamD.color, "Cherry", "Island", "Default", "congo-brazzaville")
green1.gear = AddHog(green1.name, 0, 200, "war_desertofficer")
AnimSetGearPosition(green1.gear, green1.x, green1.y)
-- Green Bananas
- AddTeam(teamB.name, teamB.color, "Cherry", "Island", "Default", "congo-brazzaville")
+ teamB.name = AddTeam(teamB.name, teamB.color, "Cherry", "Island", "Default", "congo-brazzaville")
green2.gear = AddHog(green2.name, 0, 100, "war_britmedic")
AnimSetGearPosition(green2.gear, green2.x, green2.y)
HogTurnLeft(green2.gear, true)
@@ -144,7 +144,7 @@
AnimSetGearPosition(green5.gear, green5.x, green5.y)
HogTurnLeft(green5.gear, true)
-- Yellow Watermelons
- AddTeam(teamC.name, teamC.color, "Flower", "Island", "Default", "cm_mog")
+ teamC.name = AddTeam(teamC.name, teamC.color, "Flower", "Island", "Default", "cm_mog")
yellow1.gear = AddHog(yellow1.name, 1, 100, "war_desertgrenadier2")
AnimSetGearPosition(yellow1.gear, yellow1.x, yellow1.y)
-- the rest of the Yellow Watermelons
@@ -361,7 +361,7 @@
function battleWin(gear)
-- add stats
saveVariables()
- SendStat(siGameResult, loc("Green Bananas won!"))
+ SendStat(siGameResult, string.format(loc("%s won!"), teamB.name))
SendStat(siCustomAchievement, loc("You have eliminated all visible enemy hedgehogs!"))
sendSimpleTeamRankings({teamA.name, teamD.name, teamB.name, teamC.name})
EndGame()
@@ -371,7 +371,7 @@
RemoveEventFunc(heroOnLaunchPadWithEnemies)
-- add stats
saveVariables()
- SendStat(siGameResult, loc("Hog Solo escaped successfully!"))
+ SendStat(siGameResult, string.format(loc("%s escaped successfully!"), hero.name))
SendStat(siCustomAchievement, loc("You have reached the take-off area successfully!"))
sendSimpleTeamRankings({teamA.name, teamD.name, teamB.name, teamC.name})
EndGame()
@@ -418,17 +418,17 @@
end
function AnimationSetup()
- -- DIALOG 01 - Start, Captain Lime talks explains to Hog Solo
+ -- DIALOG 01 - Start, Captain Lime talks and explains stuff to hero
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 1000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Somewhere on the Planet of Fruits a terrible war is about to begin ..."), 5000}})
table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("I was told that as the leader of the king's guard, no one knows this world better than you!"), SAY_SAY, 5000}})
table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("So, I kindly ask for your help."), SAY_SAY, 3000}})
table.insert(dialog01, {func = AnimWait, args = {green1.gear, 2000}})
- table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("You couldn't have come to a worse time, Hog Solo!"), SAY_SAY, 3000}})
+ table.insert(dialog01, {func = AnimSay, args = {green1.gear, string.format(loc("You couldn't have come to a worse time, %s!"), hero.name), SAY_SAY, 3000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("The clan of the Red Strawberry wants to take over the dominion and overthrow King Pineapple."), SAY_SAY, 5000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the Kingdom of Sand to help with the annual dusting of the king's palace."), SAY_SAY, 8000}})
- table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("However, the army of Yellow Watermelons is about to attack any moment now."), SAY_SAY, 4000}})
+ table.insert(dialog01, {func = AnimSay, args = {green1.gear, string.format(loc("However, the army of %s is about to attack any moment now."), teamC.name), SAY_SAY, 4000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("I would gladly help you if we won this battle but under these circumstances I'll only help you if you fight for our side."), SAY_SAY, 6000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("What do you say? Will you fight for us?"), SAY_SAY, 3000}})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 500}})
@@ -436,7 +436,7 @@
table.insert(dialog01, {func = AfterDialog01, args = {}})
-- DIALOG 02 - Hero selects to fight
AddSkipFunction(dialog02, Skipanim, {dialog02})
- table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("You choose well, Hog Solo!"), SAY_SAY, 3000}})
+ table.insert(dialog02, {func = AnimSay, args = {green1.gear, string.format(loc("You choose well, %s!"), hero.name), SAY_SAY, 3000}})
table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("I have only 3 hogs available and they are all cadets."), SAY_SAY, 4000}})
table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("As you are more experienced, I want you to lead them to battle."), SAY_SAY, 4000}})
table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("Of course, I will observe the battle and intervene if necessary."), SAY_SAY, 5000}})
@@ -465,7 +465,7 @@
function startBattle()
AnimSetInputMask(0xFFFFFFFF)
- -- Hog Solo weapons
+ -- Hero weapons
AddAmmo(hero.gear, amRope, 2)
AddAmmo(hero.gear, amBazooka, 3)
AddAmmo(hero.gear, amParachute, 1)
@@ -479,14 +479,14 @@
function gameLost()
if chooseToBattle then
- SendStat(siGameResult, loc("The Green Bananas lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), teamB.name))
SendStat(siCustomAchievement, loc("You have to eliminate all the visible enemies."))
SendStat(siCustomAchievement, loc("5 additional enemies will be spawned during the game."))
SendStat(siCustomAchievement, loc("You are in control of all the active ally units."))
SendStat(siCustomAchievement, loc("The ally units share their ammo."))
SendStat(siCustomAchievement, loc("Try to keep as many allies alive as possible."))
else
- SendStat(siGameResult, loc("Hog Solo couldn't escape, try again!"))
+ SendStat(siGameResult, string.format(loc("%s couldn't escape, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to get to the left-most land and remove any enemy hog from there."))
SendStat(siCustomAchievement, loc("You will play every 3 turns."))
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Mon Jan 14 12:35:32 2019 -0500
@@ -22,12 +22,7 @@
local dialog05 = {}
-- mission objectives
local minesTimeText = loc("Mines time: 0 seconds")
-local goals = {
- [dialog01] = {missionName, loc("Exploring the tunnel"), loc("Search for the device with the help of the other hedgehogs ").."|"..loc("Hog Solo has to reach the last crates") .. "|" .. minesTimeText, 1, 4000},
- [dialog02] = {missionName, loc("Exploring the tunnel"), loc("Explore the tunnel with the other hedgehogs and search for the device").."|"..loc("Hog Solo has to reach the last crates") .. "|" .. minesTimeText, 1, 4000},
- [dialog03] = {missionName, loc("Return to the Surface"), loc("Go to the surface!").."|"..loc("Attack Captain Lime before he attacks back").."|"..minesTimeText, 1, 4000},
- [dialog04] = {missionName, loc("Return to the Surface"), loc("Go to the surface!").."|"..loc("Attack the assassins before they attack back").."|"..minesTimeText, 1, 4000},
-}
+local goals
-- crates
local girderCrate = {name = amGirder, x = 1680, y = 1160}
@@ -51,13 +46,16 @@
hero.y = 820
hero.dead = false
green1.name = loc("Captain Lime")
+green1.hat = "war_desertofficer"
green1.x = 1050
green1.y = 820
green1.dead = false
green2.name = loc("Mister Pear")
+green2.hat = "war_britmedic"
green2.x = 1350
green2.y = 820
green3.name = loc("Lady Mango")
+green3.hat = "hair_red"
green3.x = 1450
green3.y = 820
local redHedgehogs = {
@@ -87,7 +85,6 @@
MinesNum = 0
MinesTime = 1
Explosives = 0
- Delay = 3
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
@@ -102,22 +99,37 @@
AddTeam(teamC.name, teamC.color, "bp2", "Island", "Default", "cm_scout")
for i=1,table.getn(redHedgehogs) do
redHedgehogs[i].gear = AddHog(redHedgehogs[i].name, 1, 100, assasinsHats[GetRandom(3)+1])
- AnimSetGearPosition(redHedgehogs[i].gear, 2010 + 50*i, 630)
+ SetGearPosition(redHedgehogs[i].gear, 2010 + 50*i, 630)
end
local assassinsColor = div(GetClanColor(GetHogClan(redHedgehogs[1].gear)), 0x100)
- -- Hog Solo and Green Bananas
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgehog")
- hero.gear = AddHog(hero.name, 0, health, "war_desertgrenadier1")
- AnimSetGearPosition(hero.gear, hero.x, hero.y)
+ -- Hero and Green Bananas
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(health)
+ hero.name = GetHogName(hero.gear)
+ SetHogTeamName(hero.gear, string.format(loc("%s and GB"), teamA.name))
+ teamA.name = GetHogTeamName(hero.gear)
+ SetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
- green2.gear = AddHog(green2.name, 0, 100, "war_britmedic")
- AnimSetGearPosition(green2.gear, green2.x, green2.y)
+ local heroColor = div(GetClanColor(GetHogClan(hero.gear)), 0x100)
+
+ -- companions
+ -- Change companion identity if they have same name as hero
+ -- to avoid confusion.
+ if green2.name == hero.name then
+ green2.name = loc("Green Hog Grape")
+ green2.hat = "war_desertsapper1"
+ elseif green3.name == hero.name then
+ green3.name = loc("Green Hog Grape")
+ green3.hat = "war_desertsapper1"
+ end
+ green2.gear = AddHog(green2.name, 0, 100, green2.hat)
+ SetGearPosition(green2.gear, green2.x, green2.y)
HogTurnLeft(green2.gear, true)
- green3.gear = AddHog(green3.name, 0, 100, "hair_red")
- AnimSetGearPosition(green3.gear, green3.x, green3.y)
+
+ green3.gear = AddHog(green3.name, 0, 100, green3.hat)
+ SetGearPosition(green3.gear, green3.x, green3.y)
HogTurnLeft(green3.gear, true)
- local heroColor = div(GetClanColor(GetHogClan(hero.gear)), 0x100)
-- Captain Lime
-- Returns a color that is as close as possible to the color argument
@@ -141,8 +153,16 @@
-- This is a hack, but it works. See explanation at top of file
local cptnColor = getSimilarColor(heroColor, assassinsColor)
AddTeam(teamB.name, cptnColor, "Cherry", "Island", "Default", "congo-brazzaville")
- green1.gear= AddHog(green1.name, 0, 100, "war_desertofficer")
- AnimSetGearPosition(green1.gear, green1.x, green1.y)
+ green1.gear= AddHog(green1.name, 0, 100, green1.hat)
+ SetGearPosition(green1.gear, green1.x, green1.y)
+
+ -- Populate goals table
+ goals = {
+ [dialog01] = {missionName, loc("Exploring the tunnel"), loc("Search for the device with the help of the other hedgehogs.").."|"..string.format(loc("%s must collect the final crates."), hero.name) .. "|" .. minesTimeText, 1, 4000},
+ [dialog02] = {missionName, loc("Exploring the tunnel"), loc("Explore the tunnel with the other hedgehogs and search for the device.").."|"..string.format(loc("%s must collect the final crates."), hero.name) .. "|" .. minesTimeText, 1, 4000},
+ [dialog03] = {missionName, loc("Return to the Surface"), loc("Go to the surface!").."|"..loc("Attack Captain Lime before he attacks back.").."|"..minesTimeText, 1, 4000},
+ [dialog04] = {missionName, loc("Return to the Surface"), loc("Go to the surface!").."|"..loc("Attack the assassins before they attack back.").."|"..minesTimeText, 1, 4000},
+ }
AnimInit(true)
AnimationSetup()
@@ -159,7 +179,7 @@
AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
AddEvent(onDeviceCrates, {hero.gear}, deviceCrateEvent, {hero.gear}, 0)
- -- Hog Solo and GB weapons
+ -- Hero and Green Bananas weapons
AddAmmo(hero.gear, amSwitch, 100)
-- Assassins weapons
AddAmmo(redHedgehogs[1].gear, amBazooka, 6)
@@ -229,8 +249,12 @@
function onNewTurn()
if not inBattle and CurrentHedgehog == green1.gear then
EndTurn(true)
- elseif CurrentHedgehog == green2.gear or CurrentHedgehog == green3.gear then
- EndTurn(true)
+ elseif (not inBattle) and GetHogTeamName(CurrentHedgehog) == teamA.name then
+ if CurrentHedgehog ~= hero.gear then
+ SwitchHog(hero.gear)
+ end
+ SetTurnTimeLeft(MAX_TURN_TIME)
+ wind()
elseif inBattle then
if CurrentHedgehog == green1.gear and previousHog ~= hero.gear then
EndTurn(true)
@@ -244,9 +268,6 @@
end
SetTurnTimeLeft(20000)
wind()
- elseif not inBattle and CurrentHedgehog == hero.gear then
- SetTurnTimeLeft(MAX_TURN_TIME)
- wind()
else
EndTurn(true)
end
@@ -364,13 +385,13 @@
function heroDeath(gear)
if not ended then
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
- SendStat(siCustomAchievement, loc("To win the game, Hog Solo has to get the bottom crates and come back to the surface."))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
+ SendStat(siCustomAchievement, string.format(loc("To win the game, %s has to get the bottom crates and come back to the surface."), hero.name))
SendStat(siCustomAchievement, loc("You can use the other 2 hogs to assist you."))
SendStat(siCustomAchievement, loc("Do not destroy the crates!"))
if tookPartInBattle then
if permitCaptainLimeDeath then
- SendStat(siCustomAchievement, loc("You'll have to eliminate the Fruit Assassins at the end."))
+ SendStat(siCustomAchievement, string.format(loc("You'll have to eliminate %s at the end."), teamC.name))
sendSimpleTeamRankings({teamC.name, teamA.name})
else
sendSimpleTeamRankings({teamA.name})
@@ -394,7 +415,7 @@
-- Stop hedgehog
SetGearMessage(deviceCrate.collector, 0)
if deviceCrate.collector == hero.gear then
- -- Hog Solo collected the device crate
+ -- Hero collected the device crate
if not tookPartInBattle then
-- Captain Lime turns evil
@@ -453,7 +474,7 @@
saveCompletedStatus(3)
SendStat(siGameResult, loc("Congratulations, you won!"))
SendStat(siCustomAchievement, loc("You retrieved the lost part."))
- SendStat(siCustomAchievement, loc("You defended yourself against the Fruit Assassins."))
+ SendStat(siCustomAchievement, string.format(loc("You defended yourself against %s."), teamC.name))
sendSimpleTeamRankings({teamA.name, teamC.name})
EndGame()
end
@@ -474,10 +495,10 @@
end
function AnimationSetup()
- -- DIALOG 01 - Start, Captain Lime helps Hog Solo because he took part in the battle
+ -- DIALOG 01 - Start, Captain Lime helps the hero because he took part in the battle
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3000}})
- table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"), 5000}})
+ table.insert(dialog01, {func = AnimCaption, args = {hero.gear, string.format(loc("Somewhere else on the planet of fruits, Captain Lime helps %s"), hero.name), 5000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("You fought bravely and you helped us win this battle!"), SAY_SAY, 5000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("So, as promised I have brought you where I think that the device you are looking for is hidden."), SAY_SAY, 7000}})
table.insert(dialog01, {func = AnimSay, args = {green1.gear, loc("I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."), SAY_SAY, 7000}})
@@ -485,10 +506,10 @@
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 500}})
table.insert(dialog01, {func = AnimSwitchHog, args = {hero.gear}})
table.insert(dialog01, {func = ShowMission, args = goals[dialog01]})
- -- DIALOG02 - Start, Hog Solo escaped from the previous battle
+ -- DIALOG02 - Start, hero escaped from the previous battle
AddSkipFunction(dialog02, Skipanim, {dialog02})
table.insert(dialog02, {func = AnimWait, args = {hero.gear, 3000}})
- table.insert(dialog02, {func = AnimCaption, args = {hero.gear, loc("Somewhere else on the planet of fruits Hog Solo gets closer to the device"), 5000}})
+ table.insert(dialog02, {func = AnimCaption, args = {hero.gear, string.format(loc("Somewhere else on the planet of fruits, %s gets closer to the device"), hero.name), 5000}})
table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("You are the one who fled! So, you are alive."), SAY_SAY, 4000}})
table.insert(dialog02, {func = AnimSay, args = {green1.gear, loc("I'm still low on hogs. If you are not afraid I could use a set of extra hands."), SAY_SAY, 4000}})
table.insert(dialog02, {func = AnimWait, args = {hero.gear, 8000}})
@@ -507,7 +528,7 @@
table.insert(dialog03, {func = FollowGear, args = {hero.gear}})
table.insert(dialog03, {func = AnimSay, args = {hero.gear, loc("Hooray! I've found it, now I have to get back to Captain Lime!"), SAY_SAY, 4000}})
table.insert(dialog03, {func = AnimWait, args = {green1.gear, 4000}})
- table.insert(dialog03, {func = AnimSay, args = {green1.gear, loc("This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"), SAY_THINK, 4000}})
+ table.insert(dialog03, {func = AnimSay, args = {green1.gear, string.format(loc("This %s is so naive! I'm going to shoot this fool so I can keep that device for myself!"), hero.name), SAY_THINK, 4000}})
table.insert(dialog03, {func = ShowMission, args = goals[dialog03]})
table.insert(dialog03, {func = makeCptLimeEvil, args = {hero.gear}})
-- DIALOG04 - At crates, hero learns about the Assassins ambush
@@ -565,9 +586,9 @@
escapeHog(deviceCrate.collector)
AddCaption(loc("The device part has been stolen!"))
sendSimpleTeamRankings({teamA.name})
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
- SendStat(siCustomAchievement, loc("Oh no, the Green Bananas have betrayed Hog Solo and stole the anti-gravity device part!"))
- SendStat(siCustomAchievement, loc("Only Hog Solo can be trusted with the crate."))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
+ SendStat(siCustomAchievement, string.format(loc("Oh no, the companions have betrayed %s and stole the anti-gravity device part!"), hero.name))
+ SendStat(siCustomAchievement, string.format(loc("Only %s can be trusted with the crate."), hero.name))
EndGame()
ended = true
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua Mon Jan 14 12:35:32 2019 -0500
@@ -88,19 +88,20 @@
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
-- enemies
local hats = { "Bandit", "fr_apple", "fr_banana", "fr_lemon", "fr_orange",
"fr_pumpkin", "Gasmask", "NinjaFull", "NinjaStraight", "NinjaTriangle" }
- AddTeam(teamC.name, teamC.color, "bp2", "Island", "Default", "cm_bars")
+ teamC.name = AddTeam(teamC.name, teamC.color, "bp2", "Island", "Default", "cm_bars")
for i=1,table.getn(enemiesEven) do
enemiesEven[i].gear = AddHog(enemiesEven[i].name, 1, 100, hats[GetRandom(table.getn(hats))+1])
AnimSetGearPosition(enemiesEven[i].gear, enemiesEven[i].x, enemiesEven[i].y)
end
- AddTeam(teamB.name, teamB.color, "bp2", "Island", "Default", "cm_bars")
+ teamB.name = AddTeam(teamB.name, teamB.color, "bp2", "Island", "Default", "cm_bars")
for i=1,table.getn(enemiesOdd) do
enemiesOdd[i].gear = AddHog(enemiesOdd[i].name, 1, 100, hats[GetRandom(table.getn(hats))+1])
AnimSetGearPosition(enemiesOdd[i].gear, enemiesOdd[i].x, enemiesOdd[i].y)
@@ -260,7 +261,7 @@
-------------- ACTIONS ------------------
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to eliminate all the enemies."))
SendStat(siCustomAchievement, loc("Read the challenge objectives from within the mission for more details."))
sendSimpleTeamRankings({teamB.name, teamC.name, teamA.name})
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua Mon Jan 14 12:35:32 2019 -0500
@@ -88,7 +88,6 @@
MinesNum = 0
MinesTime = 1
Explosives = 0
- Delay = 3
Map = "ice01_map"
Theme = "Snow"
-- Disable Sudden Death
@@ -111,17 +110,18 @@
SaveCampaignVar("HeroHealth", heroHealth)
end
- -- Hog Solo
- AddTeam(teamC.name, teamC.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
+ -- Hero
+ teamC.name = AddMissionTeam(teamC.color)
+ hero.gear = AddMissionHog(heroHealth)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
HogTurnLeft(hero.gear, true)
-- Ally
- AddTeam(teamA.name, teamA.color, "heart", "Island", "Default", "cm_face")
+ teamA.name = AddTeam(teamA.name, teamA.color, "heart", "Island", "Default", "cm_face")
ally.gear = AddHog(ally.name, 0, 100, "war_airwarden02")
AnimSetGearPosition(ally.gear, ally.x, ally.y)
-- Frozen Bandits
- AddTeam(teamB.name, teamB.color, "plant2", "Island", "Default", "cm_pirate")
+ teamB.name = AddTeam(teamB.name, teamB.color, "plant2", "Island", "Default", "cm_pirate")
bandit1.gear = AddHog(bandit1.name, 1, 120, "Santa")
AnimSetGearPosition(bandit1.gear, bandit1.x, bandit1.y)
HogTurnLeft(bandit1.gear, true)
@@ -440,7 +440,7 @@
end
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("To win the game you have to stand next to Thanta."))
SendStat(siCustomAchievement, loc("Most of the time you'll be able to use the freezer only."))
SendStat(siCustomAchievement, loc("Use the bazooka and the flying saucer to get the freezer."))
@@ -470,7 +470,7 @@
end
function thantaDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("Noo, Thanta has to stay alive!"))
SendStat(siCustomAchievement, loc("To win the game you have to go next to Thanta."))
SendStat(siCustomAchievement, loc("Most of the time you'll be able to use the freezer only."))
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua Mon Jan 14 12:35:32 2019 -0500
@@ -81,12 +81,13 @@
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(100)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
-- Ally
- AddTeam(teamB.name, teamB.color, "heart", "Island", "Default", "cm_face")
+ teamB.name = AddTeam(teamB.name, teamB.color, "heart", "Island", "Default", "cm_face")
ally.gear = AddHog(ally.name, 0, 100, "war_airwarden02")
AnimSetGearPosition(ally.gear, ally.x, ally.y)
HogTurnLeft(ally.gear, true)
@@ -126,6 +127,12 @@
AddAnim(dialog01)
end
+function onEndTurn()
+ if not hero.dead and CurrentHedgehog == hero.gear and challengeStarted then
+ heroLost()
+ end
+end
+
function onNewTurn()
if not hero.dead and CurrentHedgehog == ally.gear and challengeStarted then
heroLost()
@@ -166,14 +173,13 @@
end
end
SendStat(siCustomAchievement, string.format(loc("You have used %d flying saucers."), saucersUsed))
- SendStat(siCustomAchievement, string.format(loc("You had %d additional flying saucers left."), saucersLeft))
local leastSaucersRecord = tonumber(GetCampaignVar("IceStadiumLeastSaucersUsed"))
if leastSaucersRecord == nil or saucersUsed < leastSaucersRecord then
SaveCampaignVar("IceStadiumLeastSaucersUsed", tostring(saucersUsed))
end
- SendStat(siPointType, loc("milliseconds"))
+ SendStat(siPointType, "!TIME")
SendStat(siPlayerKills, totalTime, GetHogTeamName(hero.gear))
SaveCampaignVar("Mission6Won", "true")
checkAllMissionsCompleted()
@@ -185,6 +191,13 @@
local time = totalTime - TurnTimeLeft
local timePrinted = time / 1000
SetTeamLabel(teamA.name, string.format(loc("%.1fs"), timePrinted))
+ if TurnTimeLeft <= 0 then
+ local wp = waypoints[currentWaypoint-1]
+ if wp ~= nil then
+ DeleteVisualGear(wp.gear)
+ DeleteVisualGear(wp.gear2)
+ end
+ end
end
end
@@ -251,6 +264,9 @@
end
function placeNextWaypoint()
+ if gameEnded then
+ return
+ end
if currentWaypoint > 1 then
local wp = waypoints[currentWaypoint-1]
DeleteVisualGear(wp.gear)
@@ -308,7 +324,7 @@
end
function checkIfHeroInWaypoint()
- if not hero.dead then
+ if (not hero.dead) and (TurnTimeLeft > 0) then
local wp = waypoints[currentWaypoint-1]
if gearIsInCircle(hero.gear, wp.x, wp.y, radius+4, false) then
SetWind(GetRandom(201)-100)
@@ -325,5 +341,6 @@
SendStat(siCustomAchievement, loc("Green double rings also give you a new flying saucer."))
SendStat(siCustomAchievement, loc("Use the attack key twice to change the flying saucer while being in air."))
sendSimpleTeamRankings({teamA.name})
+ gameEnded = true
EndGame()
end
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua Mon Jan 14 12:35:32 2019 -0500
@@ -109,19 +109,19 @@
Explosives = 0
HealthDecrease = 0
WaterRise = 0
- Delay = 5
Map = "moon01_map"
Theme = "Cheese" -- Because ofc moon is made of cheese :)
- -- Hog Solo
- AddTeam(teamD.name, teamD.color, "Simple", "Island", "Default", "hedgewars")
+ -- Hero
+ teamD.name = AddMissionTeam(teamD.color)
if tonumber(GetCampaignVar("HeroHealth")) then
- hero.gear = AddHog(hero.name, 0, tonumber(GetCampaignVar("HeroHealth")), "war_desertgrenadier1")
+ hero.gear = AddMissionHog(tonumber(GetCampaignVar("HeroHealth")))
else
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ hero.gear = AddMissionHog(100)
end
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
-- PAotH
- AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
+ teamA.name = AddTeam(teamA.name, teamA.color, "Earth", "Island", "Default", "cm_galaxy")
paoth1.gear = AddHog(paoth1.name, 0, 100, "scif_2001O")
AnimSetGearPosition(paoth1.gear, paoth1.x, paoth1.y)
HogTurnLeft(paoth1.gear, true)
@@ -135,12 +135,12 @@
AnimSetGearPosition(paoth4.gear, paoth4.x, paoth4.y)
HogTurnLeft(paoth4.gear, true)
-- Professor
- AddTeam(teamC.name, teamC.color, "star", "Island", "Default", "cm_sine")
+ teamC.name = AddTeam(teamC.name, teamC.color, "star", "Island", "Default", "cm_sine")
professor.gear = AddHog(professor.name, 0, professor.health, "tophats")
AnimSetGearPosition(professor.gear, professor.x, professor.y)
HogTurnLeft(professor.gear, true)
-- Minions
- AddTeam(teamB.name, teamB.color, "eyecross", "Island", "Default", "cm_sine")
+ teamB.name = AddTeam(teamB.name, teamB.color, "eyecross", "Island", "Default", "cm_sine")
minion1.gear = AddHog(minion1.name, 1, 50, "Gasmask")
AnimSetGearPosition(minion1.gear, minion1.x, minion1.y)
HogTurnLeft(minion1.gear, true)
@@ -173,7 +173,7 @@
AnimWait(hero.gear, 3000)
FollowGear(hero.gear)
- ShowMission(campaignName, missionName, loc("Hog Solo has to refuel his saucer.")..
+ ShowMission(campaignName, missionName, string.format(loc("%s has to refuel the saucer."), hero.name)..
"|"..loc("Rescue the imprisoned PAotH team and get the fuel!"), -amSkip, 0)
AddAmmo(minion1.gear, amDEagle, 10)
@@ -362,7 +362,7 @@
end
function heroDeath(gear)
- SendStat(siGameResult, loc("Hog Solo lost, try again!"))
+ SendStat(siGameResult, string.format(loc("%s lost, try again!"), hero.name))
SendStat(siCustomAchievement, loc("You have to get the weapons and rescue the PAotH researchers."))
sendSimpleTeamRankings({teamC.name, teamB.name, teamD.name, teamA.name})
EndGame()
@@ -388,7 +388,7 @@
function victory()
AnimCaption(hero.gear, loc("Congrats! You won!"), 6000)
saveCompletedStatus(1)
- SendStat(siGameResult, loc("Hog Solo wins, congratulations!"))
+ SendStat(siGameResult, string.format(loc("%s wins, congratulations!"), hero.name))
sendSimpleTeamRankings({teamD.name, teamA.name, teamC.name, teamB.name})
SaveCampaignVar("CosmosCheckPoint", "5") -- hero got fuels
resetCheckpoint() -- reset this mission
@@ -474,7 +474,7 @@
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Near a PAotH base on the moon ..."), 4000}})
- table.insert(dialog01, {func = AnimSay, args = {paoth1.gear, loc("Hey, Hog Solo! Finally you have come!"), SAY_SAY, 2000}})
+ table.insert(dialog01, {func = AnimSay, args = {paoth1.gear, string.format(loc("Hey, %s! Finally you have come!"), hero.name), SAY_SAY, 2000}})
table.insert(dialog01, {func = AnimSay, args = {paoth1.gear, loc("It seems that Professor Hogevil has prepared for your arrival!"), SAY_SAY, 4000}})
table.insert(dialog01, {func = AnimSay, args = {paoth1.gear, loc("He has captured the rest of the PAotH team and awaits to capture you!"), SAY_SAY, 5000}})
table.insert(dialog01, {func = AnimSay, args = {paoth1.gear, loc("We have to hurry! Are you armed?"), SAY_SAY, 4300}})
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,6 +1,6 @@
------------------- ABOUT ----------------------
--
--- Hog Solo has to catch the other hog in order
+-- The hero has to catch the other hog in order
-- to get informations about the origin of Pr. Hogevil
HedgewarsScriptLoad("/Scripts/Locale.lua")
@@ -13,9 +13,16 @@
local challengeObjectives = loc("Use the rope in order to catch the blue hedgehog").."|"..
loc("You have to stand very close to him")
local currentPosition = 1
+local raceSectionStarted = false
+local runnerCaught = false
local previousTimeLeft = 0
local startChallenge = false
local winningTime = nil
+local currentTime = 0
+local runnerTime = 0
+local record
+local lostGame = false
+local heroHurt = false
-- dialogs
local dialog01 = {}
local dialog02 = {}
@@ -27,17 +34,21 @@
local hero = {
name = loc("Hog Solo"),
x = 1300,
- y = 850
+ y = 948
}
local runner = {
name = loc("Crazy Runner"),
places = {
- {x = 1400,y = 850, turnTime = 0},
+ {x = 1400,y = 904, turnTime = 0},
{x = 3880,y = 33, turnTime = 30000},
{x = 250,y = 1780, turnTime = 25000},
{x = 3850,y = 1940, turnTime = 20000},
}
}
+local runnerTimeTotal = 0
+for i=1, #runner.places do
+ runnerTimeTotal = runnerTimeTotal + runner.places[i].turnTime
+end
-- teams
local teamA = {
name = loc("Hog Solo"),
@@ -63,16 +74,18 @@
WaterRise = 0
HealthDecrease = 0
- -- Hog Solo
- AddTeam(teamA.name, teamA.color, "Simple", "Island", "Default", "hedgewars")
- hero.gear = AddHog(hero.name, 0, 1, "war_desertgrenadier1")
+ -- Hero
+ teamA.name = AddMissionTeam(teamA.color)
+ hero.gear = AddMissionHog(1)
+ hero.name = GetHogName(hero.gear)
AnimSetGearPosition(hero.gear, hero.x, hero.y)
-- Crazy Runner
- AddTeam(teamB.name, teamB.color, "ring", "Island", "Default", "cm_sonic")
+ teamB.name = AddTeam(teamB.name, teamB.color, "ring", "Island", "Default", "cm_sonic")
runner.gear = AddHog(runner.name, 0, 100, "sth_Sonic")
AnimSetGearPosition(runner.gear, runner.places[1].x, runner.places[1].y)
HogTurnLeft(runner.gear, true)
+ record = tonumber(GetCampaignVar("FastestBlueHogCatch"))
initCheckpoint("moon02")
AnimInit(true)
@@ -84,7 +97,11 @@
FollowGear(hero.gear)
AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
+ AddEvent(onRunnerDeath, {runner.gear}, runnerDeath, {runner.gear}, 0)
+ if record ~= nil then
+ goals[dialog01][3] = goals[dialog01][3] .. "|" .. string.format(loc("Personal best: %.3f seconds"), record/1000)
+ end
AddAmmo(hero.gear, amRope, 1)
SendHealthStatsOff()
@@ -110,17 +127,32 @@
if startChallenge and currentPosition < 5 then
if CurrentHedgehog ~= hero.gear then
EndTurn(true)
+ runnerTime = runnerTime + runner.places[currentPosition].turnTime
+ SetTeamLabel(teamB.name, string.format(loc("%.1fs"), runnerTime/1000))
else
- if GetAmmoCount(hero.gear, amRope) == 0 then
- lose()
- end
SetWeapon(amRope)
SetTurnTimeLeft(runner.places[currentPosition].turnTime + previousTimeLeft)
previousTimeLeft = 0
+ if currentPosition > 1 then
+ raceSectionStarted = true
+ end
+ runnerCaught = false
end
end
end
+function onEndTurn()
+ if raceSectionStarted and currentPosition > 1 and currentPosition < 5 then
+ if CurrentHedgehog == hero.gear and (not runnerCaught) and (not heroHurt) then
+ -- sndBoring played manually because lose calls EndGame, which suppresses
+ -- the taunt.
+ PlaySound(sndBoring, hero.gear)
+ lose()
+ end
+ end
+ raceSectionStarted = false
+end
+
function onGameTick()
AnimUnWait()
if ShowAnimation() == false then
@@ -128,9 +160,15 @@
end
ExecuteAfterAnimations()
CheckEvents()
+ if GetHealth(hero.gear) and CurrentHedgehog == hero.gear and startChallenge and currentPosition < 5 and currentPosition > 1 and ReadyTimeLeft == 0 and band(GetState(CurrentHedgehog), gstHHDriven) ~= 0 then
+ currentTime = currentTime + 1
+ end
end
function onGameTick20()
+ if startChallenge and currentPosition < 5 and currentPosition > 1 and CurrentHedgehog == hero.gear and ReadyTimeLeft == 0 and band(GetState(CurrentHedgehog), gstHHDriven) ~= 0 then
+ SetTeamLabel(teamA.name, string.format(loc("%.1fs"), currentTime/1000))
+ end
if GetHealth(hero.gear) and startChallenge and isHeroNextToRunner() and currentPosition < 5 then
moveRunner()
end
@@ -142,6 +180,12 @@
end
end
+function onGearDamage(gear)
+ if gear == hero.gear then
+ heroHurt = true
+ end
+end
+
-------------- EVENTS ------------------
function onHeroDeath(gear)
@@ -151,12 +195,23 @@
return false
end
+function onRunnerDeath(gear)
+ if not GetHealth(runner.gear) then
+ return true
+ end
+ return false
+end
+
-------------- ACTIONS ------------------
function heroDeath(gear)
lose()
end
+function runnerDeath(gear)
+ loseRunnerDeath()
+end
+
-------------- ANIMATIONS ------------------
function Skipanim(anim)
@@ -181,7 +236,7 @@
table.insert(dialog01, {func = AnimSay, args = {runner.gear, loc("Let's go!"), SAY_SAY, 2000}})
table.insert(dialog01, {func = ShowMission, args = goals[dialog01]})
table.insert(dialog01, {func = moveRunner, args = {}})
- -- DIALOG 02 - Hog Solo story
+ -- DIALOG 02 - Professor Hogevil story
AddSkipFunction(dialog02, Skipanim, {dialog02})
table.insert(dialog02, {func = AnimWait, args = {hero.gear, 3200}})
table.insert(dialog02, {func = AnimCaption, args = {hero.gear, loc("The truth about Professor Hogevil"), 5000}})
@@ -218,13 +273,9 @@
AddAnim(dialog02)
-- Update time record
- local baseTime = 0
- for i=1, #runner.places do
- baseTime = baseTime + runner.places[i].turnTime
- end
- winningTime = baseTime - TurnTimeLeft
+ winningTime = runnerTimeTotal - TurnTimeLeft
+ SetTeamLabel(teamA.name, string.format(loc("%.3fs"), winningTime/1000))
SendStat(siCustomAchievement, string.format(loc("You have managed to catch the blue hedgehog in %.3f seconds."), winningTime/1000))
- local record = tonumber(GetCampaignVar("FastestBlueHogCatch"))
if record ~= nil and winningTime >= record then
SendStat(siCustomAchievement, string.format(loc("Your personal best time so far: %.3f seconds"), record/1000))
end
@@ -242,11 +293,11 @@
end
AddAmmo(hero.gear, amRope, 1)
if currentPosition ~= 1 then
- PlaySound(sndVictory)
if currentPosition > 1 and currentPosition < 4 then
AnimCaption(hero.gear, loc("Go, get him again!"), 3000)
AnimSay(runner.gear, loc("You got me!"), SAY_SAY, 3000)
end
+ runnerCaught = true
previousTimeLeft = TurnTimeLeft
end
currentPosition = currentPosition + 1
@@ -257,19 +308,44 @@
end
function lose()
+ if lostGame then
+ return
+ end
+ lostGame = true
SendStat(siGameResult, loc("Too slow! Try again ..."))
SendStat(siCustomAchievement, loc("You have to catch the other hog 3 times."))
SendStat(siCustomAchievement, loc("The time that you have left when you reach the blue hedgehog will be added to the next turn."))
SendStat(siCustomAchievement, loc("Each turn you'll have only one rope to use."))
SendStat(siCustomAchievement, loc("You'll lose if you die or if your time is up."))
- sendSimpleTeamRankings({teamB.name, teamA.name})
+ SendStat(siPointType, "!TIME")
+ SendStat(siPlayerKills, tostring(runnerTimeTotal), teamB.name)
+ SendStat(siPointType, "!EMPTY")
+ SendStat(siPlayerKills, "0", teamA.name)
+ EndGame()
+end
+
+function loseRunnerDeath()
+ if lostGame then
+ return
+ end
+ lostGame = true
+ SendStat(siGameResult, loc("Race failed!"))
+ SendStat(siCustomAchievement, loc("The other hog has died, he should have survived!"))
+ SendStat(siCustomAchievement, loc("You have to catch the other hog 3 times."))
+ SendStat(siTeamRank, "1")
+ SendStat(siPlayerKills, tostring(GetTeamStats(teamB.name).Kills), teamB.name)
+ SendStat(siTeamRank, "1")
+ SendStat(siPlayerKills, tostring(GetTeamStats(teamA.name).Kills), teamA.name)
EndGame()
end
function win()
SendStat(siGameResult, loc("Congratulations, you are the fastest!"))
-- siCustomAchievements were added earlier
- sendSimpleTeamRankings({teamA.name, teamB.name})
+ SendStat(siPointType, "!TIME")
+ SendStat(siPlayerKills, tostring(winningTime), teamA.name)
+ SendStat(siPointType, "!TIME")
+ SendStat(siPlayerKills, tostring(runnerTimeTotal), teamB.name)
SaveCampaignVar("Mission13Won", "true")
checkAllMissionsCompleted()
EndGame()
--- a/share/hedgewars/Data/Missions/Challenge/Basic_Training_-_Sniper_Rifle.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Challenge/Basic_Training_-_Sniper_Rifle.lua Mon Jan 14 12:35:32 2019 -0500
@@ -13,6 +13,7 @@
-- about translations.
-- We can use the function loc(text) to localize a string.
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Locale.lua")
-- This variable will hold the number of destroyed targets.
@@ -52,7 +53,7 @@
local delayedTargetTargetX, delayedTargetY
-- Team name of the player's team
-local playerTeamName = loc("Sniperz")
+local playerTeamName
-- This is a custom function to make it easier to
-- spawn more targets with just one line of code
@@ -123,8 +124,6 @@
MinesNum = 0
-- The number of explosives being placed
Explosives = 0
- -- The delay between each round
- Delay = 0
-- The map to be played
Map = "Ropes"
-- The theme to be used
@@ -134,9 +133,9 @@
HealthDecrease = 0
-- Create the player team
- AddTeam(playerTeamName, -1, "Simple", "Island", "Default", "cm_crosshair")
+ playerTeamName = AddMissionTeam(-1)
-- And add a hog to it
- player = AddHog(loc("Hunter"), 0, 1, "Sniper")
+ player = AddMissionHog(1)
SetGearPosition(player, 602, 1465)
end
@@ -149,13 +148,16 @@
-- Spawn the first target.
spawnTarget(860,1020)
+ local highscore = getReadableChallengeRecord("Highscore")
-- Show some nice mission goals.
-- Parameters are: caption, sub caption, description,
-- extra text, icon and time to show.
-- A negative icon parameter (-n) represents the n-th weapon icon
-- A positive icon paramter (n) represents the (n+1)-th mission icon
-- A timeframe of 0 is replaced with the default time to show.
- ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amSniperRifle, 0)
+ ShowMission(loc("Sniper Training"), loc("Aiming Practice"),
+ loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission.")
+ .. "|" .. highscore, -amSniperRifle, 0)
-- Displayed initial player score
SetTeamLabel(playerTeamName, "0")
@@ -191,12 +193,8 @@
-- ... end the game ...
generateStats()
EndGame()
- else
- -- ... or just lower the timer by 1.
- -- Reset the time left to stop the timer
- SetTurnTimeLeft(time_goal)
end
- end_timer = end_timer - 20
+ end_timer = end_timer - 20
end
end
@@ -383,9 +381,9 @@
AddCaption(loc("Last Target!"));
spawnTarget(3480,1200)
end
- else
- if not game_lost then
+ elseif not game_lost then
-- Victory!
+ SaveMissionVar("Won", "true")
AddCaption(loc("Victory!"), capcolDefault, capgrpGameState)
ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
-- Also let the hogs shout "victory!"
@@ -399,7 +397,9 @@
-- Save the time left so we may keep it.
time_goal = TurnTimeLeft
- end
+
+ -- Freeze the clock because the challenge has been completed
+ SetTurnTimePaused(true)
end
SetTeamLabel(playerTeamName, getTargetScore())
end
@@ -432,7 +432,8 @@
SendStat(siCustomAchievement, string.format(loc("You have made %d shots."), shots))
end_score_overall = end_score_targets
end
- SendStat(siPointType, loc("points"))
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(end_score_overall), playerTeamName)
+ updateChallengeRecord("Highscore", end_score_overall)
end
--- a/share/hedgewars/Data/Missions/Challenge/ClimbHome.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Challenge/ClimbHome.lua Mon Jan 14 12:35:32 2019 -0500
@@ -23,8 +23,8 @@
Explosives = 0
MineDudPercent = 0
Map = "ClimbHome"
- AddTeam(loc("Lonely Hog"), -1, "bubble", "Island", "Default")
- player = AddHog(loc("Climber"), 0, 1, "NoHat")
+ AddMissionTeam(-1)
+ player = AddMissionHog(1)
if showWaterStats then
dummyHog = AddHog(" ", 0, 1, "NoHat")
HH[dummyHog] = nil
--- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_RCPlane_Challenge.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_RCPlane_Challenge.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,7 +1,9 @@
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Locale.lua")
HedgewarsScriptLoad("/Scripts/Achievements.lua")
local player = nil
+local playerTeamName = nil
local RCGear = nil
local planesUsed = 0
local planeTimer = 0
@@ -34,8 +36,8 @@
MinesNum = 0
Explosives = 0
- AddTeam(loc("Wannabe Flyboys"), -1, "Simple", "Island", "Default", "cm_scout")
- player = AddHog(loc("Ace"), 0, 80, "Gasmask")
+ playerTeamName = AddMissionTeam(-1)
+ player = AddMissionHog(80)
SetGearPosition(player, 1380, 1500)
end
@@ -46,15 +48,16 @@
SendHealthStatsOff()
+ local recordInfo = getReadableChallengeRecord("Lowscore")
ShowMission (
loc("RC Plane Challenge"),
loc("Challenge"),
loc("Collect or destroy all the health crates.") .. "|" ..
loc("Compete to use as few planes as possible!") .. "|" ..
- "", -amRCPlane, 4000
+ recordInfo, -amRCPlane, 4000
)
- SetTeamLabel(loc("Wannabe Flyboys"), "0")
+ SetTeamLabel(playerTeamName, "0")
PlaceGirder(2192, 508, 6)
PlaceGirder(2192, 670, 6)
@@ -287,7 +290,7 @@
if GetGearType(gear) == gtRCPlane then
RCGear = gear
planesUsed = planesUsed + 1
- SetTeamLabel(loc("Wannabe Flyboys"), tostring(planesUsed))
+ SetTeamLabel(playerTeamName, tostring(planesUsed))
planeTimer = 0
missiles = 0
end
@@ -407,6 +410,8 @@
SendStat(siGameResult, loc("You have finished the challenge!"))
SendStat(siCustomAchievement, string.format(loc("You have used %d RC planes."), planesUsed))
end
+ SaveMissionVar("Won", "true")
+ updateChallengeRecord("Lowscore", planesUsed)
if(totalMissiles > 1) then
SendStat(siCustomAchievement, string.format(loc("You have dropped %d missiles."), totalMissiles))
@@ -438,7 +443,7 @@
PlaySound(sound, player)
- DismissTeam(loc("Wannabe Flyboys"))
+ DismissTeam(playerTeamName)
EndGame()
end
--- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_Rope_Knock_Challenge.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_Rope_Knock_Challenge.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,7 +1,9 @@
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Locale.lua")
local hhs = {}
local missionWon = nil
+local missionEndHandled = false
local endTimer = 1000
local hogsKilled = 0
local finishTime
@@ -71,7 +73,7 @@
}
-local playerTeamName = loc("Wannabe Shoppsta")
+local playerTeamName
function GetKillScore()
return math.ceil((hogsKilled / 16)*6000)
@@ -94,9 +96,13 @@
SendStat(siGameResult, loc("Challenge over!"))
local score = GetKillScore()
SendStat(siCustomAchievement, string.format(loc("You have killed %d of 16 hedgehogs (+%d points)."), hogsKilled, score))
- SendStat(siPointType, loc("points"))
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(score), playerTeamName)
PlaySound(sndHellish)
+
+ -- Update highscore
+ updateChallengeRecord("Highscore", score)
+
EndGame()
end
@@ -112,10 +118,13 @@
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(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(score), playerTeamName)
SetTeamLabel(playerTeamName, tostring(score))
+ -- Update highscore
+ updateChallengeRecord("Highscore", score)
+
if hhs[0] and GetHealth(hhs[0]) then
SetEffect(hhs[0], heInvulnerable, 1)
end
@@ -154,7 +163,6 @@
GameFlags = gfBorder + gfSolidLand
TurnTime = 180 * 1000
- Delay = 500
Map = "Ropes"
Theme = "Eyes"
@@ -166,8 +174,8 @@
MinesNum = 0
Explosives = 0
- AddTeam(playerTeamName, -1, "money", "Island", "Default", "cm_shoppa")
- hhs[0] = AddHog(loc("Ace"), 0, 1, "Gasmask")
+ playerTeamName = AddMissionTeam(-1)
+ hhs[0] = AddMissionHog(1)
SetGearPosition(player, 1380, 1500)
AddTeam(loc("Unsuspecting Louts"), -2, "Simple", "Island", "Default", "cm_face")
@@ -188,11 +196,17 @@
function onGameStart()
SendHealthStatsOff()
+ local recordInfo = getReadableChallengeRecord("Highscore")
+ if recordInfo == nil then
+ recordInfo = ""
+ else
+ recordInfo = "|" .. recordInfo
+ end
ShowMission (
loc("Rope-knocking Challenge"),
loc("Challenge"),
loc("Use the rope to knock your enemies to their doom.") .. "|" ..
- loc("Finish this challenge as fast as possible to earn bonus points."),
+ loc("Finish this challenge as fast as possible to earn bonus points.").. recordInfo,
-amRope, 4000)
SetTeamLabel(playerTeamName, "0")
@@ -235,10 +249,14 @@
EndGame()
end
- if missionWon == true then
- AddCaption(loc("Victory!"), capcolDefault, capgrpGameState)
- else
- AddCaption(loc("Challenge over!"), capcolDefault, capgrpGameState)
+ if not missionEndHandled then
+ if missionWon == true then
+ SaveMissionVar("Won", "true")
+ AddCaption(loc("Victory!"), capcolDefault, capgrpGameState)
+ else
+ AddCaption(loc("Challenge over!"), capcolDefault, capgrpGameState)
+ end
+ missionEndHandled = true
end
end
--- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_That_Sinking_Feeling.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_That_Sinking_Feeling.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,9 +1,11 @@
HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Achievements.lua")
local player
+local playerTeamName, haplessTeamName
local hh = {}
local hhCount = 8
local GameOver = false
@@ -15,6 +17,17 @@
local watGear = nil
local cinematic = false
+function printMission()
+ local highscore = tonumber(GetMissionVar("Highscore"))
+ local show = (type(highscore) == "number") and (highscore > 0)
+ local recordInfo = ""
+ if show then
+ recordInfo = getReadableChallengeRecord("Highscore")
+ end
+ ShowMission(loc("That Sinking Feeling"), loc("Challenge"), loc("Save as many hogs as possible!")
+ .. "|" .. recordInfo, 4, 0)
+end
+
-- allow skipping of the intro via hitting precise key
function onPrecise()
if introStage < 100 then
@@ -22,7 +35,7 @@
genCounter = 0
FollowGear(CurrentHedgehog)
AddCaption(loc("Good luck out there!"))
- ShowMission(loc("That Sinking Feeling"), loc("Challenge"), loc("Save as many hapless hogs as possible!"), 4, 0)
+ printMission()
SetInputMask(0xFFFFFFFF)
end
end
@@ -36,12 +49,12 @@
MinesNum = 0
MinesTime = 3000
Explosives = 0
- Delay = 10
Map = "Islands"
Theme = "City"
- SuddenDeathTurns = 1
+ HealthDecrease = 0
+ WaterRise = 0
- AddTeam(loc("Hapless Hogs"), -1, "Simple", "Island", "Default")
+ haplessTeamName = AddTeam(loc("Hapless Hogs"), -1, "Simple", "Island", "Default")
hh[0] = AddHog(loc("Sinky"), 1, 100, "fr_lemon")
hh[1] = AddHog(loc("Drowner"), 1, 100, "fr_orange")
hh[2] = AddHog(loc("Heavy"), 1, 100, "dish_Teapot")
@@ -51,8 +64,8 @@
hh[6] = AddHog(loc("Sponge"), 1, 100, "sf_chunli")
hh[7] = AddHog(loc("Deadweight"), 1, 100, "dish_Teacup")
- AddTeam(loc("Nameless Heroes"), -1, "Simple", "Island", "Default", "cm_crossedswords")
- player = AddHog(loc("The Nameless One"), 0, 1, "NoHat")
+ playerTeamName = AddMissionTeam(-1)
+ player = AddMissionHog(1)
SetGearPosition(player, 3992, 733)
SetGearPosition(hh[0], 938, 1369)
@@ -70,11 +83,12 @@
function onGameStart()
- cinematic = true
- SetCinematicMode(true)
+ cinematic = true
+ SetCinematicMode(true)
SendHealthStatsOff()
- ShowMission(loc("That Sinking Feeling"), loc("Challenge"), loc("Save as many hapless hogs as possible!"), 4, 1)
+ printMission()
+ HideMission()
HogTurnLeft(hh[0], false)
HogTurnLeft(hh[1], true)
@@ -200,7 +214,7 @@
if genCounter == 2000 then
introStage = 110
FollowGear(CurrentHedgehog)
- ShowMission(loc("That Sinking Feeling"), loc("User Challenge"), loc("Save as many hapless hogs as possible!"), 4, 0)
+ ShowMission(loc("That Sinking Feeling"), loc("User Challenge"), loc("Save as many hogs as possible!"), 4, 0)
SetInputMask(0xFFFFFFFF)
end
@@ -227,8 +241,8 @@
GameOver = true
AddCaption(loc("The flood has stopped! Challenge over."))
SendStat(siGameResult, loc("Challenge completed!"))
- SendStat(siPointType, loc("rescues"))
- SendStat(siPlayerKills, tostring(hhCount), loc("Nameless Heroes"))
+ SendStat(siPointType, "!POINTS")
+ SendStat(siPlayerKills, tostring(hhCount), playerTeamName)
-- Do not count drowning hedgehogs
local hhLeft = hhCount
@@ -239,9 +253,13 @@
end
end
- SendStat(siCustomAchievement, string.format(loc("You saved %d of 8 Hapless Hogs."), hhLeft))
+ SendStat(siCustomAchievement, string.format(loc("You saved %d of 8 hegehogs."), hhLeft))
+
+ -- Update highscore
+ updateChallengeRecord("Highscore", hhLeft)
if hhLeft == 8 then
+ SaveMissionVar("Won", "true")
awardAchievement(loc("Lively Lifeguard"))
end
EndGame()
@@ -275,9 +293,9 @@
function onGearDelete(gear)
if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == loc("Hapless Hogs") then
+ if GetHogTeamName(gear) == haplessTeamName then
hhCount = hhCount - 1
- AddCaption(string.format(loc("%d Hapless Hogs left"), hhCount))
+ AddCaption(string.format(loc("Hedgehogs left: %d"), hhCount))
end
end
@@ -290,8 +308,11 @@
else
SendStat(siCustomAchievement, loc("You haven't rescued anyone."))
end
- SendStat(siPointType, loc("points"))
- SendStat(siPlayerKills, "0", loc("Nameless Heroes"))
+ SendStat(siPointType, "!POINTS")
+ SendStat(siPlayerKills, "0", playerTeamName)
+ local highscore = tonumber(GetMissionVar("Highscore"))
+ show = (type(highscore) == "number") and (highscore > 0)
+ updateChallengeRecord("Highscore", 0, show)
SendStat(siGameResult, loc("Disqualified!"))
GameOver = true
--- a/share/hedgewars/Data/Missions/Scenario/Bazooka_Battlefield.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/Bazooka_Battlefield.lua Mon Jan 14 12:35:32 2019 -0500
@@ -14,24 +14,16 @@
[amBazooka] = { count = 9 },
},
teams = {
- { name = loc("Pincer Knights"),
- flag = "cm_swordshield",
- grave = "Grave",
+ { isMissionTeam = true,
hogs = {
{
- name = loc("Left Tong"),
health = 100,
x = 276, y = 825,
- botLevel = 0,
- hat = "knight",
ammo = { [amSwitch] = 100 },
},
{
- name = loc("Right Tong"),
health = 100,
x = 1794, y = 716,
- botLevel = 0,
- hat = "knight",
faceLeft = true,
},
}, },
--- a/share/hedgewars/Data/Missions/Scenario/Big_Armory.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/Big_Armory.lua Mon Jan 14 12:35:32 2019 -0500
@@ -28,16 +28,12 @@
* relevant GameFlag: gfDisableLandObjects ]]
},
teams = {
- { name = loc("Pro Killers"),
+ { isMissionTeam = true,
clanID = 0,
- flag = "cm_scout",
- grave = "Bone",
hogs = {
{
- name = loc("Ultrasoldier"),
health = 100,
x = 543, y = 1167,
- hat = "Terminator_Glasses",
ammo = heroAmmo,
}
}, },
--- a/share/hedgewars/Data/Missions/Scenario/Tentacle_Terror.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/Tentacle_Terror.lua Mon Jan 14 12:35:32 2019 -0500
@@ -16,16 +16,12 @@
},
wind = -50,
teams = {
- { name = loc("Hell Army"),
- flag = "cm_hellish",
- grave = "Simple_reversed",
+ { isMissionTeam = true,
hogs = { {
- name = loc("Lord Evil"),
faceLeft = true,
health = 30,
x = 1210, y = 1446,
- hat = "Evil",
- botLevel = 0 } }
+ } }
},
{ name = loc("Heavenly Defense"),
flag = "cm_fcw",
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Bamboo_Thicket.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Bamboo_Thicket.lua Mon Jan 14 12:35:32 2019 -0500
@@ -24,8 +24,8 @@
WaterRise = 0
GameFlags = gfDisableWind
- AddTeam(loc("Pathetic Resistance"), -1, "Plinko", "Island", "Default", "cm_yinyang")
- player = AddHog(loc("Ikeda"), 0, 10, "StrawHat")
+ AddMissionTeam(-1)
+ player = AddMissionHog(10)
AddTeam(loc("Cybernetic Empire"), -6, "ring", "Island", "Robot", "cm_cyborg")
enemy = AddHog(loc("Unit 835"), 1, 10, "cyborg1")
@@ -79,6 +79,7 @@
if (gear == enemy) then
+ SaveMissionVar("Won", "true")
ShowMission(loc("Bamboo Thicket"), loc("MISSION SUCCESSFUL"), loc("Congratulations!"), 0, 0)
if (turnNumber < 6) and (firedShell == false) then
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Dangerous_Ducklings.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Dangerous_Ducklings.lua Mon Jan 14 12:35:32 2019 -0500
@@ -3,6 +3,7 @@
HedgewarsScriptLoad("/Scripts/Achievements.lua")
local player = nil -- This variable will point to the hog's gear
+local playerTeamName, enemyTeamName = nil, nil
local instructor = nil
local enemy = nil
@@ -24,18 +25,17 @@
CaseFreq = 0 -- The frequency of crate drops
MinesNum = 0 -- The number of mines being placed
Explosives = 0 -- The number of explosives being placed
- Delay = 0 -- The delay between each round
Map = "Bath" -- The map to be played
Theme = "Bath" -- The theme to be used
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Bloody Rookies"), -1, "Rubberduck", "Island", "Default", "cm_duckhead")
- player = AddHog(loc("Hunter"), 0, 1, "NoHat")
+ playerTeamName = AddMissionTeam(-1)
+ player = AddMissionHog(1)
instructor = AddHog(loc("Instructor"), 0, 100, "sf_vega")
- AddTeam(loc("Blue Team"), -2, "bubble", "Island", "Default", "somalia")
+ enemyTeamName = AddTeam(loc("Blue Team"), -2, "bubble", "Island", "Default", "somalia")
enemy = AddHog(loc("Filthy Blue"), 1, 100, "Skull")
SetGearPosition(player,146,902)
@@ -55,7 +55,7 @@
FollowGear(player)
- ShowMission(loc("Dangerous Ducklings"), loc("Scenario"), loc("Eliminate the Blue Team before the time runs out."), -amRope, 5000);
+ ShowMission(loc("Dangerous Ducklings"), loc("Scenario"), loc("Eliminate the enemy before the time runs out."), -amRope, 5000);
end
@@ -113,9 +113,8 @@
endTimer = endTimer + 1
if (CurrentHedgehog ~= nil) and (CurrentHedgehog == instructor) then
if endTimer >= 3000 then
- --SetHealth(instructor,0)
SetTurnTimeLeft(1)
- DismissTeam(loc("Bloody Rookies"))
+ DismissTeam(playerTeamName)
end
ShowMission(loc("Dangerous Ducklings"), loc("MISSION FAILED"), loc("You've failed. Try again."), -amRope, 5000);
end
@@ -138,11 +137,13 @@
HogSay(player, loc("See ya!"), SAY_THINK)
Retreat(3000)
awardAchievement(loc("Naughty Ninja"))
- DismissTeam(loc("Blue Team"))
+ DismissTeam(enemyTeamName)
gameWon = true
+ SaveMissionVar("Won", "true")
elseif gear == enemy then
HogSay(player, loc("Enjoy the swim..."), SAY_THINK)
gameWon = true
+ SaveMissionVar("Won", "true")
Retreat(3000)
end
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Diver.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Diver.lua Mon Jan 14 12:35:32 2019 -0500
@@ -19,7 +19,6 @@
MinesNum = 0 -- The number of mines being placed
MinesTime = 1000
Explosives = 0 -- The number of explosives being placed
- Delay = 10 -- The delay between each round
Map = "Hydrant" -- The map to be played
Theme = "City" -- The theme to be used
@@ -27,8 +26,8 @@
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Bloody Rookies"), -1, "deadhog", "Island", "Default", "cm_eyes")
- player = AddHog(loc("Hunter"), 0, 1, "NoHat")
+ AddMissionTeam(-1)
+ player = AddMissionHog(1)
AddTeam(loc("Toxic Team"), -6, "skull", "Island", "Default", "cm_magicskull")
enemy = AddHog(loc("Poison"), 1, 100, "Skull")
@@ -99,6 +98,7 @@
if (gear == enemy) and (GameOver == false) then
ShowMission(loc("Diver"), loc("MISSION SUCCESSFUL"), loc("Congratulations!"), 0, 0)
+ SaveMissionVar("Won", "true")
elseif gear == player then
ShowMission(loc("Diver"), loc("MISSION FAILED"), loc("Oh no! Just try again!"), -amSkip, 0)
GameOver = true
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Newton_and_the_Hammock.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Newton_and_the_Hammock.lua Mon Jan 14 12:35:32 2019 -0500
@@ -13,12 +13,10 @@
MapFeatureSize = 12,
},
teams = {
- { name = loc("Pathetic Resistance"),
+ { isMissionTeam = true,
clanID = 0,
- flag = "cm_yinyang",
- grave = "Plinko",
hogs = {
- {name = loc("Ikeda"), health = 48, x = 397, y = 865, hat = "StrawHat"}
+ {health = 48, x = 397, y = 865}
}, },
{ name = loc("Cybernetic Empire"),
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Nobody_Laugh.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Nobody_Laugh.lua Mon Jan 14 12:35:32 2019 -0500
@@ -24,26 +24,17 @@
[amSwitch] = { count = 9 },
},
teams = {
- { name = loc("Nameless Heroes"),
- flag = "cm_crossedswords",
- grave = "eyecross",
- voice = "HillBilly",
+ { isMissionTeam = true,
clanID = 0,
hogs = {
{
- name = loc("Hunter"),
health = 1,
x = 1267, y = 451,
- hat = "Skull",
- botLevel = 0,
ammo = { [amParachute] = 1, [amHammer] = 1 },
},
{
- name = loc("Drowner"),
health = 31,
x = 1332, y = 451,
- hat = "mp3",
- botLevel = 0,
ammo = { [amWhip] = 1 },
},
}},
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Spooky_Tree.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Spooky_Tree.lua Mon Jan 14 12:35:32 2019 -0500
@@ -23,15 +23,14 @@
MinesNum = 0 -- The number of mines being placed
MinesTime = 1
Explosives = 0 -- The number of explosives being placed
- Delay = 10 -- The delay between each round
Map = "Tree" -- The map to be played
Theme = "Halloween" -- The theme to be used
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Bloody Rookies"), -1, "deadhog", "Island", "Default", "cm_eyes")
- player = AddHog(loc("Hunter"), 0, 1, "NoHat")
+ AddMissionTeam(-1)
+ player = AddMissionHog(1)
AddTeam(loc("Toxic Team"), -6, "skull", "Island", "Default", "cm_magicskull")
enemy = AddHog(loc("Poison"), 1, 10, "Skull")
@@ -149,6 +148,7 @@
if (gear == enemy) and (GameOver == false) then
ShowMission(loc("Spooky Tree"), loc("MISSION SUCCESSFUL"), loc("Congratulations!"), 0, 0);
+ SaveMissionVar("Won", "true")
elseif gear == player then
ShowMission(loc("Spooky Tree"), loc("MISSION FAILED"), loc("Oh no! Just try again!"), -amSkip, 0)
GameOver = true
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork.lua Mon Jan 14 12:35:32 2019 -0500
@@ -4,6 +4,7 @@
local p2 = nil
local enemy = nil
local bCrate = nil
+local playerTeamName = loc("Feeble Resistance")
local GameOver = false
@@ -17,16 +18,15 @@
MinesNum = 0 -- The number of mines being placed
MinesTime = 1
Explosives = 0 -- The number of explosives being placed
- Delay = 10 -- The delay between each round
Map = "Mushrooms" -- The map to be played
Theme = "Nature" -- The theme to be used
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Feeble Resistance"), -1, "Statue", "Island", "Default", "cm_kiwi")
- player = AddHog(loc("Greg"), 0, 50, "NoHat")
- p2 = AddHog(loc("Mark"), 0, 20, "NoHat")
+ playerTeamName = AddMissionTeam(-1)
+ player = AddMissionHog(50)
+ p2 = AddMissionHog(20)
AddTeam(loc("Cybernetic Empire"), -6, "ring", "Island", "Robot", "cm_cyborg")
enemy = AddHog(loc("Unit 3378"), 5, 30, "cyborg1")
@@ -101,3 +101,9 @@
end
end
+
+function onGameResult(winningClan)
+ if winningClan == GetTeamClan(playerTeamName) then
+ SaveMissionVar("Won", "true")
+ end
+end
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork_2.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork_2.lua Mon Jan 14 12:35:32 2019 -0500
@@ -9,6 +9,7 @@
local Pack = nil
local help = false
local GameOver = false
+local playerTeamName
function onGameInit()
Seed = 0
@@ -22,13 +23,12 @@
WaterRise = 0
Explosives = 0
- Delay = 10
Map = "CrazyMission"
Theme = "CrazyMission"
- AddTeam(loc("Feeble Resistance"), -1, "Statue", "Island", "Default", "cm_kiwi")
- player = AddHog(loc("Greg"), 0, 30, "NoHat")
- hlayer = AddHog(loc("Mark"), 0, 40, "NoHat")
+ playerTeamName = AddMissionTeam(-1)
+ player = AddMissionHog(30)
+ hlayer = AddMissionHog(40)
AddTeam(loc("Cybernetic Empire"), -6, "ring", "Island", "Robot", "cm_binary")
enemy = AddHog(loc("WatchBot 4000"), 5, 50, "cyborg1")
@@ -107,3 +107,9 @@
SetHealth(player, 0)
end
end
+
+function onGameResult(winningClan)
+ if winningClan == GetTeamClan(playerTeamName) then
+ SaveMissionVar("Won", "true")
+ end
+end
--- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_The_Great_Escape.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_The_Great_Escape.lua Mon Jan 14 12:35:32 2019 -0500
@@ -19,10 +19,8 @@
[amFirePunch] = { ammoInCrate = 3 },
},
teams = {
- { name = loc("Hero Team"),
- flag = "cm_swordshield",
- grave = "star",
- hogs = {{ name = loc("Good Dude"), health = 1, x = 1050, y = 534 }},
+ { isMissionTeam = true,
+ hogs = {{ health = 1, x = 1050, y = 534 }},
},
{ name = loc("Bad Team"),
flag = "cm_dragonrb",
--- a/share/hedgewars/Data/Missions/Scenario/portal.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Scenario/portal.lua Mon Jan 14 12:35:32 2019 -0500
@@ -13,17 +13,16 @@
CaseFreq = 0 -- The frequency of crate drops
MinesNum = 0 -- The number of mines being placed
Explosives = 0 -- The number of explosives being placed
- Delay = 10 -- The delay between each round
Map = "portal" -- The map to be played
Theme = "Hell" -- The theme to be used
-- Disable Sudden Death
HealthDecrease = 0
WaterRise = 0
- AddTeam(loc("Subjects"), -9, "Simple", "Island", "Default", "cm_test")
- player = AddHog(loc("Subject 1"), 0, 10, "Terminator_Glasses")
+ AddMissionTeam(-1)
+ player = AddMissionHog(10)
- AddTeam(loc("Hell Army"), -1, "skull", "Island", "Default", "cm_hellish")
+ AddTeam(loc("Hell Army"), -9, "skull", "Island", "Default", "cm_hellish")
enemy1 = AddHog(loc("Lucifer"), 1, 200, "InfernalHorns")
enemy2 = AddHog(loc("Voldemort"), 1, 150, "WizardHat")
enemy3 = AddHog(loc("Zombi"), 1, 100, "Zombi")
@@ -33,7 +32,7 @@
enemy7 = AddHog(loc("C-2"), 1, 50, "cyborg1")
enemy8 = AddHog(loc("Rider"), 1, 50, "scif_SparkssHelmet")
- AddTeam(loc("Badmad"), -1, "skull", "Island", "Default", "cm_pentagram")
+ AddTeam(loc("Badmad"), -9, "skull", "Island", "Default", "cm_pentagram")
enemy9 = AddHog(loc("C-1"), 1, 50, "cyborg2")
enemy10 = AddHog(loc("Hidden"), 1, 40, "bushhider")
enemy11 = AddHog(loc("Ronald"), 1, 70, "clown")
@@ -203,3 +202,8 @@
end
end
+function onGameResult(winningClan)
+ if winningClan == GetHogClan(player) then
+ SaveMissionVar("Won", "true")
+ end
+end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua Mon Jan 14 12:35:32 2019 -0500
@@ -47,8 +47,8 @@
------ TEAM LIST ------
- AddTeam(loc("Bazooka Team"), -1, "Flower", "Earth", "Default", "hedgewars")
- hog = AddHog(loc("Greenhorn"), 0, 100, "NoHat")
+ AddMissionTeam(-1)
+ hog = AddMissionHog(100)
SetGearPosition(hog, 1485, 2001)
SetEffect(hog, heResurrectable, 1)
@@ -130,23 +130,42 @@
end
function newGamePhase()
+ local ctrl = ""
-- Spawn targets, update wind and ammo, show instructions
if gamePhase == 0 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Open ammo menu: [Right click]").."|"..
+ loc("Select weapon: [Left click]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Open ammo menu: Tap the [Suitcase]")
+ end
ShowMission(loc("Basic Bazooka Training"), loc("Select Weapon"), loc("To begin with the training, select the bazooka from the ammo menu!").."|"..
- loc("Open ammo menu: [Right click]").."|"..
- loc("Select weapon: [Left click]"), 2, 5000)
+ ctrl, 2, 5000)
elseif gamePhase == 1 then
- ShowMission(loc("Basic Bazooka Training"), loc("My First Bazooka"), loc("Let's get started!").."|"..
+ if INTERFACE == "desktop" then
+ ctrl = loc("Attack: [Space]").."|"..
+ loc("Aim: [Up]/[Down]").."|"..
+ loc("Walk: [Left]/[Right]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Attack: Tap the [Bomb]").."|"..
+ loc("Aim: [Up]/[Down]").."|"..
+ loc("Walk: [Left]/[Right]")
+ end
+ ShowMission(loc("Basic Bazooka Training"), loc("My First Bazooka"),
+ loc("Let's get started!").."|"..
loc("Launch some bazookas to destroy the targets!").."|"..
loc("Hold the Attack key pressed for more power.").."|"..
loc("Don't hit yourself!").."|"..
- loc("Attack: [Space]").."|"..
- loc("Aim: [Up]/[Down]").."|"..
- loc("Walk: [Left]/[Right]"), 2, 10000)
+ ctrl, 2, 10000)
spawnTargets()
elseif gamePhase == 2 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("You see the wind strength at the bottom right corner.")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("You see the wind strength at the top.")
+ end
ShowMission(loc("Basic Bazooka Training"), loc("Wind"), loc("Bazookas are influenced by wind.").."|"..
- loc("You see the wind strength at the bottom right corner.").."|"..
+ ctrl.."|"..
loc("Destroy the targets!"), 2, 5000)
SetWind(50)
spawnTargets()
@@ -181,14 +200,18 @@
SetWind(-33)
spawnTargets()
elseif gamePhase == 6 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Precise Aim: [Left Shift] + [Up]/[Down]").."|"
+ end
ShowMission(loc("Basic Bazooka Training"), loc("Final Targets"),
loc("The final targets are quite tricky. You need to aim well.").."|"..
- loc("Precise Aim: [Left Shift] + [Up]/[Down]").."|"..
+ ctrl..
loc("Hint: It might be easier if you vary the angle only slightly."),
2, 12000)
SetWind(75)
spawnTargets()
elseif gamePhase == 7 then
+ SaveMissionVar("Won", "true")
ShowMission(loc("Basic Bazooka Training"), loc("Training complete!"), loc("Congratulations!"), 0, 0)
SetInputMask(0)
AddAmmo(CurrentHedgehog, amBazooka, 0)
@@ -205,7 +228,7 @@
end
SendStat(siCustomAchievement, loc("Good job!"))
SendStat(siGameResult, loc("You have completed the Basic Bazooka Training!"))
- SendStat(siPlayerKills, "0", loc("Bazooka Team"))
+ SendStat(siPlayerKills, "0", GetHogTeamName(hog))
EndGame()
gameOver = true
end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Flying_Saucer.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Flying_Saucer.lua Mon Jan 14 12:35:32 2019 -0500
@@ -50,12 +50,15 @@
List of all targets (or "objectives"). The player has to complete them one-by-one and must always land safely afterwards.
Some target numbers have names for easier reference.
]]
+-- Intro
TargetPos[1] = {
Targets = {{ X = 1027, Y = 217 }},
Ammo = { },
Message = loc("Here you will learn how to fly the flying saucer|and get so learn some cool tricks.") .. "|" ..
loc("Collect the first crate to begin!"),
MessageIcon = -amJetpack, }
+
+-- First flight, infinite fuel
TargetPos[2] = {
Targets = {{ X = 1369, Y = 265 }},
Ammo = { [amJetpack] = 100 },
@@ -64,6 +67,8 @@
Message = loc("Get to the crate using your flying saucer!") .. "|" ..
loc("Press [Attack] (space bar by default) to start,|repeatedly tap the up, left and right movement keys to accelerate.") .. "|" ..
loc("Try to land softly, as you can still take fall damage!"), }
+
+-- First flight, limited fuel
TargetPos[3] = {
Targets = {{ X = 689, Y = 58 }},
Ammo = { [amJetpack] = 100 },
@@ -72,19 +77,23 @@
loc("Tip: If you get stuck in this training, use \"Skip turn\" to restart the current objective.") }
-- The Double Target
-local DoubleTarget = 4
TargetPos[4] = {
- Targets = { { X = 84, Y = -20 }, { X = 1980 , Y = -20 } },
+ Targets = { { X = 178, Y = -20 }, { X = 1962 , Y = -20 } },
Ammo = { [amJetpack] = 2 },
+ CratesContainAmmo = true,
MessageTime = 9000,
Message = loc("Now collect the 2 crates to the far left and right.") .. "|" ..
loc("You only have 2 flying saucers this time.") .. "|" ..
loc("Tip: You can change your flying saucer|in mid-flight by hitting the [Attack] key twice."), }
+
+-- Intermission
TargetPos[5] = {
Targets = {{ X = 47, Y = 804 }},
Ammo = { [amJetpack] = 100 },
MessageTime = 5000,
Message = loc("Time for a more interesting stunt, but first just collect the next crate!"), }
+
+-- First Dive
TargetPos[6] = {
Targets = {{ X = 604, Y = 871}},
MessageTime = 15000,
@@ -93,16 +102,18 @@
loc("You only have one flying saucer this time.") .. "|" ..
loc("Beware, though, you will only be able to move slowly through the water.") .. "|" ..
loc("Warning: Never ever leave the flying saucer while in water!"),
- Ammo = { [amJetpack] = 1 }, }
+ Ammo = { [amJetpack] = 1 },
+ Respawn = { X = 758, Y = 847, FaceLeft = false }, }
+-- Second Dive
TargetPos[7] = {
Targets = {{ X = 1884, Y = 704 }},
MessageTime = 6500,
Message = loc("Now dive just one more time and collect the next crate.") .. "|" ..
loc("Tip: Don't remain for too long in the water, or you won't make it."),
- Ammo = { [amJetpack] = 1}, }
+ Ammo = { [amJetpack] = 2 }, }
--- The Boom Target
+-- The Grenade Drop Target
local BoomTarget = 8
TargetPos[8] = {
Modifier = true, Func = function()
@@ -128,7 +139,7 @@
end,
Ammo = { [amJetpack] = 100 },
- Respawn = { X = 2000, Y = 742 }, }
+ Respawn = { X = 2000, Y = 742, FaceLeft = true }, }
-- The Launch Target
local LaunchTarget = 9
@@ -143,9 +154,8 @@
loc("You can even change your aiming direction in mid-flight if you first hold [Precise] and then press [Up] or [Down].") .. "|" ..
loc("Tip: Changing your aim while flying is very difficult, so adjust it before you take off."),
Ammo = { [amJetpack] = 1, },
- Respawn = { X = 1764, Y = 916 },
+ Respawn = { X = 1760, Y = 754, FaceLeft = true },
ExtraFunc = function()
- HogTurnLeft(Player, true)
if SaucerGear ~= nil then
AddAmmo(Player, amBazooka, 2)
else
@@ -165,7 +175,7 @@
loc("Based on what you've learned, destroy the target on the girder and as always, land safely!"),
Targets = {{ X = 1200, Y = 930, Type = gtTarget }},
Ammo = { [amJetpack] = 1, },
- Respawn = { X = 1027, Y = 217 },
+ Respawn = { X = 1027, Y = 217, FaceLeft = true },
ExtraFunc = function()
if SaucerGear ~= nil then
AddAmmo(Player, amBazooka, 1)
@@ -174,6 +184,7 @@
end
BazookasLeft = 1
end }
+-- Final target / Sandbox
TargetPos[11] = {
Targets = {{ X = 742, Y = 290 }},
MessageTime = 5000,
@@ -182,6 +193,7 @@
loc("Collect or destroy the final crate to finish the training."),
Ammo = { [amJetpack] = 100, [amGrenade] = 100, [amBazooka] = 100 },
InfFuel = true, }
+-- Outro
TargetPos[12] = { Modifier = true, Func = function()
Objective = true
AddCaption(loc("Training complete!"), capcolDefault, capgrpGameState)
@@ -193,10 +205,11 @@
SetState(Player, band(GetState(Player), bnot(gstHHDriven)))
SetState(Player, bor(GetState(Player), gstWinner))
PlaySound(sndVictory, Player)
+ SaveMissionVar("Won", "true")
SendStat(siGameResult, loc("You have finished the Flying Saucer Training!"))
SendStat(siCustomAchievement, loc("Good job!"))
- SendStat(siPlayerKills, "0", loc("Hogonauts"))
+ SendStat(siPlayerKills, "0", GetHogTeamName(Player))
EndTurn(true)
EndGame()
@@ -234,18 +247,22 @@
for i=1,#TargetPos[TargetNumber].Targets do
if TargetGears[i] == nil then
SpawnTarget(TargetPos[TargetNumber].Targets[i].X, TargetPos[TargetNumber].Targets[i].Y,
- TargetPos[TargetNumber].Targets[i].Type, i)
+ TargetPos[TargetNumber].Targets[i].Type, i, TargetPos[TargetNumber].CratesContainAmmo )
end
end
end
-function SpawnTarget( PosX, PosY, Type, ID )
+function SpawnTarget( PosX, PosY, Type, ID, ContainsAmmo )
if Type ~= nil and Type ~= gtCase then
if Type == gtTarget then
TargetGears[ID] = AddGear(PosX, PosY, gtTarget, 0, 0, 0, 0)
end
else
- TargetGears[ID] = SpawnFakeUtilityCrate(PosX, PosY, false, false)
+ if ContainsAmmo == true then
+ TargetGears[ID] = SpawnSupplyCrate(PosX, PosY, amJetpack)
+ else
+ TargetGears[ID] = SpawnFakeUtilityCrate(PosX, PosY, false, false)
+ end
end
TargetsRemaining = TargetsRemaining + 1
end
@@ -328,12 +345,13 @@
CleanUpGears()
- local X, Y
+ local X, Y, FaceLeft
if TargetNumber == 1 then
X, Y = StartPos.X, StartPos.Y
else
if TargetPos[TargetNumber-1].Modifier or TargetPos[TargetNumber-1].Respawn ~= nil then
X, Y = TargetPos[TargetNumber-1].Respawn.X, TargetPos[TargetNumber-1].Respawn.Y
+ FaceLeft = TargetPos[TargetNumber-1].Respawn.FaceLeft
else
X, Y = TargetPos[TargetNumber-1].Targets[1].X, TargetPos[TargetNumber-1].Targets[1].Y
end
@@ -360,6 +378,9 @@
UpdateInfFuel()
SetGearPosition(Player, X, Y)
+ if FaceLeft ~= nil then
+ HogTurnLeft(Player, FaceLeft)
+ end
end
function onGameInit()
@@ -376,11 +397,9 @@
WaterRise = 0
HealthDecrease = 0
- -- Team name is a pun on “hedgehog” and “astronauts”
- AddTeam( loc( "Hogonauts" ), -9, "earth", "Earth", "Default", "cm_galaxy" )
+ AddMissionTeam(-9)
- -- Hedgehog name is a pun on “Neil Armstrong”
- Player = AddHog( loc( "Neil Hogstrong" ), 0, 1, "NoHat" )
+ Player = AddMissionHog(1)
SetGearPosition( Player, StartPos.X, StartPos.Y)
SetEffect( Player, heResurrectable, 1 )
end
@@ -392,8 +411,9 @@
PlaceGirder(1257, 204, 6)
-- The upper girders
- PlaceGirder(84, 16, 0)
- PlaceGirder(1980, 16, 0)
+ PlaceGirder(84, 16, 4)
+ PlaceGirder(243, 16, 4)
+ PlaceGirder(1967, 16, 4)
-- The lower girder platform at the water pit
PlaceGirder(509, 896, 4)
@@ -415,9 +435,9 @@
end
function onAmmoStoreInit()
- SetAmmo(amJetpack, 0, 0, 0, 0)
- SetAmmo(amGrenade, 0, 0, 0, 0)
- SetAmmo(amBazooka, 0, 0, 0, 0)
+ SetAmmo(amJetpack, 0, 0, 0, 1)
+ SetAmmo(amGrenade, 0, 0, 0, 1)
+ SetAmmo(amBazooka, 0, 0, 0, 1)
-- Added for resetting current target/objective when player is stuck somehow
SetAmmo(amSkip, 9, 0, 0, 0)
@@ -482,7 +502,8 @@
AddAmmo(Player, amBazooka, 0)
end
end
- if GetGearType(Gear) == gtCase and GetGearType(Player) ~= nil then
+ -- Fake crate collected
+ if GetGearType(Gear) == gtCase and band(GetGearMessage(Gear), gmDestroy) ~= 0 and band(GetGearPos(Gear), 0x8) ~= 0 then
PlaySound(sndShotgunReload)
end
if Gear == Barrels[1] then
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua Mon Jan 14 12:35:32 2019 -0500
@@ -39,8 +39,8 @@
------ TEAM LIST ------
- AddTeam(loc("Grenade Team"), -1, "Flower", "Earth", "Default", "cm_grenade")
- hog = AddHog(loc("Greenhorn"), 0, 1, "NoHat")
+ AddMissionTeam(-1)
+ hog = AddMissionHog(1)
SetGearPosition(hog, 570, 157)
SetEffect(hog, heResurrectable, 1)
@@ -83,7 +83,7 @@
local function spawnTargets()
-- Warm-up
if gamePhase == 0 then
- AddGear(882, 39, gtTarget, 0, 0, 0, 0)
+ AddGear(945, 498, gtTarget, 0, 0, 0, 0)
-- Timer
elseif gamePhase == 2 then
AddGear(233, 97, gtTarget, 0, 0, 0, 0)
@@ -93,12 +93,12 @@
elseif gamePhase == 3 then
AddGear(15, 240, gtTarget, 0, 0, 0, 0)
AddGear(61, 9, gtTarget, 0, 0, 0, 0)
- AddGear(945, 498, gtTarget, 0, 0, 0, 0)
+ AddGear(882, 39, gtTarget, 0, 0, 0, 0)
-- Bounciness
elseif gamePhase == 4 then
- AddGear(323, 960, gtTarget, 0, 0, 0, 0)
AddGear(1318, 208, gtTarget, 0, 0, 0, 0)
AddGear(1697, 250, gtTarget, 0, 0, 0, 0)
+ AddGear(323, 960, gtTarget, 0, 0, 0, 0)
AddGear(1852, 100, gtTarget, 0, 0, 0, 0)
-- Grand Final
elseif gamePhase == 5 then
@@ -117,24 +117,42 @@
function newGamePhase()
-- Spawn targets, update wind and ammo, show instructions
+ local ctrl = ""
if gamePhase == 0 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Open ammo menu: [Right click]").."|"..
+ loc("Select weapon: [Left click]")
+ else
+ ctrl = loc("Open ammo menu: Tap the [Suitcase]")
+ end
ShowMission(loc("Basic Grenade Training"), loc("Select Weapon"), loc("To begin with the training, select the grenade from the ammo menu!").."|"..
- loc("Open ammo menu: [Right click]").."|"..
- loc("Select weapon: [Left click]"), 2, 5000)
+ ctrl, 2, 5000)
elseif gamePhase == 1 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Attack: [Space]").."|"..
+ loc("Aim: [Up]/[Down]").."|"..
+ loc("Change direction: [Left]/[Right]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Attack: Tap the [Bomb]").."|"..
+ loc("Aim: [Up]/[Down]").."|"..
+ loc("Change direction: [Left]/[Right]")
+ end
ShowMission(loc("Basic Grenade Training"), loc("Warming Up"),
loc("Throw a grenade to destroy the target!").."|"..
loc("Hold the Attack key pressed for more power.").."|"..
- loc("Attack: [Space]").."|"..
- loc("Aim: [Up]/[Down]").."|"..
- loc("Change direction: [Left]/[Right]").."|"..
+ ctrl.."|"..
loc("Note: Walking is disabled in this mission."), 2, 20000)
spawnTargets()
elseif gamePhase == 2 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Set detonation timer: [1]-[5]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Change detonation timer: Tap the [Clock]")
+ end
ShowMission(loc("Basic Grenade Training"), loc("Timer"),
loc("You can change the detonation timer of grenades.").."|"..
loc("Grenades explode after 1 to 5 seconds (you decide).").."|"..
- loc("Set detonation timer: [1]-[5]"), 2, 15000)
+ ctrl, 2, 15000)
spawnTargets()
elseif gamePhase == 3 then
ShowMission(loc("Basic Grenade Training"), loc("No Wind Influence"), loc("Unlike bazookas, grenades are not influenced by wind.").."|"..
@@ -142,20 +160,30 @@
SetWind(50)
spawnTargets()
elseif gamePhase == 4 then
- ShowMission(loc("Basic Grenade Training"), loc("Bounciness"),
- loc("You can set the bounciness of grenades (and grenade-like weapons).").."|"..
+ local caption = loc("Bounciness")
+ ctrl = loc("You can set the bounciness of grenades (and grenade-like weapons).").."|"..
loc("Grenades with high bounciness bounce a lot and behave chaotic.").."|"..
loc("With low bounciness, it barely bounces at all, but it is much more predictable.").."|"..
- loc("Try out different bounciness levels to reach difficult targets.").."|"..
- loc("Set bounciness: [Left Shift] + [1]-[5]"),
- 2, 20000)
+ loc("Try out different bounciness levels to reach difficult targets.").."|"
+ if INTERFACE == "desktop" then
+ ctrl = ctrl .. loc("Set bounciness: [Left Shift] + [1]-[5]")
+ elseif INTERFACE == "touch" then
+ ctrl = ctrl .. loc("Change bounciness: Tap [B]")
+ end
+
+ ShowMission(loc("Basic Grenade Training"), caption, ctrl, 2, 20000)
spawnTargets()
elseif gamePhase == 5 then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Precise Aim: [Left Shift] + [Up]/[Down]")
+ -- FIXME: No precise aim in touch interface yet :(
+ end
ShowMission(loc("Basic Grenade Training"), loc("Final Targets"), loc("Good job! Now destroy the final targets to finish the training.").."|"..
- loc("Precise Aim: [Left Shift] + [Up]/[Down]"),
+ ctrl,
2, 7000)
spawnTargets()
elseif gamePhase == 6 then
+ SaveMissionVar("Won", "true")
ShowMission(loc("Basic Grenade Training"), loc("Training complete!"), loc("Congratulations!"), 0, 0)
SetInputMask(0)
AddAmmo(CurrentHedgehog, amGrenade, 0)
@@ -169,7 +197,7 @@
end
SendStat(siCustomAchievement, loc("Good job!"))
SendStat(siGameResult, loc("You have completed the Basic Grenade Training!"))
- SendStat(siPlayerKills, "0", loc("Grenade Team"))
+ SendStat(siPlayerKills, "0", GetHogTeamName(hog))
EndGame()
gameOver = true
end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua Mon Jan 14 12:35:32 2019 -0500
@@ -24,6 +24,7 @@
local tookDamage = false
local switchTextDelay = -1
local missionPanelConfirmed = false
+local missionPanelConfirmedTimer = 0
local turnStarted = false
local map = {
@@ -114,18 +115,18 @@
drawMap()
------ HOG LIST ------
- AddTeam(loc("Training Team"), -1, "deadhog", "SteelTower", "Default", "hedgewars")
+ AddMissionTeam(-1)
- hhs[1] = AddHog(loc("Greenhorn"), 0, 100, "NoHat")
+ hhs[1] = AddMissionHog(100)
SetGearPosition(hhs[1], 404, 1714)
SetEffect(hhs[1], heResurrectable, 1)
- hhs[2] = AddHog(loc("Rhombus"), 0, 100, "NoHat")
+ hhs[2] = AddMissionHog(100)
SetGearPosition(hhs[2], 620, 1538)
SetEffect(hhs[2], heResurrectable, 1)
HogTurnLeft(hhs[2], true)
- hhs[3] = AddHog(loc("Trapped"), 0, 100, "NoHat")
+ hhs[3] = AddMissionHog(100)
SetGearPosition(hhs[3], 1573, 1824)
SetEffect(hhs[3], heResurrectable, 1)
@@ -134,12 +135,23 @@
SetEffect(hhs[4], heResurrectable, 1)
HogTurnLeft(hhs[4], true)
- hhs[5] = AddHog(loc("Ice"), 0, 100, "NoHat")
+ hhs[5] = AddMissionHog(100)
SetGearPosition(hhs[5], 1813, 1285)
SetEffect(hhs[5], heResurrectable, 1)
hog_greenhorn = hhs[1]
hog_cappy = hhs[4]
+
+ for i=1,#hhs do
+ if hhs[i] ~= hog_cappy then
+ if GetHogName(hhs[i]) == loc("Cappy") then
+ SetHogName(hhs[i], loc("Greenhorn"))
+ end
+ if GetHogHat(hhs[i]) == "cap_red" then
+ SetHogHat(hhs[i], "NoHat")
+ end
+ end
+ end
SendHealthStatsOff()
end
@@ -241,15 +253,19 @@
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
+ -- FIXME: Not available in touch because no “precise” button
+ if INTERFACE ~= "touch" then
+ crates[10] = SpawnHealthCrate(2290, 1622) -- Turning Around
+ end
end
local function victory()
+ SaveMissionVar("Won", "true")
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"))
+ SendStat(siPlayerKills, "0", GetHogTeamName(hog_greenhorn))
PlaySound(sndVictory, CurrentHedgehog)
-- Disable controls, end game
SetInputMask(0)
@@ -265,11 +281,17 @@
loc("To finish hedgehog selection, just do anything|with him, like walking."),
2, 20000)
else
+ local ctrl = ""
+ if INTERFACE == "desktop" then
+ ctrl = loc("Hit the “Switch Hedgehog” key until you have|selected Cappy, the hedgehog with the cap!").."|"..
+ loc("Switch hedgehog: [Tabulator]")
+ else
+ ctrl = loc("Tap the “rotating arrow” button on the left|until you have selected Cappy, the hedgehog with the cap!")
+ end
ShowMission(loc("Basic Movement Training"), loc("Switch Hedgehog (2/3)"),
loc("You have activated Switch Hedgehog!").."|"..
loc("The spinning arrows above your hedgehog show|which hedgehog is selected right now.").."|"..
- loc("Hit the “Switch Hedgehog” key until you have|selected Cappy, the hedgehog with the cap!").."|"..
- loc("Switch hedgehog: [Tabulator]"), 2, 20000)
+ ctrl, 2, 20000)
end
end
@@ -281,6 +303,7 @@
end
function onGearDelete(gear)
+ local ctrl = ""
-- Switching done
if GetGearType(gear) == gtSwitcher then
switcherGear = nil
@@ -290,57 +313,102 @@
loc("Collect the remaining crates to complete the training."),
2, 0)
else
+ if INTERFACE == "desktop" then
+ ctrl = loc("Open ammo menu: [Right click]").."|"..
+ loc("Attack: [Space]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Open ammo menu: Tap the [Suitcase]").."|"..
+ loc("Attack: Tap the [Bomb]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Switch Hedgehog (Failed!)"),
loc("Oops! You have selected the wrong hedgehog! Just try again.").."|"..
loc("Select “Switch Hedgehog” from the ammo menu and|hit the “Attack” key to proceed.").."|"..
- loc("Open ammo menu: [Right click]").."|"..
- loc("Attack: [Space]"), 2, 0)
+ ctrl, 2, 0)
end
-- Crate collected (or destroyed, but this should not be possible)
elseif gear == crates[1] then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Long Jump: [Enter]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Long Jump: Tap the [Curvy Arrow] button for long")
+ end
ShowMission(loc("Basic Movement Training"), loc("Jumping"),
loc("Get the next crate by jumping over the abyss.").."|"..
loc("Careful, hedgehogs can't swim!").."|"..
- loc("Long Jump: [Enter]"), 2, 5000)
+ ctrl, 2, 5000)
elseif gear == crates[2] then
victory()
elseif gear == crates[4] then
+ if INTERFACE == "desktop" then
+ ctrl = loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("High Jump: Tap the [Curvy Arrow] shortly").."|"..loc("Back Jump: Double-tap the [Curvy Arrow]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Back Jumping (1/2)"),
loc("For the next crate, you have to do back jumps.") .. "|" ..
loc("To reach higher ground, walk to a ledge, look to the left, then do a back jump.") .. "|" ..
- loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2"), 2, 6600)
+ ctrl, 2, 6600)
elseif gear == crates[7] then
+ if INTERFACE == "desktop" then
+ ctrl = loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("High Jump: Tap the [Curvy Arrow] shortly").."|"..loc("Back Jump: Double-tap the [Curvy Arrow]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Back Jumping (2/2)"),
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)
+ ctrl, 2, 15000)
elseif gear == crates[5] then
+ -- FIXME: Touch doesn't have precise aim yet :(
+ if INTERFACE == "desktop" then
+ ctrl = "|" ..
+ loc("You can also hold down the key for “Precise Aim” to prevent slipping.") .. "|" ..
+ loc("Precise Aim: [Left Shift]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Walking on Ice"),
loc("These girders are slippery, like ice.").."|"..
loc("And you need to move to the top!").."|"..
- loc("If you don't want to slip away, you have to keep moving!").."|"..
- loc("You can also hold down the key for “Precise Aim” to prevent slipping.").."|"..
- loc("Precise Aim: [Left Shift]"), 2, 9000)
+ loc("If you don't want to slip away, you have to keep moving!")..
+ ctrl, 2, 9000)
elseif gear == crates[6] then
+ -- FIXME: Touch doesn't have precise aim yet :(
+ if INTERFACE == "desktop" then
+ ctrl = "|" .. loc("Remember: Hold down [Left Shift] to prevent slipping")
+ end
ShowMission(loc("Basic Movement Training"), loc("A mysterious Box"),
- loc("The next crate is an utility crate.").."|"..loc("What's in the box, you ask? Let's find out!").."|"..
- loc("Remember: Hold down [Left Shift] to prevent slipping"), 2, 6000)
+ loc("The next crate is an utility crate.").."|"..loc("What's in the box, you ask? Let's find out!")..
+ ctrl, 2, 6000)
elseif gear == crates[8] then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Open ammo menu: [Right click]").."|"..
+ loc("Attack: [Space]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Open ammo menu: Tap the [Suitcase]").."|"..
+ loc("Attack: Tap the [Bomb]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Switch Hedgehog (1/3)"),
loc("You have collected the “Switch Hedgehog” utility!").."|"..
loc("This allows to select any hedgehog in your team!").."|"..
loc("Select “Switch Hedgehog” from the ammo menu and|hit the “Attack” key.").."|"..
- loc("Open ammo menu: [Right click]").."|"..
- loc("Attack: [Space]"), 2, 30000)
+ ctrl, 2, 30000)
elseif gear == crates[3] then
ShowMission(loc("Basic Movement Training"), loc("Rubber"), loc("As you probably noticed, these rubber bands|are VERY elastic. Hedgehogs and many other|things will bounce off without taking any damage.").."|"..
loc("Now try to get out of this bounce house|and take the next crate."), 2, 8000)
elseif gear == crates[9] then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Look around: [Mouse movement]") .. "|" ..
+ loc("Zoom: [Rotate mouse wheel]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Look around: [Tap or swipe on the screen]") .. "|" ..
+ -- multi-touch gesture
+ loc("Zoom: [Pinch] with 2 fingers")
+ end
ShowMission(loc("Basic Movement Training"), loc("Health"), loc("You just got yourself some extra health.|The more health your hedgehogs have, the better!").."|"..
loc("Now go to the next crate.").."|"..
- loc("Look around: [Mouse movement]"), 2, 10000)
+ ctrl, 2, 10000)
elseif gear == crates[10] then
+ -- FIXME: This crate is unused in touch atm
ShowMission(loc("Basic Movement Training"), loc("Turning Around"),
loc("By the way, you can turn around without walking|by holding down Precise when you hit a walk control.").."|"..
loc("Get the final crate to the right to complete the training.").."|"..
@@ -350,7 +418,7 @@
end
function onGearDamage(gear)
- if GetGearType(gear) == gtHedgehog and tookDamage == false then
+ if GetGearType(gear) == gtHedgehog and tookDamage == false and GetX(gear) > 1362 then
ShowMission(loc("Basic Movement Training"), loc("Fall Damage"), loc("Ouch! You just took fall damage.").."|"..
loc("Better get yourself another health crate to heal your wounds."), 2, 5000)
tookDamage = true
@@ -366,20 +434,29 @@
end
local function firstMission()
- -- This part is CRITICALLY important for all future missions.
- -- Because the player must know how to show the current mission texts again.
+ -- Here we teach player must know how to show the current mission texts again.
-- We force the player to hit Attack before the actual training begins.
+ -- Later, the mission panel key is perma-shown as caption.
+ local ctrl = ""
+ if INTERFACE == "desktop" then
+ ctrl = loc("IMPORTANT: To see the mission panel again, hold the mission panel key.").."| |"..
+ loc("Note: This basic training assumes default controls.").."|"..
+ loc("Mission panel: [M]").."|"..
+ loc("Quit: [Esc]").."|"..
+ loc("Pause: [P]").."| |"..
+ loc("To begin with the training, hit the attack key!").."|"..
+ loc("Attack: [Space]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("IMPORTANT: To see the mission panel again, pause the game.").."| |"..
+ loc("Pause: Tap the [Pause] button").."| |"..
+ loc("To begin with the training, tap the attack button!").."|"..
+ loc("Attack: Tap the [Bomb]")
+ end
ShowMission(loc("Basic Movement Training"), loc("Mission Panel"),
loc("This is the mission panel.").."|"..
loc("Here you will find the current mission instructions.").."|"..
loc("Normally, the mission panel disappears after a few seconds.").."|"..
- loc("IMPORTANT: To see the mission panel again, hold the mission panel key.").."| |"..
- loc("Note: This basic training assumes default controls.").."|"..
- loc("Mission panel: [M]").."|"..
- loc("Quit: [Esc]").."|"..
- loc("Pause: [P]").."| |"..
- loc("To begin with the training, hit the attack key!").."|"..
- loc("Attack: [Space]"), 2, 900000, true)
+ ctrl, 2, 900000, true)
-- TODO: This and other training missions are currently hardcoding control names.
-- This should be fixed eventually.
@@ -396,6 +473,19 @@
-- Forces the first mission panel to be displayed without time limit
firstMission()
end
+ if missionPanelConfirmed then
+ missionPanelConfirmedTimer = missionPanelConfirmedTimer + 20
+ --[[ After confirming the initial mission panel,
+ show the mission panel key as permanent caption
+ so the player can't overlook or forget it. ]]
+ if missionPanelConfirmedTimer > 7000 then
+ if INTERFACE == "desktop" then
+ AddCaption(loc("Press [M] to see the mission texts"), capcolDefault, capgrpMessage2)
+ elseif INTERFACE == "touch" then
+ AddCaption(loc("Tap [Pause] to see the mission texts"), capcolDefault, capgrpMessage2)
+ end
+ end
+ end
end
function onGearResurrect(gear, vGear)
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Mon Jan 14 12:35:32 2019 -0500
@@ -9,7 +9,7 @@
- Multiple shots / rope re-use to go over water hazard
- Drop grenade from rope
- Special rules when you only got 1 rope (i.e. when the rope is officially used up)
- - Rope around obstacles and mines
+ - Rope around obstacles
]]
HedgewarsScriptLoad("/Scripts/Locale.lua")
@@ -32,7 +32,6 @@
-- Gears
local hog
local ropeGear
-local mines = {}
-- Status vars
local ropeSelected = false -- rope was selected the first time, used for msg
@@ -47,7 +46,8 @@
-- "Constants"
local initHogHealth = 50
-local teamName = loc("Wannabe Ropers")
+local initHogHealthFinal = 1
+local teamName
local girderData = {
{2012, 1366, 6}, -- water gate
@@ -61,28 +61,6 @@
{3809, 1375, 0}, -- post-water gate
}
-local mineData = {
- {1261, 549},
- {1395, 554},
- {1719, 458},
- {1489, 558},
- {1686, 565},
- {1581, 561},
- {1904, 539},
- {2047, 539},
- {2226, 608},
- {2387, 541},
- {2523, 396},
- {2899, 324},
- {3428, 546},
- {3373, 546},
- {3271, 546},
- {3123, 545},
- {3012, 544},
- {2907, 544},
- {2793, 543},
-}
-
local targetData = {
-- 1: Start
{504, 1215},
@@ -118,8 +96,8 @@
WaterRise = 0
HealthDecrease = 0
- AddTeam(teamName, -1, "Plinko", "Snail", "Default", "cm_yinyang")
- hog = AddHog(loc("Roper"), 0, initHogHealth, "StrawHat")
+ teamName = AddMissionTeam(-1)
+ hog = AddMissionHog(initHogHealth)
SetGearPosition(hog, cpX, cpY)
SetEffect(hog, heResurrectable, 1)
@@ -129,23 +107,20 @@
end
--- The final challenge is to rope through a mined obstacle course with only 1 rope.
+-- The final challenge is to rope through an obstacle course with only 1 rope.
-- If the player screws up, this functinon will restart it.
-local function resetMineChallenge(setPos)
+local function resetFinalChallenge(setPos)
if setPos == nil then
setPos = true
end
- SetHealth(hog, initHogHealth)
+ SetHealth(hog, initHogHealthFinal)
AddAmmo(hog, amRope, 1)
- for gear, _ in pairs(mines) do
- DeleteGear(gear)
- end
+ SetGearVelocity(hog, 0, 0)
- for m=1, #mineData do
- AddGear(mineData[m][1], mineData[m][2], gtMine, 0, 0, 0, 0)
- end
if setPos then
+ PlaySound(sndWarp)
SetGearPosition(hog, cpX, cpY)
+ AddVisualGear(cpX, cpY, vgtExplosion, 0, false)
FollowGear(hog)
end
end
@@ -164,6 +139,8 @@
PlaceGirder(unpack(girderData[g]))
end
+ PlaceSprite(1678, 546, sprTargetBee, 0)
+
------ BARRELS ------
local barrels = {}
table.insert(barrels, AddGear(1370, 1223, gtExplosives, 0, 0, 0, 0))
@@ -175,11 +152,6 @@
SetHealth(barrels[b], 1)
end
- ------ MINES ------
- for m=1, #mineData do
- AddGear(mineData[m][1], mineData[m][2], gtMine, 0, 0, 0, 0)
- end
-
------ FIRST TARGET ------
currentTarget = 1
AddGear(targetData[currentTarget][1], targetData[currentTarget][2], gtTarget, 0, 0, 0, 0)
@@ -194,15 +166,18 @@
end
function onNewTurn()
+ local ctrl = ""
if not wasFirstTurn then
+ if INTERFACE == "desktop" then
+ ctrl = loc("Open ammo menu: [Right click]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Open ammo menu: Tap the [Suitcase]")
+ end
ShowMission(loc("Basic Rope Training"), loc("Select Rope"),
loc("Select the rope to begin!").."|"..
- loc("Open ammo menu: [Right click]"), 2, 7500)
+ ctrl, 2, 7500)
wasFirstTurn = true
end
- if isInMineChallenge then
- resetMineChallenge()
- end
end
function onGameTick()
@@ -212,11 +187,18 @@
-- First rope selection
if not ropeSelected and GetCurAmmoType() == amRope then
+ local ctrl = ""
+ if INTERFACE == "desktop" then
+ ctrl = loc("Aim: [Up]/[Down]").."|"..
+ loc("Attack: [Space]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Aim: [Up]/[Down]").."|"..
+ loc("Attack: Tap the [Bomb]")
+ end
ShowMission(loc("Basic Rope Training"), loc("Getting Started"),
loc("You can use the rope to reach new places.").."|"..
loc("Aim at the ceiling and hold [Attack] pressed until the rope attaches.").."|"..
- loc("Aim: [Up]/[Down]").."|"..
- loc("Attack: [Space]"), 2, 15000)
+ ctrl, 2, 15000)
ropeSelected = true
-- Rope attach
elseif ropeGear and band(GetState(ropeGear), gstCollision) ~= 0 then
@@ -229,7 +211,7 @@
loc("Swing: [Left]/[Right]").."|"..
loc("Release rope: [Attack]"), 2, 15000)
ropeAttached = true
- elseif currentTarget > 1 then
+ elseif currentTarget > 1 and (not (currentTarget == 6 and barrelsBoom)) then
HideMission()
end
end
@@ -244,6 +226,18 @@
else
SetInputMask(band(GetInputMask(), bnot(gmAttack)))
end
+ if isInFinalChallenge then
+ local dX, dY = GetGearVelocity(CurrentHedgehog)
+ local x, y = GetGearPosition(CurrentHedgehog)
+ if band(GetState(CurrentHedgehog), gstHHDriven) ~= 0 and GetAmmoCount(CurrentHedgehog, amRope) == 0 and
+ GetFlightTime(CurrentHedgehog) == 0 and (not ropeGear) and
+ math.abs(dX) < 5 and math.abs(dY) < 5 and
+ (x < 3417 or y > 471) then
+ AddCaption(loc("Your rope is gone! Try again!"))
+ resetFinalChallenge()
+ PlaySound(sndWarp)
+ end
+ end
end
function onGameTick20()
@@ -258,8 +252,6 @@
function onGearAdd(gear)
if GetGearType(gear) == gtRope then
ropeGear = gear
- elseif GetGearType(gear) == gtMine then
- mines[gear] = true
elseif GetGearType(gear) == gtGrenade then
if not ropeGear then
DeleteGear(gear)
@@ -276,8 +268,8 @@
end
FollowGear(hog)
AddCaption(loc("Your hedgehog has been revived!"))
- if isInMineChallenge then
- resetMineChallenge(false)
+ if isInFinalChallenge then
+ resetFinalChallenge(false)
end
end
end
@@ -319,7 +311,7 @@
loc("Step 3: Drop the grenade").."| |"..
loc("Drop weapon (while on rope): [Long Jump]"), 2, 20000)
AddAmmo(hog, amBaseballBat, 0)
- SpawnAmmoCrate(1849, 920, amGrenade, 100)
+ SpawnAmmoCrate(1849, 920, amGrenade, AMMO_INFINITE)
elseif currentTarget == 6 then
ShowMission(loc("Basic Rope Training"), loc("Finite Ropes"),
loc("So far, you had infinite ropes, but in the|real world, ropes are usually limited.").."|"..
@@ -328,15 +320,15 @@
loc("If you miss a shot while trying to|re-attach, your rope is gone, too!").."| |"..
loc("Final Challenge:").." |"..
loc("Reach and destroy the final target to win.").."|"..
- loc("You only get 1 rope this time, don't waste it!").."|"..
- loc("Avoid the mines!").."|"..
- loc("Skip your turn to try again."), 2, 25000)
+ loc("You only get 1 rope this time, don't waste it!"),
+ 2, 25000)
eraseGirder(4)
eraseGirder(5)
AddAmmo(hog, amRope, 1)
- AddAmmo(hog, amSkip, 100)
- isInMineChallenge = true
+ SetHealth(hog, initHogHealthFinal)
+ isInFinalChallenge = true
elseif currentTarget == 7 then
+ SaveMissionVar("Won", "true")
ShowMission(loc("Basic Rope Training"), loc("Training complete!"),
loc("Congratulations!"), 0, 0)
PlaySound(sndVictory, hog)
@@ -360,22 +352,31 @@
if not barrelsBoom then
barrelsBoom = true
AddAmmo(hog, amGrenade, 0)
- AddAmmo(hog, amBaseballBat, 100)
+ AddAmmo(hog, amBaseballBat, AMMO_INFINITE)
eraseGirder(2)
eraseGirder(3)
+ ShowMission(loc("Basic Rope Training"),
+ loc("Kaboom!"),
+ loc("Follow the path and destroy the next target."),
+ 2, 5000)
end
elseif GetGearType(gear) == gtRope then
ropeGear = nil
if ropeAttached and not target1Reached then
+ local ctrl = ""
+ if INTERFACE == "desktop" then
+ ctrl = loc("Aim: [Up]/[Down]").."|"..
+ loc("Attack: [Space]")
+ elseif INTERFACE == "touch" then
+ ctrl = loc("Aim: [Up]/[Down]").."|"..
+ loc("Attack: Tap the [Bomb]")
+ end
ShowMission(loc("Basic Rope Training"), loc("How to Rope"),
loc("Go to the target.").."|"..
loc("Hold [Attack] to attach the rope.").."|"..
- loc("Aim: [Up]/[Down]").."|"..
- loc("Attack: [Space]"), 2, 13000)
+ ctrl, 2, 13000)
ropeAttached = false
end
- elseif GetGearType(gear) == gtMine then
- mines[gear] = nil
elseif GetGearType(gear) == gtCase then
eraseGirder(6)
eraseGirder(7)
@@ -387,13 +388,6 @@
SetAmmo(amBaseballBat, 9, 0, 0, 1)
end
-function onHogAttack(ammoType)
- -- Allow to manually reset final challenge with skip
- if ammoType == amSkip then
- resetMineChallenge()
- end
-end
-
function onAttack()
if GetCurAmmoType() == amGrenade and not ropeGear then
AddCaption(loc("You have to drop the grenade from rope!"), 0xFF4000FF, capgrpMessage)
--- a/share/hedgewars/Data/Music/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Music/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,12 +1,12 @@
-City.ogg=HSR ( http://elhombresinremedio.com )
+City.ogg=HSR <http://elhombresinremedio.com>
Compost.ogg=HG
EarthRise.ogg=Jonatan Nilsson
Fruit.ogg=Valentin Kraevskiy
Jungle.ogg=Valentin Kraevskiy
Nature.ogg=John Dum
Pirate.ogg=Jonatan Nilsson
-Rock.ogg=HSR ( http://elhombresinremedio.com )
-olympics_sd.ogg=yd ( http://opengameart.org/users/yd )
+Rock.ogg=HSR <http://elhombresinremedio.com>
+olympics_sd.ogg=yd <http://opengameart.org/users/yd>
oriental.ogg=Jonatan Nilsson
sdmusic.ogg=Kevin MacLeod - "Hitman" [sheepluva edit]
snow.ogg=Jonatan Nilsson
--- a/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Mon Jan 14 12:35:32 2019 -0500
@@ -264,6 +264,14 @@
end
end
+function onHogHide(gear)
+ trackHiding(gear)
+end
+
+function onHogRestore(gear)
+ trackRestoring(gear)
+end
+
function onGearDelete(gear)
trackDeletion(gear)
end
--- a/share/hedgewars/Data/Scripts/Multiplayer/Capture_the_Flag.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Capture_the_Flag.lua Mon Jan 14 12:35:32 2019 -0500
@@ -171,7 +171,7 @@
table.sort(teamList, teamRank)
for i=1, #teamList do
- SendStat(siPointType, loc("point(s)"))
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(teamList[i].score), teamList[i].name)
end
--- a/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,13 +1,38 @@
+HedgewarsScriptLoad("/Scripts/Params.lua")
+local overrideFeatureSize = true
+local mazeScale = 0
function onPreviewInit()
onGameInit()
end
+function onParameters()
+ parseParams()
+ if params["scalemap"] ~= nil then
+ overrideFeatureSize = false
+ end
+ if params["mazescale"] ~= nil then
+ mazeScale = tonumber(params["mazescale"])
+ end
+end
+
+
function onGameInit()
+ local step
+ local width
+
MapGen = mgDrawn
TemplateFilter = 0
- local step = 80 + 10 * MapFeatureSize
- local width = 1 + div(math.max(0, MapFeatureSize-12), 6)
+
+ if mazeScale > 0 then
+ step = 80 + 10 * mazeScale
+ width = 1 + div(math.max(0, mazeScale-12), 6)
+ else
+ step = 80 + 10 * MapFeatureSize
+ width = 1 + div(math.max(0, MapFeatureSize-12), 6)
+ end
+ -- reset feature size after use, to disable scaling
+ if overrideFeatureSize then MapFeatureSize = 12 end
-- center maze
local xoff = div((4000 % step), 2)
for y = 48,2048,step do
--- a/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua Mon Jan 14 12:35:32 2019 -0500
@@ -26,10 +26,13 @@
ruleSet = "" ..
loc("RULES:") .. " |" ..
loc("Each turn is only ONE SECOND!") .. "|" ..
- loc("Use your ready time to think.") .. "|" ..
- loc("Slot keys save time! (F1-F10 by default)") .. "| |"
- for i=1, #frenzyAmmos do
- ruleSet = ruleSet .. string.format(loc("Slot %d: %s"), i, GetAmmoName(frenzyAmmos[i])) .. "|"
+ loc("Use your ready time to think.")
+ if INTERFACE ~= "touch" then
+ ruleSet = ruleSet .. "|" ..
+ loc("Slot keys save time! (F1-F10 by default)") .. "| |"
+ for i=1, #frenzyAmmos do
+ ruleSet = ruleSet .. string.format(loc("Slot %d: %s"), i, GetAmmoName(frenzyAmmos[i])) .. "|"
+ end
end
ShowMission(loc("FRENZY"),
@@ -40,7 +43,7 @@
function onGameInit()
- if TurnTime > 10001 then
+ if TurnTime > 8000 then
Ready = 8000
else
Ready = TurnTime
--- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Mon Jan 14 12:35:32 2019 -0500
@@ -438,7 +438,7 @@
local showScore = ""
table.sort(teamsSorted, function(team1, team2) return getTeamValue(team1, "Score") > getTeamValue(team2, "Score") end)
for i=1, TeamsCount do
- SendStat(siPointType, loc("point(s)"))
+ SendStat(siPointType, "!POINTS")
local score = getTeamValue(teamsSorted[i], "Score")
local deaths = getTeamValue(teamsSorted[i], "DeadHogs")
SendStat(siPlayerKills, score, teamsSorted[i])
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Jan 14 12:35:32 2019 -0500
@@ -560,7 +560,7 @@
-- Write all the stats!
for i = 1, #sortedTeams do
- SendStat(siPointType, loc("milliseconds"))
+ SendStat(siPointType, "!TIME")
SendStat(siTeamRank, tostring(clanRanks[GetTeamClan(sortedTeams[i].name)]))
SendStat(siPlayerKills, sortedTeams[i].score, sortedTeams[i].name)
end
@@ -834,6 +834,7 @@
trackTime = 0
currCount = 0 -- hopefully this solves problem
+ fastIndex = 0
AddAmmo(CurrentHedgehog, amAirAttack, 0)
gTimer = 0
--- a/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,5 +1,6 @@
HedgewarsScriptLoad("/Scripts/Params.lua")
-
+local overrideFeatureSize = true
+local paramPadding = 0
local ObjectList = {}
-- Overall padding for roping freedom
@@ -12,6 +13,12 @@
if params["teamrope"] ~= nil then
TeamRope = true
end
+ if params["scalemap"] ~= nil then
+ overrideFeatureSize = false
+ end
+ if params["padding"] ~= nil then
+ paramPadding = tonumber(params["padding"])
+ end
end
function onGearAdd(gear)
@@ -328,13 +335,17 @@
function onGameInit()
-- Calculate padding, determined by map feature size
- if MapFeatureSize <= 20 then
+ if paramPadding > 0 then
+ Padding = paramPadding
+ elseif MapFeatureSize <= 20 then
-- 10 .. 710. Step size=35
Padding = 10 + MapFeatureSize * 35
else
-- 780 .. 1060. Step size=70
Padding = 710 + (MapFeatureSize-20) * 70
end
+ -- reset feature size after use, to disable scaling
+ if overrideFeatureSize then MapFeatureSize = 12 end
MapGen = mgDrawn
TemplateFilter = 0
--- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Jan 14 12:35:32 2019 -0500
@@ -587,7 +587,7 @@
SendStat(siGameResult, string.format(loc("%s wins!"), winnerTeam))
for i = 1, TeamsCount do
- SendStat(siPointType, loc("points"))
+ SendStat(siPointType, "!POINTS")
SendStat(siPlayerKills, tostring(teamStats[i].score), teamStats[i].name)
end
@@ -1091,7 +1091,6 @@
end
CaseFreq = 0
HealthCaseProb = 0
- Delay = 1000
SuddenDeathTurns = 50
WaterRise = 0
HealthDecrease = 0
--- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Mon Jan 14 12:35:32 2019 -0500
@@ -456,7 +456,7 @@
-- Write all the stats!
for i = 1, #sortedTeams do
- SendStat(siPointType, loc("milliseconds"))
+ SendStat(siPointType, "!TIME")
SendStat(siTeamRank, tostring(clanRanks[GetTeamClan(sortedTeams[i].name)]))
SendStat(siPlayerKills, sortedTeams[i].score, sortedTeams[i].name)
end
@@ -695,6 +695,7 @@
else
MapGen = mgDrawn
end
+ MapFeatureSize = 12
if mapID == nil then
mapID = 2 + GetRandom(7)
--- a/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.cfg Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.cfg Mon Jan 14 12:35:32 2019 -0500
@@ -1,2 +1,2 @@
-*
+The_Specialists
locked
--- a/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,99 +1,141 @@
----------------------------------
--- THE SPECIALISTS MODE 0.7
--- by mikade
+-- THE SPECIALISTS
+-- original style by mikade
----------------------------------
--- version history
------------------
--- version 0.1
------------------
--- concept test
+-- SCRIPT PARAMETER SYNTAX
+--[[
+With the script parameter, you can change the order of specialists per team.
+
+== Changing the specialists for all teams ==
+In the script parameter, put:
+
+ t=XXXXXXXX
-----------------
--- version 0.2
-----------------
--- added gfRandomOrder to gameflags
--- removed some deprecated variables/methods
--- fixed lack of portal reset
+Where 'X' is a “specialist letter” (see below). Each letter stands for
+the role of a hedgehog in the team (in that order).
+If you leave out a letter, that hedgehog will be the default.
-----------------
--- version 0.3
-----------------
--- added switching on start
--- removed switch from engineer weaponset
+== Changing the specialists for on a per-team basis ==
+Same as above, but instead of “t”, you use “t1”, “t2”, ... “t8” for
+each of the teams (team 1 to team 8).
+
+== Specialist letters ==
-----------------
--- version 0.4
-----------------
--- Attempted to:
--- fix potential switch explit
--- improve user feedback on start
+ S = Soldier
+ E = Engineer
+ N = Ninja
+ D = Demo
+ X = Sniper
+ H = Saint
+ P = Pyro
+ L = Loon
+
+== Examples ==
+Example 1:
-----------------
--- version 0.5
-----------------
--- provision for variable minetimer / demo mines set to 5000ms
--- don't autoswitch if player only has 1 hog on his team
+ t=SSSSPPPP
+
+4 soldiers and 4 pyros for all teams.
+
+Example 2:
-----------------
--- version 0.6
-----------------
--- for the meanwhile, don't drop any crates except health crates
+ t1=LPHXDNES,t2=NNNNNNNN
-----------------
--- version 0.7
-----------------
--- perhogadmsdf :D :D :D :D
+Team 1: Loon, Pyro, Saint, Sniper, Demo, Ninja, Engineer, Soldier.
+Team 2: All-ninja team.
+All other teams use the default settings.
+
+]]
--------------------
---TO DO
+-- TODO
--------------------
+-- add proper gameflag checking, maybe (so that we can throw in a .cfg and let the users break everything)
--- balance hog health, maybe
--- add proper gameflag checking, maybe (so that we can throw in a .cfg and let the users break everything)
HedgewarsScriptLoad("/Scripts/Locale.lua")
HedgewarsScriptLoad("/Scripts/Tracker.lua")
+HedgewarsScriptLoad("/Scripts/Params.lua")
+
+-- default team values
+local currTeamIdx = 0;
+local teamRoles = {
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'},
+ {'S','E','N','D','X','H','P','L'}
+};
local numhhs = 0
local hhs = {}
local started = false
+function onParameters()
+ parseParams()
+ -- All teams
+ if params['t'] ~= nil then
+ for i = 1, 8 do
+ for j = 1, 8 do
+ if string.len(params['t']) >= j then
+ teamRoles[i][j] = string.upper(string.sub(params['t'],j,j));
+ end
+ end
+ end
+ end
+ -- Specific team
+ for i = 1, 8 do
+ if params['t'..i] ~= nil then
+ for j = 1, 8 do
+ if string.len(params['t'..i]) >= j then
+ teamRoles[i][j] = string.upper(string.sub(params['t'..i],j,j));
+ end
+ end
+ end
+ end
+end
+
function onNewAmmoStore(groupIndex, hogIndex)
SetAmmo(amSkip, 9, 0, 0, 0)
+ groupIndex = groupIndex + 1
+ hogIndex = hogIndex + 1
- if hogIndex == 0 then
+ if teamRoles[groupIndex][hogIndex] == 'S' then
SetAmmo(amBazooka, 1, 0, 0, 0)
SetAmmo(amGrenade, 1, 0, 0, 0)
SetAmmo(amShotgun, 1, 0, 0, 0)
- elseif hogIndex == 1 then
+ elseif teamRoles[groupIndex][hogIndex] == 'E' then
SetAmmo(amGirder, 2, 0, 0, 0)
SetAmmo(amBlowTorch, 1, 0, 0, 0)
SetAmmo(amPickHammer, 1, 0, 0, 0)
- elseif hogIndex == 2 then
+ elseif teamRoles[groupIndex][hogIndex] == 'N' then
SetAmmo(amRope, 9, 0, 0, 0)
SetAmmo(amParachute, 9, 0, 0, 0)
SetAmmo(amFirePunch, 1, 0, 0, 0)
- elseif hogIndex == 3 then
+ elseif teamRoles[groupIndex][hogIndex] == 'D' then
SetAmmo(amDynamite, 1, 0, 0, 0)
SetAmmo(amMine, 1, 0, 0, 0)
SetAmmo(amDrill, 1, 0, 0, 0)
- elseif hogIndex == 4 then
+ elseif teamRoles[groupIndex][hogIndex] == 'X' then
SetAmmo(amSniperRifle, 1, 0, 0, 0)
SetAmmo(amDEagle, 1, 0, 0, 0)
SetAmmo(amPortalGun, 2, 0, 0, 0)
- elseif hogIndex == 5 then
+ elseif teamRoles[groupIndex][hogIndex] == 'H' then
SetAmmo(amSeduction, 9, 0, 0, 0)
SetAmmo(amResurrector, 1, 0, 0, 0)
SetAmmo(amInvulnerable, 1, 0, 0, 0)
- SetAmmo(amLowGravity, 1, 0, 0, 0)
- elseif hogIndex == 6 then
+ SetAmmo(amLowGravity, 1, 0, 0, 0)
+ elseif teamRoles[groupIndex][hogIndex] == 'P' then
SetAmmo(amFlamethrower, 1, 0, 0, 0)
SetAmmo(amMolotov, 1, 0, 0, 0)
SetAmmo(amNapalm, 1, 0, 0, 0)
- elseif hogIndex == 7 then
+ elseif teamRoles[groupIndex][hogIndex] == 'L' then
SetAmmo(amBaseballBat, 1, 0, 0, 0)
SetAmmo(amGasBomb, 1, 0, 0, 0)
SetAmmo(amKamikaze, 1, 0, 0, 0)
@@ -109,95 +151,101 @@
for i = 0, (numhhs-1) do
- currTeam = GetHogTeamName(hhs[i])
+ currTeam = GetHogTeamName(hhs[i])
- if currTeam == lastTeam then
- z = z + 1
- else
- z = 1
- end
-
- if z == 1 then
+ if currTeam == lastTeam then
+ z = z + 1
+ else
+ z = 1
+ currTeamIdx = currTeamIdx + 1;
+ end
- SetHogName(hhs[i],loc("Soldier"))
- SetHogHat(hhs[i], "sf_vega")
- SetHealth(hhs[i],200)
-
- elseif z == 2 then
+ -- Scale health of each hog with “initial health” setting from game scheme.
+ -- 100 = default health
+ -- 200 = double health for all hogs
+ -- 50 = half health for all hogs
+ local function scaleHealth(health)
+ local newHealth = div(health * InitHealth, 100)
+ -- At least 1 health
+ if newHealth <= 0 then
+ newHealth = 1
+ end
+ return newHealth
+ end
- SetHogHat(hhs[i], "Glasses")
- SetHogName(hhs[i],loc("Engineer"))
+ if teamRoles[currTeamIdx][z] == 'S' then
- elseif z == 3 then
+ SetHogName(hhs[i],loc("Soldier"))
+ SetHogHat(hhs[i], "sf_vega")
+ SetHealth(hhs[i], scaleHealth(200))
- SetHogName(hhs[i],loc("Ninja"))
- SetHogHat(hhs[i], "NinjaFull")
- SetHealth(hhs[i],80)
+ elseif teamRoles[currTeamIdx][z] == 'E' then
- elseif z == 4 then
+ SetHogHat(hhs[i], "Glasses")
+ SetHogName(hhs[i],loc("Engineer"))
+ SetHealth(hhs[i], scaleHealth(100))
+
+ elseif teamRoles[currTeamIdx][z] == 'N' then
- SetHogName(hhs[i],loc("Demo"))
- SetHogHat(hhs[i], "Skull")
- SetHealth(hhs[i],200)
+ SetHogName(hhs[i],loc("Ninja"))
+ SetHogHat(hhs[i], "NinjaFull")
+ SetHealth(hhs[i], scaleHealth(80))
- elseif z == 5 then
+ elseif teamRoles[currTeamIdx][z] == 'D' then
- SetHogName(hhs[i],loc("Sniper"))
- SetHogHat(hhs[i], "Sniper")
- SetHealth(hhs[i],120)
+ SetHogName(hhs[i],loc("Demo"))
+ SetHogHat(hhs[i], "Skull")
+ SetHealth(hhs[i], scaleHealth(200))
+
+ elseif teamRoles[currTeamIdx][z] == 'X' then
- elseif z == 6 then
+ SetHogName(hhs[i],loc("Sniper"))
+ SetHogHat(hhs[i], "Sniper")
+ SetHealth(hhs[i], scaleHealth(120))
- SetHogName(hhs[i],loc("Saint"))
- SetHogHat(hhs[i], "angel")
- SetHealth(hhs[i],300)
+ elseif teamRoles[currTeamIdx][z] == 'H' then
- elseif z == 7 then
+ SetHogName(hhs[i],loc("Saint"))
+ SetHogHat(hhs[i], "angel")
+ SetHealth(hhs[i], scaleHealth(300))
- SetHogName(hhs[i],loc("Pyro"))
- SetHogHat(hhs[i], "Gasmask")
- SetHealth(hhs[i],150)
+ elseif teamRoles[currTeamIdx][z] == 'P' then
- elseif z == 8 then
+ SetHogName(hhs[i],loc("Pyro"))
+ SetHogHat(hhs[i], "Gasmask")
+ SetHealth(hhs[i], scaleHealth(150))
- SetHogName(hhs[i],loc("Loon"))
- SetHogHat(hhs[i], "clown")
- SetHealth(hhs[i],100)
+ elseif teamRoles[currTeamIdx][z] == 'L' then
- end
+ SetHogName(hhs[i],loc("Loon"))
+ SetHogHat(hhs[i], "clown")
+ SetHealth(hhs[i], scaleHealth(100))
- lastTeam = GetHogTeamName(hhs[i])
+ end
+
+ lastTeam = GetHogTeamName(hhs[i])
end
end
function onGameInit()
- ClearGameFlags()
- EnableGameFlags(gfRandomOrder, gfResetWeps, gfInfAttack, gfPlaceHog, gfPerHogAmmo, gfSwitchHog)
- Delay = 10
+ -- Force-disable harmful game flags
+ DisableGameFlags(gfSharedAmmo, gfKing)
+ -- Force-enable game-critical game flags
+ EnableGameFlags(gfPerHogAmmo, gfResetWeps)
+ -- NOTE: For your game scheme, these game flags are recommended: gfResetWeps, gfPlaceHog, gfSwitchHog, gfInfAttack
+
+ -- No weapon crates
HealthCaseProb = 100
+
+ -- Instructions
+ Goals = loc("The Specialists: Each hedgehog starts with its own weapon set")
end
function onGameStart()
CreateTeam()
-
- ShowMission (
- loc("THE SPECIALISTS"),
- loc("a Hedgewars mini-game"),
-
- loc("Eliminate the enemy specialists.") .. "|" ..
- " " .. "|" ..
-
- loc("Game Modifiers: ") .. "|" ..
- loc("Per-Hog Ammo") .. "|" ..
- loc("Weapons Reset") .. "|" ..
- loc("Unlimited Attacks") .. "|" ..
-
- "", 4, 4000
- )
-
trackTeams()
end
@@ -206,13 +254,13 @@
function onNewTurn()
started = true
- AddCaption(loc("Prepare yourself") .. ", " .. GetHogName(CurrentHedgehog).. "!")
+ AddCaption(string.format(loc("Prepare yourself, %s!"), GetHogName(CurrentHedgehog)))
end
function onGearAdd(gear)
- if GetGearType(gear) == gtHedgehog then
+ if GetGearType(gear) == gtHedgehog then
hhs[numhhs] = gear
numhhs = numhhs + 1
elseif (GetGearType(gear) == gtMine) and (started == true) then
--- a/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua Mon Jan 14 12:35:32 2019 -0500
@@ -7,9 +7,12 @@
function onGameInit()
MapGen = mgDrawn
TemplateFilter = 0
+ local mapComplexity = MapFeatureSize
+ -- reset feature size after use, to disable scaling
+ MapFeatureSize = 12
fillMap(false)
side = 0
- for i = 0,1+MapFeatureSize*2 do
+ for i = 0,1+mapComplexity*2 do
if side > 3 then
size = GetRandom(4)+4
else
--- a/share/hedgewars/Data/Scripts/SimpleMission.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/SimpleMission.lua Mon Jan 14 12:35:32 2019 -0500
@@ -53,27 +53,30 @@
- probability probability in crates (default: 0)
TEAM DATA
+ - isMissionTeam if true, this is the player's chosen team for this mission (default: false)
- hogs table of hedgehogs in this team (must contain at least 1 hog)
- - name team name
- clanID ID of the clan to which this team belongs to. Counting starts at 0.
By default, each team goes into its own clan.
Important: The clan of the player and allies MUST be 0.
Important: You MUST either set the clan ID explicitly for all teams or none of them.
+ These arguments will be ignored if this is a mission team:
+ - name team name
- flag flag name (default: hedgewars)
- grave grave name (has default grave for each team)
- fort fort name (default: Castle)
HEDGEHOG DATA:
- id optional identifier for goals
- - name hog name
+ - health hog health (default: 100)
+ - ammo table of ammo types
- x, y hog position (default: spawns randomly on land)
- - botLevel 1-5: Bot level (lower=stronger). 0=human player (default: 0)
- - hat hat name (default: NoHat)
- - health hog health (default: 100)
- poisoned if true, hedgehog starts poisoned with 5 poison damage. Set to a number for other poison damage (default: false)
- frozen if true, hedgehogs starts frozen (default: false)
- faceLeft initial facing direction. true=left, false=false (default: false)
- - ammo table of ammo types
+ These arguments will be ignored if the hog is in a mission team:
+ - name hog name
+ - botLevel 1-5: Bot level (lower=stronger). 0=human player (default: 0)
+ - hat hat name (default: NoHat)
GEAR TYPES:
- type gear type
@@ -264,6 +267,8 @@
_G.sm.playerClan = 0
+ _G.sm.wonVarWritten = false
+
_G.sm.makeStats = function(winningClan, customAchievements)
for t=0, TeamsCount-1 do
local team = GetTeamName(t)
@@ -524,6 +529,10 @@
_G.sm.win = function()
if not _G.sm.gameEnded then
_G.sm.gameEnded = true
+ if not _G.sm.wonVarWritten then
+ SaveMissionVar("Won", "true")
+ _G.sm.wonVarWritten = true
+ end
AddCaption(loc("Victory!"), capcolDefault, capgrpGameState)
SendStat(siGameResult, loc("You win!"))
if GetHogLevel(CurrentHedgehog) == 0 then
@@ -650,12 +659,35 @@
else
clanID = teamData.clanID
end
- grave = def(teamData.grave, defaultGraves[math.min(teamID, 8)])
- fort = def(teamData.fort, "Castle")
- voice = def(teamData.voice, "Default")
- flag = def(teamData.flag, defaultFlags[math.min(teamID, 8)])
+
+ local realName
+ if teamData.isMissionTeam then
+ realName = AddMissionTeam(-(clanID+1))
+ _G.sm.playerClan = clanID
+ else
+ grave = def(teamData.grave, defaultGraves[math.min(teamID, 8)])
+ fort = def(teamData.fort, "Castle")
+ voice = def(teamData.voice, "Default")
+ flag = def(teamData.flag, defaultFlags[math.min(teamID, 8)])
+
+ realName = AddTeam(name, -(clanID+1), grave, fort, voice, flag)
+ end
- AddTeam(name, -(clanID+1), grave, fort, voice, flag)
+ -- Update all teamDefeat goals if the real team name differs from the
+ -- team configuration.
+ -- (AddTeam might change the name due to naming collisions)
+ if name ~= realName then
+ local checks = { params.customGoals, params.customNonGoals }
+ for c=1, 2 do
+ if checks[c] then
+ for k,goal in pairs(checks[c]) do
+ if goal.type == "teamDefeat" and goal.teamName == name then
+ goal.teamName = realName
+ end
+ end
+ end
+ end
+ end
for hogID, hogData in pairs(teamData.hogs) do
local name, botLevel, health, hat
@@ -663,7 +695,12 @@
botLevel = def(hogData.botLevel, 0)
health = def(hogData.health, 100)
hat = def(hogData.hat, "NoHat")
- local hog = AddHog(name, botLevel, health, hat)
+ local hog
+ if teamData.isMissionTeam then
+ hog = AddMissionHog(health)
+ else
+ hog = AddHog(name, botLevel, health, hat)
+ end
if hogData.x ~= nil and hogData.y ~= nil then
SetGearPosition(hog, hogData.x, hogData.y)
end
@@ -708,6 +745,13 @@
end
end
+ _G.onGameResult = function(winningClan)
+ if (params.customGoals == nil) and (not _G.sm.wonVarWritten) and (winningClan == _G.sm.playerClan) then
+ SaveMissionVar("Won", "true")
+ _G.sm.wonVarWritten = true
+ end
+ end
+
_G.onAmmoStoreInit = function()
local ammoTypesDone = {}
-- Read script's stated ammo wishes
--- a/share/hedgewars/Data/Scripts/SpeedShoppa.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/SpeedShoppa.lua Mon Jan 14 12:35:32 2019 -0500
@@ -21,6 +21,7 @@
]=]
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Locale.lua")
--[[
@@ -44,11 +45,6 @@
optional fields:
- missionTitle: the name of the mission (optional but highly recommended) (default: "Speed Shoppa")
- - hogHat: hat of the hedgehog (default: "NoHat")
- - hogName: name of the hedgehog (default: "Roper")
- - teamName: name of the hedgehog’s team (default: "Shoppers")
- - teamGrave: name of the hedgehog’s grave (default: "Statue")
- - teamFlag: name of the team’s flag (default: "cm_shoppa")
- clanColor: color of the (only) clan (default: -1, default first clan color)
- goalText: A short string explaining the goal of the mission
(default: "Use your rope to collect all crates as fast as possible.")
@@ -73,14 +69,9 @@
local crates
function SpeedShoppaMission(params)
- if params.hogHat == nil then params.hogHat = "NoHat" end
- if params.hogName == nil then params.hogName = loc("Roper") end
- if params.teamName == nil then params.teamName = loc("Shoppers") end
if params.goalText == nil then params.goalText = loc("Use your rope to collect all crates as fast as possible.") end
if params.missionTitle == nil then params.missionTitle = loc("Speed Shoppa") end
if params.clanColor == nil then params.clanColor = -1 end
- if params.teamGrave == nil then params.teamGrave = "Statue" end
- if params.teamFlag == nil then params.teamFlag = "cm_shoppa" end
if params.extra_onGameInit == nil then params.extra_onGameInit = function() end end
if params.extra_onGameStart == nil then params.extra_onGameStart = function() end end
if params.faceLeft == nil then params.faceLeft = false end
@@ -94,15 +85,14 @@
CaseFreq = 0
MinesNum = 0
Explosives = 0
- Delay = 10
Theme = params.theme
Map = params.map
-- Disable Sudden Death
WaterRise = 0
HealthDecrease = 0
- AddTeam(params.teamName, params.clanColor, params.teamGrave, "Castle", "Default", params.teamFlag)
- playerHog = AddHog(params.hogName, 0, 1, params.hogHat)
+ AddMissionTeam(params.clanColor)
+ playerHog = AddMissionHog(1)
HogTurnLeft(playerHog, params.faceLeft)
SetGearPosition(playerHog, params.hog_x, params.hog_y)
@@ -116,9 +106,10 @@
_G.onGameStart = function()
SendHealthStatsOff()
- ShowMission(params.missionTitle, loc("Challenge"), params.goalText, -amRope, 5000)
+ local append = getReadableChallengeRecord("TimeRecord")
+ ShowMission(params.missionTitle, loc("Challenge"), params.goalText .. "|" .. append, -amRope, 5000)
-- <crates collected>/<total number of crates>
- SetTeamLabel(params.teamName, string.format(loc("%d/%d"), cratesCollected, #crates))
+ SetTeamLabel(GetHogTeamName(playerHog), string.format(loc("%d/%d"), cratesCollected, #crates))
for i=1,#crates do
spawnCrate(crates[i].x, crates[i].y)
end
@@ -133,7 +124,7 @@
if GetGearType(gear) == gtCase and not hogHurt and not timeOut then
cratesCollected = cratesCollected + 1
-- <crates collected>/<total number of crates>
- SetTeamLabel(params.teamName, string.format(loc("%d/%d"), cratesCollected, #crates))
+ SetTeamLabel(GetHogTeamName(playerHog), string.format(loc("%d/%d"), cratesCollected, #crates))
PlaySound(sndShotgunReload)
if cratesCollected == #crates then
endTime = TurnTimeLeft
@@ -165,21 +156,23 @@
_G.finalize = function()
if not gameEnded then
if cratesCollected == #crates then
+ SaveMissionVar("Won", "true")
PlaySound(sndVictory, playerHog)
SetEffect(playerHog, heInvulnerable, 1)
SetState(playerHog, bor(GetState(playerHog), gstWinner))
SetState(playerHog, band(GetState(playerHog), bnot(gstHHDriven)))
AddCaption(loc("Challenge completed!"))
SendStat(siGameResult, loc("Challenge completed!"))
- SendStat(siPointType, loc("milliseconds"))
+ SendStat(siPointType, "!TIME")
local time = startTime - endTime
- SendStat(siPlayerKills, tostring(time), params.teamName)
+ SendStat(siPlayerKills, tostring(time), GetHogTeamName(playerHog))
SendStat(siCustomAchievement, string.format(loc("You have finished the challenge in %.3f s."), (time/1000)))
SetTurnTimeLeft(0)
+ updateChallengeRecord("TimeRecord", time)
else
SendStat(siGameResult, loc("Challenge failed!"))
- SendStat(siPointType, loc("crate(s)"))
- SendStat(siPlayerKills, tostring(cratesCollected), params.teamName)
+ SendStat(siPointType, "!CRATES")
+ SendStat(siPlayerKills, tostring(cratesCollected), GetHogTeamName(playerHog))
SendStat(siCustomAchievement, string.format(loc("You have collected %d out of %d crate(s)."), cratesCollected, #crates))
end
gameEnded = true
--- a/share/hedgewars/Data/Scripts/TargetPractice.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/TargetPractice.lua Mon Jan 14 12:35:32 2019 -0500
@@ -43,10 +43,6 @@
wind = ,
solidLand = ,
artillery = ,
- hogHat = ,
- hogName = ,
- teamName = ,
- teamGrave = ,
clanColor = ,
goalText = ,
shootText =
@@ -55,6 +51,7 @@
----- snip -----
]=]
+HedgewarsScriptLoad("/Scripts/Utils.lua")
HedgewarsScriptLoad("/Scripts/Locale.lua")
local player = nil
@@ -95,11 +92,6 @@
- wind: the initial wind (-100 to 100) (default: 0 (no wind))
- solidLand: weather the terrain is indestructible (default: false)
- artillery: if true, the hog can’t move (default: false)
- - hogHat: hat of the hedgehog (default: "NoHat")
- - hogName: name of the hedgehog (default: "Trainee")
- - teamName: name of the hedgehog’s team (default: "Training Team")
- - teamGrave: name of the hedgehog’s grave
- - teamFlag: name of the team’s flag (default: "cm_crosshair")
- secGearType: cluster of projectile gear (if present) (used to re-center camera)
- clanColor: color of the (only) clan (default: -1, default first clan color)
- goalText: A short string explaining the goal of the mission
@@ -114,14 +106,9 @@
end
function TargetPracticeMission(params)
- if params.hogHat == nil then params.hogHat = "NoHat" end
- if params.hogName == nil then params.hogName = loc("Trainee") end
- if params.teamName == nil then params.teamName = loc("Training Team") end
if params.goalText == nil then params.goalText = loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission.") end
if params.shootText == nil then params.shootText = loc("You have shot %d times.") end
if params.clanColor == nil then params.clanColor = -1 end
- if params.teamGrave == nil then params.teamGrave= "Statue" end
- if params.teamFlag == nil then params.teamFlag = "cm_crosshair" end
if params.wind == nil then params.wind = 0 end
local solid, artillery
@@ -159,16 +146,17 @@
SetWind(params.wind)
- AddTeam(loc(params.teamName), params.clanColor, params.teamGrave, "Flowerhog", "Default", params.teamFlag)
+ AddMissionTeam(params.clanColor)
- player = AddHog(loc(params.hogName), 0, 1, params.hogHat)
+ player = AddMissionHog(1)
SetGearPosition(player, params.hog_x, params.hog_y)
end
_G.onGameStart = function()
SendHealthStatsOff()
- ShowMission(params.missionTitle, loc("Aiming practice"), params.goalText, -params.ammoType, 5000)
- SetTeamLabel(params.teamName, "0")
+ local recordInfo = getReadableChallengeRecord("Highscore")
+ ShowMission(params.missionTitle, loc("Aiming practice"), params.goalText .. "|" .. recordInfo, -params.ammoType, 5000)
+ SetTeamLabel(GetHogTeamName(player), "0")
spawnTarget()
end
@@ -207,10 +195,8 @@
if end_timer == 0 then
generateStats()
EndGame()
- else
- SetTurnTimeLeft(time_goal)
end
- end_timer = end_timer - 20
+ end_timer = end_timer - 20
end
for gear, _ in pairs(gearsInGame) do
@@ -238,12 +224,13 @@
_G.onGearDamage = function(gear, damage)
if GetGearType(gear) == gtTarget then
scored = scored + 1
- SetTeamLabel(params.teamName, tostring(getTargetsScore()))
+ SetTeamLabel(GetHogTeamName(player), tostring(getTargetsScore()))
if scored < total_targets then
AddCaption(string.format(loc("Targets left: %d"), (total_targets-scored)), capcolDefault, capgrpMessage)
spawnTarget()
else
if not game_lost then
+ SaveMissionVar("Won", "true")
AddCaption(loc("You have destroyed all targets!"), capcolDefault, capgrpGameState)
ShowMission(params.missionTitle, loc("Aiming practice"), loc("Congratulations! You have destroyed all targets within the time."), 0, 0)
PlaySound(sndVictory, player)
@@ -253,6 +240,7 @@
-- Disable control
SetInputMask(0)
AddAmmo(player, params.ammoType, 0)
+ SetTurnTimePaused(true)
end
end
end
@@ -296,7 +284,7 @@
local end_score_time = math.ceil(time_goal/(params.time/6000))
local end_score_accuracy = math.ceil(accuracy * 60)
end_score_overall = end_score_time + end_score_targets + end_score_accuracy
- SetTeamLabel(params.teamName, tostring(end_score_overall))
+ SetTeamLabel(GetHogTeamName(player), tostring(end_score_overall))
SendStat(siGameResult, loc("You have finished the target practice!"))
@@ -314,7 +302,9 @@
end
end_score_overall = end_score_targets
end
- SendStat(siPointType, loc("point(s)"))
- SendStat(siPlayerKills, tostring(end_score_overall), loc(params.teamName))
+ SendStat(siPointType, "!POINTS")
+ SendStat(siPlayerKills, tostring(end_score_overall), GetHogTeamName(player))
+ -- Update highscore
+ updateChallengeRecord("Highscore", end_score_overall)
end
end
--- a/share/hedgewars/Data/Scripts/Utils.lua Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Scripts/Utils.lua Mon Jan 14 12:35:32 2019 -0500
@@ -1,5 +1,7 @@
-- Library for miscellaneous utilitiy functions and global helper variables
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
--[[ FUNCTIONS ]]
-- Check if a gear is inside a box
function gearIsInBox(gear, x, y, w, h)
@@ -33,6 +35,61 @@
end
end
+local function challengeRecordToString(recordType, value)
+ if recordType == "TimeRecord" then
+ return string.format(loc("Team's best time: %.3fs"), value/1000)
+ elseif recordType == "TimeRecordHigh" then
+ return string.format(loc("Team's longest time: %.3fs"), value/1000)
+ elseif recordType == "Highscore" then
+ return string.format(loc("Team highscore: %d"), value)
+ elseif recordType == "Lowscore" then
+ return string.format(loc("Team lowscore: %d"), value)
+ end
+end
+
+function getReadableChallengeRecord(recordType)
+ local record = tonumber(GetMissionVar(recordType))
+ if type(record) ~= "number" then
+ return ""
+ else
+ return challengeRecordToString(recordType, record)
+ end
+end
+
+function updateChallengeRecord(recordType, value, stat)
+ local oldRecord = tonumber(GetMissionVar(recordType))
+ local newRecord = false
+ if stat == nil then
+ stat = true
+ end
+ if type(oldRecord) ~= "number" then
+ newRecord = true
+ else
+ local recordBeaten = false
+ if recordType == "Lowscore" or recordType == "TimeRecord" then
+ if value < oldRecord then
+ recordBeaten = true
+ newRecord = true
+ end
+ else
+ if value > oldRecord then
+ recordBeaten = true
+ newRecord = true
+ end
+ end
+ if stat then
+ if recordBeaten then
+ SendStat(siCustomAchievement, loc("You have beaten the team record, congratulations!"))
+ else
+ SendStat(siCustomAchievement, challengeRecordToString(recordType, oldRecord))
+ end
+ end
+ end
+ if newRecord then
+ SaveMissionVar(recordType, value)
+ end
+end
+
-- Completely fill the map with land. Requires MapGen=mgDrawn.
-- If flush is false, FlushPoints() is not called.
function fillMap(flush)
--- a/share/hedgewars/Data/Sounds/voices/Default_ru/CMakeLists.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Sounds/voices/Default_ru/CMakeLists.txt Mon Jan 14 12:35:32 2019 -0500
@@ -8,6 +8,7 @@
Firepunch*.ogg
Flawless.ogg
Hello.ogg
+Hmm.ogg
Hurry.ogg
Illgetyou.ogg
Incoming.ogg
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Hmm.ogg has changed
--- a/share/hedgewars/Data/Themes/Bath/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Themes/Bath/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Themes/Castle/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Themes/Castle/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Themes/Halloween/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Themes/Halloween/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Themes/Island/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Themes/Island/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum
--- a/share/hedgewars/Data/Themes/Planes/credits.txt Mon Jan 14 12:34:47 2019 -0500
+++ b/share/hedgewars/Data/Themes/Planes/credits.txt Mon Jan 14 12:35:32 2019 -0500
@@ -1,1 +1,1 @@
-Finn Brice
+John Dum