merge with default spacecampaign
authorPeriklis Ntanasis <pntanasis@gmail.com>
Wed, 25 Sep 2013 05:42:16 +0300
branchspacecampaign
changeset 9646 7588daa8d28f
parent 9645 da7b4d8c181e (current diff)
parent 9464 901e363d5837 (diff)
child 9647 2898b802a49e
child 9648 3a3defce1b28
merge with default
QTfrontend/hwform.cpp
hedgewars/uScript.pas
--- a/CMakeLists.txt	Sun Sep 22 18:34:53 2013 +0300
+++ b/CMakeLists.txt	Wed Sep 25 05:42:16 2013 +0300
@@ -72,13 +72,13 @@
 include(${CMAKE_MODULE_PATH}/compilerchecks.cmake)
 
 #set default compiler flags
-add_flag_append(CMAKE_C_FLAGS "-Wall -pipe")
+add_flag_append(CMAKE_C_FLAGS "-Wall -pipe -fPIC")
 add_flag_append(CMAKE_C_FLAGS_RELEASE "-Os")
 add_flag_append(CMAKE_C_FLAGS_DEBUG "-Wextra -O0")
-add_flag_append(CMAKE_CXX_FLAGS "-Wall -pipe")
+add_flag_append(CMAKE_CXX_FLAGS "-Wall -pipe -fPIC")
 add_flag_append(CMAKE_CXX_FLAGS_RELEASE "-Os")
 add_flag_append(CMAKE_CXX_FLAGS_DEBUG "-Wextra -O0")
-add_flag_append(CMAKE_Pascal_FLAGS "-Cs2000000")
+add_flag_append(CMAKE_Pascal_FLAGS "-Cs2000000 -fPIC")
 add_flag_append(CMAKE_Pascal_FLAGS_DEBUG "-O- -gv")
 add_flag_append(CMAKE_Pascal_FLAGS_RELEASE "-Os -Xs")
 
--- a/COPYING	Sun Sep 22 18:34:53 2013 +0300
+++ b/COPYING	Wed Sep 25 05:42:16 2013 +0300
@@ -1,12 +1,12 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                GNU GENERAL PUBLIC LICENSE
+                   Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+       Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -56,7 +56,7 @@
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+      GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
@@ -255,7 +255,7 @@
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-			    NO WARRANTY
+       NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -277,9 +277,9 @@
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+       END OF TERMS AND CONDITIONS
 
-	    How to Apply These Terms to Your New Programs
+     How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
@@ -338,3 +338,362 @@
 consider it more useful to permit linking proprietary applications with the
 library.  If this is what you want to do, use the GNU Library General
 Public License instead of this License.
+
+
+
+                GNU Free Documentation License
+                  Version 1.2, November 2002
+
+  Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
+  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+  Everyone is permitted to copy and distribute verbatim copies
+  of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other functional
+and useful document "free" in the sense of freedom: to assure everyone the
+effective freedom to copy and redistribute it, with or without modifying it,
+either commercially or noncommercially. Secondarily, this License preserves for
+the author and publisher a way to get credit for their work, while not being
+considered responsible for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative works of the
+document must themselves be free in the same sense. It complements the GNU
+General Public License, which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for manuals for free software,
+because free software needs free documentation: a free program should come with
+manuals providing the same freedoms that the software does. But this License is
+not limited to software manuals; it can be used for any textual work,
+regardless of subject matter or whether it is published as a printed book. We
+recommend this License principally for works whose purpose is instruction or
+reference.
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that contains
+a notice placed by the copyright holder saying it can be distributed under the
+terms of this License. Such a notice grants a world-wide, royalty-free license,
+unlimited in duration, to use that work under the conditions stated herein. The
+"Document", below, refers to any such manual or work. Any member of the public
+is a licensee, and is addressed as "you". You accept the license if you copy,
+modify or distribute the work in a way requiring permission under copyright
+law.
+
+A "Modified Version" of the Document means any work containing the Document or
+a portion of it, either copied verbatim, or with modifications and/or
+translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of the
+Document that deals exclusively with the relationship of the publishers or
+authors of the Document to the Document's overall subject (or to related
+matters) and contains nothing that could fall directly within that overall
+subject. (Thus, if the Document is in part a textbook of mathematics, a
+Secondary Section may not explain any mathematics.) The relationship could be a
+matter of historical connection with the subject or with related matters, or of
+legal, commercial, philosophical, ethical or political position regarding them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles are
+designated, as being those of Invariant Sections, in the notice that says that
+the Document is released under this License. If a section does not fit the
+above definition of Secondary then it is not allowed to be designated as
+Invariant. The Document may contain zero Invariant Sections. If the Document
+does not identify any Invariant Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed, as
+Front-Cover Texts or Back-Cover Texts, in the notice that says that the
+Document is released under this License. A Front-Cover Text may be at most 5
+words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy, represented
+in a format whose specification is available to the general public, that is
+suitable for revising the document straightforwardly with generic text editors
+or (for images composed of pixels) generic paint programs or (for drawings)
+some widely available drawing editor, and that is suitable for input to text
+formatters or for automatic translation to a variety of formats suitable for
+input to text formatters. A copy made in an otherwise Transparent file format
+whose markup, or absence of markup, has been arranged to thwart or discourage
+subsequent modification by readers is not Transparent. An image format is not
+Transparent if used for any substantial amount of text. A copy that is not
+"Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain ASCII without
+markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
+available DTD, and standard-conforming simple HTML, PostScript or PDF designed
+for human modification. Examples of transparent image formats include PNG, XCF
+and JPG. Opaque formats include proprietary formats that can be read and edited
+only by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself, plus such
+following pages as are needed to hold, legibly, the material this License
+requires to appear in the title page. For works in formats which do not have
+any title page as such, "Title Page" means the text near the most prominent
+appearance of the work's title, preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose title
+either is precisely XYZ or contains XYZ in parentheses following text that
+translates XYZ in another language. (Here XYZ stands for a specific section
+name mentioned below, such as "Acknowledgements", "Dedications",
+"Endorsements", or "History".) To "Preserve the Title" of such a section when
+you modify the Document means that it remains a section "Entitled XYZ"
+according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which states
+that this License applies to the Document. These Warranty Disclaimers are
+considered to be included by reference in this License, but only as regards
+disclaiming warranties: any other implication that these Warranty Disclaimers
+may have is void and has no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either commercially or
+noncommercially, provided that this License, the copyright notices, and the
+license notice saying this License applies to the Document are reproduced in
+all copies, and that you add no other conditions whatsoever to those of this
+License. You may not use technical measures to obstruct or control the reading
+or further copying of the copies you make or distribute. However, you may
+accept compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and you may
+publicly display copies.
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have printed
+covers) of the Document, numbering more than 100, and the Document's license
+notice requires Cover Texts, you must enclose the copies in covers that carry,
+clearly and legibly, all these Cover Texts: Front-Cover Texts on the front
+cover, and Back-Cover Texts on the back cover. Both covers must also clearly
+and legibly identify you as the publisher of these copies. The front cover must
+present the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition. Copying with
+changes limited to the covers, as long as they preserve the title of the
+Document and satisfy these conditions, can be treated as verbatim copying in
+other respects.
+
+If the required texts for either cover are too voluminous to fit legibly, you
+should put the first ones listed (as many as fit reasonably) on the actual
+cover, and continue the rest onto adjacent pages.
+
+If you publish or distribute Opaque copies of the Document numbering more than
+100, you must either include a machine-readable Transparent copy along with each
+Opaque copy, or state in or with each Opaque copy a computer-network location
+from which the general network-using public has access to download using
+public-standard network protocols a complete Transparent copy of the Document,
+free of added material. If you use the latter option, you must take reasonably
+prudent steps, when you begin distribution of Opaque copies in quantity, to
+ensure that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to the
+public.
+
+It is requested, but not required, that you contact the authors of the Document
+well before redistributing any large number of copies, to give them a chance to
+provide you with an updated version of the Document.
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under the
+conditions of sections 2 and 3 above, provided that you release the Modified
+Version under precisely this License, with the Modified Version filling the role
+of the Document, thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition, you must do these things
+in the Modified Version:
+
+    A. Use in the Title Page (and on the covers, if any) a title distinct from
+       that of the Document, and from those of previous versions (which should,
+       if there were any, be listed in the History section of the Document).
+       You may use the same title as a previous version if the original
+       publisher of that version gives permission.
+    B. List on the Title Page, as authors, one or more persons or entities
+       responsible for authorship of the modifications in the Modified Version,
+       together with at least five of the principal authors of the Document
+       (all of its principal authors, if it has fewer than five), unless they
+       release you from this requirement.
+    C. State on the Title page the name of the publisher of the Modified
+       Version, as the publisher.
+    D. Preserve all the copyright notices of the Document.
+    E. Add an appropriate copyright notice for your modifications adjacent to
+       the other copyright notices.
+    F. Include, immediately after the copyright notices, a license notice
+       giving the public permission to use the Modified Version under the terms
+       of this License, in the form shown in the Addendum below.
+    G. Preserve in that license notice the full lists of Invariant Sections and
+       required Cover Texts given in the Document's license notice.
+    H. Include an unaltered copy of this License.
+    I. Preserve the section Entitled "History", Preserve its Title, and add to
+       it an item stating at least the title, year, new authors, and publisher
+       of the Modified Version as given on the Title Page. If there is no
+       section Entitled "History" in the Document, create one stating the
+       title, year, authors, and publisher of the Document as given on its
+       Title Page, then add an item describing the Modified Version as stated
+       in the previous sentence.
+    J. Preserve the network location, if any, given in the Document for public
+       access to a Transparent copy of the Document, and likewise the network
+       locations given in the Document for previous versions it was based on.
+       These may be placed in the "History" section. You may omit a network
+       location for a work that was published at least four years before the
+       Document itself, or if the original publisher of the version it refers
+       to gives permission.
+    K. For any section Entitled "Acknowledgements" or "Dedications", Preserve
+       the Title of the section, and preserve in the section all the substance
+       and tone of each of the contributor acknowledgements and/or dedications
+       given therein.
+    L. Preserve all the Invariant Sections of the Document, unaltered in their
+       text and in their titles. Section numbers or the equivalent are not
+       considered part of the section titles.
+    M. Delete any section Entitled "Endorsements". Such a section may not be
+       included in the Modified Version.
+    N. Do not retitle any existing section to be Entitled "Endorsements" or to
+       conflict in title with any Invariant Section.
+    O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or appendices that
+qualify as Secondary Sections and contain no material copied from the Document,
+you may at your option designate some or all of these sections as invariant. To
+do this, add their titles to the list of Invariant Sections in the Modified
+Version's license notice. These titles must be distinct from any other section
+titles.
+
+You may add a section Entitled "Endorsements", provided it contains nothing but
+endorsements of your Modified Version by various parties--for example,
+statements of peer review or that the text has been approved by an organization
+as the authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a passage
+of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in
+the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover
+Text may be added by (or through arrangements made by) any one entity. If the
+Document already includes a cover text for the same cover, previously added by
+you or by arrangement made by the same entity you are acting on behalf of, you
+may not add another; but you may replace the old one, on explicit permission
+from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License give
+permission to use their names for publicity for or to assert or imply
+endorsement of any Modified Version.
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this License,
+under the terms defined in section 4 above for modified versions, provided that
+you include in the combination all of the Invariant Sections of all of the
+original documents, unmodified, and list them all as Invariant Sections of your
+combined work in its license notice, and that you preserve all their Warranty
+Disclaimers.
+
+The combined work need only contain one copy of this License, and multiple
+identical Invariant Sections may be replaced with a single copy. If there are
+multiple Invariant Sections with the same name but different contents, make the
+title of each such section unique by adding at the end of it, in parentheses,
+the name of the original author or publisher of that section if known, or else
+a unique number. Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History" in the
+various original documents, forming one section Entitled "History"; likewise
+combine any sections Entitled "Acknowledgements", and any sections Entitled
+"Dedications". You must delete all sections Entitled "Endorsements."
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this License
+in the various documents with a single copy that is included in the collection,
+provided that you follow the rules of this License for verbatim copying of each
+of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute it
+individually under this License, provided you insert a copy of this License into
+the extracted document, and follow this License in all other respects regarding
+verbatim copying of that document.
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate and
+independent documents or works, in or on a volume of a storage or distribution
+medium, is called an "aggregate" if the copyright resulting from the compilation
+is not used to limit the legal rights of the compilation's users beyond what the
+individual works permit. When the Document is included in an aggregate, this
+License does not apply to the other works in the aggregate which are not
+themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these copies of the
+Document, then if the Document is less than one half of the entire aggregate,
+the Document's Cover Texts may be placed on covers that bracket the Document
+within the aggregate, or the electronic equivalent of covers if the Document is
+in electronic form. Otherwise they must appear on printed covers that bracket
+the whole aggregate.
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may distribute
+translations of the Document under the terms of section 4. Replacing Invariant
+Sections with translations requires special permission from their copyright
+holders, but you may include translations of some or all Invariant Sections in
+addition to the original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the Document, and
+any Warranty Disclaimers, provided that you also include the original English
+version of this License and the original versions of those notices and
+disclaimers. In case of a disagreement between the translation and the original
+version of this License or a notice or disclaimer, the original version will
+prevail.
+
+If a section in the Document is Entitled "Acknowledgements", "Dedications", or
+"History", the requirement (section 4) to Preserve its Title (section 1) will
+typically require changing the actual title.
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except as
+expressly provided for under this License. Any other attempt to copy, modify,
+sublicense or distribute the Document is void, and will automatically terminate
+your rights under this License. However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the GNU Free
+Documentation License from time to time. Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number. If the
+Document specifies that a particular numbered version of this License "or any
+later version" applies to it, you have the option of following the terms and
+conditions either of that specified version or of any later version that has
+been published (not as a draft) by the Free Software Foundation. If the Document
+does not specify a version number of this License, you may choose any version
+ever published (not as a draft) by the Free Software Foundation.  How to use
+this License for your documents
+
+To use this License in a document you have written, include a copy of the
+License in the document and put the following copyright and license notices just
+after the title page:
+
+  Copyright (c)  YEAR  YOUR NAME.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.2
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled "GNU
+  Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace
+the "with...Texts." line with this:
+
+  with the Invariant Sections being LIST THEIR TITLES, with the
+  Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other combination of
+the three, merge those two alternatives to suit the situation.
+
+If your document contains nontrivial examples of program code, we recommend
+releasing these examples in parallel under your choice of free software license,
+such as the GNU General Public License, to permit their use in free software.
+
--- a/QTfrontend/HWApplication.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/HWApplication.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -38,6 +38,8 @@
 HWApplication::HWApplication(int &argc, char **argv) :
     QApplication(argc, argv)
 {
+    form = 0;
+
 #if !defined(Q_OS_WIN)
     signal(SIGINT, &terminateFrontend);
 #endif
--- a/QTfrontend/hwform.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/hwform.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -165,14 +165,13 @@
 #endif
 
 #ifdef __APPLE__
-    AutoUpdater* updater = NULL;
     if (config->isAutoUpdateEnabled())
     {
-#ifdef __APPLE__
+        AutoUpdater* updater = NULL;
+
 #ifdef SPARKLE_ENABLED
         updater = new SparkleAutoUpdater();
 #endif
-#endif
         if (updater)
         {
             updater->checkForUpdates();
@@ -660,7 +659,7 @@
         }
 
         QList<HWTeam> teamsList;
-        for (QStringList::iterator it = tmNames.begin(); it != tmNames.end(); it++)
+        for (QStringList::iterator it = tmNames.begin(); it != tmNames.end(); ++it)
         {
             HWTeam team(*it);
             team.loadFromFile();
@@ -706,7 +705,7 @@
 
 void HWForm::GoToPage(int id)
 {
-    bool stopAnim = false;
+    //bool stopAnim = false;
 
     int lastid = ui.Pages->currentIndex();
     PagesStack.push(ui.Pages->currentIndex());
@@ -723,7 +722,7 @@
 
 
 #if (QT_VERSION >= 0x040600)
-    if (!stopAnim)
+    //if (!stopAnim)
     {
         /**Start animation :**/
         int coeff = 1;
@@ -819,7 +818,7 @@
         stopAnim = true; */
 
     if ((!hwnet) || (!hwnet->isInRoom()))
-        if (id == ID_PAGE_NETGAME || id == ID_PAGE_NETGAME)
+        if (id == ID_PAGE_NETGAME)
         {
             stopAnim = true;
             GoBack();
--- a/QTfrontend/res/html/about.html	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/res/html/about.html	Wed Sep 25 05:42:16 2013 +0300
@@ -82,7 +82,7 @@
             Lithuanian: Lukas Urbonas &lt;<a href="mailto:lukasu08@gmail.com">lukasu08@gmail.com</a>&gt;<br>
             Polish: Maciej Mroziński &lt;<a href="mailto:mynick2@o2.pl">mynick2@o2.pl</a>&gt;, Wojciech Latkowski &lt;<a href="mailto:magik17l@gmail.com">magik17l@gmail.com</a>&gt;, Piotr Mitana, Maciej Górny<br>
             Portuguese: Fábio Canário &lt;<a href="mailto:inufabie@gmail.com">inufabie@gmail.com</a>&gt;<br>
-            Russian: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;<br>
+            Russian: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;, Vitaly Novichkov &lt;<a href="mailto:admin@wohlnet.ru">admin@wohlnet.ru</a>&gt;<br>
             Slovak: Jose Riha<br>
             Spanish: Carlos Vives &lt;<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>&gt;<br>
             Swedish: Niklas Grahn &lt;<a href="mailto:raewolusjoon@yaoo.com">raewolusjoon@yaoo.com</a>&gt;, Henrik Rostedt &lt;<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>&gt;<br>
--- a/QTfrontend/team.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/team.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -171,7 +171,7 @@
 
 bool HWTeam::loadFromFile()
 {
-    QSettings teamfile(QString("physfs://Teams/%1.hwt").arg(m_name), QSettings::IniFormat, 0);
+    QSettings teamfile(QString("physfs://Teams/%1.hwt").arg(DataManager::safeFileName(m_name)), QSettings::IniFormat, 0);
     teamfile.setIniCodec("UTF-8");
     m_name = teamfile.value("Team/Name", m_name).toString();
     m_grave = teamfile.value("Team/Grave", "Statue").toString();
@@ -204,7 +204,7 @@
 
 bool HWTeam::fileExists()
 {
-    QFile f(QString("physfs://Teams/%1.hwt").arg(m_name));
+    QFile f(QString("physfs://Teams/%1.hwt").arg(DataManager::safeFileName(m_name)));
     return f.exists();
 }
 
@@ -212,7 +212,7 @@
 {
     if(m_isNetTeam)
         return false;
-    QFile cfgfile(QString("physfs://Teams/%1.hwt").arg(m_name));
+    QFile cfgfile(QString("physfs://Teams/%1.hwt").arg(DataManager::safeFileName(m_name)));
     cfgfile.remove();
     return true;
 }
@@ -221,12 +221,12 @@
 {
     if (OldTeamName != m_name)
     {
-        QFile cfgfile(QString("physfs://Teams/%1.hwt").arg(OldTeamName));
+        QFile cfgfile(QString("physfs://Teams/%1.hwt").arg(DataManager::safeFileName(OldTeamName)));
         cfgfile.remove();
         OldTeamName = m_name;
     }
 
-    QString fileName = QString("physfs://Teams/%1.hwt").arg(m_name);
+    QString fileName = QString("physfs://Teams/%1.hwt").arg(DataManager::safeFileName(m_name));
     DataManager::ensureFileExists(fileName);
     QSettings teamfile(fileName, QSettings::IniFormat, 0);
     teamfile.setIniCodec("UTF-8");
@@ -276,17 +276,6 @@
     sl.push_back(QString("evoicepack " + m_voicepack));
     sl.push_back(QString("eflag " + m_flag));
 
-    if (!m_isNetTeam)
-    {
-        for(int i = 0; i < BINDS_NUMBER; i++)
-        {
-            if(m_binds[i].strbind.isEmpty() || m_binds[i].strbind == "default")
-                sl.push_back(QString("ebind " + config->bind(i) + " " + m_binds[i].action));
-            else
-                sl.push_back(QString("ebind " + m_binds[i].strbind + " " + m_binds[i].action));
-        }
-    }
-
     for (int t = 0; t < m_numHedgehogs; t++)
     {
         sl.push_back(QString("eaddhh %1 %2 %3")
--- a/QTfrontend/ui/dialog/upload_video.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/ui/dialog/upload_video.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -291,7 +291,7 @@
     QNetworkReply *reply = (QNetworkReply*)sender();
     reply->deleteLater();
 
-    location = QString::fromAscii(reply->rawHeader("Location"));
+    location = QString::fromLatin1(reply->rawHeader("Location"));
     if (location.isEmpty())
     {
         QString errorStr = QMessageBox::tr("Error while sending metadata to youtube.com:\n");
--- a/QTfrontend/ui/page/pagevideos.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/ui/page/pagevideos.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -845,7 +845,7 @@
     for (int i = 0; i < array.size(); i++)
         array[i] = array[i] ^ 0xC4 ^ i;
     array = array.toBase64();
-    return QString::fromAscii(array.data());
+    return QString::fromLatin1(array.data());
 }
 
 static QString unprotectPass(QString str)
--- a/QTfrontend/ui/widget/feedbackdialog.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/ui/widget/feedbackdialog.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -429,7 +429,7 @@
 
 void FeedbackDialog::finishedSlot(QNetworkReply* reply)
 {
-    if (reply && reply->error() == QNetworkReply::NoError)
+    if (reply->error() == QNetworkReply::NoError)
     {
             QMessageBox infoMsg(this);
             infoMsg.setIcon(QMessageBox::Information);
--- a/QTfrontend/ui/widget/mapContainer.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -347,15 +347,16 @@
 
 void HWMapContainer::previewClicked()
 {
-    switch (m_mapInfo.type)
-    {
-        case MapModel::HandDrawnMap:
-            emit drawMapRequested();
-            break;
-        default:
-            setRandomMap();
-            break;
-    }
+    if (isMaster()) // should only perform these if master, but disabling the button when not, causes an unattractive preview.
+        switch (m_mapInfo.type)
+        {
+            case MapModel::HandDrawnMap:
+                emit drawMapRequested();
+                break;
+            default:
+                setRandomMap();
+                break;
+        }
 }
 
 QString HWMapContainer::getCurrentSeed() const
--- a/QTfrontend/util/DataManager.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/util/DataManager.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -199,6 +199,15 @@
     return m_settingsFileName;
 }
 
+QString DataManager::safeFileName(QString fileName)
+{
+    fileName.replace('\\', '_');
+    fileName.replace('/', '_');
+    fileName.replace(':', '_');
+
+    return fileName;
+}
+
 void DataManager::reload()
 {
     // removed for now (also code was a bit unclean, could lead to segfault if
--- a/QTfrontend/util/DataManager.h	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/util/DataManager.h	Wed Sep 25 05:42:16 2013 +0300
@@ -119,6 +119,8 @@
 
         QString settingsFileName();
 
+        static QString safeFileName(QString fileName);
+
         static bool ensureFileExists(const QString & fileName);
 
     public slots:
--- a/QTfrontend/util/LibavInteraction.cpp	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/util/LibavInteraction.cpp	Wed Sep 25 05:42:16 2013 +0300
@@ -30,6 +30,10 @@
 
 #include "HWApplication.h"
 
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 25, 0)
+#define CodecID AVCodecID
+#endif
+
 struct Codec
 {
     CodecID id;
--- a/QTfrontend/util/LibavInteraction.h	Sun Sep 22 18:34:53 2013 +0300
+++ b/QTfrontend/util/LibavInteraction.h	Wed Sep 25 05:42:16 2013 +0300
@@ -16,8 +16,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
-#ifndef LIBAV_ITERACTION
-#define LIBAV_ITERACTION
+#ifndef LIBAV_INTERACTION
+#define LIBAV_INTERACTION
 
 #include <QComboBox>
 
@@ -48,4 +48,4 @@
     QString getFileInfo(const QString & filepath);
 };
 
-#endif // LIBAV_ITERACTION
+#endif // LIBAV_INTERACTION
--- a/README	Sun Sep 22 18:34:53 2013 +0300
+++ b/README	Wed Sep 25 05:42:16 2013 +0300
@@ -1,17 +1,46 @@
 Hedgewars - a turn based strategy game.
-Distributed under the terms of the GNU GPL licence.
-Images and sounds are distributed under the terms of the GNU FDL licence.
+=======================================
+
+Copyright 2004-2013 Andrey Korotaev <unC0Rr@gmail.com> and others.
+See QTfrontend/res/html/about.html and CREDITS for a complete list of authors.
 
-Source:
-Copyright 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
-Portions copyright 2006-2008 Igor Ulyanov aka Displacer <iulyanov@gmail.com>
+Licence:
+--------
+Source code is distributed under the terms of the GNU General Public Licence
+version 2; images and sounds are distributed under the terms of the GNU Free
+Documentation Licence version 1.2. See the COPYING file for the full text of
+the licenses.
 
 Instructions:
-depending on your system, consult our wiki at:
-- http://code.google.com/p/hedgewars/wiki/BuildingOnLinux
-- http://code.google.com/p/hedgewars/wiki/BuildingOnWindows
-- http://code.google.com/p/hedgewars/wiki/BuildingOnMac
+-------------
+See our wiki at: https://code.google.com/p/hedgewars/wiki/BuildingHedgewars
+
+You can find an outline of the necessary dependencies in the INSTALL file.
+
+Source code:
+------------
+Our main repository is located at http://hedgewars.googlecode.com using
+Mercurial as DVCS. A Git repository is also available (mirrored daily)
+at https://github.com/hedgewars/hw
 
-Dependencies:
-you can find an outline of the necessary dependencies in the INSTALL file.
+Contribute:
+-----------
+If you see a bug or have any suggestion please use the official bug tracker at
+http://code.google.com/p/hedgewars/issues/list or the integrated feedback
+button.
+
+If you want to help or get to know the sources better you can do that with some
+easy tasks from http://code.google.com/p/hedgewars/wiki/TODO. We also have an
+extended API in LUA to customize your adventures in our wiki at
+http://code.google.com/p/hedgewars/wiki/LuaAPI.
 
+If you know your way through the code feel free to send a patch or open a pull
+request. The best LUA scripts get released in the official DLC page and later
+integrated in the next version.
+
+Contact:
+--------
+* IRC channel     - irc://irc.freenode.net/hedgewars
+* community forum - http://www.hedgewars.org/forum
+* mailing list    - https://mail.gna.org/listinfo/hedgewars-dev
+
--- a/cmake_modules/CMakeDeterminePascalCompiler.cmake	Sun Sep 22 18:34:53 2013 +0300
+++ b/cmake_modules/CMakeDeterminePascalCompiler.cmake	Wed Sep 25 05:42:16 2013 +0300
@@ -45,6 +45,7 @@
                     OUTPUT_VARIABLE CMAKE_Pascal_COMPILER_VERSION
                     OUTPUT_STRIP_TRAILING_WHITESPACE
                     ) # we assume no error for something so simple
+    set(CMAKE_Pascal_COMPILER_ARG1 "-l- -v0ewn")
 endif(NOT CMAKE_Pascal_COMPILER_VERSION)
 mark_as_advanced(CMAKE_Pascal_COMPILER_VERSION)
 
--- a/cmake_modules/CMakePascalInformation.cmake	Sun Sep 22 18:34:53 2013 +0300
+++ b/cmake_modules/CMakePascalInformation.cmake	Wed Sep 25 05:42:16 2013 +0300
@@ -8,7 +8,6 @@
 include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
 
 # This section should actually be in Platform/${CMAKE_SYSTME_NAME}-fpc.cmake
-set(CMAKE_Pascal_FLAGS_INIT "-l- -v0ewn")
 set(CMAKE_Pascal_FLAGS_DEBUG_INIT "-g -gl -gp -gh")
 set(CMAKE_Pascal_FLAGS_MINSIZEREL_INIT "-Os -dNDEBUG")
 set(CMAKE_Pascal_FLAGS_RELEASE_INIT "-O3 -dNDEBUG")
@@ -59,7 +58,7 @@
 
 if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG)
 #-Wl,-rpath-link,
-    set(CMAKE_SHARED_LIBRARY_RUNTIME_Pascal_FLAG "-k-rpath-link")
+    set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG "-k-rpath-link")
 endif(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Pascal_FLAG)
 
 # for most systems a module is the same as a shared library
@@ -103,7 +102,7 @@
 
 set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
 
-set(CMAKE_Pascal_FLAGS "$ENV{FPFLAGS} ${CMAKE_Pascal_FLAGS_INIT} ${CMAKE_Pascal_FLAGS}" CACHE STRING "Flags for Pascal compiler." FORCE)
+#set(CMAKE_Pascal_FLAGS "$ENV{FPFLAGS} ${CMAKE_Pascal_FLAGS_INIT} ${CMAKE_Pascal_FLAGS}" CACHE STRING "Flags for Pascal compiler." FORCE)
 
 include(CMakeCommonLanguageInclude)
 
@@ -183,7 +182,7 @@
 
     #-Cn is mandatory as it's what creates the ppas.* script
     set(CMAKE_Pascal_COMPILE_OBJECT
-        "<CMAKE_Pascal_COMPILER> -Cn -FE${EXECUTABLE_OUTPUT_PATH} -FU${CMAKE_CURRENT_BINARY_DIR}/<OBJECT_DIR> ${CMAKE_Pascal_UNIX_FLAGS} <FLAGS> <SOURCE>")
+        "<CMAKE_Pascal_COMPILER> -Cn -FE${EXECUTABLE_OUTPUT_PATH} -FU${CMAKE_CURRENT_BINARY_DIR}/<OBJECT_DIR> ${CMAKE_Pascal_UNIX_FLAGS} <FLAGS> <CMAKE_Pascal_LINK_FLAGS> <SOURCE>")
 endif(NOT CMAKE_Pascal_COMPILE_OBJECT)
 
 # link Pascal objects in a single executable
--- a/cmake_modules/FindFFMPEG.cmake	Sun Sep 22 18:34:53 2013 +0300
+++ b/cmake_modules/FindFFMPEG.cmake	Wed Sep 25 05:42:16 2013 +0300
@@ -25,18 +25,23 @@
 # use pkg-config to get the directories and then use these values
 # in the FIND_PATH() and FIND_LIBRARY() calls
 find_package(PkgConfig)
-if (PKG_CONFIG_FOUND)
-    pkg_check_modules(_FFMPEG_AVCODEC libavcodec ${VERBOSITY})
-    pkg_check_modules(_FFMPEG_AVFORMAT libavformat ${VERBOSITY})
-    pkg_check_modules(_FFMPEG_AVUTIL libavutil ${VERBOSITY})
-endif (PKG_CONFIG_FOUND)
+if(PKG_CONFIG_FOUND)
+    if(NOT LIBAVCODEC_INCLUDE_DIR OR NOT LIBAVCODEC_LIBRARY)
+        pkg_check_modules(_FFMPEG_AVCODEC libavcodec)
+    endif()
+    if(NOT LIBAVFORMAT_LIBRARY)
+        pkg_check_modules(_FFMPEG_AVFORMAT libavformat)
+    endif()
+    if(NOT LIBAVUTIL_LIBRARY)
+        pkg_check_modules(_FFMPEG_AVUTIL libavutil)
+    endif()
+endif(PKG_CONFIG_FOUND)
 
 find_path(LIBAVCODEC_INCLUDE_DIR
     NAMES libavcodec/avcodec.h
-    PATHS ${_AVCODEC_INCLUDE_DIRS}
-        /usr/include /usr/local/include #system level
-        /opt/local/include #macports
-        /sw/include #fink
+    PATHS ${_FFMPEG_AVCODEC_INCLUDE_DIRS}    #pkg-config
+          /usr/include /usr/local/include    #system level
+          /opt/local/include /sw/include     #macports & fink
     PATH_SUFFIXES libav ffmpeg
 )
 
@@ -44,26 +49,23 @@
 
 find_library(LIBAVCODEC_LIBRARY
     NAMES avcodec
-    PATHS ${_AVCODEC_LIBRARY_DIRS}
-        /usr/lib /usr/local/lib #system level
-        /opt/local/lib #macports
-        /sw/lib #fink
+    PATHS ${_FFMPEG_AVCODEC_LIBRARY_DIRS}   #pkg-config
+          /usr/lib /usr/local/lib           #system level
+          /opt/local/lib /sw/lib            #macports & fink
 )
 
 find_library(LIBAVFORMAT_LIBRARY
     NAMES avformat
-    PATHS ${_AVFORMAT_LIBRARY_DIRS}
-        /usr/lib /usr/local/lib #system level
-        /opt/local/lib #macports
-        /sw/lib #fink
+    PATHS ${_FFMPEG_AVFORMAT_LIBRARY_DIRS}  #pkg-config
+          /usr/lib /usr/local/lib           #system level
+          /opt/local/lib /sw/lib            #macports & fink
 )
 
 find_library(LIBAVUTIL_LIBRARY
     NAMES avutil
-    PATHS ${_AVUTIL_LIBRARY_DIRS}
-        /usr/lib /usr/local/lib #system level
-        /opt/local/lib #macports
-        /sw/lib #fink
+    PATHS ${_FFMPEG_AVUTIL_LIBRARY_DIRS}    #pkg-config
+          /usr/lib /usr/local/lib           #system level
+          /opt/local/lib /sw/lib            #macports & fink
 )
 
 find_package_handle_standard_args(FFMPEG DEFAULT_MSG LIBAVCODEC_LIBRARY LIBAVCODEC_INCLUDE_DIR
--- a/gameServer/Actions.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/Actions.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -17,7 +17,7 @@
 import Control.DeepSeq
 import Data.Unique
 import Control.Arrow
-import Control.Exception
+import Control.Exception as E
 import System.Process
 import Network.Socket
 import System.Random
@@ -346,7 +346,8 @@
         ModifyRoom (\r -> r{
                 gameInfo = liftM (\g -> g{
                     teamsInGameNumber = teamsInGameNumber g - 1
-                    , roundMsgs = rmTeamMsg : roundMsgs g
+                    , roundMsgs = (if isJust $ lastFilteredTimedMsg g then (:) (fromJust $ lastFilteredTimedMsg g) else id) 
+                      $ rmTeamMsg : roundMsgs g
                 }) $ gameInfo r
             })
         ]
@@ -420,50 +421,57 @@
 
 processAction (ProcessAccountInfo info) = do
     case info of
-        HasAccount passwd isAdmin -> do
+        HasAccount passwd isAdmin isContr -> do
             b <- isBanned
             c <- client's isChecker
-            when (not b) $ (if c then checkerLogin else playerLogin) passwd isAdmin
+            when (not b) $ (if c then checkerLogin else playerLogin) passwd isAdmin isContr
         Guest -> do
             b <- isBanned
             c <- client's isChecker
             when (not b) $
                 if c then
-                    checkerLogin "" False
+                    checkerLogin "" False False
                     else
                     processAction JoinLobby
         Admin -> do
             mapM_ processAction [ModifyClient (\cl -> cl{isAdministrator = True}), JoinLobby]
             chan <- client's sendChan
             processAction $ AnswerClients [chan] ["ADMIN_ACCESS"]
+        ReplayName fn -> processAction $ ShowReplay fn
     where
     isBanned = do
         processAction $ CheckBanned False
         liftM B.null $ client's nick
-    checkerLogin _ False = processAction $ ByeClient $ loc "No checker rights"
-    checkerLogin p True = do
+    checkerLogin _ False _ = processAction $ ByeClient $ loc "No checker rights"
+    checkerLogin p True _ = do
         wp <- client's webPassword
         processAction $
             if wp == p then ModifyClient $ \c -> c{logonPassed = True} else ByeClient $ loc "Authentication failed"
-    playerLogin p a = do
+    playerLogin p a contr = do
         chan <- client's sendChan
-        mapM_ processAction [AnswerClients [chan] ["ASKPASSWORD"], ModifyClient (\c -> c{webPassword = p, isAdministrator = a})]
+        mapM_ processAction [
+            AnswerClients [chan] ["ASKPASSWORD"]
+            , ModifyClient (\c -> c{webPassword = p, isAdministrator = a, isContributor = contr})
+            ]
 
 processAction JoinLobby = do
     chan <- client's sendChan
     clientNick <- client's nick
     isAuthenticated <- liftM (not . B.null) $ client's webPassword
     isAdmin <- client's isAdministrator
+    isContr <- client's isContributor
     loggedInClients <- liftM (Prelude.filter isVisible) $! allClientsS
     let (lobbyNicks, clientsChans) = unzip . L.map (nick &&& sendChan) $ loggedInClients
     let authenticatedNicks = L.map nick . L.filter (not . B.null . webPassword) $ loggedInClients
     let adminsNicks = L.map nick . L.filter isAdministrator $ loggedInClients
-    let clFlags = B.concat . L.concat $ [["u" | isAuthenticated], ["a" | isAdmin]]
+    let contrNicks = L.map nick . L.filter isContributor $ loggedInClients
+    let clFlags = B.concat . L.concat $ [["u" | isAuthenticated], ["a" | isAdmin], ["c" | isContr]]
     mapM_ processAction . concat $ [
         [AnswerClients clientsChans ["LOBBY:JOINED", clientNick]]
         , [AnswerClients [chan] ("LOBBY:JOINED" : clientNick : lobbyNicks)]
         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+u" : authenticatedNicks) | not $ null authenticatedNicks]
         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+a" : adminsNicks) | not $ null adminsNicks]
+        , [AnswerClients [chan] ("CLIENT_FLAGS" : "+c" : contrNicks) | not $ null contrNicks]
         , [AnswerClients (chan : clientsChans) ["CLIENT_FLAGS",  B.concat["+" , clFlags], clientNick] | not $ B.null clFlags]
         , [ModifyClient (\cl -> cl{logonPassed = True, isVisible = True})]
         , [SendServerMessage]
@@ -610,6 +618,7 @@
     where
           st irnc = (length $ allRooms irnc, length $ allClients irnc)
 
+
 processAction RestartServer = do
     sp <- gets (shutdownPending . serverInfo)
     when (not sp) $ do
@@ -623,6 +632,7 @@
             return ()
         processAction $ ModifyServerInfo (\s -> s{shutdownPending = True})
 
+
 processAction Stats = do
     cls <- allClientsS
     rms <- allRoomsS
@@ -650,9 +660,19 @@
     ri <- clientRoomA
     rnc <- gets roomsClients
 
-    io $ do
+    readyCheckersIds <- io $ do
         r <- room'sM rnc id ri
         saveReplay r
+        allci <- allClientsM rnc
+        filterM (client'sM rnc isReadyChecker) allci
+
+    when (not $ null readyCheckersIds) $ do
+        oldci <- gets clientIndex
+        withStateT (\s -> s{clientIndex = Just $ head readyCheckersIds})
+            $ processAction CheckRecord
+        modify (\s -> s{clientIndex = oldci})
+    where
+        isReadyChecker cl = isChecker cl && isReady cl
 
 
 processAction CheckRecord = do
@@ -662,20 +682,56 @@
     when (not . null $ l) $
         mapM_ processAction [
             AnswerClients [c] ("REPLAY" : l)
-            , ModifyClient $ \c -> c{checkInfo = cinfo}
+            , ModifyClient $ \c -> c{checkInfo = cinfo, isReady = False}
             ]
 
+
 processAction (CheckFailed msg) = do
     Just (CheckInfo fileName _) <- client's checkInfo
     io $ moveFailedRecord fileName
 
+
 processAction (CheckSuccess info) = do
-    Just (CheckInfo fileName _) <- client's checkInfo
+    Just (CheckInfo fileName teams) <- client's checkInfo
+    si <- gets serverInfo
+    io $ writeChan (dbQueries si) $ StoreAchievements (B.pack fileName) (map toPair teams) info
     io $ moveCheckedRecord fileName
+    where
+        toPair t = (teamname t, teamowner t)
+
+processAction (QueryReplay name) = do
+    (Just ci) <- gets clientIndex
+    si <- gets serverInfo
+    uid <- client's clUID
+    io $ writeChan (dbQueries si) $ GetReplayName ci (hashUnique uid) name
 
 #else
 processAction SaveReplay = return ()
 processAction CheckRecord = return ()
 processAction (CheckFailed _) = return ()
 processAction (CheckSuccess _) = return ()
+processAction (QueryReplay _) = return ()
 #endif
+
+processAction (ShowReplay name) = do
+    c <- client's sendChan
+    cl <- client's id
+
+    let fileName = B.concat ["checked/", if B.isPrefixOf "replays/" name then B.drop 8 name else name]
+
+    checkInfo <- liftIO $ E.handle (\(e :: SomeException) ->
+                    warningM "REPLAYS" (B.unpack $ B.concat ["Problems reading ", fileName, ": ", B.pack $ show e]) >> return Nothing) $ do
+            (t, p1, p2, msgs) <- liftM read $ readFile (B.unpack fileName)
+            return $ Just (t, Map.fromList p1, Map.fromList p2, reverse msgs)
+
+    let (teams, params1, params2, roundMsgs) = fromJust checkInfo
+
+    when (isJust checkInfo) $ do
+        mapM_ processAction $ concat [
+            [AnswerClients [c] ["JOINED", nick cl]]
+            , answerFullConfigParams cl params1 params2
+            , answerAllTeams cl teams
+            , [AnswerClients [c]  ["RUN_GAME"]]
+            , [AnswerClients [c] $ "EM" : roundMsgs]
+            , [AnswerClients [c] ["KICKED"]]
+            ]
--- a/gameServer/CoreTypes.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/CoreTypes.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -76,6 +76,8 @@
     | CheckFailed B.ByteString
     | CheckSuccess [B.ByteString]
     | Random [ClientChan] [B.ByteString]
+    | QueryReplay B.ByteString
+    | ShowReplay B.ByteString
 
 type ClientChan = Chan [B.ByteString]
 
@@ -106,6 +108,7 @@
         isInGame :: Bool,
         isAdministrator :: Bool,
         isChecker :: Bool,
+        isContributor :: Bool,
         isKickedFromServer :: Bool,
         isJoinedMidGame :: Bool,
         clientClan :: !(Maybe B.ByteString),
@@ -254,15 +257,18 @@
         []
 
 data AccountInfo =
-    HasAccount B.ByteString Bool
+    HasAccount B.ByteString Bool Bool
     | Guest
     | Admin
+    | ReplayName B.ByteString
     deriving (Show, Read)
 
 data DBQuery =
     CheckAccount ClientIndex Int B.ByteString B.ByteString
     | ClearCache
     | SendStats Int Int
+    | StoreAchievements B.ByteString [(B.ByteString, B.ByteString)] [B.ByteString]
+    | GetReplayName ClientIndex Int B.ByteString
     deriving (Show, Read)
 
 data CoreMessage =
--- a/gameServer/EngineInteraction.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/EngineInteraction.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -43,7 +43,7 @@
         lft = foldr l Nothing
         l m n = let m' = B.head $ B.tail m; tst = flip Set.member in 
                       if not $ tst timedMessages m' then n
-                        else if '+' /= m' then Just Nothing else Just $ Just m
+                        else if '+' /= m' then Just Nothing else Just . Just . B.pack . Base64.encode . BW.unpack $ m
         isNonEmpty = (/=) '+' . B.head . B.tail
         legalMessages = Set.fromList $ "M#+LlRrUuDdZzAaSjJ,sNpPwtghbc12345" ++ slotMessages
         slotMessages = "\128\129\130\131\132\133\134\135\136\137\138"
--- a/gameServer/HWProtoChecker.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/HWProtoChecker.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -11,7 +11,7 @@
 
 handleCmd_checker :: CmdHandler
 
-handleCmd_checker ["READY"] = return [CheckRecord]
+handleCmd_checker ["READY"] = return [ModifyClient $ \c -> c{isReady = True}, CheckRecord]
 
 handleCmd_checker ["CHECKED", "FAIL", msg] = do
     isChecking <- liftM (isJust . checkInfo) thisClient
--- a/gameServer/HWProtoCore.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/HWProtoCore.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -50,6 +50,7 @@
             rnc <- liftM snd ask
             let chans = map (sendChan . client rnc) $ allClients rnc
             return [AnswerClients chans ["CHAT", "[global notice]", p] | isAdministrator cl]
+        h "WATCH" f = return [QueryReplay f]
         h c p = return [Warning $ B.concat ["Unknown cmd: /", c, p]]
 
 handleCmd cmd = do
--- a/gameServer/HWProtoInRoomState.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/HWProtoInRoomState.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -287,6 +287,9 @@
         if not $ isMaster cl then
             [ProtocolError $ loc "Not room master"]
         else
+        if illegalName newName then 
+            [Warning $ loc "Illegal room name"]
+        else
         if isJust $ find (\r -> newName == name r) rs then
             [Warning $ loc "Room with such name already exists"]
         else
--- a/gameServer/HWProtoLobbyState.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/HWProtoLobbyState.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -14,16 +14,6 @@
 import EngineInteraction
 
 
-answerAllTeams :: ClientInfo -> [TeamInfo] -> [Action]
-answerAllTeams cl = concatMap toAnswer
-    where
-        clChan = sendChan cl
-        toAnswer team =
-            [AnswerClients [clChan] $ teamToNet team,
-            AnswerClients [clChan] ["TEAM_COLOR", teamname team, teamcolor team],
-            AnswerClients [clChan] ["HH_NUM", teamname team, showB $ hhnum team]]
-
-
 handleCmd_lobby :: CmdHandler
 
 
@@ -118,10 +108,7 @@
                     AnswerClients [sendChan cl]  ["RUN_GAME"]
                     : AnswerClients chans ["CLIENT_FLAGS", "+g", nick cl]
                     : ModifyClient (\c -> c{isInGame = True})
-                    : (AnswerClients [sendChan cl] $ "EM" : toEngineMsg "e$spectate 1" : (reverse . roundMsgs . fromJust . gameInfo $ jRoom))
-                    : [AnswerClients [sendChan cl] $ "EM" : [fromJust msg] | isJust msg]
-            where
-            msg = lastFilteredTimedMsg . fromJust . gameInfo $ jRoom
+                    : [AnswerClients [sendChan cl] $ "EM" : toEngineMsg "e$spectate 1" : (reverse . roundMsgs . fromJust . gameInfo $ jRoom)]
 
 
 handleCmd_lobby ["JOIN_ROOM", roomName] =
--- a/gameServer/HandlerUtils.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/HandlerUtils.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -64,5 +64,5 @@
 clientByNick n = do
     (_, rnc) <- ask
     let allClientIDs = allClients rnc
-    return $ find (\clId -> n == nick (client rnc clId)) allClientIDs
+    return $ find (\clId -> let cl = client rnc clId in n == nick cl && not (isChecker cl)) allClientIDs
 
--- a/gameServer/NetRoutines.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/NetRoutines.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -45,6 +45,7 @@
                     False
                     False
                     False
+                    False
                     Nothing
                     Nothing
                     0
--- a/gameServer/OfficialServer/DBInteraction.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/OfficialServer/DBInteraction.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -77,7 +77,22 @@
                     writeChan cChan $ ClientAccountInfo clId clUid (snd $ fromJust cacheEntry)
                     return (accountsCache, req)
 
+        GetReplayName {} -> do
+            SIO.hPutStrLn hIn $ show q
+            hFlush hIn
+
+            (clId', clUid', accountInfo) <- SIO.hGetLine hOut >>= (maybeException . maybeRead)
+
+            writeChan cChan $ ClientAccountInfo clId' clUid' accountInfo
+            return (accountsCache, req)
+
         ClearCache -> return (Map.empty, req)
+        StoreAchievements {} -> (
+                (SIO.hPutStrLn hIn $ show q) >>
+                hFlush hIn >>
+                return (accountsCache, req))
+                `Exception.onException`
+                (unGetChan queries q)
         SendStats {} -> (
                 (SIO.hPutStrLn hIn $ show q) >>
                 hFlush hIn >>
--- a/gameServer/OfficialServer/checker.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/OfficialServer/checker.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -24,19 +24,25 @@
 import System.Posix
 #endif
 
+readInt_ :: (Num a) => B.ByteString -> a
+readInt_ str =
+  case B.readInt str of
+       Just (i, t) | B.null t -> fromIntegral i
+       _                      -> 0 
+
 data Message = Packet [B.ByteString]
              | CheckFailed B.ByteString
              | CheckSuccess [B.ByteString]
     deriving Show
 
 serverAddress = "netserver.hedgewars.org"
-protocolNumber = "43"
+protocolNumber = "45"
 
-getLines :: Handle -> IO [String]
+getLines :: Handle -> IO [B.ByteString]
 getLines h = g
     where
         g = do
-            l <- liftM Just (hGetLine h) `Exception.catch` (\(_ :: Exception.IOException) -> return Nothing)
+            l <- liftM Just (B.hGetLine h) `Exception.catch` (\(_ :: Exception.IOException) -> return Nothing)
             if isNothing l then
                 return []
                 else
@@ -45,38 +51,43 @@
                 return $ fromJust l : lst
 
 
-engineListener :: Chan Message -> Handle -> IO ()
-engineListener coreChan h = do
-    output <- getLines h
-    debugM "Engine" $ show output
-    if isNothing $ L.find start output then
+engineListener :: Chan Message -> Handle -> String -> IO ()
+engineListener coreChan h fileName = do
+    stats <- liftM (ps . L.dropWhile (not . start)) $ getLines h
+    debugM "Engine" $ show stats
+    if null stats then
         writeChan coreChan $ CheckFailed "No stats msg"
         else
-        writeChan coreChan $ CheckSuccess []
+        writeChan coreChan $ CheckSuccess stats
+
+    removeFile fileName
     where
         start = flip L.elem ["WINNERS", "DRAW"]
-
+        ps ("DRAW" : bs) = "DRAW" : ps bs
+        ps ("WINNERS" : n : bs) = let c = readInt_ n in "WINNERS" : n : take c bs ++ (ps $ drop c bs)
+        ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) =
+            "ACHIEVEMENT" : typ : teamname : location : value : ps bs
+        ps _ = []
 
 checkReplay :: Chan Message -> [B.ByteString] -> IO ()
 checkReplay coreChan msgs = do
     tempDir <- getTemporaryDirectory
     (fileName, h) <- openBinaryTempFile tempDir "checker-demo"
-    B.hPut h . BW.pack . concat . map (fromJust . Base64.decode . B.unpack) $ msgs
+    B.hPut h . BW.pack . concat . map (fromMaybe [] . Base64.decode . B.unpack) $ msgs
     hFlush h
     hClose h
 
-    (_, Just hOut, _, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.18/bin/hwengine"
-                ["/usr/home/unC0Rr/.hedgewars"
-                , "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.18/share/hedgewars/Data"
-                , fileName
-                , "--set-audio"
-                , "0"
-                , "0"
-                , "0"
+    (_, _, Just hOut, _) <- createProcess (proc "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/bin/hwengine"
+                [fileName
+                , "--user-prefix", "/usr/home/unC0Rr/.hedgewars"
+                , "--prefix", "/usr/home/unC0Rr/Sources/Hedgewars/Releases/0.9.19/share/hedgewars/Data"
+                , "--nomusic"
+                , "--nosound"
+                , "--stats-only"
                 ])
-            {std_out = CreatePipe}
+            {std_err = CreatePipe}
     hSetBuffering hOut LineBuffering
-    void $ forkIO $ engineListener coreChan hOut
+    void $ forkIO $ engineListener coreChan hOut fileName
 
 
 takePacks :: State B.ByteString [[B.ByteString]]
@@ -154,7 +165,7 @@
 #endif
 
     updateGlobalLogger "Core" (setLevel DEBUG)
-    updateGlobalLogger "Network" (setLevel DEBUG)
+    updateGlobalLogger "Network" (setLevel WARNING)
     updateGlobalLogger "Check" (setLevel DEBUG)
     updateGlobalLogger "Engine" (setLevel DEBUG)
 
--- a/gameServer/OfficialServer/extdbinterface.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/OfficialServer/extdbinterface.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -9,16 +9,30 @@
 import Data.Maybe
 import Database.HDBC
 import Database.HDBC.MySQL
+import Data.List (lookup)
+import qualified Data.ByteString.Char8 as B
 --------------------------
 import CoreTypes
+import Utils
 
 
 dbQueryAccount =
-    "SELECT users.pass, users_roles.rid FROM users LEFT JOIN users_roles ON (users.uid = users_roles.uid AND users_roles.rid = 3) WHERE users.name = ?"
+    "SELECT users.pass, \ 
+    \ (SELECT COUNT(users_roles.rid) FROM users_roles WHERE users.uid = users_roles.uid AND users_roles.rid = 3), \
+    \ (SELECT COUNT(users_roles.rid) FROM users_roles WHERE users.uid = users_roles.uid AND users_roles.rid = 13) \
+    \ FROM users WHERE users.name = ?"
 
 dbQueryStats =
     "INSERT INTO gameserver_stats (players, rooms, last_update) VALUES (?, ?, UNIX_TIMESTAMP())"
 
+dbQueryAchievement =
+    "INSERT INTO achievements (time, typeid, userid, value, filename, location) \
+    \ VALUES (?, (SELECT id FROM achievement_types WHERE name = ?), (SELECT uid FROM users WHERE name = ?), \
+    \ ?, ?, ?)"
+
+dbQueryReplayFilename = "SELECT filename FROM achievements WHERE id = ?"
+
+
 dbInteractionLoop dbConn = forever $ do
     q <- liftM read getLine
     hPutStrLn stderr $ show q
@@ -27,24 +41,58 @@
         CheckAccount clId clUid clNick _ -> do
                 statement <- prepare dbConn dbQueryAccount
                 execute statement [SqlByteString clNick]
-                passAndRole <- fetchRow statement
+                result <- fetchRow statement
                 finish statement
                 let response =
-                        if isJust passAndRole then
+                        if isJust result then let [pass, adm, contr] = fromJust result in
                         (
                             clId,
                             clUid,
                             HasAccount
-                                (fromSql . head . fromJust $ passAndRole)
-                                (fromSql (last . fromJust $ passAndRole) == Just (3 :: Int))
+                                (fromSql pass)
+                                (fromSql adm == Just (1 :: Int))
+                                (fromSql contr == Just (1 :: Int))
                         )
                         else
                         (clId, clUid, Guest)
                 print response
                 hFlush stdout
 
+        GetReplayName clId clUid fileId -> do
+                statement <- prepare dbConn dbQueryReplayFilename
+                execute statement [SqlByteString fileId]
+                result <- fetchRow statement
+                finish statement
+                let fn = if (isJust result) then fromJust . fromSql . head . fromJust $ result else ""
+                print (clId, clUid, ReplayName fn)
+                hFlush stdout
+
         SendStats clients rooms ->
                 run dbConn dbQueryStats [SqlInt32 $ fromIntegral clients, SqlInt32 $ fromIntegral rooms] >> return ()
+--StoreAchievements (B.pack fileName) (map toPair teams) info
+        StoreAchievements fileName teams info -> 
+            mapM_ (run dbConn dbQueryAchievement) $ (parseStats fileName teams) info
+
+
+readTime = read . B.unpack . B.take 19 . B.drop 8
+
+
+parseStats :: B.ByteString -> [(B.ByteString, B.ByteString)] -> [B.ByteString] -> [[SqlValue]]
+parseStats fileName teams = ps
+    where
+    time = readTime fileName
+    ps [] = []
+    ps ("DRAW" : bs) = ps bs
+    ps ("WINNERS" : n : bs) = ps $ drop (readInt_ n) bs
+    ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) =
+        [ SqlUTCTime time
+        , SqlByteString typ
+        , SqlByteString $ fromMaybe "" (lookup teamname teams)
+        , SqlInt32 (readInt_ value)
+        , SqlByteString fileName
+        , SqlByteString location
+        ] : ps bs
+    ps (b:bs) = ps bs
 
 
 dbConnectionLoop mySQLConnectionInfo =
--- a/gameServer/Utils.hs	Sun Sep 22 18:34:53 2013 +0300
+++ b/gameServer/Utils.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -157,5 +157,15 @@
         toAnswer cl (paramName, paramStrs) = AnswerClients [sendChan cl] $ "CFG" : paramName : paramStrs
 
 
+answerAllTeams :: ClientInfo -> [TeamInfo] -> [Action]
+answerAllTeams cl = concatMap toAnswer
+    where
+        clChan = sendChan cl
+        toAnswer team =
+            [AnswerClients [clChan] $ teamToNet team,
+            AnswerClients [clChan] ["TEAM_COLOR", teamname team, teamcolor team],
+            AnswerClients [clChan] ["HH_NUM", teamname team, showB $ hhnum team]]
+
+
 loc :: B.ByteString -> B.ByteString
 loc = id
--- a/hedgewars/hwengine.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/hwengine.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -71,6 +71,7 @@
             end;
         gsStart:
             begin
+            SetDefaultBinds;
             if HasBorder then
                 DisableSomeWeapons;
             AddClouds;
--- a/hedgewars/uAmmos.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uAmmos.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -53,11 +53,12 @@
 uses uLocale, uVariables, uCommands, uUtils, uCaptions, uDebug;
 
 type TAmmoCounts = array[TAmmoType] of Longword;
+     TAmmoArray = array[TAmmoType] of TAmmo;
 var StoresList: array[0..Pred(cMaxHHs)] of PHHAmmo;
     ammoLoadout, ammoProbability, ammoDelay, ammoReinforcement: shortstring;
     InitialCounts: array[0..Pred(cMaxHHs)] of TAmmoCounts;
 
-procedure FillAmmoStore(Ammo: PHHAmmo; var cnts: TAmmoCounts);
+procedure FillAmmoStore(Ammo: PHHAmmo; var newAmmo: TAmmoArray);
 var mi: array[0..cMaxSlotIndex] of byte;
     a: TAmmoType;
 begin
@@ -67,12 +68,10 @@
 FillChar(Ammo^, sizeof(Ammo^), 0);
 for a:= Low(TAmmoType) to High(TAmmoType) do
     begin
-    if cnts[a] > 0 then
+    if newAmmo[a].Count > 0 then
         begin
         TryDo(mi[Ammoz[a].Slot] <= cMaxSlotAmmoIndex, 'Ammo slot overflow', true);
-        Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= Ammoz[a].Ammo;
-        with Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]] do
-            Count:= cnts[a];
+        Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= newAmmo[a];
         inc(mi[Ammoz[a].Slot])
         end
     end;
@@ -84,6 +83,7 @@
 var cnt: Longword;
     a: TAmmoType;
     ammos: TAmmoCounts;
+    newAmmos: TAmmoArray;
 begin
 TryDo((byte(ammoLoadout[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoProbability[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoDelay[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoReinforcement[0]) = byte(ord(High(TAmmoType)))), 'Incomplete or missing ammo scheme set (incompatible frontend or demo/save?)', true);
 
@@ -141,7 +141,14 @@
     else
         InitialCounts[Pred(StoreCnt)][a]:= ammos[a];
     end;
-FillAmmoStore(StoresList[Pred(StoreCnt)], ammos)
+    
+    for a:= Low(TAmmoType) to High(TAmmoType) do
+        begin
+        newAmmos[a]:= Ammoz[a].Ammo;
+        newAmmos[a].Count:= ammos[a]
+        end;
+        
+FillAmmoStore(StoresList[Pred(StoreCnt)], newAmmos)
 end;
 
 function GetAmmoByNum(num: Longword): PHHAmmo;
@@ -211,23 +218,30 @@
 end;
 
 procedure SetAmmo(var Hedgehog: THedgehog; ammo: TAmmoType; cnt: LongWord);
-var ammos: TAmmoCounts;
+var ammos: TAmmoArray;
     slot, ami: LongInt;
     hhammo: PHHAmmo;
     CurWeapon: PAmmo;
+    a: TAmmoType;
 begin
 {$HINTS OFF}
 FillChar(ammos, sizeof(ammos), 0);
 {$HINTS ON}
 hhammo:= Hedgehog.Ammo;
 
+for a:= Low(TAmmoType) to High(TAmmoType) do
+    begin
+    ammos[a]:= Ammoz[a].Ammo;
+    ammos[a].Count:= 0
+    end;
+
 for slot:= 0 to cMaxSlotIndex do
     for ami:= 0 to cMaxSlotAmmoIndex do
         if hhammo^[slot, ami].Count > 0 then
-            ammos[hhammo^[slot, ami].AmmoType]:= hhammo^[slot, ami].Count;
+            ammos[hhammo^[slot, ami].AmmoType]:= hhammo^[slot, ami];
 
-ammos[ammo]:= cnt;
-if ammos[ammo] > AMMO_INFINITE then ammos[ammo]:= AMMO_INFINITE;
+ammos[ammo].Count:= cnt;
+if ammos[ammo].Count > AMMO_INFINITE then ammos[ammo].Count:= AMMO_INFINITE;
 
 FillAmmoStore(hhammo, ammos);
 CurWeapon:= GetCurAmmoEntry(Hedgehog);
@@ -455,14 +469,22 @@
 procedure ResetWeapons;
 var i, t: Longword;
     a: TAmmoType;
+    newAmmos: TAmmoArray;
 begin
 for t:= 0 to Pred(TeamsCount) do
     with TeamsArray[t]^ do
         for i:= 0 to cMaxHHIndex do
             Hedgehogs[i].CurAmmoType:= amNothing;
 
+for a:= Low(TAmmoType) to High(TAmmoType) do
+    newAmmos[a]:= Ammoz[a].Ammo;
+    
 for i:= 0 to Pred(StoreCnt) do
-    FillAmmoStore(StoresList[i], InitialCounts[i]);
+    begin
+    for a:= Low(TAmmoType) to High(TAmmoType) do
+        newAmmos[a].Count:= InitialCounts[i][a];
+    FillAmmoStore(StoresList[i], newAmmos);
+    end;
 
 for a:= Low(TAmmoType) to High(TAmmoType) do
     if Ammoz[a].SkipTurns >= 10000 then
--- a/hedgewars/uConsts.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uConsts.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -187,6 +187,7 @@
     gfMoreWind           = $01000000;
     gfTagTeam            = $02000000;
     gfBottomBorder       = $04000000;
+    gfShoppaBorder       = $08000000;
     // NOTE: When adding new game flags, ask yourself
     // if a "game start notice" would be useful. If so,
     // add one in uWorld.pas - look for "AddGoal".
--- a/hedgewars/uGearsHandlersMess.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uGearsHandlersMess.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -1432,6 +1432,13 @@
     if ((GameFlags and gfInfAttack) <> 0) and (TurnTimeLeft > 0) then
         dec(TurnTimeLeft);
 
+    if Gear^.Hedgehog^.Gear = nil then
+        begin
+        DeleteGear(Gear);
+        AfterAttack;
+        exit
+        end;
+
     HHGear := Gear^.Hedgehog^.Gear;
 
     HedgehogChAngle(HHGear);
@@ -1493,13 +1500,13 @@
         end;
 
     if b then
-    begin
+        begin
         DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
         HHGear^.Y + Gear^.dY * cHHRadius - _1 -
         ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
         Gear^.dX, Gear^.dY,
         cHHStepTicks, cHHRadius * 2 + 7);
-    end;
+        end;
 
     if (TurnTimeLeft = 0) or (Gear^.Timer = 0)
     or ((HHGear^.Message and gmAttack) <> 0) then
--- a/hedgewars/uInputHandler.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uInputHandler.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -314,8 +314,6 @@
 DefaultBinds[KeyNameToCode('j0a1d')]:= '+down';
 for i:= 1 to 10 do DefaultBinds[KeyNameToCode('f'+IntToStr(i))]:= 'slot '+IntToStr(i);
 for i:= 1 to 5  do DefaultBinds[KeyNameToCode(IntToStr(i))]:= 'timer '+IntToStr(i);
-
-SetDefaultBinds();
 end;
 
 procedure SetBinds(var binds: TBinds);
--- a/hedgewars/uLand.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uLand.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -60,29 +60,12 @@
     end;
 end;
 
-procedure ColorizeLand(Surface: PSDL_Surface);
+
+procedure DrawBorderFromImage(Surface: PSDL_Surface);
 var tmpsurf: PSDL_Surface;
     r, rr: TSDL_Rect;
     x, yd, yu: LongInt;
 begin
-    tmpsurf:= LoadDataImage(ptCurrTheme, 'LandTex', ifCritical or ifIgnoreCaps);
-    r.y:= 0;
-    while r.y < LAND_HEIGHT do
-    begin
-        r.x:= 0;
-        while r.x < LAND_WIDTH do
-        begin
-            SDL_UpperBlit(tmpsurf, nil, Surface, @r);
-            inc(r.x, tmpsurf^.w)
-        end;
-        inc(r.y, tmpsurf^.h)
-    end;
-    SDL_FreeSurface(tmpsurf);
-
-    // freed in freeModule() below
-    LandBackSurface:= LoadDataImage(ptCurrTheme, 'LandBackTex', ifIgnoreCaps or ifTransparent);
-    if (LandBackSurface <> nil) and GrayScale then Surface2GrayScale(LandBackSurface);
-
     tmpsurf:= LoadDataImage(ptCurrTheme, 'Border', ifCritical or ifIgnoreCaps or ifTransparent);
     for x:= 0 to LAND_WIDTH - 1 do
     begin
@@ -127,6 +110,106 @@
     SDL_FreeSurface(tmpsurf);
 end;
 
+
+procedure DrawShoppaBorder;
+var x, y, s, i: Longword;
+    c1, c2, c: Longword;
+begin
+    c1:= AMask;
+    c2:= AMask or RMask or GMask;
+
+    // vertical
+    s:= LAND_HEIGHT;
+    
+    for x:= 0 to LAND_WIDTH - 1 do
+        for y:= 0 to LAND_HEIGHT - 1 do
+            if LandPixels[y, x] = 0 then
+                if s < y then
+                    begin
+                    for i:= max(s, y - 8) to y - 1 do
+                        begin
+                        if ((x + i) and 16) = 0 then c:= c1 else c:= c2;
+                        
+                        if (cReducedQuality and rqBlurryLand) = 0 then
+                            LandPixels[i, x]:= c
+                        else
+                            LandPixels[i div 2, x div 2]:= c
+                        end;
+                    s:= LAND_HEIGHT
+                    end
+                else
+            else
+                begin
+                if s > y then s:= y;
+                if s + 8 > y then
+                    begin
+                    if ((x + y) and 16) = 0 then c:= c1 else c:= c2;
+                    
+                    if (cReducedQuality and rqBlurryLand) = 0 then
+                        LandPixels[y, x]:= c
+                    else
+                        LandPixels[y div 2, x div 2]:= c
+                    end;            
+                end;
+                
+    // horizontal
+    s:= LAND_WIDTH;
+    
+    for y:= 0 to LAND_HEIGHT - 1 do
+        for x:= 0 to LAND_WIDTH - 1 do
+            if LandPixels[y, x] = 0 then
+                if s < x then
+                    begin
+                    for i:= max(s, x - 8) to x - 1 do
+                        begin
+                        if ((y + i) and 16) = 0 then c:= c1 else c:= c2;
+                        
+                        if (cReducedQuality and rqBlurryLand) = 0 then
+                            LandPixels[y, i]:= c
+                        else
+                            LandPixels[y div 2, i div 2]:= c
+                        end;
+                    s:= LAND_WIDTH
+                    end
+                else
+            else
+                begin
+                if s > x then s:= x;
+                if s + 8 > x then
+                    begin
+                    if ((x + y) and 16) = 0 then c:= c1 else c:= c2;
+                    
+                    if (cReducedQuality and rqBlurryLand) = 0 then
+                        LandPixels[y, x]:= c
+                    else
+                        LandPixels[y div 2, x div 2]:= c
+                    end;            
+                end
+end;
+
+procedure ColorizeLand(Surface: PSDL_Surface);
+var tmpsurf: PSDL_Surface;
+    r: TSDL_Rect;
+begin
+    tmpsurf:= LoadDataImage(ptCurrTheme, 'LandTex', ifCritical or ifIgnoreCaps);
+    r.y:= 0;
+    while r.y < LAND_HEIGHT do
+    begin
+        r.x:= 0;
+        while r.x < LAND_WIDTH do
+        begin
+            SDL_UpperBlit(tmpsurf, nil, Surface, @r);
+            inc(r.x, tmpsurf^.w)
+        end;
+        inc(r.y, tmpsurf^.h)
+    end;
+    SDL_FreeSurface(tmpsurf);
+
+    // freed in freeModule() below
+    LandBackSurface:= LoadDataImage(ptCurrTheme, 'LandBackTex', ifIgnoreCaps or ifTransparent);
+    if (LandBackSurface <> nil) and GrayScale then Surface2GrayScale(LandBackSurface);
+end;
+
 procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr; fps: PPointArray);
 var i: LongInt;
 begin
@@ -345,10 +428,14 @@
 
     TryDo(tmpsurf <> nil, 'Error creating pre-land surface', true);
     ColorizeLand(tmpsurf);
+    if gameFlags and gfShoppaBorder = 0 then DrawBorderFromImage(tmpsurf);
     AddOnLandObjects(tmpsurf);
 
     LandSurface2LandPixels(tmpsurf);
     SDL_FreeSurface(tmpsurf);
+    
+    if gameFlags and gfShoppaBorder <> 0 then DrawShoppaBorder;
+    
     for x:= leftX+2 to rightX-2 do
         for y:= topY+2 to LAND_HEIGHT-3 do
             if (Land[y, x] = 0) and 
--- a/hedgewars/uLandGraphics.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uLandGraphics.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -125,6 +125,7 @@
     icePixels: PLongwordArray;
     w: LongWord;
 begin
+    if cOnlyStats then exit;
     // So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness
     iceSurface:= SpritesData[sprIceTexture].Surface;
     icePixels := iceSurface^.pixels;
--- a/hedgewars/uPhysFSLayer.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uPhysFSLayer.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -145,6 +145,8 @@
     AddFileLog('[PhysFS] mount ' + PathPrefix + ': ' + inttostr(i));
     i:= PHYSFS_mount(Str2PChar(UserPathPrefix + '/Data'), nil, false);
     AddFileLog('[PhysFS] mount ' + UserPathPrefix + '/Data: ' + inttostr(i));
+    i:= PHYSFS_mount(Str2PChar(UserPathPrefix + '/Teams'), '/Teams', false);
+    AddFileLog('[PhysFS] mount ' + UserPathPrefix + '/Teams: ' + inttostr(i));
 
     hedgewarsMountPackages;
 end;
--- a/hedgewars/uScript.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uScript.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -1894,6 +1894,17 @@
         ScriptLoad(lua_tostring(L, 1));
     lc_hedgewarsscriptload:= 0;
 end;
+
+
+function lc_declareachievement(L : Plua_State) : LongInt; Cdecl;
+var gear: PGear;
+begin
+    if lua_gettop(L) <> 4 then
+        LuaError('Lua: Wrong number of parameters passed to DeclareAchievement!')
+    else
+        declareAchievement(lua_tostring(L, 1), lua_tostring(L, 2), lua_tostring(L, 3), lua_tointeger(L, 4));
+    lc_declareachievement:= 0
+end;
 ///////////////////
 
 procedure ScriptPrintStack;
@@ -2344,6 +2355,7 @@
 ScriptSetInteger('gfDisableWind', gfDisableWind);
 ScriptSetInteger('gfMoreWind', gfMoreWind);
 ScriptSetInteger('gfTagTeam', gfTagTeam);
+ScriptSetInteger('gfShoppaBorder', gfShoppaBorder);
 
 ScriptSetInteger('gmLeft', gmLeft);
 ScriptSetInteger('gmRight', gmRight);
@@ -2516,6 +2528,7 @@
 
 lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear);
 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
+lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
 
 
 ScriptClearStack; // just to be sure stack is empty
--- a/hedgewars/uStats.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uStats.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -35,9 +35,10 @@
 procedure TurnReaction;
 procedure SendStats;
 procedure hedgehogFlight(Gear: PGear; time: Longword);
+procedure declareAchievement(id, teamname, location: shortstring; value: LongInt);
 
 implementation
-uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uDebug, uMisc, uConsole;
+uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uDebug, uMisc, uConsole, uScript;
 
 var DamageClan  : Longword = 0;
     DamageTotal : Longword = 0;
@@ -165,11 +166,11 @@
                 end;
                 
 if SendHealthStatsOn then
-	for t:= 0 to Pred(ClansCount) do
-		with ClansArray[t]^ do
-			begin
-			SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
-			end;
+    for t:= 0 to Pred(ClansCount) do
+        with ClansArray[t]^ do
+            begin
+            SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
+            end;
 
 Kills:= 0;
 KillsClan:= 0;
@@ -210,103 +211,114 @@
     winnersClan : PClan;
 begin
 if SendHealthStatsOn then
-	msd:= 0; msdhh:= nil;
-	msk:= 0; mskhh:= nil;
-	mskcnt:= 0;
-	maxTeamKills := 0;
-	maxTurnSkips := 0;
-	maxTeamDamage := 0;
-	winnersClan:= nil;
+    msd:= 0; msdhh:= nil;
+    msk:= 0; mskhh:= nil;
+    mskcnt:= 0;
+    maxTeamKills := 0;
+    maxTurnSkips := 0;
+    maxTeamDamage := 0;
+    winnersClan:= nil;
 
-	for t:= 0 to Pred(TeamsCount) do
-		with TeamsArray[t]^ do
-		begin
-			if not ExtDriven then
-				SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
-			for i:= 0 to cMaxHHIndex do
-				begin
-				if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
-					begin
-					msdhh:= @Hedgehogs[i];
-					msd:= Hedgehogs[i].stats.MaxStepDamageGiven
-					end;
-				if Hedgehogs[i].stats.MaxStepKills >= msk then
-					if Hedgehogs[i].stats.MaxStepKills = msk then
-						inc(mskcnt)
-					else
-						begin
-						mskcnt:= 1;
-						mskhh:= @Hedgehogs[i];
-						msk:= Hedgehogs[i].stats.MaxStepKills
-						end;
-			end;
+    for t:= 0 to Pred(TeamsCount) do
+        with TeamsArray[t]^ do
+        begin
+            if not ExtDriven then
+                SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
+            for i:= 0 to cMaxHHIndex do
+                begin
+                if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
+                    begin
+                    msdhh:= @Hedgehogs[i];
+                    msd:= Hedgehogs[i].stats.MaxStepDamageGiven
+                    end;
+                if Hedgehogs[i].stats.MaxStepKills >= msk then
+                    if Hedgehogs[i].stats.MaxStepKills = msk then
+                        inc(mskcnt)
+                    else
+                        begin
+                        mskcnt:= 1;
+                        mskhh:= @Hedgehogs[i];
+                        msk:= Hedgehogs[i].stats.MaxStepKills
+                        end;
+            end;
 
-			{ send player stats for winner teams }
-			if Clan^.ClanHealth > 0 then
-				begin
-				winnersClan:= Clan;
-				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
-					IntToStr(stats.Kills) + ' ' + TeamName);
-			end;
+            { send player stats for winner teams }
+            if Clan^.ClanHealth > 0 then
+                begin
+                winnersClan:= Clan;
+                SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
+                    IntToStr(stats.Kills) + ' ' + TeamName);
+            end;
 
-			{ determine maximum values of TeamKills, TurnSkips, TeamDamage }
-			if stats.TeamKills > maxTeamKills then
-				begin
-				maxTeamKills := stats.TeamKills;
-				maxTeamKillsName := TeamName;
-			end;
-			if stats.TurnSkips > maxTurnSkips then
-				begin
-				maxTurnSkips := stats.TurnSkips;
-				maxTurnSkipsName := TeamName;
-			end;
-			if stats.TeamDamage > maxTeamDamage then
-				begin
-				maxTeamDamage := stats.TeamDamage;
-				maxTeamDamageName := TeamName;
-			end;
+            { determine maximum values of TeamKills, TurnSkips, TeamDamage }
+            if stats.TeamKills > maxTeamKills then
+                begin
+                maxTeamKills := stats.TeamKills;
+                maxTeamKillsName := TeamName;
+            end;
+            if stats.TurnSkips > maxTurnSkips then
+                begin
+                maxTurnSkips := stats.TurnSkips;
+                maxTurnSkipsName := TeamName;
+            end;
+            if stats.TeamDamage > maxTeamDamage then
+                begin
+                maxTeamDamage := stats.TeamDamage;
+                maxTeamDamageName := TeamName;
+            end;
 
-		end;
+        end;
+
+    { now send player stats for loser teams }
+    for t:= 0 to Pred(TeamsCount) do
+        begin
+        with TeamsArray[t]^ do
+            begin
+            if Clan^.ClanHealth = 0 then
+                begin
+                SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
+                    IntToStr(stats.Kills) + ' ' + TeamName);
+            end;
+        end;
+    end;
 
-	{ now send player stats for loser teams }
-	for t:= 0 to Pred(TeamsCount) do
-		begin
-		with TeamsArray[t]^ do
-			begin
-			if Clan^.ClanHealth = 0 then
-				begin
-				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
-					IntToStr(stats.Kills) + ' ' + TeamName);
-			end;
-		end;
-	end;
+    if msdhh <> nil then
+        SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
+    if mskcnt = 1 then
+        SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
 
-	if msdhh <> nil then
-		SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
-	if mskcnt = 1 then
-		SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
+    if maxTeamKills > 1 then
+        SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
+    if maxTurnSkips > 2 then
+        SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
+    if maxTeamDamage > 30 then
+        SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
+
+    if KilledHHs > 0 then
+        SendStat(siKilledHHs, IntToStr(KilledHHs));
 
-	if maxTeamKills > 1 then
-		SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
-	if maxTurnSkips > 2 then
-		SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
-	if maxTeamDamage > 30 then
-		SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
-
-	if KilledHHs > 0 then
-		SendStat(siKilledHHs, IntToStr(KilledHHs));
+    // now to console
+    if winnersClan <> nil then 
+        begin
+        WriteLnToConsole('WINNERS');
+        WriteLnToConsole(inttostr(winnersClan^.TeamsNumber));
+        for t:= 0 to winnersClan^.TeamsNumber - 1 do
+            WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
+        end
+    else
+        WriteLnToConsole('DRAW');
+        
+    ScriptCall('onAchievementsDeclaration');
+end;
 
-	// now to console
-	if winnersClan <> nil then 
-		begin
-		WriteLnToConsole('WINNERS');
-		for t:= 0 to winnersClan^.TeamsNumber - 1 do
-			WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
-		end
-	else
-		WriteLnToConsole('DRAW');
-
-	WriteLnToConsole('');
+procedure declareAchievement(id, teamname, location: shortstring; value: LongInt);
+begin 
+if (length(id) = 0) or (length(teamname) = 0) or (length(location) = 0) then exit;
+    WriteLnToConsole('ACHIEVEMENT');
+    WriteLnToConsole(id);
+    WriteLnToConsole(teamname);
+    WriteLnToConsole(location);
+    WriteLnToConsole(inttostr(value));
 end;
 
 procedure initModule;
--- a/hedgewars/uTeams.pas	Sun Sep 22 18:34:53 2013 +0300
+++ b/hedgewars/uTeams.pas	Wed Sep 25 05:42:16 2013 +0300
@@ -43,7 +43,7 @@
 
 implementation
 uses uLocale, uAmmos, uChat, uVariables, uUtils, uIO, uCaptions, uCommands, uDebug,
-    uGearsUtils, uGearsList, uVisualGearsList
+    uGearsUtils, uGearsList, uVisualGearsList, uPhysFSLayer
     {$IFDEF USE_TOUCH_INTERFACE}, uTouch{$ENDIF};
 
 var MaxTeamHealth: LongInt;
@@ -363,7 +363,7 @@
 inc(TeamsCount);
 
 for t:= 0 to cKbdMaxIndex do
-    team^.Binds[t]:= '';
+    team^.Binds[t]:= DefaultBinds[t];
 
 c:= Pred(ClansCount);
 while (c >= 0) and (ClansArray[c]^.Color <> TeamColor) do dec(c);
@@ -568,6 +568,61 @@
     end
 end;
 
+procedure loadTeamBinds(s: shortstring);
+var i: LongInt;
+    f: PFSFile;
+    p, l: shortstring;
+    b: byte;
+begin
+    l:= '';
+    
+    for i:= 1 to length(s) do
+        if s[i] in ['\', '/', ':'] then s[i]:= '_';
+        
+    s:= cPathz[ptTeams] + '/' + s + '.hwt';
+    if pfsExists(s) then
+        begin
+        AddFileLog('Loading binds from: ' + s);
+        f:= pfsOpenRead(s);
+        while (not pfsEOF(f)) and (l <> '[Binds]') do
+            pfsReadLn(f, l);
+
+        while (not pfsEOF(f)) and (l <> '') do
+            begin
+            pfsReadLn(f, l);
+
+            p:= '';
+            i:= 1;
+            while (i <= length(l)) and (l[i] <> '=') do
+                begin
+                if l[i] <> '%' then
+                    begin
+                    p:= p + l[i];
+                    inc(i)
+                    end else
+                    begin
+                    l[i]:= '$';
+                    val(copy(l, i, 3), b);
+                    p:= p + char(b);
+                    inc(i, 3)
+                    end;
+                end;
+
+            if i < length(l) then
+                begin
+                l:= copy(l, i + 1, length(l) - i);
+                if l <> 'default' then
+                    begin
+                    p:= 'bind ' + l + ' ' + p;
+                    ParseCommand(p, true)
+                    end
+                end
+            end;
+
+        pfsClose(f)
+        end
+end;
+
 procedure chAddTeam(var s: shortstring);
 var Color: Longword;
     ts, cs: shortstring;
@@ -586,6 +641,8 @@
     AddTeam(Color);
     CurrentTeam^.TeamName:= ts;
     CurrentTeam^.PlayerHash:= s;
+    loadTeamBinds(ts);
+    
     if GameType in [gmtDemo, gmtSave, gmtRecord] then
         CurrentTeam^.ExtDriven:= true;
 
@@ -609,7 +666,7 @@
 
 procedure chBind(var id: shortstring);
 var KeyName, Modifier, tmp: shortstring;
-    b: LongInt;
+    i, b: LongInt;
 begin
 KeyName:= '';
 Modifier:= '';
@@ -634,7 +691,17 @@
 if b = 0 then
     OutError(errmsgUnknownVariable + ' "' + id + '"', false)
 else
+    begin 
+    // add bind: first check if this cmd is already bound, and remove old bind
+    i:= cKbdMaxIndex;
+    repeat
+        dec(i)
+    until (i < 0) or (CurrentTeam^.Binds[i] = KeyName);
+    if (i >= 0) then
+        CurrentTeam^.Binds[i]:= '';
+
     CurrentTeam^.Binds[b]:= KeyName;
+    end
 end;
 
 procedure chTeamGone(var s:shortstring);
--- a/share/hedgewars/Data/Locale/fr.lua	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Locale/fr.lua	Wed Sep 25 05:42:16 2013 +0300
@@ -6,24 +6,24 @@
 --      ["011101000"] = "",
 --      ["011101001"] = "",
       ["30 minutes later..."] = "30 minutes plus tard...",
-      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "Il y a un moins, un cyborg est venu et nous a dit que vous étiez des cannibales !",
+      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "Il y a un mois, un cyborg est venu et nous a dit que vous étiez des cannibales !",
       ["Accuracy Bonus!"] = "Bonus précision",
 --      ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-      ["Achievement Unlocked"] = "Succes débloqué", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
-      ["A Classic Fairytale"] = "Un conte de fée classique",
+      ["Achievement Unlocked"] = "Succès débloqué", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
+      ["A Classic Fairytale"] = "Un conte classique de fée",
       ["Actually, you aren't worthy of life! Take this..."] = "En fait, tu n'es pas digne de vivre ! Prends ça....",
       ["A cy-what?"] = "Un cy-quoi ?",
-      ["Adventurous"] = "Aventureux",
+      ["Adventurous"] = "Aventurier",
 --      ["Africa"] = "", -- Continental_supplies
-      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "Après que Leaks A Lot ait trahit sa tribus, il rejoignit les cannibales... ",
-      ["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "Après le choc causé par l'espion ennemi, Leaks A Lot et Dense cloud partirent chasser pour se détendre.",
+      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "Après que Grosse Fuite ait trahit sa tribu, il rejoignât les cannibales... ",
+      ["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "Après le choc causé par l'espion ennemi, Grosse Fuite et Nuage Dense partirent chasser pour se détendre.",
       ["Again with the 'cannibals' thing!"] = "Encore avec votre 'cannibale' truc",
 --      ["a Hedgewars challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
       ["a Hedgewars mini-game"] = "Un mini jeux d'Hedgewars", -- Space_Invasion, The_Specialists
-      ["Aiming Practice"] = "Entrainement de tir", --Bazooka, Shotgun, SniperRifle
+      ["Aiming Practice"] = "Entraînement de tir", --Bazooka, Shotgun, SniperRifle
 	  ["A leap in a leap"] = "Un bond dans un bond",
       ["A little gift from the cyborgs"] = "Un petit cadeau de la part des cyborgs",
-      ["All gone...everything!"] = "évaporé...plus rien !",
+      ["All gone...everything!"] = "Évaporé...plus rien !",
       ["All right, we just need to get to the other side of the island!"] = "Très bien, nous devons juste rejoindre l'autre côté de l'île !",
 --      ["All walls touched!"] = "", -- WxW
       ["Ammo Depleted!"] = "Munitions épuisées !",
@@ -31,51 +31,51 @@
       ["Ammo is reset at the end of your turn."] = "Les munitions sont réinitialisées à la fin du tour",
       ["Ammo Maniac!"] = "Collectionneur de munitions !",
       ["Ammo"] = "Munitions",
-      ["And how am I alive?!"] = "Et comment suis je en vie ?",
-      ["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."] = "Et Leaks A Lot échoua à relever le défi ! Il atteri, honteux....",
-	  ["And so it began..."] = "Et c'est ainsi que ça a commencé...",
-      ["...and so the cyborgs took over the world..."] = "...Et c'est ainsi que les cyborgs prirent le controle du monde...",
-      ["And so they discovered that cyborgs weren't invulnerable..."] = "Et c'est ainsi qu'ils découvrirent que les cybords n'étaient pas invulnérables...",
-      ["And where's all the weed?"] = "et où est toute l'herbe ?",
+      ["And how am I alive?!"] = "Et comment suis-je en vie ?",
+      ["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."] = "Et il apparut que Grosse Fuite échoua dans sa mission ! Il atterit, alourdi par la honte...",
+	  ["And so it began..."] = "Et c'est ainsi que ça commença...",
+      ["...and so the cyborgs took over the world..."] = "...Et c'est ainsi que les cyborgs prirent le contrôle du monde...",
+      ["And so they discovered that cyborgs weren't invulnerable..."] = "Et c'est ainsi qu'ils découvrirent que les cyborgs n'étaient pas invulnérables...",
+      ["And where's all the weed?"] = "Et où est toute l'herbe ?",
       ["And you believed me? Oh, god, that's cute!"] = "Et tu m'as cru ? Oh mon dieu, c'est mignon !",
 --      ["Anno 1032: [The explosion will make a strong push ~ wide range, wont affect hogs close to the target]"] = "", -- Continental_supplies
 --      ["Antarctica"] = "", -- Continental_supplies
-      ["Are we there yet?"] = "Somme nous toujours là ?",
-      ["Are you accusing me of something?"] = "Es tu en train de m'accuser de quelque chose ? ",
-      ["Are you saying that many of us have died for your entertainment?"] = "Etes vous en train de dire que beaucoup d'entre nous sont morts pour votre divertissement ? ",
+      ["Are we there yet?"] = "Sommes-nous toujours là ?",
+      ["Are you accusing me of something?"] = "Es-tu en train de m'accuser de quelque chose ? ",
+      ["Are you saying that many of us have died for your entertainment?"] = "Vous dites que beaucoup d'entre nous sont morts pour votre divertissement ? ",
 --      ["Artur Detour"] = "",
-      ["As a reward for your performance, here's some new technology!"] = "Comme récompence, voici quelques nouvelles technologie !",
+      ["As a reward for your performance, here's some new technology!"] = "Comme récompense, voici une nouvelle technologie !",
 --      ["a shoppa minigame"] = "", -- WxW
 --      ["Asia"] = "", -- Continental_supplies
 --      ["Assault Team"] = "",
-      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "Vu que les munitions sont éparpillées tu devrais re-lancer la corde en plein vol",
-      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "Le défi accompli, Leaks A Lot posa les pieds sur le sol...",
+      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "Vu que les munitions sont éparpillées tu devrais relancer le grappin en plein vol",
+      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "Comme le défi était accompli, Grosse Fuite posa les pieds sur le sol...",
       ["As you can see, there is no way to get on the other side!"] = "Comme tu peux le voir, il n'y a pas de moyen d'atteindre l'autre côté !",
 --      ["Attack From Rope"] = "", -- WxW
 --      ["Australia"] = "", -- Continental_supplies
-      ["Available points remaining: "] = "points restant disponibles",  -- need the situation of when this sentence is used
+      ["Available points remaining: "] = "Points restant disponibles",  -- need the situation of when this sentence is used
 --      ["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...",
 --      ["[Backspace]"] = "effacement arrière",  --maybe the original name is better...
-      ["Backstab"] = "coup de poignard dans le dos",
+      ["Backstab"] = "Coup de poignard dans le dos",
 --      ["Bad Team"] = "", -- User_Mission_-_The_Great_Escape
 --      ["Bamboo Thicket"] = "", --really, i don't know the good translation for this
-      ["Barrel Eater!"] = "Mangeur de Barrils",
+      ["Barrel Eater!"] = "Mangeur de barrils",
       ["Barrel Launcher"] = "Lanceur de barrils", --need the situation for me to understand sens of sentence
 --      ["Baseballbat"] = "", -- Continental_supplies
       ["Bat balls at your enemies and|push them into the sea!"] = "Frappez vos ennemis à la batte|et envoyez-les à la mer !",
       ["Bat your opponents through the|baskets and out of the map!"] = "Frappez vos ennemis à la batte|, marquez des paniers ou envoyez-les à la mer !",
-      ["Bazooka Training"] = "Entrainement au Bazooka",
+      ["Bazooka Training"] = "Entraînement au Bazooka",
 --      ["Beep Loopers"] = "",
       ["Best laps per team: "] = "Meilleur temps par équipe",
 --      ["Best Team Times: "] = "",
-      ["Beware, though! If you are slow, you die!"] = "Attention tout de meme ! si tu es lent, tu meurt !",
+      ["Beware, though! If you are slow, you die!"] = "Attention tout de même ! si tu es lent, tu meurt !",
 --      ["Biomechanic Team"] = "",
 --      ["Blender"] = "",
 --      ["Bloodpie"] = "",
 --      ["Bloodrocutor"] = "",
 --      ["Bloodsucker"] = "",
-      ["Bloody Rookies"] = "Nouvelles recrues", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
+      ["Bloody Rookies"] = "Nouvelles recrues", -- 01#Boot_Çamp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
 --      ["Bone Jackson"] = "",
       ["Bonely"] = "Bonely",
 --      ["Boom!"] = "",
@@ -89,37 +89,37 @@
 --      ["Brain Teaser"] = "",
 --      ["Brutal Lily"] = "",
 --      ["Brutus"] = "",
-      ["Build a track and race."] = "construisez un parcours et faites la course.",
+      ["Build a track and race."] = "Construisez un parcours et faites la course.",
       ["Bullseye"] = "Dans le mille",
-      ["But it proved to be no easy task!"] = "Mais cela ne s'avéra pas etre une tache facile !",
+      ["But it proved to be no easy task!"] = "Mais cela ne s'avéra pas être une tâche facile !",
       ["But that's impossible!"] = "Mais c'est impossible !",
       ["But the ones alive are stronger in their heart!"] = "Mais les survivants sont plus forts dans leur coeur !",
       ["But...we died!"] = "Mais... nous avons été tués !",
       ["But where can we go?"] = "Mais où pouvons nous aller ? ",
       ["But why would they help us?"] = "Mais pourquoi nous aideraient-ils ? ",
-      ["But you're cannibals. It's what you do."] = "Mais vous etes cannibales. C'est ce que vous faites.",
+      ["But you're cannibals. It's what you do."] = "Mais vous êtes cannibales. C'est ce que vous faites.",
       ["But you said you'd let her go!"] = "Mais vous aviez dit que vous la laisseriez partir !",
-      ["Call me Beep! Well, 'cause I'm such a nice...person!"] = "Appele moi Beep ! Hum, parce que je suis genre une personne sympa !",
-      ["Cannibals"] = "Cannibales",
-      ["Cannibal Sentry"] = "Sentinelle cannibale",
-      ["Cannibals?! You're the cannibals!"] = "Cannibales ? C'est vous les cannibales !",
-      ["CAPTURE THE FLAG"] = "Capturez le drapeau !",
-      ["Careless"] = "Imprudent",
---      ["Carol"] = "",
+      ["Çall me Beep! Well, 'cause I'm such a nice...person!"] = "Appelle-moi Beep ! Hum, parce que je suis du genre sympa !",
+      ["Çannibals"] = "Çannibales",
+      ["Çannibal Sentry"] = "Sentinelle cannibale",
+      ["Çannibals?! You're the cannibals!"] = "Çannibales ? C'est vous les cannibales !",
+      ["CAPTURE THE FLAG"] = "Çapturez le drapeau !",
+      ["Çareless"] = "Imprudent",
+--      ["Çarol"] = "",
 --      ["CHALLENGE COMPLETE"] = "", -- User_Mission_-_RCPlane_Challenge
-      ["Change Weapon"] = "changez d'arme",
+      ["Change Weapon"] = "Changez d'arme",
       ["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...",
       ["Clumsy"] = "Maladroit",
 --      ["Cluster Bomb MASTER!"] = "", -- Basic_Training_-_Cluster_Bomb
 --      ["Cluster Bomb Training"] = "", -- Basic_Training_-_Cluster_Bomb
       ["Codename: Teamwork"] = "Nom de code : Travail d'équipe",
-      ["Collateral Damage"] = "Dommage collatéraux",
-      ["Collateral Damage II"] = "Dommage collatéraux II",
-	  ["Collect all the crates, but remember, our time in this life is limited!"] = "Collectes toutes les caisses mais souviens toi, notre temps dans cette vie est limité !",
+      ["Collateral Damage"] = "Dommages collatéraux",
+      ["Collateral Damage II"] = "Dommages collatéraux II",
+	  ["Collect all the crates, but remember, our time in this life is limited!"] = "Collecte toutes les caisses mais souviens toi, notre temps dans cette vie est limité !",
 --      ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
-	  ["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 : selectionne la corde ninja, [haut] ou [bas] pour viser, flèches directionnelles pour bouger. |La corde peut etre re-lancée en plein vol !",
-	  ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "collectes les caisses dans le temps imparti ! |si tu rates, tu devras réessayer.",
-	  ["Come closer, so that your training may continue!"] = "Rapproche toi, ainsi ton entraînement pourra continuer !",
+	  ["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 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.",
+	  ["Come closer, so that your training may continue!"] = "Rapproche-toi, ainsi ton entraînement pourra continuer !",
 --      ["Compete to use as few planes as possible!"] = "", -- User_Mission_-_RCPlane_Challenge
       ["Complete the track as fast as you can!"] = "Finissez la course aussi vite que possible !",
 --      ["COMPLETION TIME"] = "", -- User_Mission_-_Rope_Knock_Challenge
@@ -128,7 +128,7 @@
       ["Congratulations!"] = "Félicitations !",
 --      ["Congratulations! You needed only half of time|to eliminate all targets."] = "", -- Basic_Training_-_Cluster_Bomb
 --      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "", -- Basic_Training_-_Rope
-      ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Félicitations ! Vous avez éliminé toutes les cibles|pendant le temps alloué.", --Bazooka, Shotgun, SniperRifle
+      ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Félicitations ! Vous avez éliminé toutes les cibles|dans le temps alloué.", --Bazooka, Shotgun, SniperRifle
 --      ["Continental supplies"] = "", -- Continental_supplies
       ["Control pillars to score points."] = "Contrôlez les piliers pour marquer des points",
 --      ["Corporationals"] = "",
@@ -139,50 +139,50 @@
       ["Cyborg. It's what the aliens call themselves."] = "Cyborg. C'est ainsi que s'appellent les aliens entre eux.",
 --      ["Dahmer"] = "",
       ["DAMMIT, ROOKIE!"] = "Et merde, recrue",
-      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "Et merde, recrue ! Dégage de me tête !",
-      ["Dangerous Ducklings"] = "Canetons dangereux",
+      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "Et merde, recrue ! Dégage de ma tête !",
+      ["Dangerous Ducklings"] = "Çanetons dangereux",
 --      ["Deadweight"] = "poids mort/boulet", 
-      ["Defeat the cannibals!|"] = "Bat les cannibales",
-      ["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ègle le compte à rebour avec [1-5], vises avec [haut]/[bas] et maintient [Espace] pour la puissance",
+      ["Defeat the cannibals!|"] = "Bats les cannibales",
+      ["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 !",
-      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "Défends toi ! |Conseil : Tu peux obtenir des astuces sur l'utilisation des armes en placant ta souris dessus dans le menu de séléction des armes",
-      ["Demolition is fun!"] = "La démolition c'est cool",
+      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon sélection menu"] = "Défends toi ! |Conseil : Tu peux obtenir des astuces sur l'utilisation des armes en plaçant ta souris dessus dans le menu de sélection des armes",
+      ["Demolition is fun!"] = "La démolition c'est marrant",
 --      ["Dense Cloud"] = "",
-      ["Dense Cloud must have already told them everything..."] = "Dense Cloud doit déjà leur avoir tout raconter...",
+      ["Dense Cloud must have already told them everything..."] = "Nuage Dense leur a sûrement déjà tout raconté...",
 --      ["Depleted Kamikaze!"] = "Kamikaze ... !", 
-      ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "Détruis le, Leaks A Lot ! Il est responsable de la mort de beaucoup d'entre nous !",
-      ["Destroy invaders to score points."] = "Détruisez les envahisseur pour marquer des points",
-	  ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "Détruis les cibles ! |Astuce : selectionne le Shoryuken et appuyez sur [Espace] |P.S. vous pouvez l'utilisez en plein vol",
+      ["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 to score points."] = "Détruisez les envahisseurs pour marquer des points",
+	  ["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",
-      ["Did anyone follow you?"] = "As tu été suivis ? ",
-      ["Did you see him coming?"] = "L'a tu vu venir ?",
-      ["Did you warn the village?"] = "As tu averti le village ?",
-      ["Die, die, die!"] = "Meurt, meurt, meurt !",
+      ["Did anyone follow you?"] = "As-tu été suivi ? ",
+      ["Did you see him coming?"] = "L'as-tu vu venir ?",
+      ["Did you warn the village?"] = "As-tu averti le village ?",
+      ["Die, die, die!"] = "Meurs, meurs, meurs !",
 --      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
 --      ["Dist: "] = "", -- Space_Invasion
-      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "Ne rit pas, inexpérimenté, car il dit la vérité ! ",
-      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "Ne laisse pas ses mots de distraire l'apprenti ! Il te poignardera dès que tu auras le dos tourné !",
+      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "Ne ris pas le bleu, car il dit la vérité ! ",
+      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "Ne laisses pas ses mots te distraire, petit scarabée ! Il te poignardera dès que tu auras le dos tourné !",
 	  ["Do the deed"] = "Accomplir l'acte",
       ["Double Kill!"] = "Double meurtre",
 --      ["DOUBLE KILL"] = "", -- Mutant
-      ["Do you have any idea how valuable grass is?"] = "Est ce que vous avez une idée de la valeur de votre herbe ?",
+      ["Do you have any idea how valuable grass is?"] = "Est-ce que vous avez une idée de la valeur de votre herbe ?",
       ["Do you think you're some kind of god?"] = "Vous vous prenez pour un genre de dieu ?",
       ["Dragon's Lair"] = "La tanière du dragon",
 --      ["Drills"] = "",
-      ["Drone Hunter!"] = "Chasseur de drone",
+      ["Drone Hunter!"] = "Chasseur de drône",
 --      ["Drop a bomb: [drop some heroic wind that will turn into a bomb on impact]"] = "", -- Continental_supplies
 --      ["Drowner"] = "",-- can't have a good translation, think its a merge of drone and owner so if wanna translate it will be : tueur de drone, wich is like drone hunter...
       ["Dude, all the plants are gone!"] = "Mec, toutes les plantes sont parties !",
       ["Dude, can you see Ramon and Spiky?"] = "Mec, peux tu voir Ramon et Spkiky ? ",
       ["Dude, that's so cool!"] = "Mec, c'est si cool !",
-      ["Dude, we really need a new shaman..."] = "mec, on a vraiment besoin d'un nouveau Shaman...",
+      ["Dude, we really need a new shaman..."] = "Mec, on a vraiment besoin d'un nouveau Shaman...",
       ["Dude, what's this place?!"] = "Mec, quel est cet endroit?",
-      ["Dude, where are we?"] = "Mec, où sommes nous ? ",
+      ["Dude, where are we?"] = "Mec, on est où ? ",
 --      ["Dude, wow! I just had the weirdest high!"] = "",
 --      ["Duration"] = "", -- Continental_supplies
 --      ["Dust storm: [Deals 20 damage to all enemies in the circle]"] = "", -- Continental_supplies
-      ["Each turn you get 1-3 random weapons"] = "A chaque tour, tu as 1 à 3 armes aléatoires",
-      ["Each turn you get one random weapon"] = "A chaque tour, tu as une arme aléatoire",
+      ["Each turn you get 1-3 random weapons"] = "À chaque tour, tu as 1 à 3 armes aléatoires",
+      ["Each turn you get one random weapon"] = "À chaque tour, tu as une arme aléatoire",
 --      ["Eagle Eye"] = "",
 --      ["Eagle Eye: [Blink to the impact ~ one shot]"] = "", -- Continental_supplies
 --      ["Ear Sniffer"] = "",
@@ -204,25 +204,25 @@
 --      ["Europe"] = "", -- Continental_supplies
 --      [" ever done to you?!"] = "", -- A_Classic_Fairytale:backstab
       ["Everyone knows this."] = "Tout le monde sait ça.",
-      ["Every single time!"] = "A chaque fois !",
-      ["Everything looks OK..."] = "Tout à l'air d'être OK ...",
+      ["Every single time!"] = "À chaque fois !",
+      ["Everything looks OK..."] = "Tout a l'air d'être OK ...",
       ["Exactly, man! That was my dream."] = "Exactement, mec ! C'était mon rêve.",
-      ["Eye Chewer"] = "Eye Chewer",
+      ["Eye Chewer"] = "Mâcheur d'oeilr",
 --      ["INSANITY"] = "", -- Mutant
-	 ["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"] = "Fais sortir tes coéquipiers de leur prison naturelle et sauve la princesse ! |Percer des trous résoudrait tout. |ca serait une bonne idée de placer quelque poutres avant de commencer à percer. je dis ça, je dis rien. |Tous vos hérissons doivent être au dessus de la hauteur marquée ! | Leaks A Lot doit être très proche de la princesse !  ",
+	 ["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"] = "Fais sortir tes coéquipiers de leur prison naturelle et sauve la princesse ! |Percer des trous résoudrait tout. |Ce serait une bonne idée de placer quelques poutres avant de commencer à percer. Moi j'dis ça mais j'dis rien. |Tous vos hérissons doivent être au dessus de la hauteur marquée ! | Grosse Fuite doit être très proche de la princesse !  ",
       ["Family Reunion"] = "Réunion de famille ",
       ["Fastest lap: "] = "Meilleur tour : ",
       ["Feeble Resistance"] = "Résistance Futile",
 --      ["Fell From Grace"] = "",
 --      ["Fell From Heaven"] = "",
-      ["Fell From Heaven is the best! Fell From Heaven is the greatest!"] = "Fell From Heaven est la meilleure ! Fell From Heaven est la meilleure !",
+      ["Fell From Heaven is the best! Fell From Heaven is the greatest!"] = "Tombée de l'Enfer est la meilleure ! Tombée de l'Enfer est la meilleure !",
 --      ["Femur Lover"] = "",
 --      ["Fierce Competition!"] = "", -- Space_Invasion
 --      ["Fiery Water"] = "",
-      ["Find your tribe!|Cross the lake!"] = "Trouves ta tribue ! |travers le lac !",
+      ["Find your tribe!|Cross the lake!"] = "Trouve ta tribue ! |Traverse le lac !",
       ["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]",
 --      ["Fire"] = "",
---      ["Fire a mine: [Does what it says ~ Cant be dropped close to an enemy ~ 1 sec]"] = "", -- Continental_supplies
+--      ["Fire a mine: [Does what it says ~ Çant be dropped close to an enemy ~ 1 sec]"] = "", -- Continental_supplies
       ["First aid kits?!"] = "Des kits de premiers secours ?!",
 --      ["FIRST BLOOD MUTATES"] = "", -- Mutant
       ["First Blood"] = "Premier sang",
@@ -236,17 +236,17 @@
 --      ["Flare: [fire up some bombs depending on hogs depending on hogs in the circle"] = "", -- Continental_supplies
       ["Flesh for Brainz"] = "Flesh for Brainz",
 --      ["For improved features/stability, play 0.9.18+"] = "", -- WxW
-      ["Free Dense Cloud and continue the mission!"] = "Libérez Dense Cloud et continuez la mission !",
+      ["Free Dense Cloud and continue the mission!"] = "Libérez Nuage Dense et continuez la mission !",
 --      ["Friendly Fire!"] = "",
       ["fuel extended!"] = "Le plein d'essence !",
       ["GAME BEGUN!!!"] = "Le jeu a commencé !!!",
 --      ["Game Modifiers: "] = "",
       ["GAME OVER!"] = "Fin du jeu ! ",
       ["Game Started!"] = "Début du jeu ! ",
-      ["Game? Was this a game to you?!"] = "Jeu ? Etais ce un jeu pour vous ?!",
+      ["Game? Was this a game to you?!"] = "Jeu ? Etait-ce un jeu pour vous ?!",
 --      ["GasBomb"] = "", -- Continental_supplies
 --      ["Gas Gargler"] = "",
-      ["Get Dense Cloud out of the pit!"] = "Sortez Dense Cloud de la fosse",
+      ["Get Dense Cloud out of the pit!"] = "Sortez Nuage Dense de la fosse",
       ["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 out of there!"] = "", -- User_Mission_-_The_Great_Escape
@@ -272,44 +272,44 @@
 --      ["Go surf!"] = "", -- WxW
 --      ["GOTCHA!"] = "je t'ai eu !",  is this good ? 
       ["Grab Mines/Explosives"] = "Emparez vous des Mines/Explosifs",
-      ["Great choice, Steve! Mind if I call you that?"] = "Bon choix, Steve ! Ca t'ennuie si je t'appele comme ça ?",
+      ["Great choice, Steve! Mind if I call you that?"] = "Bon choix, Steve ! Ça t'ennuie si je t'appele comme ça ?",
 --      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "", -- Basic_Training_-_Rope
-      ["Great! You will be contacted soon for assistance."] = "super ! Tu seras bientot contacté pour de l'assistance.",
+      ["Great! You will be contacted soon for assistance."] = "Super ! Tu seras bientot contacté pour de l'aide.",
 --      ["Green lipstick bullet: [Is poisonous]"] = "", -- Continental_supplies
       ["Greetings, cloudy one!"] = "Salutation, le nuageux !",
       ["Greetings, "] = "Salutations, ",
 --      ["Grenade Training"] = "", -- Basic_Training_-_Grenade
 --      ["Grenadiers"] = "", -- Basic_Training_-_Grenade
-      ["Guys, do you think there's more of them?"] = "Les gars, vous pensez qu'ils y en plus encore ?",
+      ["Guys, do you think there's more of them?"] = "Les gars, vous pensez qu'il y en a encore plus ?",
 --      ["Hahahaha!"] = "",
 --      ["Haha!"] = "",
 --      ["HAHA!"] = "",
-      ["Haha, now THAT would be something!"] = "Haha, maintenant CA va être quelquechose !",
+      ["Haha, now THAT would be something!"] = "Haha, maintenant ÇA, ça va être quelquechose !",
       ["Hannibal"] = "Hannibal",
 --      ["Hapless Hogs"] = "",
 --      [" Hapless Hogs left!"] = "",
 --      [" HAS MUTATED"] = "", -- Mutant
 --      ["Hatless Jerry"] = "",
-      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "N'ai pas d'illusion, ta tribue est morte, quel que soit ton choix",
-      ["Have we ever attacked you first?"] = "nous avons vous jamais attaqué en premier ? ",
+      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "N'aies pas d'illusion, ta tribue est morte, quel que soit ton choix",
+      ["Have we ever attacked you first?"] = "Avons-nous jamais attaqué en premier ? ",
       ["Health crates extend your time."] = "Les caisses de vie augmentent votre temps.",
 --      ["Heavy"] = "",
---      ["Heavy Cannfantry"] = "",
+--      ["Heavy Çannfantry"] = "",
 --      ["Hedge-cogs"] = "",
 --      ["Hedgehog projectile: [fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
 --      ["Hedgewars-Basketball"] = "",
 --      ["Hedgewars-Knockball"] = "",
 --      ["Hedgibal Lecter"] = "",
       ["Heh, it's not that bad."] = "Hé, c'est pas si mal.",
-      ["Hello again, "] = "Re*bonjour,",
-      ["Help me, Leaks!"] = "Aide moi, Leaks !",
-      ["Help me, please!!!"] = "Aide moi, s'il te plait !!!",
+      ["Hello again, "] = "Re-bonjour,",
+      ["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 !",
 	  ["He moves like an eagle in the sky."] = "Il se déplace comme un aigle dans le ciel",
       ["He must be in the village already."] = "Il doit déjà être au village",
-      ["Here, let me help you!"] = "Laissez moi vous aider !",
-      ["Here, let me help you save her!"] = "Laisse moi vous aider à la sauver !",
-      ["Here...pick your weapon!"] = "ici...choisis ton arme !",
+      ["Here, let me help you!"] = "Laissez-moi vous aider !",
+      ["Here, let me help you save her!"] = "Laissez-moi vous aider à la sauver !",
+      ["Here...pick your weapon!"] = "Ici...choisis ton arme !",
 --      ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
 	  ["He's so brave..."] = "Il est si courageux",
       ["He won't be selling us out anymore!"] = "Il ne nous vendra plus !",
@@ -318,120 +318,120 @@
       ["Hey! This is cheating!"] = "Hé ! C'est de la triche !",
 --      ["HIGHLANDER"] = "", -- Highlander
 	  ["Hightime"] = "Meilleur temps",
-      ["Hint: Double Jump - Press [Backspace] twice"] = "Astuce : Double saut : appuyez deux fois sur [retour arrière]",
-      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "Astuce : Selectionnez le chalumeau, visez et tirez[Espace]. [espace] a nouveau pour stopper. |N'explosez pas la caisse.",
-      ["Hint: Select the LowGravity and press [Fire]."] = "Astuce : Selectionnez : gravité faible et appuyez sur [espace]",
+      ["Hint: Double Jump - Press [Backspace] twice"] = "Astuce : Double saut - appuyez deux fois sur [retour arrière]",
+      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "Astuce : Sélectionnez le chalumeau, visez et tirez avec [Espace]. [espace] à nouveau pour stopper. |N'explosez pas la caisse.",
+      ["Hint: Select the LowGravity and press [Fire]."] = "Astuce : Sélectionnez gravité faible et appuyez sur [espace]",
       ["Hint: you might want to stay out of sight and take all the crates...|"] = "Astuce : Vous aimeriez probablement rester hors de vue et prendre toutes les caisses...|",
-	  ["His arms are so strong!"] = "Ces bras sont si forts !",
+	  ["His arms are so strong!"] = "Ses bras sont si forts !",
 --      ["Hit Combo!"] = "",
 --      ["Hmmm..."] = "",
       ["Hmmm...actually...I didn't either."] = "Humm... en fait...je ne savais pas non plus.",
 --      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
-      ["Hmmm...it's a draw. How unfortunate!"] = "Hmmm... C'est un dessin. Pas de chance !",
-	  ["Hmmm...perhaps a little more time will help."] = "humm...Peut être qu'un peu plus de temps aiderait",
+      ["Hmmm...it's a draw. How unfortunate!"] = "Hmmm... C'est un ex-aequo. Pas de chance !",
+	  ["Hmmm...perhaps a little more time will help."] = "Humm...Peut être qu'un peu plus de temps aiderait",
 --      ["Hogminator"] = "",
 --      ["Hogs in sight!"] = "", -- Continental_supplies
 --      ["HOLY SHYTE!"] = "", -- Mutant
 --      ["Honest Lee"] = "",
       ["Hooray!"] = "Hourra ! ",
       ["Hostage Situation"] = "Situation d'otage",
-      ["How can I ever repay you for saving my life?"] = "Comment pourrais-je jamais te remercier de m'avoir sauver la vie ?",
-      ["How come in a village full of warriors, it's up to me to save it?"] = "Comment entrer dans un village plein de guerriers, c'est à moi de le sauver ?",
-	  ["How difficult would you like it to be?"] = "A quel point veut tu que ce soit difficile ?",
-      ["HOW DO THEY KNOW WHERE WE ARE???"] = "COMMENT SAVENT-ILS OU NOUS SOMMES ?",
+      ["How can I ever repay you for saving my life?"] = "Comment pourrais-je jamais te remercier de m'avoir sauvé la vie ?",
+      ["How come in a village full of warriors, it's up to me to save it?"] = "Comment entrer dans un village plein de guerriers ? C'est à moi de le sauver ?",
+	  ["How difficult would you like it to be?"] = "À quel point veux-tu que ce soit difficile ?",
+      ["HOW DO THEY KNOW WHERE WE ARE???"] = "COMMENT SAVENT-ILS OÙ NOUS SOMMES ?",
       ["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 ...",
 --      [" HP"] = "", -- Mutant
       ["Hunter"] = "Chasseur", --Bazooka, Shotgun, SniperRifle
       ["I believe there's more of them."] = "Je crois qu'il y en a encore d'autres",
 	  ["I can see you have been training diligently."] = "Je vois que tu t'es entraîné assiduement.",
-      ["I can't believe it worked!"] = "Je ne peux pas croire que ça a marché !",
-      ["I can't believe this!"] = "Je ne peux pas le croire !",
+      ["I can't believe it worked!"] = "Je ne peux pas croire que ça aie marché !",
+      ["I can't believe this!"] = "Je peux pas le croire !",
       ["I can't believe what I'm hearing!"] = "Je ne peux pas croire ce que j'entends !",
       ["I can't wait any more, I have to save myself!"] = "Je ne peux plus attendre, je dois me sauver !",
-      ["I could just teleport myself there..."] = "Je pourrai juste me téléporter la bas...",
-      ["I'd better get going myself."] = "Je ferai mieux de rentrer.",
+      ["I could just teleport myself there..."] = "Je pourrais juste me téléporter là-bas...",
+      ["I'd better get going myself."] = "Je ferais mieux de rentrer.",
       ["I didn't until about a month ago."] = "Je ne savais pas jusqu'à il y a un mois",
 --      ["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"] = "", -- Basic_Training_-_Rope
       ["I feel something...a place! They will arrive near the circles!"] = "Je sens quelque chose... une localisation ! Ils vont arriver près des cercles !",
       ["If only I had a way..."] = "Si seulement j'avais un moyen...",
       ["If only I were given a chance to explain my being here..."] = "Si seulement vous me laissiez une chance d'expliquer ce que je fais ici...",
       ["I forgot that she's the daughter of the chief, too..."] = "J'avais oublié qu'elle était aussi la fille du chef...",
-      ["If they try coming here, they can have a taste of my delicious knuckles!"] = "S'ils essaient de venir, ils pourront gouter de mes poings",
+      ["If they try coming here, they can have a taste of my delicious knuckles!"] = "S'ils essaient de venir, ils pourront goûter de mes poings",
       ["If you agree to provide the information we need, you will be spared!"] = "Si tu es d'accord pour nous donner les informations dont nous avons besoin, tu seras épargné !",
 --      ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey
       ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "Si tu décides de nous aider, et bien, nous n'aurons plus besoin de chercher un nouveau gouverneur pour l'île.",
-      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "Si vous êtes coincés, utiliser le Desert Eable, ou recommencez la missions",
+      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "Si vous êtes coincés, utilisez l'Aigle du Désert, ou recommencez la mission",
       ["If you know what I mean..."] = "Si tu vois ce que je veux dire...",
       ["If you say so..."] = "Si tu le dis...",
-      ["If you wish to restart the course, hold [Precise] while your turn ends (e.g with Skip)!|"] = "Si tu soihaire recommencer la coursse, maintien [precise] quand ton tour se termine (avec [passe ton tour ] par exemple",
+      ["If you wish to restart the course, hold [Precise] while your turn ends (e.g with Skip)!|"] = "Si tu souhaites recommencer la course, maintiens [precise] quand ton tour se termine (avec [passe ton tour ] par exemple",
       ["I guess you'll have to kill them."] = "Je suppose que vous devrez les tuer",
       ["I have come to make you an offering..."] = "Je suis venu te faire une offre...",
-      ["I have no idea where that mole disappeared...Can you see it?"] = "Je n'ai aucune idée où cette taupe à bien pu aller...Peux tu la voir ?",
+      ["I have no idea where that mole disappeared...Çan you see it?"] = "Je n'ai aucune idée où cette taupe a bien pu aller... Peux-tu la voir ?",
       ["I have to follow that alien."] = "Je dois suivre cet extraterrestre",
       ["I have to get back to the village!"] = "Je dois retourner au village !",
-	  ["I hope you are prepared for a small challenge, young one."] = "J'espere que tu es préparé pour un petit défi, l'apprenti",
+	  ["I hope you are prepared for a small challenge, young one."] = "J'espere que tu es préparé pour un petit défi, petit scarabée",
       ["I just don't want to sink to your level."] = "Je ne veux pas m'abaisser à votre niveau.",
       ["I just found out that they have captured your princess!"] = "Je viens de m'apercevoir qu'ils ont capturé votre princesse !",
       ["I just wonder where Ramon and Spiky disappeared..."] = "Je me demande seulement où Ramon et Spiky ont disparu",
-      ["I'll hold them off while you return to the village!"] = "Je vais les retenir pendant que tu retourne au village",
-	  ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "imagines que ces cibles sont les loups qui ont tués tes parents ! Défoule ta colère sur eux !",
+      ["I'll hold them off while you return to the village!"] = "Je vais les retenir pendant que tu retournes au village",
+	  ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "Imagines que ces cibles sont les loups qui ont tués tes parents ! Défoule ta colère sur eux !",
       ["I'm...alive? How? Why?"] = "Je suis...vivant ? Comment ? Pourquoi ?",
       ["I'm a ninja."] = "Je suis un ninja",
-      ["I marked the place of their arrival. You're welcome!"] = "J'ai marqués les lieux d'où ils arriveront. Derien !",
+      ["I marked the place of their arrival. You're welcome!"] = "J'ai marqués les lieux d'où ils arriveront. De rien !",
       ["I'm certain that this is a misunderstanding, fellow hedgehogs!"] = "Ce doit être une erreur, mes chers hérissons",
       ["I mean, none of you ceased to live."] = "Je veux dire, aucun d'entre vous n'a cessé de vivre",
       ["I'm getting old for this!"] = "Je deviens vieux pour ça !",
-      ["I'm getting thirsty..."] = "je deviens trentenaire",
+      ["I'm getting thirsty..."] = "J'ai soif",
       ["I'm here to help you rescue her."] = "Je suis ici pour t'aider à la secourir.",
       ["I'm not sure about that!"] = "Je n'en suis pas si sûr !",
 	  ["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'm so scared!"] = "Je suis si effrayé !",
-      ["Incredible..."] = "Incroyable",
+      ["I'm so scared!"] = "J'ai tellement peur !",
+      ["Incredible..."] = "Incroyable...",
       ["I need to find the others!"] = "Je dois trouver les autres !",
       ["I need to get to the other side of this island, fast!"] = "Je dois aller sur l'autre côté de cette île, rapidemment !",
       ["I need to move the tribe!"] = "Je dois emmener la tribue",
       ["I need to prevent their arrival!"] = "Je dois prévoir leur arrivée !",
       ["I need to warn the others."] = "Je dois avertir les autres.",
-      ["In fact, you are the only one that's been acting strangely."] = "En fait, tu es le seul qui a agi étrangement.",
-      ["In order to get to the other side, you need to collect the crates first.|"] = "dans le but d'atteindre l'autre coté, tu dois d'abord collectez les caisses ",
-      ["Instructor"] = "Instructeur", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
-      ["Interesting idea, haha!"] = "Idee interessante, haha !",
-      ["Interesting! Last time you said you killed a cannibal!"] = "Interessant ! La dernière fois tu as dit que tu avais tué un cannibale !",
+      ["In fact, you are the only one that's been acting strangely."] = "En fait, tu es le seul qui ait agi étrangement.",
+      ["In order to get to the other side, you need to collect the crates first.|"] = "Dans le but d'atteindre l'autre coté, tu dois d'abord collecter les caisses ",
+      ["Instructor"] = "Instructeur", -- 01#Boot_Çamp, User_Mission_-_Dangerous_Ducklings
+      ["Interesting idea, haha!"] = "Idee intéressante, haha !",
+      ["Interesting! Last time you said you killed a cannibal!"] = "Intéressant ! La dernière fois tu as dit que tu avais tué un cannibale !",
 --      ["In the meantime, take these and return to your \"friend\"!"] = "", -- A_Classic_Fairytale:shadow
-      ["invaders destroyed"] = "envahisseur détruit",
+      ["invaders destroyed"] = "Envahisseur détruit",
       ["Invasion"] = "Invasion",
       ["I saw it with my own eyes!"] = "Je l'ai vu de mes propres yeux !",
       ["I see..."] = "Je vois...",
 	  ["I see you have already taken the leap of faith."] = "Je vois que tu as déjà fait le saut de la foi.",
       ["I see you would like his punishment to be more...personal..."] = "Je vois que tu voudrais que son châtiment soit plus...personnel...",
-      ["I sense another wave of cannibals heading our way!"] = "Je sens une autre vague de cannibale qui arrivent !",
-      ["I shouldn't have drunk that last pint."] = "Je n'aurais pas du boire cette derniere pinte",
-      ["Is this place in my head?"] = "est ce que cet endroit est dans ma tete ?",
-      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "Ca n'a pas d'importance. je ne laisserai pas cet alien blesser ma fille !",
+      ["I sense another wave of cannibals heading our way!"] = "Je sens qu'une autre vague de cannibale arrive !",
+      ["I shouldn't have drunk that last pint."] = "Je n'aurais pas du boire cette dernière pinte",
+      ["Is this place in my head?"] = "Est-ce que cet endroit est dans ma tête ?",
+      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "Ça n'a pas d'importance. Je ne laisserais pas cet alien blesser ma fille !",
       ["I think we are safe here."] = "Je pense que nous sommes en sécurité ici.",
-      ["I thought their shaman died when he tried our medicine!"] = "Je pensais que leur shaman est mort quand il a essayé notre médecine !",
-      ["It is called 'Hogs of Steel'."] = "C'est appelé 'hérissions d'acier' .",
+      ["I thought their shaman died when he tried our medicine!"] = "Je pensais que leur shaman mourut quand il essaya notre potion !",
+      ["It is called 'Hogs of Steel'."] = "C'est appelé 'hérissons d'acier' .",
 	  ["It is time to practice your fighting skills."] = "Il est temps d'entraîner tes compétences de combat",
-      ["It must be a childhood trauma..."] = "Ca doit être un traumatisme d'enfance",
+      ["It must be a childhood trauma..."] = "Ça doit être un traumatisme d'enfance",
       ["It must be the aliens!"] = "Ce doit être les extraterrestres !",
       ["It must be the aliens' deed."] = "Ce doit être à cause des extraterrestres",
       ["It must be the cyborgs again!"] = "Ce doit encore etre les cyborgs !",
       ["I told you, I just found them."] = "Je te l'ai dit, je les ai juste trouvés",
-      ["It's a good thing SUDDEN DEATH is 99 turns away..."] = "c'est une bonne chose que la MORT SUBITE soit dans 99 tours",
-      ["It's always up to women to clear up the mess men created!"] = "C'est toujours aux femmes de s'occuper du bazar que les hommes ont créés !",
+      ["It's a good thing SUDDEN DEATH is 99 turns away..."] = "C'est une bonne chose que la MORT SUBITE soit dans 99 tours",
+      ["It's always up to women to clear up the mess men created!"] = "C'est toujours aux femmes de s'occuper du bazar que les hommes ont créé !",
       ["It's a shame, I forgot how to do that!"] = "C'est une honte, j'ai oublié comment faire !",
       ["It's impossible to communicate with the spirits without a shaman."] = "C'est impossible de communiquer avec les esprits sans un shaman.",
       ["It's over..."] = "C'est terminé...",
-      ["It's time you learned that your actions have consequences!"] = "Il est toi pour toi d'apprendre que tes actions ont des conséquences !",
+      ["It's time you learned that your actions have consequences!"] = "Il est temps pour toi d'apprendre que tes actions ont des conséquences !",
       ["It's worth more than wood!"] = "C'est pire que le bois !",
-      ["It wants our brains!"] = "Ca veut nos cerveaux",
+      ["It wants our brains!"] = "Ça veut nos cerveaux",
       ["It was not a dream, unwise one!"] = "Ce n'était pas un rêve, imprudent !",
       ["I've seen this before. They just appear out of thin air."] = "J'ai déjà vu ça. Ils apparaissent dans les airs",
       ["I want to play a game..."] = "Je veux faire un jeu...",
       ["I want to see how it handles this!"] = "Je veux voir comment ils vont faire avec ça !",
       ["I wish to help you, "] = "Je souhaite t'aider,",
-      ["I wonder where Dense Cloud is..."] = "Je me demande où est Dense Cloud...",
+      ["I wonder where Dense Cloud is..."] = "Je me demande où est Nuage Dense...",
       ["I wonder why I'm so angry all the time..."] = "Je me demande pourquoi je suis toujours tellement en colère",
       ["I won't let you kill her!"] = "Je ne te laisserai pas la tuer !",
 --      ["Jack"] = "",
@@ -450,37 +450,37 @@
       ["KILLS"] = "Meurtres",
 --      ["Kill the aliens!"] = "",
       ["Kill the cannibal!"] = "Tue le cannibale !",
-      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "Tue le traître... ou épargnes sa vie ! |Tue le ou appuies sur [Precise] !",
+      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "Tue le traître... ou épargne sa vie ! |Tue le ou appuie sur [Precise] !",
       ["Last Target!"] = "Dernière cible !",
 --      ["Leader"] = "",
 --      ["Leaderbot"] = "",
 --      ["Leaks A Lot"] = "",
-      ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "Leaks A Lot, 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!"] = "Leaks A Lot à donné sa vie pour sa tribus ! Il aurait du survivre !",
-      ["Leaks A Lot must survive!"] = "Leaks A Lot doit survivre !",
+      ["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 !",
+      ["Leaks A Lot must survive!"] = "Grosse Fuite doit survivre !",
 --      ["Led Heart"] = "",
 --      ["Lee"] = "",
 --      ["[Left Shift]"] = "",-- touche majuscule gauche
 --      ["Let a Continent provide your weapons!"] = "", -- Continental_supplies
-      ["Let me test your skills a little, will you?"] = "Laisse moi te tester un peu, veux tu ?",
+      ["Let me test your skills a little, will you?"] = "Laisse-moi te tester un peu, veux-tu ?",
       ["Let's go home!"] = "Rentrons à la maison !",
       ["Let's head back to the village!"] = "Retournons au village !",
       ["Let's see what your comrade does now!"] = "Voyons ce que fait ton camarade maintenant !",
       ["Let's show those cannibals what we're made of!"] = "Montrons à ces cannibales de quel bois on se chauffe !",
-      ["Let them have a taste of my fury!"] = "Ils vont gouter de ma fureur !",
+      ["Let them have a taste of my fury!"] = "Ils vont goûter de ma fureur !",
       ["Let us help, too!"] = "Allons aider nous aussi !",
---      ["Light Cannfantry"] = "",
+--      ["Light Çannfantry"] = "",
       ["Listen up, maggot!!"] = "Écoutez, asticots",
       ["Little did they know that this hunt will mark them forever..."] = "Savait-il que cette chasse allait les marquer à jamais...",
 --      ["Lively Lifeguard"] = "",
 --      ["Lonely Cries: [Rise the water if no hog is in the circle and deal 1 damage to all hogs]"] = "", -- Continental_supplies
-      ["Look, I had no choice!"] = "ecoute, je n'avais pas le choix !",
-      ["Look out! There's more of them!"] = "Ils sont plus nombreux !",
-      ["Look out! We're surrounded by cannibals!"] = "Regarde ! nous sommes entourés par les cannibales !",
+      ["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 !",
+      ["Look out! We're surrounded by cannibals!"] = "Regarde ! Nous sommes entourés par les cannibales !",
       ["Looks like the whole world is falling apart!"] = "On dirait que le monde entier tombe en morceaux !",
       ["Luckily, I've managed to snatch some of them."] = "Heureusement, j'ai réussi à en avoir quelques unes",
 --      ["LUDICROUS KILL"] = "", -- Mutant
-      ["May the spirits aid you in all your quests!"] = "Puisse les esprits t'aider dans tes quêtes !",
+      ["May the spirits aid you in all your quests!"] = "Puissent les esprits t'aider dans tes quêtes !",
 --      ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "", -- Continental_supplies
 --      ["MEGA KILL"] = "", -- Mutant
 --      ["Meiwes"] = "",
@@ -490,21 +490,21 @@
 --      ["|- Mines Time:"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
       ["MISSION FAILED"] = "Mission échouée", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
       ["MISSION SUCCESSFUL"] = "Mission réussie", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-      ["MISSION SUCCESS"] = "SUCCES DE LA MISSION",
+      ["MISSION SUCCESS"] = "SUCCÈS DE LA MISSION",
 --      ["Molotov"] = "", -- Continental_supplies
 --      ["MONSTER KILL"] = "", -- Mutant
-      ["More Natives"] = "More Natives",
+      ["More Natives"] = "Plus d'indigènes",
       ["Movement: [Up], [Down], [Left], [Right]"] = "Mouvement: [haut], [bas], [gauche], [droite]",
 --      ["Multi-shot!"] = "",
 --      ["Muriel"] = "",
-      ["Muscle Dissolver"] = "Muscle Dissolver",
+      ["Muscle Dissolver"] = "Monsieur Muscle",
 --      ["-------"] = "", -- Mutant
 --      ["Nade Boy"] = "", -- Basic_Training_-_Grenade
 --      ["Name"] = "",
-      ["Nameless Heroes"] = "Heros sans noms",
+      ["Nameless Heroes"] = "Héros sans noms",
 --      ["Nancy Screw"] = "",
 --      ["Napalm rocket: [Fire a bomb with napalm!]"] = "", -- Continental_supplies
-      ["Natives"] = "Natives",
+      ["Natives"] = "Indigènes",
       ["New Barrels Per Turn"] = "Nouveaux barrils par tour",
 --      ["NEW CLAN RECORD: "] = "",
       ["NEW fastest lap: "] = "Nouveau meilleur temps",
@@ -530,37 +530,37 @@
       ["Not you again! My head still hurts from last time!"] = "Pas encore vous ! Ma tête me fait encore mal de la dernière fois !",
       ["No, we made sure of that!"] = "Non, nous nous en sommes assurés",
 --      ["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"] = "", -- Basic_Training_-_Rope
-      ["No! What have I done?! What have YOU done?!"] = "Non ! Qu'ai je fait ? Qu'as TU fais ?!",
+      ["No! What have I done?! What have YOU done?!"] = "Non ! Qu'ais-je fait ? Qu'est-ce que TU as fait ?!",
       ["No. Where did he come from?"] = "Non. D'où est-il venu ?",
-      ["Now how do I get on the other side?!"] = "Maintenant comme je me rends de l'autre coté ?",
-      ["No. You and the rest of the tribe are safer there!"] = "Non, Toi et le reste de la tribue etes plus en sécurité ici ! ",
+      ["Now how do I get on the other side?!"] = "Maintenant, comment je me rends de l'autre coté ?",
+      ["No. You and the rest of the tribe are safer there!"] = "Non, toi et le reste de la tribu êtes plus en sécurité ici ! ",
 --      ["Obliterate them!|Hint: You might want to take cover..."] = "",
-      ["Obstacle course"] = "Course d'obstacle",
-      ["Of course I have to save her. What did I expect?!"] = "Bien sur je dois la sauver. Qu'est ce que j'imaginais ?",
+      ["Obstacle course"] = "Course d'obstacles",
+      ["Of course I have to save her. What did I expect?!"] = "Bien sûr je dois la sauver. Qu'est ce que j'imaginais ?",
       ["OH, COME ON!"] = "OH, ALLEZ !",
       ["Oh, my!"] = "Oh mon dieu !",
-      ["Oh, my! This is even more entertaining than I've expected!"] = "Oh mon dieu ! c'est meme plus amusant que ce que je pensais !",
+      ["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 "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
       ["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, silly me! I forgot that I'm the shaman."] = "Oh suis je bête ! j'ai oublié que j'étais le shaman.",
+      ["Oh, silly me! I forgot that I'm the shaman."] = "Oh suis-je bête ! J'ai oublié que j'étais le shaman.",
 --      ["Olive"] = "",
 --	  ["Omnivore"] = "",
-	  ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "Il était une fois, sur une île possédant de grandes ressources naturelles, vivait deux tribus en violent conflit...",
+	  ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "Il était une fois, sur une île possédant de grandes ressources naturelles, vivaient deux tribus en violent conflit...",
 --      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "", -- Mutant
-	  ["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éciants les petits plaisirs de la vie",
-      ["Oops...I dropped them."] = "oups ... Je les ai laissées tomber.",
+	  ["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",
+      ["Oops...I dropped them."] = "Oups ... Je les ai laissées tomber.",
 	  ["Open that crate and we will continue!"] = "Ouvre cette caisse et nous pourrons continuer",
 --      ["Operation Diver"] = "",
       ["Opposing Team: "] = "Équipe opposée",
 --      ["Orlando Boom!"] = "",
 --      ["Ouch!"] = "", -- User_Mission_-_Rope_Knock_Challenge
-      ["Our tribe, our beautiful island!"] = "Notre tibue, notre belle ile !",
+      ["Our tribe, our beautiful island!"] = "Notre tibu, notre belle ile !",
 --      ["Parachute"] = "", -- Continental_supplies
       ["Pathetic Hog #%d"] = "Hérisson pathétique #%d",
 --      ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-	  ["Perfect! Now try to get the next crate without hurting yourself!"] = "Parfait, maintenant essaye d'avoir la prochaine caisse sans te blesser !",
+	  ["Perfect! Now try to get the next crate without hurting yourself!"] = "Parfait, maintenant essaies d'avoir la prochaine caisse sans te blesser !",
       ["Per-Hog Ammo"] = "Munitions par hérissons",
 --      ["- Per team weapons|- 9 weaponschemes|- Unique new weapons| |Select continent first round with the Weapon Menu or by ([switch/tab]=Increase,[precise/left shift]=Decrease) on Skip|Some weapons have a second option. Find them with [switch/tab]"] = "", -- Continental_supplies
       ["Pfew! That was close!"] = "Ouf! C'est pas passé loin !",
@@ -576,15 +576,15 @@
 --      ["Point Blank Combo!"] = "", -- Space_Invasion
       ["points"] = "points", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
       ["Poison"] = "Poison",
-      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "portails astuce : l'un est la destination, l'autre est l'entrée ",
+      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "Astuce du Portail : l'un est la destination, l'autre est l'entrée ",
 --      ["Portal mission"] = "", -- portal
 --      ["Power Remaining"] = "",
-      ["Prepare yourself"] = "prépare toi",
+      ["Prepare yourself"] = "Prépare toi",
 --      ["Press [Enter] to accept this configuration."] = "", -- WxW
 	  ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Appuyez [Gauche] ou [Droite] pour vous déplacer, [Entrée] pour sauter",
       ["Press [Precise] to skip intro"] = "appuie sur [precise] pour passer l'intro",
 --      ["Private Novak"] = "", -- Basic_Training_-_Cluster_Bomb
-      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "Protèges toi ! |Astuce Grenade : Règle le compte à rebour avec [1-5], vises avec [haut]/[bas] et maintient [Espace] pour la puissance",
+      ["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",
 --      ["Race complexity limit reached."] = "",
 --      ["RACER"] = "",
 --      ["Rachel"] = "",
@@ -592,13 +592,13 @@
 --      ["Raging Buffalo"] = "",
 --      ["Ramon"] = "",
 --      ["RC PLANE TRAINING"] = "", -- User_Mission_-_RCPlane_Challenge
-      ["Really?! You thought you could harm me with your little toys?"] = "Vraiment ? tu pensais pouvoir me blesser avec tes petits jouets ?",
+      ["Really?! You thought you could harm me with your little toys?"] = "Vraiment ? Tu pensais pouvoir me blesser avec tes petits jouets ?",
 --      ["Regurgitator"] = "",
 --      ["Reinforcements"] = "",
 --      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "", -- Basic_Training_-_Rope
-      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "Souviens toi, animal pathétique : quand le jour viendra, tu regrettera ton aveugle loyauté !",
-      [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = "Ramenez le drapeau ennemi à votre base pour marquer | -La première équipe à 3 captures gagne | - Vous marquez uniquement si votre drapeau est dans votre base | - Les hérissons vont lâcher le drapeau s'ils sont tués ou noyés | - Les drapeaux lâchés peuvent être ramenés ou recapturés | - Les hérissons réapparaissent quand ils sont tués",
-      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "Retourne vers Leaks A Lot ! Si tu es bloqué, appuie sur [Precise] pour réessayer !",
+      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "Souviens toi, pathétique animal : quand le jour viendra, tu regretteras ton aveugle loyauté !",
+      [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = "Ramenez le drapeau ennemi dans votre base pour marquer | -La première équipe à 3 captures gagne | - Vous marquez uniquement si votre drapeau est dans votre base | - Les hérissons vont lâcher le drapeau s'ils sont tués ou noyés | - Les drapeaux lâchés peuvent être ramenés ou recapturés | - Les hérissons réapparaissent quand ils sont tués",
+      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "Retourne vers Grosse Fuite ! Si tu es bloqué, appuie sur [Precise] pour réessayer !",
 --      ["Righteous Beard"] = "Righteous Beard",
 --      ["ROPE-KNOCKING"] = "", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Rope Training"] = "", -- Basic_Training_-_Rope
@@ -615,15 +615,15 @@
       ["Salvation"] = "Le salut",
       ["Salvation was one step closer now..."] = "Le salut était tout proche...",
 --      ["Save as many hapless hogs as possible!"] = "",
-      ["Save Fell From Heaven!"] = "Sauve Fell From Heaven ! ",
-      ["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."] = "Sauve Leaks A Lot ! |L'outil changer de hérisson pourrait aider",
-      ["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"] = "Sauve la princesse, tous vos hérissons doivent survivre ! |tue les cyborgs en premier ! utilise les munitions très prudemment ! |Tu voudras peut etre garder une poutre pour te couvrir !",
+      ["Save Fell From Heaven!"] = "Sauve Tombée de l'Enfer ! ",
+      ["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."] = "Sauve Grosse Fuite ! |L'outil changer de hérisson pourrait aider",
+      ["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"] = "Sauve la princesse, tous tes hérissons doivent survivre ! |Tue les cyborgs en premier ! Utilise les munitions très prudemment ! |Tu voudras peut être garder une poutre pour te couvrir !",
       ["Save the princess by collecting the crate in under 12 turns!"] = "Sauve la princesse en collectant la caisse en moins de 3 tours !",
 --      ["Scalp Muncher"] = "",
 --      ["SCORE"] = "",
 --      ["Score"] = "", -- Mutant
 --      ["Scream from a Walrus: [Deal 20 damage + 10% of your hogs health to all hogs around you and get half back]"] = "", -- Continental_supplies
---      ["sec"] = "", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
+--      ["sec"] = "", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Çapture_the_Flag
 --      ["Seduction"] = "", -- Continental_supplies
 --      ["Seems like every time you take a \"walk\", the enemy find us!"] = "", -- A_Classic_Fairytale:backstab
 	  ["See that crate farther on the right?"] = "Tu vois cette caisse plus loin sur la droite ? ",
@@ -633,20 +633,20 @@
       ["Select difficulty: [Left] - easier or [Right] - harder"] = "Choisis la difficulté : [Gauche] : plus facile, ou [Droite] : plus dur",
 --      ["selected!"] = "",
 --      ["s"] = "", -- GaudyRacer, Space_Invasion
-      ["... share your beauty with the world every morning, my princess!"] = "...partager ta beauté avec le monde chaque matin, ma princesse !",
+      ["... share your beauty with the world every morning, my princess!"] = "...partage ta beauté avec le monde chaque matin, ma princesse !",
       ["She's behind that tall thingy."] = "Elle est derrière ce grand truc.",
       ["Shield boosted! +30 power"] = "Bouclier boosté! +30",
       ["Shield Depleted"] = "Bouclier épuisé",
-      ["Shield is fully recharged!"] = "bouclier chargé à fond!",
-      ["Shield Master!"] = "Bouclier master",
+      ["Shield is fully recharged!"] = "Bouclier chargé à fond!",
+      ["Shield Master!"] = "Maître du Bouclierr",
 --      ["Shield Miser!"] = "",
-      ["Shield OFF:"] = "bouclier OFF",
+      ["Shield OFF:"] = "Bouclier OFF",
       ["Shield ON:"] = "Bouclier ON",
 --      ["Shield Seeker!"] = "",
 --      ["Shotgun"] = "", -- Continental_supplies
       ["Shotgun Team"] = "Équipe de choc",
-      ["Shotgun Training"] = "Entrainement au fusil",
-      ["shots remaining."] = "tirs restants",
+      ["Shotgun Training"] = "Entraînement au fusil",
+      ["shots remaining."] = "Tirs restants",
 --      ["Silly"] = "",
 --      ["Sinky"] = "",
 --      ["Sirius Lee"] = "",
@@ -661,7 +661,7 @@
 --      ["Smith 1.0"] = "",
 --      ["Sniper Rifle"] = "", -- Continental_supplies
 --      ["Sniper!"] = "", -- Space_Invasion
-      ["Sniper Training"] = "Entrainement au fusil de sniper",
+      ["Sniper Training"] = "Entraînement au fusil de sniper",
       ["Sniperz"] = "Snipers",
 	  ["So humiliating..."] = "Si humiliant...",
 --      ["South America"] = "", -- Continental_supplies
@@ -684,52 +684,52 @@
 --      ["Surfer! +15 points!"] = "", -- Space_Invasion
 --      ["Surfer!"] = "", -- WxW
       ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "Survis ! Les cinématique peuvent être passées avec la touche [Precise]. ",
-	  ["Swing, Leaks A Lot, on the wings of the wind!"] = "Balances toi Leaks a Lot, sur les ailes du vent",
+	  ["Swing, Leaks A Lot, on the wings of the wind!"] = "Balance toi Grosse Fuite, sur les ailes du vent",
 --      ["Switched to "] = "",
 --      ["Syntax Errol"] = "",
       ["Talk about mixed signals..."] = "Parlons des signaux mélangés",
       ["Team %d: "] = "Équipe %d : ",
 --      ["Team Scores"] = "", -- Control, Space_Invasion
-      ["Teleport hint: just use the mouse to select the destination!"] = "Teleporte : utilise la souris pour selectionner la destination !",
+      ["Teleport hint: just use the mouse to select the destination!"] = "Téléporte : utilise la souris pour sélectionner la destination !",
       ["Thanks!"] = "Merci !",
-      ["Thank you, my hero!"] = "Merci, mon héro !",
-      ["Thank you, oh, thank you, Leaks A Lot!"] = "Merci, oh, Merci, Leaks A Lot !",
+      ["Thank you, my hero!"] = "Merci, mon héros !",
+      ["Thank you, oh, thank you, Leaks A Lot!"] = "Merci, oh, merci, Grosse Fuite !",
       ["Thank you, oh, thank you, my heroes!"] = "Merci, oh, merci mes héros !",
-      ["That is, indeed, very weird..."] = "c'est ça, en effet, très étrange...",
-      ["That makes it almost invaluable!"] = "Ca la rends presque inestimable !",
-      ["That ought to show them!"] = "Ca doit leur montrer",
-      ["That's for my father!"] = "C'est pour mon père !",
+      ["That is, indeed, very weird..."] = "C'est ça, en effet, très étrange...",
+      ["That makes it almost invaluable!"] = "Ça la rends presque inestimable !",
+      ["That ought to show them!"] = "Ça leur apprendra !",
+      ["That's for my father!"] = "Pour mon père !",
       ["That shaman sure knows what he's doing!"] = "Ce Shaman sait vraiment ce qu'il fait !",
 --      ["That Sinking Feeling"] = "",
       ["That's not our problem!"] = "Ce n'est pas notre problème !",
       ["That's typical of you!"] = "C'est typiquemment vous !",
-      ["That was just mean!"] = "C'était radin !",
+      ["That was just mean!"] = "C'était méchant !",
       ["That was pointless."] = "C'était inutile.",
       ["The answer is...entertaintment. You'll see what I mean."] = "La réponse est... divertissement. Tu comprendras ce que je veux dire",
 --      ["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."] = "", -- portal
       ["The Bull's Eye"] = "Dans le mille",
       ["The caves are well hidden, they won't find us there!"] = "Les cavernes sont bien cachées, ils ne nous y trouverons pas !",
-	  ["The Crate Frenzy"] = "Frenesie de caisses",
+	  ["The Crate Frenzy"] = "Frénésie de caisses",
       ["The Dilemma"] = "Le dilemne",
-      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "les ennemis ne peuvent pas bouger mais ce serait une bonne idée de rester hors de vue",
+      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "Les ennemis ne peuvent pas bouger mais ce serait une bonne idée de rester hors de vue",
       ["The enemy is hiding out on yonder ducky!"] = "L'ennemi se cache là-bas sur le canard !",
       ["The Enemy Of My Enemy"] = "Les ennemis de mes ennemis",
 	  ["The First Blood"] = "Le premier sang",
       ["The First Encounter"] = "La première rencontre",
       ["The flag will respawn next round."] = "Le drapeau va réapparaitre au prochain tour",
-      ["The food bites back"] = "La nourriture mords en retour",
+      ["The food bites back"] = "La nourriture mord en retour",
 	  ["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 guardian"] = "Le gardien",
       ["The Individualist"] = "L'individualiste",
-      ["Their buildings were very primitive back then, even for an uncivilised island."] = "Leurs batiments étaient très primitif à l'époque, même pour une ile non civilisée.",
-      ["The Journey Back"] = "Le voyage de retour",
+      ["Their buildings were very primitive back then, even for an uncivilised island."] = "Leurs bâtiments étaient très primitif à l'époque, même pour une ile non civilisée.",
+      ["The Journey Back"] = "Le voyage du retour",
 	  ["The Leap of Faith"] = "Le saut de la foi",
-      ["The Moonwalk"] = "Le Moonwalk",
+      ["The Moonwalk"] = "La Marche Lunaire",
       ["The Nameless One"] = "Le sans nom",
 --      ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "", -- Basic_Training_-_Rope
       ["Then how do they keep appearing?"] = "Alors, comment continuent-il à apparaître ?",
-	  ["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."] = "L'autre était une tribus de cannibales, ils passaient leur temps à manger les organes d'autres hérissons...",
+	  ["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."] = "L'autre était une tribu de cannibales, ils passaient leur temps à manger les organes d'autres hérissons...",
       ["There must be a spy among us!"] = "Il doit y avoir un espion parmi nous",
       ["There's more of them? When did they become so hungry?"] = "Il y en encore ? Quand sont-ils devenu si affamés ?",
       ["There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"] = "Il n'y a rien de plus satisfaisant pour moi que de te voir partager ta beauté avec le monde chaque matin, ma princesse !",
@@ -742,19 +742,19 @@
       ["The Showdown"] = "La confrontation",
 	  ["The Slaughter"] = "Le massacre",
 --      ["THE SPECIALISTS"] = "",
-      ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "Les esprits des ancêtres sont sûrement ravis, Leaks A Lot.",
+      ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "Les esprits des ancêtres sont sûrement ravis, Grosse Fuite.",
       ["The Torment"] = "Le supplice",
       ["The Tunnel Maker"] = "Le creuseur de tunnel",
 	  ["The Ultimate Weapon"] = "L'arme ultime",
       ["The Union"] = "L'union",
-      ["The village, unprepared, was destroyed by the cyborgs..."] = "Le village, pas préparé, fut détruit par les cyborgs...",
+      ["The village, unprepared, was destroyed by the cyborgs..."] = "Le village, non préparé, fut détruit par les cyborgs...",
       ["The walk of Fame"] = "La marche d'honneur",
       ["The wasted youth"] = "Une jeunesse ruinée",
-      ["The weapon in that last crate was bestowed upon us by the ancients!"] = "L'arme dans cette dernière caisse nous a été conféré par les ancients",
+      ["The weapon in that last crate was bestowed upon us by the ancients!"] = "L'arme dans cette dernière caisse nous a été conférée par les anciens",
 --      ["The what?!"] = "",
 	  ["The wind whispers that you are ready to become familiar with tools, now..."] = "Le vent me murmure que tu es maintenant prêt à te familiariser avec les outils ...",
       ["They are all waiting back in the village, haha."] = "Ils attendent tous au village, haha.",
---      ["They Call Me Bullseye!"] = "", -- Space_Invasion
+--      ["They Çall Me Bullseye!"] = "", -- Space_Invasion
       ["They have weapons we've never seen before!"] = "Ils ont des armes que nous n'avons jamais vu avant !",
 --      ["They keep appearing like this. It's weird!"] = "",
 --      ["They killed "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
@@ -763,15 +763,15 @@
       ["They told us to wear these clothes. They said that this is the newest trend."] = "Ils nous ont dit de porter ces vêtements. Ils nous ont dit que c'était la nouvelle mode.",
       ["They've been manipulating us all this time!"] = "Ils nous ont tous manipulé cette fois !",
 --      ["Thighlicker"] = "",
-	  ["This is it! It's time to make Fell From Heaven fall for me..."] = "Ca y est ! il est temps d'impressionner Fell From Heaven ",
-      ["This island is the only place left on Earth with grass on it!"] = "Cette ile est le dernier endroit sur terre avec de l'herbe dessus !",
+	  ["This is it! It's time to make Fell From Heaven fall for me..."] = "Ça y est ! il est temps d'impressionner Tombée de l'Enfer ",
+      ["This island is the only place left on Earth with grass on it!"] = "Cette île est le dernier endroit sur terre avec de l'herbe dessus !",
       ["This is typical!"] = "C'est typique !",
       ["This must be some kind of sorcery!"] = "Ce doit être une sorte de sorcellerie",
       ["This must be the caves!"] = "Ce doit être les cavernes !",
-      ["This one's tricky."] = "celui ci n'est pas facile",
-      ["This rain is really something..."] = "Cette pluie est vraiment quelquechose",
-      ["This will be fun!"] = "Ce sera fun !",
-      ["Those aliens are destroying the island!"] = "Ces aliens détruisent l'ile !",
+      ["This one's tricky."] = "Celui-là est piégeux.",
+      ["This rain is really something..."] = "Cette pluie, c'est vraiment quelque chose !",
+      ["This will be fun!"] = "Ce sera amusant !",
+      ["Those aliens are destroying the island!"] = "Ces aliens sont en train de détruire l'ile !",
 --      ["Timed Kamikaze!"] = "",
 --      ["Time Extended!"] = "",
 --      ["Time Extension"] = "",
@@ -779,22 +779,22 @@
 --      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
 --      ["Toggle Shield"] = "",
       ["To help you, of course!"] = "Pour t'aider évidemment !",
-      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "Pour placer une barre, selectionne la, et utilise [gauche] et [droite] pour choisir l'angle et la taille, ensuite place là avec [Clic gauche]",
-      ["Torn Muscle"] = "Torn Muscle",
+      ["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]",
+      ["Torn Muscle"] = "Muscle déchiré",
       [" to save the village."] = "de sauver le village",
       ["To the caves..."] = "Aux cavernes...",
       ["Toxic Team"] = "Équipe toxique", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-      ["TRACK COMPLETED"] = "COURSE COMPLETEE",
-      ["TRACK FAILED!"] = "COURSE RATEE",
+      ["TRACK COMPLETED"] = "COURSE COMPLÉTÉE",
+      ["TRACK FAILED!"] = "COURSE RATÉE",
 --      ["training"] = "", -- portal
-      ["Traitors"] = "Traitors",
+      ["Traitors"] = "Traîtres",
 --      ["Tribe"] = "",
 --      ["TrophyRace"] = "",
       ["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",
 --      ["T_T"] = "",
 --      ["Tumbling Time Extended!"] = "",
 --      ["Turns until Sudden Death: "] = "",
-      [" turns until Sudden Death! Better hurry!"] = "tours avant la mort subite ! tu ferais mieux de te dépecher !",
+      [" turns until Sudden Death! Better hurry!"] = "tours avant la mort subite ! tu ferais mieux de te dépêcher !",
 --      ["Turn Time"] = "",
       ["Two little hogs cooperating, getting past obstacles..."] = "Deux petits hérissons coopérant à passer les obstacles...",
       ["Uhm...I met one of them and took his weapons."] = "hum... J'ai rencontré l'un d'entre eux et j'ai pris ses armes.",
@@ -813,46 +813,46 @@
 --      ["Unstoppable!"] = "",
 --      ["Unsuspecting Louts"] = "", -- User_Mission_-_Rope_Knock_Challenge
 	  ["[Up], [Down] to aim, [Space] to shoot!"] = "[haut], [bas] pour viser, [espace] pour tirer !",
-      ["Use it wisely!"] = "a utiliser intelligemment",
-      ["Use it with precaution!"] = "Utilise la avec prudence",
+      ["Use it wisely!"] = "à utiliser intelligemment",
+      ["Use it with precaution!"] = "À utiliser avec précaution",
 --      ["User Challenge"] = "",
-	  ["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 portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "Utilise le fusil à portail pour atteindre la prochaine caisse, puis utilise le nouveau fusil pour atteindre la destination finale",
-	  ["Use the rope to get on the head of the mole, young one!"] = "Utilise la corde pour atteindre la tête de la taupe, l'apprenti !",
+	  ["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 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 rope to get on the head of the mole, young one!"] = "Utilise le grappin pour atteindre la tête de la taupe, le bleu !",
 --      ["Use the rope to knock your enemies to their doom."] = "", -- User_Mission_-_Rope_Knock_Challenge
-      ["Use your rope to get from start to finish as fast as you can!"] = "Utilisez votre Corde Ninja pour aller du début à la fin aussi vite que vous pouvez !",
+      ["Use your rope to get from start to finish as fast as you can!"] = "Utilisez votre Grappin pour aller du début à la fin aussi vite que vous pouvez !",
       ["Vedgies"] = "Vedgies",
 --      ["Vegan Jack"] = "",
 --      ["Victory!"] = "", -- Basic_Training_-_Rope
-      ["Victory for the "] = "Victoire pour ", -- CTF_Blizzard, Capture_the_Flag
+      ["Victory for the "] = "Victoire pour ", -- CTF_Blizzard, Çapture_the_Flag
 	  ["Violence is not the answer to your problems!"] = "La violence n'est pas la réponse à tes problèmes !",
 --      ["Walls Left"] = "", -- WxW
 --      ["Walls Required"] = "", -- WxW
 --      ["WALL TO WALL"] = "", -- WxW
 --      ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
-      ["Watch your steps, young one!"] = "Regarde ou tu marches l'apprenti !",
+      ["Watch your steps, young one!"] = "Regarde ou tu marches le bleu !",
       ["Waypoint placed."] = "Point de passage placé.",
       ["Way-Points Remaining"] = "Points de passage restants",
-      ["Weaklings"] = "Weaklings",
+      ["Weaklings"] = "Faiblesses",
 	  ["We all know what happens when you get frightened..."] = "Nous savons tous ce qui arrive quand tu es effrayé",
       ["Weapons Reset"] = "Armes réinitialisées",
 --      ["Weapons reset."] = "", -- Highlander
       ["We are indeed."] = "Nous le sommes, en effet.",
-      ["We can't defeat them!"] = "Nous ne pouvons pas les battres !",
+      ["We can't defeat them!"] = "Nous ne pouvons pas les battre !",
       ["We can't hold them up much longer!"] = "Nous ne pouvons pas les retenir plus longtemps !",
-      ["We can't let them take over our little island!"] = "nous ne pouvons pas les laisser prendre notre petite ile !",
+      ["We can't let them take over our little island!"] = "Nous ne pouvons pas les laisser prendre notre petite île !",
       ["We have no time to waste..."] = "Nous n'avons pas de temps à perdre...",
-      ["We have nowhere else to live!"] = "Nous n'avons nul part autre ou vivre !",
+      ["We have nowhere else to live!"] = "Nous n'avons nul part autre où vivre !",
       ["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, Leaks A Lot!"] = "Bienvenue, Leaks A Lot !",
+      ["We have to unite and defeat those cylergs!"] = "Nous devons nous unir et battre ces cyborgs !",
+      ["Welcome, Leaks A Lot!"] = "Bienvenue, Grosse Fuite !",
 --      ["Well done."] = "",
       ["We'll give you a problem then!"] = "Nous allons vous donner des problèmes alors !",
       ["We'll spare your life for now!"] = "Nous t'épargnons la vie pour le moment !",
       ["Well, that was a waste of time."] = "Bien, c'était une perte de temps.",
       ["Well, well! Isn't that the cutest thing you've ever seen?"] = "Bien, Bien ! N'est pas la chose la plus mignonne que tu aies jamais vu ? ",
-      ["Well, yes. This was a cyborg television show."] = "Bien, oui. c'est une émission de télévision cyborg.",
+      ["Well, yes. This was a cyborg television show."] = "Bien, oui. C'est une émission de télévision cyborg.",
       ["We made sure noone followed us!"] = "Nous nous sommes assurés que personne ne nous as suivis !",
       ["We need to move!"] = "Nous devons partir !",
       ["We need to prevent their arrival!"] = "Nous devons prévoir leur arrivée !",
@@ -862,41 +862,41 @@
       ["We won't let you hurt her!"] = "Nous ne te laisserons pas la blesser !",
       ["What?! A cannibal? Here? There is no time to waste! Come, you are prepared."] = "Quoi ?! Un cannibale ? Ici ? Il n'y a pas de temps à perdre ! Viens, tu es préparé.",
       ["What a douche!"] = "Quelle douche !",
-	  ["What are you doing at a distance so great, young one?"] = "Qu'est ce que tu fais si loin, l'apprenti ? ",
-      ["What are you doing? Let her go!"] = "Que fais tu ? Laisses la partir ! ",
+	  ["What are you doing at a distance so great, young one?"] = "Qu'est ce que tu fais si loin, le bleu ? ",
+      ["What are you doing? Let her go!"] = "Que fais-tu ? Laisse la partir ! ",
       ["What a ride!"] = "Quel voyage !",
-      ["What a strange cave!"] = "quelle etrange caverne",
+      ["What a strange cave!"] = "Quelle étrange caverne !",
       ["What a strange feeling!"] = "Quel étrange sentiment !",
       ["What do my faulty eyes observe? A spy!"] = "Que voient mes vieux yeux ? Un espion !",
       --["Whatever floats your boat..."] = "Comme tu veux...",
 --      [" What !! For all of this struggle i just win some ... TIME o0"] = "", -- portal
 --      ["What has "] = "", -- A_Classic_Fairytale:backstab
-      ["What? Here? How did they find us?!"] = "Quoi ? ici ? Comment nous ont ils trouvés ?",
+      ["What? Here? How did they find us?!"] = "Quoi ? ici ? Comment nous ont-ils trouvés ?",
       ["What is this place?"] = "Quel est cet endroit ? ",
       ["What shall we do with the traitor?"] = "Que devons nous faire avec le traître ? ",
       ["WHAT?! You're the ones attacking us!"] = "Quoi ?! C'est vous qui nous attaquez !",
       ["When I find it..."] = "Quand je vais le trouver...",
       ["When?"] = "Quand ?",
       ["Where are all these crates coming from?!"] = "D'où viennent toutes ces caisses ?!",
-      ["Where are they?!"] = "Où sont ils ?!",
+      ["Where are they?!"] = "Où sont-ils ?!",
       ["Where did that alien run?"] = "Où est parti cet alien ?",
-      ["Where did you get the exploding apples and the magic bow that shoots many arrows?"] = "Ou as tu obtenu les pommes explosives et l'arc magique qui tire tant de flèches ?",
-      ["Where did you get the exploding apples?"] = "Ou as tu obtenu les pommes explosives ?",
-      ["Where did you get the magic bow that shoots many arrows?"] = "Ou as tu obtenu l'arc magique qui tire tant de flèches ?",
-      ["Where did you get the weapons in the forest, Dense Cloud?"] = "Où as tu trouvé les armes dans la foret, Dense Cloud ?",
-      ["Where do you get that?!"] = "D'ou ça vous vient ?!!",
-      ["Where have you been?!"] = "Où étais tu ?!",
-      ["Where have you been?"] = "Où étais tu ? ",
+      ["Where did you get the exploding apples and the magic bow that shoots many arrows?"] = "Où as-tu obtenu les pommes explosives et l'arc magique qui tire tant de flèches ?",
+      ["Where did you get the exploding apples?"] = "Ou as-tu obtenu les pommes explosives ?",
+      ["Where did you get the magic bow that shoots many arrows?"] = "Où as-tu obtenu l'arc magique qui tire tant de flèches ?",
+      ["Where did you get the weapons in the forest, Dense Cloud?"] = "Où as-tu trouvé les armes dans la forêt, Nuage Dense ?",
+      ["Where do you get that?!"] = "D'où ça vous vient ?!!",
+      ["Where have you been?!"] = "Où étais-tu ?!",
+      ["Where have you been?"] = "Où étais-tu ? ",
 --      ["? Why?"] = "", -- A_Classic_Fairytale:backstab
 --      ["Why "] = "", -- A_Classic_Fairytale:backstab
 --      ["! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
       ["Why are you doing this?"] = "Pourquoi fais tu ça ? ",
       ["Why are you helping us, uhm...?"] = "Pourquoi nous aidez vous, hum ...?",
-      ["Why can't he just let her go?!"] = "Pourquoi ne peut-il pas juste la laisser partit ?!",
+      ["Why can't he just let her go?!"] = "Pourquoi ne peut-il pas juste la laisser partir ?!",
 	  ["Why do men keep hurting me?"] = "Pourquoi les hommes continuent de me blesser ?",
-      ["Why do you not like me?"] = "Pourquoi ne m'aimes tu pas ?",
-      ["Why do you want to take over our island?"] = "Pourquoi voulez vous notre ile ?",
-      ["Why me?!"] = "Pourquoi moi ?§",
+      ["Why do you not like me?"] = "Pourquoi tu m'aimes pas ?",
+      ["Why do you want to take over our island?"] = "Pourquoi voulez vous notre île ?",
+      ["Why me?!"] = "Pourquoi moi ?!",
       ["Why would they do this?"] = "Pourquoi feraient-ils ça ?",
 --      ["- Will Get 1-3 random weapons"] = "", -- Continental_supplies
 --      ["- Will refresh Parachute each turn."] = "", -- Continental_supplies
@@ -904,60 +904,60 @@
 --      ["Will this ever end?"] = "",
 --      ["WINNER IS "] = "", -- Mutant
       ["WINNING TIME: "] = "Temps gagnant : ",
-      ["Wise Oak"] = "Wise Oak",
-      ["With Dense Cloud on the land of shadows, I'm the village's only hope..."] = "Avec Dense Cloud dans le territoire des ombres, je suis le seul espoir du village...",
-      ["With the rest of the tribe gone, it was up to "] = "Avec le reste de la tribue partie, il était temps de ",
-	  ["Worry not, for it is a peaceful animal! There is no reason to be afraid..."] = "Pas d'inquiétude, c'est un animal pacifique ! il n'y a pas de raison d'avoir peur...",
+      ["Wise Oak"] = "Faucon Sage",
+      ["With Dense Cloud on the land of shadows, I'm the village's only hope..."] = "Avec Nuage Dense dans le territoire des ombres, je suis le seul espoir du village...",
+      ["With the rest of the tribe gone, it was up to "] = "Avec le reste de la tribu partie, il était temps de ",
+	  ["Worry not, for it is a peaceful animal! There is no reason to be afraid..."] = "Pas d'inquiétude, c'est un animal pacifique ! Il n'y a pas de raison d'avoir peur...",
       ["Wow, what a dream!"] = "Wow, quel rêve !",
       ["Y3K1337"] = "Y3K1337",
       ["Yay, we won!"] = "Ouais, on a gagné !",
 --      ["Y Chwiliad"] = "",
-      ["Yeah...I think it's a 'he', lol."] = "Ouais... Je crois que c'est un 'homme', lol.",
-      ["Yeah, sure! I died. Hillarious!"] = "Ouais, sûr ! il est mort. Hillarant !",
+      ["Yeah...I think it's a 'he', lol."] = "Ouais... Je crois que c'est un 'lui', lol.",
+      ["Yeah, sure! I died. Hillarious!"] = "Ouais, sûr ! Il est mort. Hillarant !",
       ["Yeah, take that!"] = "Ouais, prends ça !",
       ["Yeah? Watcha gonna do? Cry?"] = "Ouais? Qu'est ce que tu vas faire ? Pleurer ? ",
       ["Yes!"] = "Oui !",
       ["Yes, yeees! You are now ready to enter the real world!"] = "Oui, Ouiii ! Maintenant tu es prêt à entrer dans le monde réel !",
       ["Yo, dude, we're here, too!"] = "Yo mec, on est là aussi !",
-      ["You are given the chance to turn your life around..."] = "Tu as une chance de voir ta vie changer de cap",
+      ["You are given the chance to turn your life around..."] = "Tu as une chance de voir ta vie changer de cap...",
       ["You are playing with our lives here!"] = "Vous jouez avec nos vies !",
 --      ["! You bastards!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-      ["You bear impressive skills, "] = "tu as des compétences impressionantes, ",
+      ["You bear impressive skills, "] = "Tu as des compétences impressionantes, ",
 --      ["You can't fire a portal on the blue surface"] = "", -- portal
-      ["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 vous laisserai partir comme ça !",
+      ["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'd better watch your steps..."] = "Tu ferais mieux de regarder où tu marches....",
 --      ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
 --      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."] = "", -- A_Classic_Fairytale:backstab
-      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|	  Hint: you might want to use some mines..."] = "Tu as 7 tours avant la prochaine vague. |Assures toi que les prochains arrivant soient bien accueillis ! |Si le hérissons meurt, la cause est perdue. | Conseil : Tu pourrais vouloir utiliser des mines ...",
+      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|	  Hint: you might want to use some mines..."] = "Tu as 7 tours avant la prochaine vague. |Assures toi que les prochains arrivant soient bien accueillis ! |Si le hérisson meurt, la cause est perdue. | Conseil : Tu pourrais vouloir utiliser des mines ...",
       ["You have been giving us out to the enemy, haven't you!"] = "Tu nous as vendu aux ennemis, n'est ce pas ?!",
 --      ["You have been respawned, at your last checkpoint!"] = "", -- Basic_Training_-_Rope
 --      ["You have been respawned, be more carefull next time!"] = "", -- Basic_Training_-_Rope
-      ["You have chosen the perfect moment to leave."] = "Tu as choisis le moment parfait pour partit.",
+      ["You have chosen the perfect moment to leave."] = "Tu as choisis le moment parfait pour partir.",
       ["You have failed to complete your task, young one!"] = "Tu as échoué à compléter ta tâche, disciple !",
-      ["You have failed to save the tribe!"] = "Tu n'as pas su sauvé la tribue !",
+      ["You have failed to save the tribe!"] = "Tu n'as pas su sauver la tribu !",
       ["You have finally figured it out!"] = "Tu t'en es finallement rendu compte !",
-      ["You have kidnapped our whole tribe!"] = "Vous avez kidnappé notre tribue entière !",
+      ["You have kidnapped our whole tribe!"] = "Vous avez kidnappé notre tribu entière !",
       ["You have killed an innocent hedgehog!"] = "Tu as tué un innocent !",
       ["You have proven yourself worthy to see our most ancient secret!"] = "Tu as prouvé que tu étais digne de voir notre plus ancien secret !",
-      ["You have proven yourselves worthy!"] = "Vous vous êtes montrez dignes !",
+      ["You have proven yourselves worthy!"] = "Vous vous êtes montrés dignes !",
       ["You have SCORED!!"] = "Vous avez marqué !",
 --      ["You have to destroy 12 targets in 180 seconds"] = "", -- Basic_Training_-_Cluster_Bomb
       ["You have "] = "Tu as",
-      ["You have won the game by proving true cooperative skills!"] = "Vous avez gagné le jeu en prouvant de vraies compétantce de coopération !",
-      ["You just appeared out of thin air!"] = "tu es apparu comme par magie ! ",
+      ["You have won the game by proving true cooperative skills!"] = "Vous avez gagné le jeu en prouvant de vraies compétences de coopération !",
+      ["You just appeared out of thin air!"] = "Tu es apparu comme par magie ! ",
       ["You just committed suicide..."] = "Tu viens de signer ton arrêt de mort...",
       ["You killed my father, you monster!"] = "Tu as tué mon père, monstre !",
       ["You know...taking a stroll."] = "Vous savez... promenade.",
-      ["You know what? I don't even regret anything!"] = "Tu sais quoi ? je ne regrette rien !",
+      ["You know what? I don't even regret anything!"] = "Tu sais quoi ? Je ne regrette rien !",
       ["You'll see what I mean!"] = "Vous allez comprendre ce que je veux dire !",
 --      ["You may only attack from a rope!"] = "", -- WxW
       ["You meatbags are pretty slow, you know!"] = "Vous les sacs à viande êtes plutot lent vous savez !",
-      ["You might want to find a way to instantly kill arriving cannibals!"] = "tu aimerais surement trouver un moyen de tuer instantanément les cannibales qui arrivent !",
-      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "L'apprenti, tu es en train de nous dire qu'ils peuvent changer de place sans shaman ?",
+      ["You might want to find a way to instantly kill arriving cannibals!"] = "Tu aimerais sûrement trouver un moyen de tuer instantanément les cannibales qui arrivent !",
+      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "Disciple, tu es en train de nous dire qu'ils peuvent changer de place sans shaman ?",
 	  ["You probably know what to do next..."] = "Tu sais probablement ce que tu dois faire ensuite....",
       ["Your deaths will be avenged, cannibals!"] = "Vos morts seront vengées, cannibales !",
-      ["Your death will not be in vain, Dense Cloud!"] = "Tu ne seras pas mort en vain, Dense Cloud !",
+      ["Your death will not be in vain, Dense Cloud!"] = "Tu ne seras pas mort en vain, Nuage Dense !",
       ["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 funny!"] = "Tu es drôle !",
@@ -970,10 +970,10 @@
 --      ["You saved"] = "",
       ["You've been assaulting us, we have been just defending ourselves!"] = "vous nous avez assiégé, nous nous sommes justes défendus !",
       ["You've failed. Try again."] = "Vous avez échoué. Essayez encore.",
-      ["You've reached the goal!| |Time: "] = "Vous avez atteins le but !| |Temps : ",
+      ["You've reached the goal!| |Time: "] = "Vous avez atteint le but !| |Temps : ",
       ["You will be avenged!"] = "Tu seras vengé !",
       ["You won't believe what happened to me!"] = "Vous ne croirez pas ce qui m'est arrivé !",
-      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "beurck ! je parie qu'ils continueront à l'adorer meme après que j'ai sauvé le village !",
+      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "Beurck ! je parie qu'ils continueront à l'adorer même après que j'aie sauvé le village !",
 --      ["Zealandia"] = "", -- Continental_supplies
 --      ["'Zooka Team"] = "",
 --      ["Zork"] = "",
--- a/share/hedgewars/Data/Locale/fr.txt	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Locale/fr.txt	Wed Sep 25 05:42:16 2013 +0300
@@ -20,7 +20,7 @@
 00:17=Chalumeau
 00:18=Construction
 00:19=Téléportation
-00:20=Changer de hérisson
+00:20=Changer d'hérisson
 00:21=Mortier
 00:22=Fouet
 00:23=Kamikaze
@@ -29,11 +29,11 @@
 00:26=Bombe pastèque
 00:27=Grenade infernale
 00:28=Roquette perforante
-00:29=Mitrailleuse à balles
+00:29=Mitrailleuse à balle
 00:30=Napalm
 00:31=Avion télécommandé
 00:32=Faible gravité
-00:33=Dégats supplémentaires
+00:33=Dégâts supplémentaires
 00:34=Invulnérable
 00:35=Temps supplémentaire
 00:36=Visée laser
@@ -44,8 +44,8 @@
 00:41=Piaf
 00:42=Générateur de portails
 00:43=Chute de Piano
-00:44=Vieux Limburger
-00:45=Fusil Sinusoidale
+00:44=Vieux fromage
+00:45=Fusil Sinusoïdal
 00:46=Lance-flammes
 00:47=Mines adhésives
 00:48=Marteau
@@ -63,7 +63,7 @@
 01:02=%1 gagne !
 01:03=Volume %1%
 01:04=Pause
-01:05=Quitter? (Y/Esc) (Clique pour reprendre)
+01:05=Quitter? (Y/Esc) (Cliquer pour reprendre)
 01:06=Mort subite !
 01:07=%1 Restantes
 01:08=Carburant
@@ -90,9 +90,9 @@
 02:00=%1 s'est balancé sur sa dernière corde !
 02:00=%1 a appelé son dernier raid aérien !
 02:00=%1 a rechargé son dernier fusil de chasse !
-02:00=%1 a envoyé son dernier melon !
+02:00=%1 a envoyé sa dernière pastèque !
 02:00=%1 a tiré sa dernière balle !
-02:00=%1 aurait vraiment dû utiliser une caisse de vie !
+02:00=%1 aurait vraiment dû utiliser une caisse de santé !
 02:00=%1 est parti pour jouer à un meilleur jeu !
 02:00=%1 est mauvais joueur !
 02:00=%1 a échoué !
@@ -117,55 +117,55 @@
 02:00=%1 avait une faible tolérance aux coups à balles !
 02:00=%1 aurait dû utiliser une vie supplémentaire !
 02:00=%1 rejoint ses ancêtres !
-02:00=%1 sera muet comme une tombe
+02:00=%1 sera muet comme une tombe !
 
 ; Hog (%1) drowned
 02:01=%1 joue au sous-marin !
 02:01=%1 imite le Titanic !
 02:01=%1 nage comme une pierre !
 02:01=%1 flotte comme une brique !
-02:01=%1 teste la profondeur de l'eau
-02:01=%1 va chercher des algues
-02:01=%1 va saluer les hyppocampes
+02:01=%1 teste la profondeur de l'eau !
+02:01=%1 va chercher des algues !
+02:01=%1 va saluer les hyppocampes !
 02:01=%1 prend son dernier bain !
-02:01=%1 fait glou glou glou
-02:01=%1 fait splash
-02:01=%1 aurait vraiment dû apprendre à nager
-02:01=%1 a laissé sa planche de surf à la maison
-02:01=%1 a oublié de prendre son gilet de sauvetage
-02:01=%1 fait splish splash splosh
-02:01=%1 va dormir avec les poissons
-02:01=%1 pense que la physique de l'eau est nulle dans ce jeu
-02:01=%1 a l'air assoiffé
-02:01=La mer réclame %1
+02:01=%1 fait glou glou glou !
+02:01=%1 fait splash !
+02:01=%1 aurait vraiment dû apprendre à nager !
+02:01=%1 a laissé sa planche de surf à la maison 1
+02:01=%1 a oublié de prendre son gilet de sauvetage !
+02:01=%1 fait splish splash splosh !
+02:01=%1 va dormir avec les poissons !
+02:01=%1 pense que la physique de l'eau est nulle dans ce jeu !
+02:01=%1 a l'air assoiffé ! 
+02:01=La mer réclame %1 !
 02:01=Un hérisson à la mer !
-02:01=%1 aurait dû prendre son masque et son tuba
-02:01=%1 aurait dû prendre son scaphandre
-02:01=%1 est inhumé dans la mer
-02:01=%1 pratique son crawl
-02:01=%1 part chercher le Titanic
-02:01=%1 n'est pas Jésus
-02:01=%1 cherche Nemo
-02:01=Vous devriez vous demander combien de hérissons il y a là-dessous
-02:01=%1 fait monter le niveau de l'océan
-02:01=%1 ne s'est pas inscrit à la Marine
-02:01=%1 imite un poisson mort
-02:01=Sonic ne pouvait pas nager. %1 non plus.
-02:01=%1 veut jouer à Ecco the Dolphin
-02:01=%1 est parti visiter l'aquarium
-02:01=%1 a trouvé la cité perdue d'Atlantide
-02:01=Ta pagaie pour chiens aurait pû servir, %1
-02:01=%1 aurait dû acheter un jet ski
-02:01=%1 n'aime pas les sports aquatiques
-02:01=%1 va faire des bulles pour toujours
-02:01=%1 a besoin d'un radeau
-02:01=%1 pense que l'eau salée est bonne pour la peau
-02:01=De l'eau salée entre dans les plaies de %1
-02:01=%1 prend un bain
-02:01=%1 est tout mouillé
-02:01=%1 trouve que l'eau est un peu trop froide
-02:01=%1 flotte comme une enclume
-02:01=%1 a oublié son masque et ses palmes
+02:01=%1 aurait dû prendre son masque et son tuba !
+02:01=%1 aurait dû prendre son scaphandre !
+02:01=%1 est inhumé dans la mer !
+02:01=%1 pratique son crawl !
+02:01=%1 part chercher le Titanic !
+02:01=%1 n'est pas Jésus !
+02:01=%1 cherche Nemo !
+02:01=Vous devriez vous demander combien d'hérissons il y a là-dessous !
+02:01=%1 fait monter le niveau de l'océan !
+02:01=%1 ne s'est pas inscrit à la Marine !
+02:01=%1 imite un poisson mort !
+02:01=Sonic ne pouvait pas nager. %1 non plus. !
+02:01=%1 veut jouer à Ecco the Dolphin !
+02:01=%1 est parti visiter l'aquarium !
+02:01=%1 a trouvé la cité perdue d'Atlantide !
+02:01=Ta pagaie pour chiens aurait pû servir, %1 !
+02:01=%1 aurait dû acheter un jet ski !
+02:01=%1 n'aime pas les sports aquatiques !
+02:01=%1 va faire des bulles pour toujours !
+02:01=%1 a besoin d'un radeau !
+02:01=%1 pense que l'eau salée est bonne pour la peau !
+02:01=De l'eau salée entre dans les plaies de %1 !
+02:01=%1 prend un bain !
+02:01=%1 est tout mouillé !
+02:01=%1 trouve que l'eau est un peu trop froide !
+02:01=%1 flotte comme une enclume !
+02:01=%1 a oublié son masque et ses palmes !
 02:01=%1 a vu une sirène !
 
 ; Match starts
@@ -193,7 +193,7 @@
 02:02=Les perdants font le ménage !
 02:02=Que la bataille du millénaire commence !
 02:02=Que la bataille du centenaire commence !
-02:02=Que la bataille du décadaire commence !
+02:02=Que la bataille de la décade commence !
 02:02=Que la bataille de l'année commence !
 02:02=Que la bataille du mois commence !
 02:02=Que la bataille de la semaine commence !
@@ -227,59 +227,59 @@
 02:05=Pharmacie !
 02:05=De l'aide !
 02:05=Premiers soins venant du ciel !
-02:05=Un pack de vie pour vous
+02:05=Un pack de vie pour vous !
 02:05=De la bonne santé... dans une boîte !
 02:05=Pansements tout frais !
-02:05=Cela va vous faire sentir mieux
+02:05=Cela va vous faire sentir mieux !
 02:05=Une Hi-Potion! Oups, mauvais jeu...
 02:05=Prends-le !
-02:05=Un casse-croûte sain
-02:05=Un remède à la souffrance
+02:05=Un casse-croûte sain !
+02:05=Un remède à la souffrance !
 02:05=Meilleur dosage: autant que vous pouvez !
-02:05=Livraison urgente
+02:05=Livraison urgente !
 02:05=Ravitaillements !
 02:05=Voilà la Croix Rouge !
 02:05=Médecin Sans Frontière à votre service !
-02:05=Hausse de l'espérance de vie en vue
+02:05=Hausse de l'espérance de vie en vue !
 
 ; New ammo crate
 02:06=Plus d'armes !
 02:06=Du renfort !
-02:06=Je me demande quelle arme est là-dedans
+02:06=Je me demande quelle arme est là-dedans !
 02:06=Ravitaillements !
 02:06=Qu'est-ce qui peut être à l'intérieur ?
-02:06=Noël arrive tôt dans Hedgewars
+02:06=Noël arrive tôt dans Hedgewars !
 02:06=Un cadeau !
 02:06=Livraison spéciale !
-02:06=Jouets destructeurs venant du paradis
-02:06=Attention ! Contenu Volatile
-02:06=Prends-la ou explose-la, le choix est tien
-02:06=Mmmmh, Munitions
-02:06=Une boîte de pouvoir destructif
-02:06=Courrier aérien !
-02:06=Quelque soit ce qu'il y a dans cette boîte, ce n'est pas une pizza
+02:06=Jouets destructeurs venant du paradis !
+02:06=Attention ! Contenu Volatile !
+02:06=Prends-la ou explose-la, le choix est tien !
+02:06=Mmmmh, Munitions !
+02:06=Une boîte de pouvoir destructif !
+02:06=Courrier aérien ! 
+02:06=Quelque soit ce qu'il y a dans cette boîte, ce n'est pas une pizza !
 02:06=Prends-la !
-02:06=Lâcher d'armes en approche
+02:06=Lâcher d'armes en approche !
 02:06=Ne laisse pas l'ennemi prendre ça !
 02:06=Des nouveaux jouets flambant neufs !
 02:06=Une boîte mystérieuse !
-02:06=L'espoir fait vivre
-02:06=Surement quelquechose d'utile
+02:06=L'espoir fait vivre !
+02:06=Surement quelquechose d'utile !
 02:06=Que la chance soit avec vous !
 
 ; New utility crate
 02:07=Boite à outils !
 02:07=Ça peut être pratique...
-02:07=Utilisez cette boîte
+02:07=Utilisez cette boîte ! 
 02:07=Regardez en-dessous !
 02:07=Des outils pour toi !
 02:07=Ça devrait être bien !
-02:07=Utilisez-le avec précaution
-02:07=Vous devriez avoir besoin de ça
-02:07=C'est toujours bon à prendre
-02:07=Elle s'est peut être blessée en tombant, vous devriez aller la voir
-02:07=Bob le bricoleur sait être généreux
-02:07=Le moment donné par le hasard vaut mieux que le moment choisi
+02:07=Utilisez-le avec précaution !
+02:07=Vous devriez avoir besoin de ça !
+02:07=C'est toujours bon à prendre !
+02:07=Elle s'est peut être blessée en tombant, vous devriez aller la voir !
+02:07=Bob le bricoleur sait être généreux !
+02:07=Le moment donné par le hasard vaut mieux que le moment choisi !
 
 ; Hog (%1) skips his turn
 02:08=%1 est une lopette...
@@ -346,7 +346,7 @@
 02:09=%1 est maladroit
 02:09=%1 montre à l'ennemi de quoi il est capable
 02:09=%1 ne peut pas être parfait tout le temps
-02:09=Ne t'inquiète pas %1, personne p'est narfait
+02:09=Ne t'inquiète pas %1, personne n'est parfait
 02:09=%1 a fait cela totalement intentionnellement
 02:09=Je ne le dirais à personne, %1
 02:09=C'est embarrassant !
@@ -377,7 +377,7 @@
 03:02=Arme balistique
 03:03=Arme téléguidée
 03:04=Fusil (plusieurs coups)
-03:05=Outil de creusage
+03:05=Outil de forage
 03:06=Action
 03:07=Moyen de transport
 03:08=Bombe de proximité
@@ -389,7 +389,7 @@
 03:14=Moyen de transport
 03:15=Attaque aéroportée
 03:16=Attaque aéroportée
-03:17=Outil de creusage
+03:17=Outil de forage
 03:18=Utilitaire
 03:19=Moyen de transport
 03:20=Action
@@ -403,7 +403,7 @@
 03:28=Arme balistique
 03:29=Arme balistique
 03:30=Attaque aéroportée
-03:31=Bombe à déclenchement télécommandé
+03:31=Bombe à déclenchement télécommandée
 03:32=Effet temporaire
 03:33=Effet temporaire
 03:34=Effet temporaire
@@ -428,18 +428,18 @@
 03:52=UNUSED
 03:53=Type 40
 03:54=Trace ta route
-03:55=Qui a commandé un herisson-glacé?
+03:55=Qui a commandé un hérisson-glacé?
 03:56=Grand couteau, Multi-fonctions !
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Attaquez vos ennemis en utilisant une simple grenade.|Elle explosera une fois que le compte à rebours atteindra zéro.|1-5: Réglez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
-04:01=Attaquez vos ennemis en utilisant une grenade a fragmentation.|Elle se désintégrera en de multiples petits fragements explosifs |quand le compte à rebours atteindra zéro|1-5 : Réglez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
+04:01=Attaquez vos ennemis en utilisant une grenade à fragmentation.|Elle se désintégrera en de multiples petits fragements explosifs |quand le compte à rebours atteindra zéro|1-5 : Réglez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
 04:02=Attaquez vos ennemis en utilisant un bazooka dont la roquette|subira l'influence du vent.|Attaque : maintenez pour tirer avec plus de force
 04:03=Lancez une abeille à tête chercheuse qui se verrouillera|sur la cible choisie. Ne tirez pas à pleine puissance|pour une meilleure précision.|Curseur : choix de la cible|Attaque : maintenez pour tirer avec plus de force
 04:04=Attaquez votre ennemi en utilisant un fusil à deux coups.|Grâce à son pouvoir de dispersion vous n'avez pas besoin de frapper directement sur la cible|pour toucher votre ennemi.|Attaque : tirez (coups multiples)
 04:05=Descendez sous terre ! Utilisez le marteau-piqueur pour creuser un trou|dans le sol et atteindre d'autres zones.|Attaque : commencez/achevez de creuser
 04:06=Vous en avez marre ? Pas moyen d'attaquer ? Vous économisez vos munitions ?|Pas de problèmes ! Passez simplement votre tour, espèce de lâche !|Attaque : Passez votre tour sans combattre
-04:07=Franchissez les grandes distances en utilisant par intervalles le |Grappin. Utilisez votre élan pour vous lancer contre les autres hérissons,|leur balancer des grenades ou d'autres armes explosives.|Attaque : Tirer ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires
+04:07=Franchissez les grandes distances en utilisant par intervalles le |Grappin. Utilisez votre élan pour vous lancer contre les autres hérissons,|leur balancer des grenades ou d'autres armes explosives.|Attaque : Tirez ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires
 04:08=Maintenez vos ennemis à distance en laissant une mine|dans les passages étroits ou juste sous leurs pieds. Assurez-vous|que vous pouvez vous sauver avant son déclenchement !|Attaque : lâchez la mine à vos pieds
 04:09=Vous n'êtes pas sûr de ce que vous voulez ? Utilisez le| pistolet pour attaquer en utilisant vos quatre coups. Poussez dans l'eau vos ennemis ou transpercez leur défense|Attaque : tirez (coups multiples)
 04:10=La force brute est toujours une possibilité. Lancez cet explosif|classique sur vos ennemis et prenez le temps de vous retirer.|Attaque : Lâchez la dynamite à vos pieds
@@ -449,10 +449,10 @@
 04:14=Vous avez le vertige ? Prenez donc un parachute.|Il se déploiera lorsque|vous serez tombé trop loin|et épargnera le choc de la chute à votre hérisson.|Attaque: Dépliez le parachute
 04:15=Appelez le 3615 BOMBE pour commander une frappe aérienne dévastatrice sur vos ennemis.|Gauche/Droite : Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
 04:16=Appelez un avion qui enverra plusieurs mines|sur la zone cible.|Gauche/Droite : Détermine la direction de l'attaque|Curseur : Sélectionnez la zone cible
-04:17=vous avez besoin d'un abri ? de pousser quelques ennemis dans l'eau ? Utilisez le chalumeau| pour creuser un tunnel dans le sol, vous protéger ou faire de nouvelles victimes.|Attaque : Commencez/cessez de creuser.
+04:17=Vous avez besoin d'un abri ? de pousser quelques ennemis dans l'eau ? Utilisez le chalumeau| pour creuser un tunnel dans le sol, vous protéger ou faire de nouvelles victimes.|Attaque : Commencez/cessez de creuser.
 04:18=Vous avez besoin de vous protéger davantage ou de passer un |obstacle infranchissable ? Placez quelques poutrelles|où vous voulez .|Gauche/Droite : Choisissez la poutrelle à placer|Curseur : Placez la poutrelle dans la bonne position
 04:19=La téléportation utilisée au bon moment|peut être bien plus efficace|que la plupart des autres armes|car elle vous permet de sauver des hérissons de situations dangereuses|en quelques secondes.|Curseur : Choisissez la zone cible
-04:20=Vous permet de changer de herisson|pendant votre tour.|Attaque : Activez le changement de hérisson
+04:20=Vous permet de changer d'hérisson|pendant votre tour.|Attaque : Activez le changement d'hérisson
 04:21=Tirez un missile balistique qui va|envoyer de multiples bombes au point d'impact.|Attaque : Tirez à pleine puissance
 04:22=Ce n'est pas réservé à Indiana Jones ! Le fouet est une|arme bien utile dans plusieurs situations. Particulièrement|quand vous devez hisser quelqu'un en haut d'une falaise.|Attaque : Frappez tout ce qui bouge devant vous
 04:23=Si vous n'avez rien à perdre, voilà qui peut être |bien pratique. Sacrifiez votre hérisson en le lançant dans une direction| particulière. Il heurtera tout sur son passage avant |d'exploser.|Attaque : Lancer l'attaque mortelle et dévastatrice
@@ -463,7 +463,7 @@
 04:28=Peu après le lancement de cette roquette, elle va se mettre|à creuser le sol le plus résistant et explosera|une fois son compte à rebours ou une fois atteint l'air libre.|Attaque : Maintenez pour tirer avec plus de puissance
 04:29=Ce n'est pas un jouet pour les enfants ! La mitrailleuse envoie|des centaines de petites balles colorées explosives.|Attaque : Tirez à pleine puissance|Haut/Bas : Continuez à tirer
 04:30=Appelez un avion pour larguer une pluie de napalm soumise à la force du vent.|En la menant correctement cette attaque peut éradiquer|des zones entières du paysage, et notamment les hérissons qui auraient la malchance de se trouver là.|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
-04:31=L'avion télécommandé est l'arme idéale pour récolter des boites ou|attaquer des hérissons très éloignés. Une fois vos ennemis bombardés, vous pourrez lancer votre avion sur l'ennemi dans une explosion incendiaire.|Attaque : Lancez l'avion ou larguez des bombes|Saut longue distance : laissez les valkyries entrer dans la danse guerrière|Haut/Bas : Pilotez l'avion
+04:31=L'avion télécommandé est l'arme idéale pour récolter des boîtes ou|attaquer des hérissons très éloignés. Une fois vos ennemis bombardés, vous pourrez lancer votre avion sur l'ennemi dans une explosion incendiaire.|Attaque : Lancez l'avion ou larguez des bombes|Saut longue distance : laissez les valkyries entrer dans la danse guerrière|Haut/Bas : Pilotez l'avion
 04:32=La faible gravité est plus efficace que n'importe quel régime ! Sautez|plus haut et franchissez de plus grandes distances ou bien faites voltiger vos ennemis |encore plus loin.|Attaque : Activez
 04:33=Parfois vous avez besoin d'un petit coup de pouce supplémentaire|pour gérer les dégâts.|Attaque : Activez
 04:34=Personne ne peut me toucher !|Attaque : Activez
@@ -474,20 +474,20 @@
 04:39=Volez vers d'autres secteurs de la carte en utilisant une soucoupe|volante. Ce moyen de transport, pas facile à dompter, vous|emportera vers presque tous les horizons du champ de bataille mais attention au carburant!|Attaque : Activer|Haut/Gauche/Droite : Prenez de l'altitude et controllez votre direction
 04:40=Mettez le feu à un territoire en utilisant cette bouteille remplie|de liquide inflammable.|Attaque : maintenez pour tirer avec plus de force
 04:41=Une arme naturelle qui peut suffire à remplacer la soucoupe volante.|Cet oiseau a du manger un vieux fromage pourri (du Limburger vous dites ?)|car ses oeufs ont comme quelquechose de ... toxique.|Le piaf peut donc transporter votre hérisson et balancer des œufs|sur vos ennemis !|Attaque : Activez et larguez des œufs|Haut/Gauche/Droite: voltigez vers une direction.
-04:42=Ce générateur de portails est capable de transporter instantanément hérissons,|tonneaux ou mines entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail
+04:42=Ce générateur de portails est capable de transporter instantanément des hérissons,|des tonneaux ou des mines entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail
 04:43=Faites de vos débuts musicaux un succès explosif !| Lâchez un piano depuis les cieux, mais attention ... si quelqu'un doit|jouer dessus, cela pourrait lui coûter la vie !|Curseur : Choix de la cible|F1-F9 : Jouer du piano
 04:44=Ce n'est pas juste un fromage, c'est une arme bactériologique !|Si il ne provoque que de faibles dommages, sa puissance se|trouve dans sa durée. Il empoisonnera tous les malchanceux|touchés par l'odeur et réduira leur vie à l'agonie !|1-5 : Réglez le minuteur de l'arme|Attaque : maintenez pour la lancer avec plus de force
-04:45=Tous ces cours de physique ont finalement payé,|lancez une onde Sinusoidale dévastatrice sur vos ennemis.|Attention au recul ! |Attaque : Activez
+04:45=Tous ces cours de physique ont finalement payé,|lancez une onde sinusoïdale dévastatrice sur vos ennemis.|Attention au recul ! |Attaque : Activez
 04:46=Aspergez vos ennemis de flammes liquides ou creusez vous un passage dans le sol.|Hardi !|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir
 04:47=Doublez le fun avec deux mines, piquantes, furtives et collantes.|Provoquez une réaction en chaine dévastatrice et/ou défendez-vous ! |Attaque : maintenez pour tirer avec plus de force (deux fois)
 04:48=Outre une bonne bosse, un bon coup de ce marteau enlèvera un tiers de la santé |du hérisson ennemi et l'enfoncera dans le sol ou dans l'eau comme un vulgaire asticot !|Attaque : Activez
 04:49=Ressuscite vos amis oubliés six pieds sous terre ! Mais méfiez-vous, ressuscite également vos ennemis. |Attaque : Maintenez attaque pressée pour ressusciter lentement|Haut : Accélérer la résurrection
 04:50=Un ennemi se cache sous terre ?|Faîtes le sortir avec l'attaque perforante! |Un avion vous délivrera des roquettes perforantes qui creuseront vers le bas jusqu'a la fin du compte a rebours|ou du contact a l'air libre où elles exploseront|1-5 : Réglez le minuteur des roquettes|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
-04:51=Gagnez un tir gratuit en lançant une boule de terre sur vos ennemis.|Elle poussera les herissons dans l'eau ou dans un trou afin d'utiliser votre deuxième arme pour l'achever|Attaque : Maintenez pour tirer avec plus de puissance
+04:51=Gagnez un tir gratuit en lançant une boule de terre sur vos ennemis.|Elle poussera les hérissons dans l'eau ou dans un trou afin d'utiliser votre deuxième arme pour l'achever|Attaque : Maintenez pour tirer avec plus de puissance
 04:52=UNUSED
-04:53=Faîtes un voyage dans le temps et l'espace en|laissant vos camarades se battre seuls!|Soyez préparé à revenir a n'importequel moment|ou lors d'une mort subite ou encore si tout vos camarades sont morts|Attention ne marche pas pendant la mort subite, si vous êtes le dernier survivant ou le roi.|Attaque : Activer
-04:54=Et voici le nouveau sol en bouteille! Ce spray produit des flocon collants sur lesquels vous pouvez marchez!|Construisez des pont,enterrez vos ennemis, scellez des tunnels.|Attention à ne pas en mettre sur vous!|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir
-04:55=Apportez l'ère glacière sur vos ennemis!|Avec le congélateur gelez les herissons rendez le sol glissant|et sauvez vous de la noyade en gelant l'eau!!|Attaque : Tirez
+04:53=Faîtes un voyage dans le temps et l'espace en|laissant vos camarades se battre seuls!|Soyez préparés à revenir a n'importe quel moment|ou lors d'une mort subite ou encore si tout vos camarades sont morts|Attention ne marche pas pendant la mort subite, si vous êtes le dernier survivant ou le roi.|Attaque : Activer
+04:54=Et voici le nouveau sol en bouteille! Ce spray produit des flocons collants sur lesquels vous pouvez marchez!|Construisez des ponts, enterrez vos ennemis ou scellez des tunnels.|Attention à ne pas en mettre sur vous!|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir
+04:55=Apportez l'ère glacière sur vos ennemis!|Avec le congélateur gelez les hérissons, rendez le sol glissant|et sauvez vous de la noyade en gelant l'eau!!|Attaque : Tirez
 04:56=Un couteau mais bien plus,|ce hachoir se lance sur les ennemis, bloc les passages et tunnels et|peut même servir d'appui pour gravir une montagne!|Mais attention à ne pas vous blesser.|Attaque : maintenez pour la lancer avec plus de force (deux fois)
 
 
@@ -497,7 +497,7 @@
 05:02=Forts : Défendez votre forteresse ; exterminez vos ennemis !
 05:03=Faible gravité : Attention à vos mouvements
 05:04=Invulnérabilité : Les hérissons sont (presque) invulnérables
-05:05=Vampirisme : Les hérissons récupèrent des points de vie par les dégats qu'ils infligent
+05:05=Vampirisme : Les hérissons récupèrent des points de vie par les dégâts qu'ils infligent
 05:06=Karma: Les hérissons sont victimes des blessures qu'ils infligent
 05:07=Protégez le roi : Ne laissez pas mourir le roi !|Placez le roi : Choisissez un point de départ sécurisé pour le roi
 05:08=Placez les hérissons : Placez vos hérissons avant le début de la partie
@@ -505,7 +505,7 @@
 05:10=Terrain indestructible : La plupart des armes sont incapables de modifier le terrain
 05:11=Munitions partagées : Toutes les équipes de la même couleur partagent leurs munitions
 05:12=Mines à retardement : Les mines exploseront après %1 seconde(s)
-05:13=Mines à retardement : Les mines explosent instentanément
+05:13=Mines à retardement : Les mines explosent instantanément
 05:14=Mines à retardement : Les mines exploseront dans un délai compris entre 0 et 3 secondes
 05:15=Modificateur de dégâts : Toutes les armes feront  %1% de dégâts
 05:16=La vie de tout les hérissons est restaurée à la fin du tour
@@ -513,5 +513,5 @@
 05:18=Attaques illimitées
 05:19=Les armes sont réinitialisées à la fin du tour
 05:20=Les armes ne sont pas partagées entre les hérissons
-05:21=Relais: Des équipes sous la même couleur partagent le tour|Temps partagé: Dès que l'un à fini son action il passe la main à sont camarade pour qu'il agisse|avant la fin du tour
+05:21=Relais: Des équipes de la même couleur partagent le tour|Temps partagé: Dès que l'un a fini son action il passe la main à son camarade pour qu'il agisse|avant la fin du tour
 
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts	Wed Sep 25 05:42:16 2013 +0300
@@ -104,7 +104,7 @@
     </message>
     <message>
         <source>We are always happy about suggestions, ideas, or bug reports.</source>
-        <translation>Toutes suggestions, idées ou rapport de bug sont les bienvenus</translation>
+        <translation>Toutes suggestions, idées ou rapport de bug sont les bienvenues.</translation>
     </message>
     <message>
         <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
@@ -116,15 +116,15 @@
     </message>
     <message>
         <source>Send us feedback!</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoyez-nous votre avis ressenti !</translation>
     </message>
     <message>
         <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
-        <translation type="unfinished"></translation>
+        <translation>Si vous trouvez un bug, sachez s&apos;il a été reporté ici:</translation>
     </message>
     <message>
         <source>Your email address is optional, but necessary if you want us to get back at you.</source>
-        <translation type="unfinished"></translation>
+        <translation>L&apos;adresse email est optionnelle, mais nécessaire si vous voulez que l&apos;on vous recontacte.</translation>
     </message>
 </context>
 <context>
@@ -153,7 +153,7 @@
     </message>
     <message>
         <source>Game scheme will auto-select a weapon</source>
-        <translation>La règle choisis va choisir automatiquement les armes</translation>
+        <translation>La règle choisie choisira automatiquement les armes</translation>
     </message>
     <message>
         <source>Map</source>
@@ -161,7 +161,7 @@
     </message>
     <message>
         <source>Game options</source>
-        <translation>Option de jeu</translation>
+        <translation>Options de jeu</translation>
     </message>
 </context>
 <context>
@@ -247,11 +247,11 @@
     </message>
     <message>
         <source>Stylesheet imported from %1</source>
-        <translation>Feuille de style (Stylesheet) importée de %1</translation>
+        <translation>Feuille de style importée depuis %1</translation>
     </message>
     <message>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
-        <translation>Entrez %1 si vous voulez utiliser cette Feuille de style (Stylesheet) à l&apos;avenir, entrez %2 pour rétablir l&apos;ancienne apparence!</translation>
+        <translation>Entrez %1 si vous voulez utiliser cette Feuille de style à l&apos;avenir, entrez %2 pour rétablir l&apos;ancienne apparence!</translation>
     </message>
     <message>
         <source>Couldn&apos;t read %1</source>
@@ -259,27 +259,27 @@
     </message>
     <message>
         <source>StyleSheet discarded</source>
-        <translation>Feuille de style (Stylesheet) effacée</translation>
+        <translation>Feuille de style effacée</translation>
     </message>
     <message>
         <source>StyleSheet saved to %1</source>
-        <translation>Feuille de style (Stylesheet) enregistrée dans %1</translation>
+        <translation>Feuille de style enregistrée dans %1</translation>
     </message>
     <message>
         <source>Failed to save StyleSheet to %1</source>
-        <translation>Impossible d&apos;enregistrer la feuille de style (Stylesheet) dans %1</translation>
+        <translation>Impossible d&apos;enregistrer la feuille de style dans %1</translation>
     </message>
     <message>
         <source>%1 has joined</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 est arrivé</translation>
     </message>
     <message>
         <source>%1 has left</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 est parti</translation>
     </message>
     <message>
         <source>%1 has left (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 est parti (%2)</translation>
     </message>
 </context>
 <context>
@@ -295,7 +295,7 @@
     <message>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
-        <translation>Fichier de demo d&apos;Hedgewars</translation>
+        <translation>Fichier de démo d&apos;Hedgewars</translation>
     </message>
     <message>
         <source>Hedgewars Save File</source>
@@ -304,11 +304,11 @@
     </message>
     <message>
         <source>Demo name</source>
-        <translation>Nom de la Demo</translation>
+        <translation>Nom de la Démo</translation>
     </message>
     <message>
         <source>Demo name:</source>
-        <translation>Nom de la Demo:</translation>
+        <translation>Nom de la Démo:</translation>
     </message>
     <message>
         <source>Game aborted</source>
@@ -342,8 +342,8 @@
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
 
 Password:</source>
-        <translation>Ce pseudo est enregistré, vous n&apos;avez spécifié aucun mot de passe.
-	
+        <translation>Ce pseudo est enregistré et vous n&apos;avez spécifié aucun mot de passe.
+
 Si ce pseudo n&apos;est pas le votre, veuillez enregistrer votre propre pseudo sur www.hedgewars.org
 
 Mot de passe:</translation>
@@ -361,8 +361,8 @@
 
 Your password wasn&apos;t saved either.</source>
         <translation>
-		
-Votre mot de passe non plus n&apos;a pas été sauvegardé.</translation>
+
+Votre mot de passe n&apos;a pas été sauvegardé non plus.</translation>
     </message>
     <message>
         <source>Hedgewars - Empty nickname</source>
@@ -392,7 +392,7 @@
     </message>
     <message>
         <source>This page requires an internet connection.</source>
-        <translation type="unfinished"></translation>
+        <translation>Cette page nécessite une connexion internet.</translation>
     </message>
 </context>
 <context>
@@ -403,7 +403,7 @@
     </message>
     <message>
         <source>Cannot open demofile %1</source>
-        <translation>Erreur lors de l&apos;ouverture du fichier de demo %1</translation>
+        <translation>Erreur lors de l&apos;ouverture du fichier de démo %1</translation>
     </message>
 </context>
 <context>
@@ -474,7 +474,7 @@
     </message>
     <message>
         <source>Map preview:</source>
-        <translation>Apperçu de la carte</translation>
+        <translation>Aperçu de la carte:</translation>
     </message>
     <message>
         <source>Load map drawing</source>
@@ -482,7 +482,7 @@
     </message>
     <message>
         <source>Edit map drawing</source>
-        <translation>Editer un dessin</translation>
+        <translation>Editer une carte</translation>
     </message>
     <message>
         <source>Small islands</source>
@@ -490,7 +490,7 @@
     </message>
     <message>
         <source>Medium islands</source>
-        <translation>Moyennes îles</translation>
+        <translation>Îles moyennes</translation>
     </message>
     <message>
         <source>Large islands</source>
@@ -498,15 +498,15 @@
     </message>
     <message>
         <source>Map size:</source>
-        <translation>Taille de la carte</translation>
+        <translation>Taille de la carte:</translation>
     </message>
     <message>
         <source>Maze style:</source>
-        <translation>Style du labyrinthe</translation>
+        <translation>Style du labyrinthe:</translation>
     </message>
     <message>
         <source>Mission:</source>
-        <translation>Mission</translation>
+        <translation>Mission:</translation>
     </message>
     <message>
         <source>Map:</source>
@@ -526,7 +526,7 @@
     </message>
     <message>
         <source>All files</source>
-        <translation>Tout les fichiers</translation>
+        <translation>Tous les fichiers</translation>
     </message>
     <message>
         <source>Large tunnels</source>
@@ -534,7 +534,7 @@
     </message>
     <message>
         <source>Theme: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Thème: %1</translation>
     </message>
 </context>
 <context>
@@ -568,7 +568,7 @@
     </message>
     <message>
         <source>Room destroyed</source>
-        <translation>Room fermée</translation>
+        <translation>Salle fermée</translation>
     </message>
     <message>
         <source>You got kicked</source>
@@ -576,7 +576,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined the room</source>
-        <translation>%1 *** %2 a rejoint la room</translation>
+        <translation>%1 *** %2 a rejoint la salle</translation>
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
@@ -596,7 +596,7 @@
     </message>
     <message>
         <source>Remote host has closed connection</source>
-        <translation>Le serveur à fermé la connection</translation>
+        <translation>Le serveur a fermé la connection</translation>
     </message>
     <message>
         <source>The server is too old. Disconnecting now.</source>
@@ -614,17 +614,18 @@
 
 If you don&apos;t have an account on www.hedgewars.org,
 just enter your nickname.</source>
-        <translation>Pour vous connecter sur le serveur, veuillez entrer vos identifiants.
+        <translation>Pour vous connecter sur le serveur, veuillez entrer vos identifiants
+.
 Si vous n&apos;avez pas de compte sur www.hedgewars.org,
-entrez juste votre pseudo.</translation>
+entrez seulement votre pseudo.</translation>
     </message>
     <message>
         <source>Nickname:</source>
-        <translation>Pseudo</translation>
+        <translation>Pseudo:</translation>
     </message>
     <message>
         <source>Password:</source>
-        <translation>Mot de passe</translation>
+        <translation>Mot de passe:</translation>
     </message>
 </context>
 <context>
@@ -741,7 +742,7 @@
     </message>
     <message>
         <source>Bans</source>
-        <translation>Bans</translation>
+        <translation>Banniseements</translation>
     </message>
     <message>
         <source>IP/Nick</source>
@@ -757,7 +758,7 @@
     </message>
     <message>
         <source>Refresh</source>
-        <translation>Rafraichir</translation>
+        <translation>Rafrâichir</translation>
     </message>
     <message>
         <source>Add</source>
@@ -779,11 +780,11 @@
     <name>PageDataDownload</name>
     <message>
         <source>Loading, please wait.</source>
-        <translation type="unfinished"></translation>
+        <translation>Chargement, veuillez patienter.</translation>
     </message>
     <message>
         <source>This page requires an internet connection.</source>
-        <translation type="unfinished"></translation>
+        <translation>Cette page nécessite une connexion internet.</translation>
     </message>
 </context>
 <context>
@@ -818,7 +819,7 @@
     </message>
     <message>
         <source>All files</source>
-        <translation>Tout les fichiers</translation>
+        <translation>Tous les fichiers</translation>
     </message>
     <message>
         <source>Eraser</source>
@@ -837,11 +838,11 @@
     </message>
     <message>
         <source>Use my default</source>
-        <translation>Touche par defaut</translation>
+        <translation>Touche par défaut</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation>Reinitialiser toutes les touches</translation>
+        <translation>Réinitialiser toutes les touches</translation>
     </message>
     <message>
         <source>Custom Controls</source>
@@ -857,11 +858,11 @@
     </message>
     <message>
         <source>This hedgehog&apos;s name</source>
-        <translation>Le nom de ce herisson</translation>
+        <translation>Le nom de cet hérisson</translation>
     </message>
     <message>
         <source>Randomize this hedgehog&apos;s name</source>
-        <translation>Choisis un nom aléatoire pour ce herisson</translation>
+        <translation>Choisir un nom aléatoire pour cet hérisson</translation>
     </message>
     <message>
         <source>Random Team</source>
@@ -904,7 +905,7 @@
         <source>(%1 kill)</source>
         <translation>
             <numerusform>(%1 tué)</numerusform>
-            <numerusform></numerusform>
+            <numerusform>(%1 tués)</numerusform>
         </translation>
     </message>
     <message numerus="yes">
@@ -930,7 +931,7 @@
     </message>
     <message>
         <source>Play again</source>
-        <translation type="unfinished"></translation>
+        <translation>Rejouer</translation>
     </message>
     <message>
         <source>Save</source>
@@ -975,7 +976,7 @@
     </message>
     <message>
         <source>Access the user created content downloadable from our website</source>
-        <translation>Acces au contenu téléchargeable créé par les joueurs, disponible sur notre site</translation>
+        <translation>Accès au contenu téléchargeable créé par les joueurs, disponible sur notre site</translation>
     </message>
     <message>
         <source>Exit game</source>
@@ -983,7 +984,7 @@
     </message>
     <message>
         <source>Manage videos recorded from game</source>
-        <translation>Gérer les vidéos de parties enregistrées</translation>
+        <translation>Gérer les vidéos des parties enregistrées</translation>
     </message>
     <message>
         <source>Edit game preferences</source>
@@ -1041,18 +1042,18 @@
     </message>
     <message>
         <source>Room controls</source>
-        <translation>Contrôle de la room</translation>
+        <translation>Options de la salle</translation>
     </message>
 </context>
 <context>
     <name>PageNetServer</name>
     <message>
         <source>Click here for details</source>
-        <translation>Clique pour plus de détails</translation>
+        <translation>Cliquer ici pour plus de détails</translation>
     </message>
     <message>
         <source>Insert your address here</source>
-        <translation>Insert ton adresse ici</translation>
+        <translation>Insérez votre adresse ici</translation>
     </message>
 </context>
 <context>
@@ -1063,7 +1064,7 @@
     </message>
     <message>
         <source>Edit team</source>
-        <translation>Éditer l&apos;Équipe</translation>
+        <translation>Éditer l&apos;équipe</translation>
     </message>
     <message>
         <source>Delete team</source>
@@ -1079,23 +1080,23 @@
     </message>
     <message>
         <source>Edit scheme</source>
-        <translation>Modifier règles</translation>
+        <translation>Modifier les règles</translation>
     </message>
     <message>
         <source>Delete scheme</source>
-        <translation>Supprimer règles</translation>
+        <translation>Supprimer les règles</translation>
     </message>
     <message>
         <source>New weapon set</source>
-        <translation>Nouvel ensemble d&apos;armes</translation>
+        <translation>Nouvel set d&apos;armes</translation>
     </message>
     <message>
         <source>Edit weapon set</source>
-        <translation>Modifier un ensemble d&apos;armes</translation>
+        <translation>Modifier un set d&apos;armes</translation>
     </message>
     <message>
         <source>Delete weapon set</source>
-        <translation>Supprimer un ensemble d&apos;armes</translation>
+        <translation>Supprimer un set d&apos;armes</translation>
     </message>
     <message>
         <source>Advanced</source>
@@ -1107,19 +1108,19 @@
     </message>
     <message>
         <source>Proxy host</source>
-        <translation type="unfinished"></translation>
+        <translation>Proxy de l&apos;hôte</translation>
     </message>
     <message>
         <source>Proxy port</source>
-        <translation type="unfinished"></translation>
+        <translation>Port du proxy</translation>
     </message>
     <message>
         <source>Proxy login</source>
-        <translation type="unfinished"></translation>
+        <translation>Identifiants du proxy</translation>
     </message>
     <message>
         <source>Proxy password</source>
-        <translation type="unfinished"></translation>
+        <translation>Mot de passe du proxy</translation>
     </message>
     <message>
         <source>No proxy</source>
@@ -1131,7 +1132,7 @@
     </message>
     <message>
         <source>HTTP proxy</source>
-        <translation type="unfinished"></translation>
+        <translation>Proxy HTTP</translation>
     </message>
     <message>
         <source>System proxy settings</source>
@@ -1143,11 +1144,11 @@
     </message>
     <message>
         <source>Reset to default</source>
-        <translation>Par défaut</translation>
+        <translation>Réinitialiser par défaut</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation>Remettre les touches par défaut</translation>
+        <translation>Réinitialiser les touches par défaut</translation>
     </message>
     <message>
         <source>Game</source>
@@ -1195,11 +1196,11 @@
     </message>
     <message>
         <source>Game audio</source>
-        <translation>Son du jeu</translation>
+        <translation>Sons du jeu</translation>
     </message>
     <message>
         <source>Frontend audio</source>
-        <translation>Son de l&apos;interface</translation>
+        <translation>Sons de l&apos;interface</translation>
     </message>
     <message>
         <source>Account</source>
@@ -1207,7 +1208,7 @@
     </message>
     <message>
         <source>Proxy settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Configurations du proxy</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
@@ -1223,7 +1224,7 @@
     </message>
     <message>
         <source>Video recording options</source>
-        <translation>Option d&apos;enregistrement vidéo</translation>
+        <translation>Options d&apos;enregistrement vidéo</translation>
     </message>
 </context>
 <context>
@@ -1280,19 +1281,19 @@
     </message>
     <message>
         <source>Search for a room:</source>
-        <translation>Chercher une room</translation>
+        <translation>Chercher une salle:</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation>Créer une room</translation>
+        <translation>Créer une salle</translation>
     </message>
     <message>
         <source>Join room</source>
-        <translation>Rejoindre</translation>
+        <translation>Rejoindre </translation>
     </message>
     <message>
         <source>Room state</source>
-        <translation>Etat de la room</translation>
+        <translation>État de la salle</translation>
     </message>
     <message>
         <source>Clear filters</source>
@@ -1300,7 +1301,7 @@
     </message>
     <message>
         <source>Open server administration page</source>
-        <translation>Ouvre la page d&apos;administration du serveur</translation>
+        <translation>Ouvrir la page d&apos;administration du serveur</translation>
     </message>
 </context>
 <context>
@@ -1347,11 +1348,12 @@
     </message>
     <message>
         <source>Lower gravity</source>
+        <translatorcomment>ou faible gravité ?</translatorcomment>
         <translation>Gravité faible</translation>
     </message>
     <message>
         <source>Assisted aiming with laser sight</source>
-        <translation>Visée assistée par un laser</translation>
+        <translation>Visée assistée par laser</translation>
     </message>
     <message>
         <source>All hogs have a personal forcefield</source>
@@ -1359,15 +1361,15 @@
     </message>
     <message>
         <source>Order of play is random instead of in room order.</source>
-        <translation>Ordre de jeu aléatoire plutôt que par ordre dans la room.</translation>
+        <translation>Ordre de jeu aléatoire plutôt que par ordre dans la salle.</translation>
     </message>
     <message>
         <source>Play with a King. If he dies, your side dies.</source>
-        <translation>Jouez avec un Roi. S&apos;il meurs, votre côté perds.</translation>
+        <translation>Jouez avec un Roi. S&apos;il meurt, votre côté perd.</translation>
     </message>
     <message>
         <source>Take turns placing your hedgehogs before the start of play.</source>
-        <translation>Placez vos hérissons chacun à votre tour avant de commencer à jouer.</translation>
+        <translation>Placez vos hérissons tour à tour avant de commencer à jouer.</translation>
     </message>
     <message>
         <source>Ammo is shared between all teams that share a colour.</source>
@@ -1461,7 +1463,7 @@
     </message>
     <message>
         <source>Practice your skills in a range of training missions</source>
-        <translation>Améliorez vos competences avec un large choix de missions</translation>
+        <translation>Améliorez vos compétences avec un large choix de missions</translation>
     </message>
     <message>
         <source>Watch recorded demos</source>
@@ -1484,7 +1486,7 @@
     </message>
     <message>
         <source>Pick the mission or training to play</source>
-        <translation>Choisis une mission ou entraine-toi à jouer</translation>
+        <translation>Choisis une mission ou entraîne-toi à jouer</translation>
     </message>
     <message>
         <source>Start fighting</source>
@@ -1547,7 +1549,7 @@
     </message>
     <message>
         <source>Info</source>
-        <translation>Info</translation>
+        <translation>Infos</translation>
     </message>
     <message>
         <source>Ban</source>
@@ -1579,7 +1581,7 @@
     </message>
     <message>
         <source>Restrict Unregistered Players Join</source>
-        <translation>Bloquer l&apos;acces au joueurs non-enregistrés</translation>
+        <translation>Bloquer l&apos;accès aux joueurs non-enregistrés</translation>
     </message>
     <message>
         <source>Show games in lobby</source>
@@ -1610,7 +1612,7 @@
     </message>
     <message>
         <source>Check for updates at startup</source>
-        <translation>Vérifiez la présence de mises à jour au démarrage</translation>
+        <translation>Vérifier la présence de mises à jour au démarrage</translation>
     </message>
     <message>
         <source>Show ammo menu tooltips</source>
@@ -1622,7 +1624,7 @@
     </message>
     <message>
         <source>Save account name and password</source>
-        <translation>Enregistrer le nom de compte et mot de passe</translation>
+        <translation>Enregistrer le nom de compte et le mot de passe</translation>
     </message>
     <message>
         <source>Video is private</source>
@@ -1863,7 +1865,7 @@
     </message>
     <message>
         <source>Crate Drops</source>
-        <translation>Lachers de caisse</translation>
+        <translation>Lâcher de caisse</translation>
     </message>
     <message>
         <source>% Dud Mines</source>
@@ -1939,19 +1941,19 @@
     </message>
     <message>
         <source>% Get Away Time</source>
-        <translation>% de temp de fuite</translation>
+        <translation>% de temps de fuite</translation>
     </message>
     <message>
         <source>There are videos that are currently being processed.
 Exiting now will abort them.
 Do you really want to quit?</source>
         <translation>Il y a des vidéos actuellement en cours de traitement.
-Quitter maintenant arretera le processus
+Quitter maintenant arrêtera le processus
 Voulez-vous vraiment quitter?</translation>
     </message>
     <message>
         <source>Please provide either the YouTube account name or the email address associated with the Google Account.</source>
-        <translation>Veuillez indiquer votre email et mot de passe de conexion à youtube</translation>
+        <translation>Veuillez indiquer votre email et votre mot de passe de conexion à Youtube.</translation>
     </message>
     <message>
         <source>Account name (or email): </source>
@@ -2003,7 +2005,7 @@
     </message>
     <message>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
-        <translation>Cette version est &quot;en cours de développement&quot; il est possible qu&apos;elle ne soit pas compatible avec les autres versions du jeu, des parties peuvent ne pas fonctionner ou être incompletes!</translation>
+        <translation>Cette version est &quot;en cours de développement&quot; il est possible qu&apos;elle ne soit pas compatible avec les autres versions du jeu, des parties peuvent ne pas fonctionner ou être incomplètes!</translation>
     </message>
     <message>
         <source>Fullscreen</source>
@@ -2027,11 +2029,11 @@
     </message>
     <message>
         <source>Send system information</source>
-        <translation>Envoyer des informations système</translation>
+        <translation>Envoyer les informations du système</translation>
     </message>
     <message>
         <source>Type the security code:</source>
-        <translation>Entrez le code de sécurité</translation>
+        <translation>Entrez le code de sécurité:</translation>
     </message>
     <message>
         <source>Revision</source>
@@ -2043,7 +2045,7 @@
     </message>
     <message>
         <source>This setting will be effective at next restart.</source>
-        <translation type="unfinished"></translation>
+        <translation>Le changement sera opérationnel au prochain redémarrage.</translation>
     </message>
 </context>
 <context>
@@ -2094,7 +2096,7 @@
     </message>
     <message>
         <source>Login or password is incorrect</source>
-        <translation>Identifiant ou mot de passe incorrecte</translation>
+        <translation>Identifiant ou mot de passe incorrect</translation>
     </message>
     <message>
         <source>Error while sending metadata to youtube.com:
@@ -2104,11 +2106,11 @@
     </message>
     <message>
         <source>Teams - Are you sure?</source>
-        <translation>Equipes - Etes-vous sûr?</translation>
+        <translation>Équipes - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>Do you really want to delete the team &apos;%1&apos;?</source>
-        <translation>Voulez-vous vraiment supprimer l&apos;équipe &quot;%1&quot;</translation>
+        <translation>Êtes-vous sûr de vouloir supprimer l&apos;équipe &quot;%1&quot;?</translation>
     </message>
     <message>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
@@ -2156,7 +2158,7 @@
     </message>
     <message>
         <source>Please enter room name</source>
-        <translation>Veuillez saisir le nom d&apos;une room</translation>
+        <translation>Veuillez saisir le nom d&apos;une salle</translation>
     </message>
     <message>
         <source>Record Play - Error</source>
@@ -2176,21 +2178,21 @@
     </message>
     <message>
         <source>Room Name - Error</source>
-        <translation>Nom de la room - Erreur</translation>
+        <translation>Nom de la salle - Erreur</translation>
     </message>
     <message>
         <source>Please select room from the list</source>
-        <translation>Veuillez choisir une room dans la liste</translation>
+        <translation>Veuillez choisir une salle dans la liste</translation>
     </message>
     <message>
         <source>Room Name - Are you sure?</source>
-        <translation>Nom de la room - Etes-vous sûr?</translation>
+        <translation>Nom de la salle - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation>Vous essayez de rejoindre une partie qui a déjà commencée. 
-Voulez-vous tout de même rejoindre la room?</translation>
+Voulez-vous tout de même rejoindre la partie?</translation>
     </message>
     <message>
         <source>Schemes - Warning</source>
@@ -2221,7 +2223,7 @@
     </message>
     <message>
         <source>Do you really want to cancel uploading %1?</source>
-        <translation>Voulez-vous arreter l&apos;importation de %1?</translation>
+        <translation>Êtes-vous sûr de vouloir arrêter l&apos;importation de %1?</translation>
     </message>
     <message>
         <source>File error</source>
@@ -2229,7 +2231,7 @@
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for writing</source>
-        <translation>Impossible d&apos;écrire le fichier %1</translation>
+        <translation>Impossible d&apos;ouvrir le fichier %1 pour écriture</translation>
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for reading</source>
@@ -2237,7 +2239,7 @@
     </message>
     <message>
         <source>Cannot use the ammo &apos;%1&apos;!</source>
-        <translation>Impossible d&apos;utiliser cette arme : &quot;%1&quot;</translation>
+        <translation>Impossible d&apos;utiliser cette arme : &quot;%1&quot;!</translation>
     </message>
     <message>
         <source>Weapons - Warning</source>
@@ -2245,11 +2247,11 @@
     </message>
     <message>
         <source>Cannot overwrite default weapon set &apos;%1&apos;!</source>
-        <translation>Impossible de remplacer le set d&apos;arme &quot;%1&quot;</translation>
+        <translation>Impossible de remplacer le set d&apos;armes &quot;%1&quot;!</translation>
     </message>
     <message>
         <source>Cannot delete default weapon set &apos;%1&apos;!</source>
-        <translation>Impossible de supprimer le set d&apos;arme par défaut &quot;%1&quot;</translation>
+        <translation>Impossible de supprimer le set d&apos;armes par défaut &quot;%1&quot;!</translation>
     </message>
     <message>
         <source>Weapons - Are you sure?</source>
@@ -2269,11 +2271,11 @@
     </message>
     <message>
         <source>Failed to generate captcha</source>
-        <translation>Echec de la génération du Captcha</translation>
+        <translation>Échec de la génération du Captcha</translation>
     </message>
     <message>
         <source>Failed to download captcha</source>
-        <translation>Echec du téléchargement du Captcha</translation>
+        <translation>Échec du téléchargement du Captcha</translation>
     </message>
     <message>
         <source>Please fill out all fields. Email is optional.</source>
@@ -2358,7 +2360,7 @@
     </message>
     <message>
         <source>More info</source>
-        <translation>Plus d&apos;info</translation>
+        <translation>Plus d&apos;infos</translation>
     </message>
     <message>
         <source>Set default options</source>
@@ -2410,11 +2412,11 @@
     </message>
     <message>
         <source>Invite your friends to your server in just 1 click!</source>
-        <translation>Invitez vos amis sur votre serveur en 1 clique!</translation>
+        <translation>Invitez vos amis sur votre serveur en 1 clic!</translation>
     </message>
     <message>
         <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>Cliquez pour copier votre URL serveur unique. Envoyez ce lien a vos amis et il pourront vous rejoindre.</translation>
+        <translation>Cliquez pour copier votre unique URL du serveur. Envoyez ce lien a vos amis pour qu&apos;ils vous rejoignent.</translation>
     </message>
     <message>
         <source>Start private server</source>
@@ -2425,7 +2427,7 @@
     <name>RoomNamePrompt</name>
     <message>
         <source>Enter a name for your room.</source>
-        <translation>Entrez un nom pour votre room.</translation>
+        <translation>Entrez un nom pour votre salle.</translation>
     </message>
     <message>
         <source>Cancel</source>
@@ -2433,7 +2435,7 @@
     </message>
     <message>
         <source>Create room</source>
-        <translation>Créer une room</translation>
+        <translation>Créer une salle</translation>
     </message>
 </context>
 <context>
@@ -2444,7 +2446,7 @@
     </message>
     <message>
         <source>Room Name</source>
-        <translation>Nom de la room</translation>
+        <translation>Nom de la salle</translation>
     </message>
     <message>
         <source>C</source>
@@ -2487,7 +2489,7 @@
     <name>SeedPrompt</name>
     <message>
         <source>The map seed is the basis for all random values generated by the game.</source>
-        <translation>Cette carte est la base pour toutes valeurs aléatoire générées par le jeu.</translation>
+        <translation>Cette carte est la base pour toutes les valeurs aléatoire générées par le jeu.</translation>
     </message>
     <message>
         <source>Cancel</source>
@@ -2495,7 +2497,7 @@
     </message>
     <message>
         <source>Set seed</source>
-        <translation>Générer une base (graine)</translation>
+        <translation>Générer une base</translation>
     </message>
     <message>
         <source>Close</source>
@@ -2538,14 +2540,15 @@
     <message>
         <source>Unable to run engine at %1
 Error code: %2</source>
-        <translation>Impossible de lancer le jeu sur %1</translation>
+        <translation>Impossible de lancer le jeu sur %1
+Erreur du code : %2</translation>
     </message>
 </context>
 <context>
     <name>TeamSelWidget</name>
     <message>
         <source>At least two teams are required to play!</source>
-        <translation>Il doit y avoir deux équipes minimum pour jouer!</translation>
+        <translation>Il doit y avoir deux équipes au minimum pour jouer!</translation>
     </message>
 </context>
 <context>
@@ -2662,19 +2665,19 @@
     </message>
     <message>
         <source>find hedgehog</source>
-        <translation>trouver hérisson</translation>
+        <translation>trouver l&apos;hérisson</translation>
     </message>
     <message>
         <source>ammo menu</source>
-        <translation>menu armes</translation>
+        <translation>menu d&apos;armes</translation>
     </message>
     <message>
         <source>volume down</source>
-        <translation>diminuer volume</translation>
+        <translation>diminuer le volume</translation>
     </message>
     <message>
         <source>volume up</source>
-        <translation>augmenter volume</translation>
+        <translation>augmenter le volume</translation>
     </message>
     <message>
         <source>change mode</source>
@@ -2739,7 +2742,7 @@
     </message>
     <message>
         <source>hedgehog info</source>
-        <translation>Info hérisson</translation>
+        <translation>Informations sur l&apos;hérisson</translation>
     </message>
 </context>
 <context>
@@ -2813,7 +2816,7 @@
     </message>
     <message>
         <source>Toggle fullscreen mode:</source>
-        <translation>Basculez le mode plein écran:</translation>
+        <translation>Basculez en mode plein écran:</translation>
     </message>
     <message>
         <source>Take a screenshot:</source>
--- a/share/hedgewars/Data/Locale/missions_fr.txt	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Locale/missions_fr.txt	Wed Sep 25 05:42:16 2013 +0300
@@ -1,11 +1,11 @@
 Basic_Training_-_Bazooka.name=Initiation au Bazooka
-Basic_Training_-_Bazooka.desc="Pour gagner, utiliser le vent à votre avantage !"
+Basic_Training_-_Bazooka.desc="Pour gagner, utilisez le vent à votre avantage !"
 
-Basic_Training_-_Grenade.name=Entrainement au lancer de Grenade
+Basic_Training_-_Grenade.name=Entraînement au lancer de Grenade
 Basic_Training_-_Grenade.desc="Souvenez vous, retirez la goupille et lancez !"
 
-Basic_Training_-_Cluster_Bomb.name=Entrainement au lancer de grenade à fragmentation
-Basic_Training_-_Cluster_Bomb.desc="Quelqu'un à besoin d'une bonne douche !"
+Basic_Training_-_Cluster_Bomb.name=Entraînement au lancer de grenade à fragmentation
+Basic_Training_-_Cluster_Bomb.desc="Quelqu'un a besoin d'une bonne douche !"
 
 Basic_Training_-_Shotgun.name=Initiation au Fusil
 Basic_Training_-_Shotgun.desc="On tire d'abord, on pose les questions après !"
@@ -14,13 +14,13 @@
 Basic_Training_-_Sniper_Rifle.desc="Pan ! En pleine tête !"
 
 Basic_Training_-_Rope.name=Initiation au Grappin
-Basic_Training_-_Rope.desc="Bouge de là et Balance toi !"
+Basic_Training_-_Rope.desc="Bouge de là et balance toi !"
 
 User_Mission_-_Dangerous_Ducklings.name=Mission: Canards dangereux
 User_Mission_-_Dangerous_Ducklings.desc="Très bien le bleu, il est temps de mettre en pratique ce que tu as appris aux entraînements !"
 
-User_Mission_-_Diver.name=Mission: Diver
-User_Mission_-_Diver.desc="Cet assault 'sous-marin' est plus dur que cela n'y paraît...."
+User_Mission_-_Diver.name=Mission: Divers
+User_Mission_-_Diver.desc="Cet assault 'sous-marin' est plus dur qu'il n'y paraît...."
 
 User_Mission_-_Teamwork.name=Mission: Travail en équipe
 User_Mission_-_Teamwork.desc="Parfois, l'amour blesse."
@@ -32,19 +32,19 @@
 User_Mission_-_Bamboo_Thicket.desc="La mort vient d'en haut."
 
 User_Mission_-_That_Sinking_Feeling.name=Mission: Cette impression de naufrage
-User_Mission_-_That_Sinking_Feeling.desc="L'eau monte rapidement et le temps est compté. Beaucoup ont essayé, sans succès.Pouvez vous tous les sauvez ?"
+User_Mission_-_That_Sinking_Feeling.desc="L'eau monte rapidement et le temps est compté. Beaucoup ont essayé, sans succès. Pouvez vous tous les sauvez ?"
 
 User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton et le Hammac
-User_Mission_-_Newton_and_the_Hammock.desc="Souvenez vous petits hérissons : La vitesse d'un corps reste constante à moins que ce corps ne soit attiré par une force extérieure!"
+User_Mission_-_Newton_and_the_Hammock.desc="Souvenez-vous petits hérissons : la vitesse d'un corps reste constante à moins que ce corps ne soit attiré par une force extérieure !"
 
 User_Mission_-_The_Great_Escape.name=Mission: La grande évasion
-User_Mission_-_The_Great_Escape.desc="Tu pense que tu peux me capturer ?!"
+User_Mission_-_The_Great_Escape.desc="Tu penses que tu peux me capturer ?!"
 
-User_Mission_-_Rope_Knock_Challenge.name=Challenge: A coup de Grappin
+User_Mission_-_Rope_Knock_Challenge.name=Challenge: À coup de Grappin
 User_Mission_-_Rope_Knock_Challenge.desc="Regarde derrière toi !"
 
 User_Mission_-_RCPlane_Challenge.name=Challenge: Avion télécommandé
 User_Mission_-_RCPlane_Challenge.desc="Plutôt confiant, hein, aviateur ?"
 
-portal.name=Portal Casse Tête
-portal.desc="Utilisez le fusil à portail pour voyager loin et rapidemment ou pour tuer ! Utiliser avec prudence !"
+portal.name=Portail Casse-Tête
+portal.desc="Utilisez le fusil à portail pour voyager loin et rapidemment ou pour tuer ! À utiliser avec prudence !"
--- a/share/hedgewars/Data/Maps/TrophyRace/map.lua	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua	Wed Sep 25 05:42:16 2013 +0300
@@ -31,6 +31,7 @@
 
 -- hog with best time
 local besthog = nil
+local besthogteam = ""
 
 -- hog with worst time (per round)
 local worsthog = nil
@@ -112,6 +113,7 @@
 			if ttime < besttime then
 				besttime = ttime
 				besthog = CurrentHedgehog
+                besthogteam = GetHogTeamName(besthog)
 				hscore = hscore .. loc("NEW fastest lap: ")
 			else
 				hscore = hscore .. loc("Fastest lap: ")
@@ -162,3 +164,9 @@
 --		
 --	end
 --end
+
+function onAchievementsDeclaration()
+    if besthog ~= nil then
+      DeclareAchievement("rope race", besthogteam, "TrophyRace", besttime)
+    end
+end
--- a/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Wed Sep 25 05:42:16 2013 +0300
@@ -363,6 +363,7 @@
     local y = 0
     local w = 0
     local h = 0 
+    GameFlags = bor(GameFlags, gfShoppaBorder)
     if band(GameFlags,gfBottomBorder) == 0 and GetRandom(2) == 0 then
         AddPoint(-50,2010,7)
         AddPoint(4150,2010)
--- a/share/hedgewars/Data/Sounds/voices/CMakeLists.txt	Sun Sep 22 18:34:53 2013 +0300
+++ b/share/hedgewars/Data/Sounds/voices/CMakeLists.txt	Wed Sep 25 05:42:16 2013 +0300
@@ -2,15 +2,16 @@
     British
     Classic
     Default
+    Default_es
+    Default_ru
+    Default_uk
+    HillBilly
     Mobster
     Pirate
     Robot
     Russian
     Singer
     Surfer
-    Default_uk
-    Default_es
-    HillBilly
     )
     add_subdirectory(${dir})
 endforeach(dir)
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Boring.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Byebye.ogg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Sounds/voices/Default_ru/CMakeLists.txt	Wed Sep 25 05:42:16 2013 +0300
@@ -0,0 +1,41 @@
+file(GLOB VoiceSounds
+Boring.ogg
+Byebye.ogg
+Comeonthen.ogg
+Coward.ogg
+Enemydown.ogg
+Firstblood.ogg
+Firepunch*.ogg
+Flawless.ogg
+Hello.ogg
+Hurry.ogg
+Illgetyou.ogg
+Incoming.ogg
+Jump*.ogg
+JustYouwait.ogg
+Kamikaze.ogg
+Laugh.ogg
+Melon.ogg
+Missed.ogg
+Nooo.ogg
+Nutter.ogg
+Ooff*.ogg
+Oops.ogg
+Ow*.ogg
+PoisonCough.ogg
+PoisonMoan.ogg
+Reinforcements.ogg
+Sameteam.ogg
+Stupid.ogg
+Takecover.ogg
+Traitor.ogg
+Uh-oh.ogg
+Victory.ogg
+Watchit.ogg
+Yessir.ogg
+Youllregretthat.ogg
+)
+
+install(FILES
+    ${VoiceSounds}
+    DESTINATION ${SHAREPATH}Data/Sounds/voices/Default_ru)
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Comeonthen.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Coward.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Enemydown.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch4.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch5.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firepunch6.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Firstblood.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Flawless.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Hello.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Hurry.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Illgetyou.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Incoming.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Jump1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Jump2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Jump3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Justyouwait.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Kamikaze.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Laugh.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Melon.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Missed.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Nooo.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Nutter.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ooff1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ooff2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ooff3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Oops.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ow1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ow2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ow3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Ow4.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/PoisonCough.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/PoisonMoan.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Reinforcements.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Sameteam.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Stupid.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Takecover.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Traitor.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Uh-oh.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Victory.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Watchit.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Yessir.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_ru/Youllregretthat.ogg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hashTest.hs	Wed Sep 25 05:42:16 2013 +0300
@@ -0,0 +1,52 @@
+module Test where
+
+import Control.Monad
+import Data.Word
+import qualified Data.IntSet as IS
+
+data OP = Sum
+        | Mul
+        | Sub
+    deriving Show
+
+
+genOps :: Int -> [[OP]]
+genOps 1 = [[Sum], [Mul], [Sub]]
+genOps n = [a : as | a <- [Sum, Mul, Sub], as <- genOps (n - 1)]
+
+
+genPos :: Int -> Int -> [[Int]]
+genPos m 1 = map (:[]) [-m..m - 1]
+genPos m n = [a : as | a <- [-m..m - 1], as <- genPos m (n - 1)]
+
+
+hash :: [Int] -> [OP] -> [Int] -> Int
+hash poss op s = foldl applyOp s' (zip ss op)
+    where
+        applyOp v (n, Sum) = (v + n) `mod` 256
+        applyOp v (n, Mul) = (v * n) `mod` 256
+        applyOp v (n, Sub) = (v - n) `mod` 256
+        (s' : ss) = map (\p -> if p >= 0 then s !! p else s !! (l + p)) poss
+        l = length s
+
+
+test = do
+    a <- liftM lines getContents
+    let w = minimum $ map length a
+    let opsNum = 4
+    let opsList = genOps (opsNum - 1)
+    let posList = genPos w opsNum
+    let target = length a
+    let wordsList = map (map fromEnum) a
+    let hashedSize = IS.size . IS.fromList
+    print $ length a
+    putStrLn . unlines . map show $ filter (\l -> fst l == length a) $ [(hs, (p, o)) | p <- posList, o <- opsList, let hs = hashedSize . map (hash p o) $ wordsList]
+
+didIunderstand' = do
+    a <- liftM lines getContents
+    print $ length a
+    print . IS.size . IS.fromList . map (testHash . map fromEnum) $ a
+    where
+        testHash s = let l = length s in (
+                         (s !! (l - 2) * s !! 1) + s !! (l - 1) - s !! 0
+                         ) `mod` 256