merge
authoralfadur
Thu, 01 Nov 2018 02:55:22 +0300
changeset 14052 9c817b2eedae
parent 14051 8a0d69c16cad (current diff)
parent 14049 0a75f54692cb (diff)
child 14053 38eb5937169e
merge
rust/integral-geometry/src/lib.rs
rust/land2d/src/lib.rs
rust/landgen/src/template_based.rs
--- a/ChangeLog.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/ChangeLog.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -7,7 +7,7 @@
  + Rework team rankings
  + Tied teams now rank equally
  + Help button in main menu
- + 14 new hedgehog taunts
+ + 19 new hedgehog taunts
  + Many new Lua API features
  * Functionality of controllers restored
  * Fix at least 2 crashes
@@ -54,7 +54,10 @@
  + New default brown clan color for better contrast
  + Allow to change volume during pause
  + Add sounds: flamethrower, landspray, idle freezer, shorykuen hit
- + Add taunts: Amazing, Brilliant, Bugger, Drat, Excellent, Fire, Gonnagetyou, Grenade, Ohdear, Runaway, Solong, Thisoneismine, Whatthe, Watchthis
+ + Add taunts: Amazing, Brilliant, Bugger, Cutitout, Drat, Excellent, Fire, Gonnagetyou, Grenade,
+               Hmm, Leavemealone, Ohdear, Ouch, Revenge, Runaway, Solong, Thisoneismine, Whatthe,
+               Watchthis
+ * Enemy/AI hogs now say “Hmm” on turn start instead of vowing for revenge (at least in most voice packs)
  * Fix extreme amounts of droplets when shooting with minigun into ocean world edge
  * Fix some flakes disappearing in world wrap worlds while moving camera
  * Fix invisible projectile timer, attack bar, target on other side of wrap world edge
@@ -132,6 +135,7 @@
  * The Great Escape: Infinite attack mode did not work
  * Shotgun/Sniper Rifle Target Practice: Suppress “X remaining” message
  * Fix resurrection animation appearing at wrong position for some missions and styles
+ * Fix Lua error when playing any mission or style in Lithuanian language
 
 A Classic Fairytale:
  * Fix clan membership of princess in some missions
--- a/gameServer2/Cargo.toml	Wed Oct 31 23:36:05 2018 +0100
+++ b/gameServer2/Cargo.toml	Thu Nov 01 02:55:22 2018 +0300
@@ -14,10 +14,10 @@
 mio = "0.6"
 slab = "0.4"
 netbuf = "0.4"
-nom = "4.0"
+nom = "4.1"
 env_logger = "0.5"
 log = "0.4"
-base64 = "0.9"
+base64 = "0.10"
 bitflags = "1.0"
 serde = "1.0"
 serde_yaml = "0.8"
--- a/hedgewars/uConsts.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uConsts.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -191,6 +191,8 @@
     cMaxHogHealth = 268435455; // maximum hedgehog health
     // cMaxHogHealth was calculated by: High(LongInt) div (cMaxHHIndex+1);
 
+    ouchDmg = 55;        // least amount of damage a hog must take in one blow for sndOuch to play
+
     // Z levels
     cHHZ = 1000;
     cCurrHHZ = Succ(cHHZ);
--- a/hedgewars/uGears.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uGears.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -163,7 +163,7 @@
                 inc(Gear^.Damage, tmp);
                 if tmp > 0 then
                     // Make hedgehog moan on damage
-                    HHHurt(Gear^.Hedgehog, dsPoison);
+                    HHHurt(Gear^.Hedgehog, dsPoison, tmp);
                 end
             end;
 
@@ -509,7 +509,9 @@
     end;
 AddRandomness(CheckSum);
 TurnClockActive:= prevtime <> TurnTimeLeft;
-inc(GameTicks)
+inc(GameTicks);
+if (OuchTauntTimer > 0) then
+    dec(OuchTauntTimer);
 end;
 
 //Purpose, to reset all transient attributes toggled by a utility and clean up various gears and effects at end of turn
--- a/hedgewars/uGearsHandlersMess.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uGearsHandlersMess.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -5806,7 +5806,7 @@
                     dmg:= dmg div Gear^.Boom;
 
                     if dmg > 0 then
-                        ApplyDamage(tmp, CurrentHedgehog, dmg, dsUnknown);
+                        ApplyDamage(tmp, CurrentHedgehog, dmg, dsHammer);
                     end;
 		tmp^.dY:= _0_03 * Gear^.Boom
                 end;
--- a/hedgewars/uGearsUtils.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uGearsUtils.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -31,7 +31,7 @@
 function  ModifyDamage(dmg: Longword; Gear: PGear): Longword;
 procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource);
 procedure spawnHealthTagForHH(HHGear: PGear; dmg: Longword);
-procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
+procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource; Damage: Longword);
 procedure HHHeal(Hedgehog: PHedgehog; healthBoost: LongInt; showMessage: boolean; vgTint: Longword);
 procedure HHHeal(Hedgehog: PHedgehog; healthBoost: LongInt; showMessage: boolean);
 function IncHogHealth(Hedgehog: PHedgehog; healthBoost: LongInt): LongInt;
@@ -280,7 +280,7 @@
         Gear^.LastDamage := AttackerHog;
 
         Gear^.Hedgehog^.Team^.Clan^.Flawless:= false;
-        HHHurt(Gear^.Hedgehog, Source);
+        HHHurt(Gear^.Hedgehog, Source, Damage);
         AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, Gear^.Hedgehog^.Team^.Clan^.Color);
         tmpDmg:= min(Damage, max(0,Gear^.Health-Gear^.Damage));
         if (Gear <> CurrentHedgehog^.Gear) and (CurrentHedgehog^.Gear <> nil) and (tmpDmg >= 1) then
@@ -348,11 +348,17 @@
 end;
 
 // Play effects for hurt hedgehog
-procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
+procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource; Damage: Longword);
 begin
 if Hedgehog^.Effects[heFrozen] <> 0 then exit;
 
-if (Source = dsFall) or (Source = dsExplosion) then
+if (Damage >= ouchDmg) and (OuchTauntTimer = 0) and ((Source = dsFall) or (Source = dsBullet) or (Source = dsShove) or (Source = dsHammer)) then
+    begin
+    PlaySoundV(sndOuch, Hedgehog^.Team^.voicepack);
+    // Prevent sndOuch from being played too often in short time
+    OuchTauntTimer:= 1250;
+    end
+else if (Source = dsFall) or (Source = dsExplosion) then
     case random(3) of
         0: PlaySoundV(sndOoff1, Hedgehog^.Team^.voicepack);
         1: PlaySoundV(sndOoff2, Hedgehog^.Team^.voicepack);
@@ -1394,7 +1400,7 @@
                 begin
                 if (Ammo^.Hedgehog^.Gear <> nil) then
                     Ammo^.Hedgehog^.Gear^.State:= Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable);
-                ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch
+                ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsExplosion); // crank up damage for explosives + blowtorch
                 end;
 
             if (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.King or (Gear^.Hedgehog^.Effects[heFrozen] > 0)) then
--- a/hedgewars/uScript.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uScript.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -2187,7 +2187,7 @@
                     if instaVoice then
                         PlaySoundV(TSound(s), gear^.Hedgehog^.Team^.Voicepack, false, true)
                     else
-                        AddVoice(TSound(s), gear^.Hedgehog^.Team^.Voicepack, true);
+                        AddVoice(TSound(s), gear^.Hedgehog^.Team^.Voicepack, true, false);
                     end;
                 end;
             end;
--- a/hedgewars/uSound.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uSound.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -62,14 +62,15 @@
 // Plays the sound snd [from a given voicepack],
 // if keepPlaying is given and true,
 // then the sound's playback won't be interrupted if asked to play again.
-procedure PlaySound(snd: TSound);
-procedure PlaySound(snd: TSound; keepPlaying: boolean);
-procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean);
-procedure PlaySound(snd: TSound; keepPlaying, ignoreMask, soundAsMusic: boolean);
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack);
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean);
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean);
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean);
+// Returns true if sound was found and is played, false otherwise.
+function PlaySound(snd: TSound): boolean;
+function PlaySound(snd: TSound; keepPlaying: boolean): boolean;
+function PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean): boolean;
+function PlaySound(snd: TSound; keepPlaying, ignoreMask, soundAsMusic: boolean): boolean;
+function PlaySoundV(snd: TSound; voicepack: PVoicepack): boolean;
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean): boolean;
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean): boolean;
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean): boolean;
 
 // Plays/stops a sound to replace the main background music temporarily.
 procedure PlayMusicSound(snd: TSound);
@@ -89,8 +90,11 @@
 procedure StopSoundChan(chn: LongInt);
 procedure StopSoundChan(chn, fadems: LongInt);
 
+// Add voice to the voice queue
 procedure AddVoice(snd: TSound; voicepack: PVoicepack);
-procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask: boolean);
+procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask, isFallback: boolean);
+
+// Actually play next voice
 procedure PlayNextVoice;
 
 
@@ -125,6 +129,7 @@
 
 var Volume: LongInt;
     SoundTimerTicks: Longword;
+    LastVoiceFailed: boolean;
 implementation
 uses uVariables, uConsole, uCommands, uDebug, uPhysFSLayer;
 
@@ -140,14 +145,14 @@
     isAutoDampening: boolean;
     isSEBackup: boolean;
     VoiceList : array[0..7] of TVoice =  (
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil),
-                    ( snd: sndNone; voicepack: nil));
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false),
+                    ( snd: sndNone; voicepack: nil; isFallback: false));
     Soundz: array[TSound] of record
             FileName: string[31];
             Path, AltPath    : TPathType;
@@ -319,7 +324,12 @@
             (FileName:            'Excellent.ogg'; Path: ptVoices; AltPath: ptNone),// sndExcellent
             (FileName:                 'Fire.ogg'; Path: ptVoices; AltPath: ptNone),// sndFire
             (FileName:            'Watchthis.ogg'; Path: ptVoices; AltPath: ptNone),// sndWatchThis
-            (FileName:              'Runaway.ogg'; Path: ptVoices; AltPath: ptNone) // sndRunAway
+            (FileName:              'Runaway.ogg'; Path: ptVoices; AltPath: ptNone),// sndRunAway
+            (FileName:              'Revenge.ogg'; Path: ptVoices; AltPath: ptNone),// sndRevenge
+            (FileName:             'Cutitout.ogg'; Path: ptVoices; AltPath: ptNone),// sndCutItOut
+            (FileName:         'Leavemealone.ogg'; Path: ptVoices; AltPath: ptNone),// sndLeaveMeAlone
+            (FileName:                 'Ouch.ogg'; Path: ptVoices; AltPath: ptNone),// sndOuch
+            (FileName:                  'Hmm.ogg'; Path: ptVoices; AltPath: ptNone) // sndHmm
             );
 
 
@@ -462,45 +472,89 @@
         end;
 end;
 
-procedure PlaySound(snd: TSound);
-begin
-    PlaySoundV(snd, nil, false, false, false);
-end;
-
-procedure PlaySound(snd: TSound; keepPlaying: boolean);
+// Get a fallback voice, assuming that snd is not available. Returns sndNone if none is found.
+function GetFallbackV(snd: TSound): TSound;
 begin
-    PlaySoundV(snd, nil, keepPlaying, false, false);
-end;
-
-procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean);
-begin
-    PlaySoundV(snd, nil, keepPlaying, ignoreMask, false);
+    // Fallback to sndFirePunch1 / sndOw1 / sndOoff1 if a “higher-numbered” sound is missing
+    if (snd in [sndFirePunch2, sndFirePunch3, sndFirePunch4, sndFirePunch5, sndFirePunch6]) then
+        GetFallbackV := sndFirePunch1
+    else if (snd in [sndOw2, sndOw3, sndOw4, sndOuch]) then
+        GetFallbackV := sndOw1
+    else if (snd in [sndOoff2, sndOoff3]) then
+        GetFallbackV := sndOoff1
+    // Other fallback sounds
+    else if (snd = sndGrenade) then
+        if random(2) = 0 then
+            GetFallbackV := sndNooo
+        else
+            GetFallbackV := sndUhOh
+    else if (snd in [sndDrat, sndBugger]) then
+        GetFallbackV := sndStupid
+    else if (snd in [sndGonnaGetYou, sndCutItOut, sndLeaveMeAlone]) then
+        GetFallbackV := sndRegret
+    else if (snd in [sndOhDear, sndSoLong]) then
+        GetFallbackV := sndByeBye
+    else if (snd = sndWhatThe) then
+        GetFallbackV := sndNooo
+    else if (snd = sndRunAway) then
+        GetFallbackV := sndOops
+    else if (snd = sndThisOneIsMine) then
+        GetFallbackV := sndReinforce
+    else if (snd in [sndAmazing, sndBrilliant, sndExcellent]) then
+        GetFallbackV := sndEnemyDown
+    // Hmm is for enemy turn start
+    else if snd = sndHmm then
+        // these are not ideal fallbacks, but those were the voices which were used in older versions
+        // for enemy turn start
+        if random(2) = 0 then
+            GetFallbackV := sndIllGetYou
+        else
+            GetFallbackV := sndJustYouWait
+    else
+        GetFallbackV := sndNone;
 end;
 
-procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask, soundAsMusic: boolean);
+function PlaySound(snd: TSound): boolean;
 begin
-    PlaySoundV(snd, nil, keepPlaying, ignoreMask, soundAsMusic);
+    PlaySound:= PlaySoundV(snd, nil, false, false, false);
 end;
 
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack);
+function PlaySound(snd: TSound; keepPlaying: boolean): boolean;
 begin
-    PlaySoundV(snd, voicepack, false, false, false);
+    PlaySound:= PlaySoundV(snd, nil, keepPlaying, false, false);
+end;
+
+function PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean): boolean;
+begin
+    PlaySound:= PlaySoundV(snd, nil, keepPlaying, ignoreMask, false);
 end;
 
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean);
+function PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask, soundAsMusic: boolean): boolean;
 begin
-    PlaySoundV(snd, voicepack, keepPlaying, false, false);
+    PlaySound:= PlaySoundV(snd, nil, keepPlaying, ignoreMask, soundAsMusic);
+end;
+
+function PlaySoundV(snd: TSound; voicepack: PVoicepack): boolean;
+begin
+    PlaySoundV:= PlaySoundV(snd, voicepack, false, false, false);
 end;
 
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean);
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean): boolean;
 begin
-    PlaySoundV(snd, voicepack, keepPlaying, ignoreMask, false);
+    PlaySoundV:= PlaySoundV(snd, voicepack, keepPlaying, false, false);
 end;
 
-procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean);
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean): boolean;
+begin
+    PlaySoundV:= PlaySoundV(snd, voicepack, keepPlaying, ignoreMask, false);
+end;
+
+function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean): boolean;
 var s:shortstring;
 rwops: PSDL_RWops;
 begin
+    s:= cPathz[Soundz[snd].Path] + '/' + voicepack^.name + '/' + Soundz[snd].FileName;
+    PlaySoundV:= false;
     if ((not isSoundEnabled) and (not (soundAsMusic and isMusicEnabled))) or fastUntilLag then
         exit;
 
@@ -515,37 +569,12 @@
         if (voicepack^.chunks[snd] = nil) and (Soundz[snd].Path = ptVoices) and (Soundz[snd].FileName <> '') then
             begin
             s:= cPathz[Soundz[snd].Path] + '/' + voicepack^.name + '/' + Soundz[snd].FileName;
-            // Fallback sounds
+            // Fallback taunts
             if (not pfsExists(s)) then
                 begin
-                // Fallback to sndFirePunch1 / sndOw1 / sndOoff1 if a “higher-numbered” sound is missing
-                if (snd in [sndFirePunch2, sndFirePunch3, sndFirePunch4, sndFirePunch5, sndFirePunch6]) then
-                    snd := sndFirePunch1
-                else if (snd in [sndOw2, sndOw3, sndOw4]) then
-                    snd := sndOw1
-                else if (snd in [sndOoff2, sndOoff3]) then
-                    snd := sndOoff1
-                // Other fallback sounds
-                else if (snd = sndGrenade) then
-                    if random(2) = 0 then
-                        snd := sndNooo
-                    else
-                        snd := sndUhOh
-                else if (snd in [sndDrat, sndBugger]) then
-                    snd := sndStupid
-                else if (snd = sndGonnaGetYou) then
-                    snd := sndRegret
-                else if (snd in [sndOhDear, sndSoLong]) then
-                    snd := sndByeBye
-                else if (snd = sndWhatThe) then
-                    snd := sndNooo
-                else if (snd = sndRunAway) then
-                    snd := sndOops
-                else if (snd = sndThisOneIsMine) then
-                    snd := sndReinforce
-                else if (snd in [sndAmazing, sndBrilliant, sndExcellent]) then
-                    snd := sndEnemyDown;
-
+                snd := GetFallbackV(snd);
+                if snd = sndNone then
+                    exit;
                 s:= cPathz[Soundz[snd].Path] + '/' + voicepack^.name + '/' + Soundz[snd].FileName;
                 end;
             WriteToConsole(msgLoading + s + ' ');
@@ -564,7 +593,8 @@
             else
                 WriteLnToConsole(msgOK)
             end;
-        lastChan[snd]:= Mix_PlayChannelTimed(-1, voicepack^.chunks[snd], 0, -1)
+        lastChan[snd]:= Mix_PlayChannelTimed(-1, voicepack^.chunks[snd], 0, -1);
+        PlaySoundV:= true;
         end
     else
         begin
@@ -585,7 +615,8 @@
             if SDLCheck(defVoicepack^.chunks[snd] <> nil, 'Mix_LoadWAV_RW', true) then exit;
             WriteLnToConsole(msgOK);
             end;
-        lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1)
+        lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1);
+        PlaySoundV:= true;
         end;
 end;
 
@@ -603,10 +634,23 @@
 
 procedure AddVoice(snd: TSound; voicepack: PVoicepack);
 begin
-    AddVoice(snd, voicepack, false);
+    AddVoice(snd, voicepack, false, false);
 end;
 
-procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask: boolean);
+{
+AddVoice: Add a voice to the voice queue.
+* snd: Sound ID
+* voicepack: Hedgehog voicepack
+* ignoreMask: If true, the sound will be played anyway if masked by Lua
+* isFallback: If true, this sound is added as fallback if the sound previously added to the
+             queue was not found. Useful to make sure a voice is always played, even if
+             a voicepack is incomplete.
+             Example:
+                 AddVoice(sndRevenge, voiceAttacker);
+                 AddVoice(sndRegret, voiceVictim, false, true);
+             --> plays sndRegret if sndRevenge could not be played.
+}
+procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask, isFallback: boolean);
 var i : LongInt;
 begin
 
@@ -634,11 +678,13 @@
         begin
         VoiceList[i].snd:= snd;
         VoiceList[i].voicepack:= voicepack;
+        VoiceList[i].isFallback:= isFallback;
         end
 end;
 
 procedure PlayNextVoice;
 var i : LongInt;
+    played : boolean;
 begin
     if (not isSoundEnabled) or fastUntilLag or ((LastVoice.snd <> sndNone) and (lastChan[LastVoice.snd] <> -1) and (Mix_Playing(lastChan[LastVoice.snd]) <> 0)) then
         exit;
@@ -646,14 +692,19 @@
     while (i<High(VoiceList)) and (VoiceList[i].snd = sndNone) do
         inc(i);
 
-    if (VoiceList[i].snd <> sndNone) then
+    played:= false;
+    if (VoiceList[i].snd <> sndNone) and ((not VoiceList[i].isFallback) or LastVoiceFailed) then
         begin
         LastVoice.snd:= VoiceList[i].snd;
         LastVoice.voicepack:= VoiceList[i].voicepack;
+        LastVoice.isFallback:= VoiceList[i].isFallback;
         VoiceList[i].snd:= sndNone;
-        PlaySoundV(LastVoice.snd, LastVoice.voicepack)
+        played:= PlaySoundV(LastVoice.snd, LastVoice.voicepack);
+        // Remember if sound was not played.
+        LastVoiceFailed:= (not played);
         end
-    else LastVoice.snd:= sndNone;
+    else
+        LastVoice.snd:= sndNone;
 end;
 
 function LoopSound(snd: TSound): LongInt;
@@ -953,6 +1004,7 @@
     Volume:= 0;
     SoundTimerTicks:= 0;
     defVoicepack:= AskForVoicepack('Default');
+    LastVoiceFailed:= false;
 
     for i:= Low(TSound) to High(TSound) do
         lastChan[i]:= -1;
--- a/hedgewars/uStats.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uStats.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -53,17 +53,21 @@
 uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uMisc, uConsole, uScript;
 
 var DamageClan  : Longword = 0;
+    DamageTeam  : Longword = 0;
     DamageTotal : Longword = 0;
     DamageTurn  : Longword = 0;
     PoisonTurn  : Longword = 0; // Poisoned enemies per turn
     PoisonClan  : Longword = 0; // Poisoned own clan members in turn
+    PoisonTeam  : Longword = 0; // Poisoned own team members in turn
     PoisonTotal : Longword = 0; // Poisoned hogs in whole round
     KillsClan   : LongWord = 0;
+    KillsTeam   : LongWord = 0;
     Kills       : LongWord = 0;
     KillsTotal  : LongWord = 0;
     HitTargets  : LongWord = 0; // Target (gtTarget) hits per turn
     AmmoUsedCount : Longword = 0;
     AmmoDamagingUsed : boolean = false;
+    LeaveMeAlone : boolean = false;
     SkippedTurns: LongWord = 0;
     isTurnSkipped: boolean = false;
     vpHurtSameClan: PVoicepack = nil;
@@ -71,10 +75,12 @@
 
 procedure HedgehogPoisoned(Gear: PGear; Attacker: PHedgehog);
 begin
-    if Attacker^.Team^.Clan = Gear^.HEdgehog^.Team^.Clan then
+    if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
         begin
-        vpHurtSameClan:= CurrentHedgehog^.Team^.voicepack;
-        inc(PoisonClan)
+        vpHurtSameClan:= Gear^.Hedgehog^.Team^.voicepack;
+        inc(PoisonClan);
+        if Attacker^.Team = Gear^.Hedgehog^.Team then
+            inc(PoisonTeam);
         end
     else
         begin
@@ -93,9 +99,28 @@
 procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean);
 begin
 if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
-    vpHurtSameClan:= CurrentHedgehog^.Team^.voicepack
+    vpHurtSameClan:= Gear^.Hedgehog^.Team^.voicepack
 else
+    begin
     vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack;
+    if (not killed) then
+        begin
+        // Check if victim got attacked by RevengeHog again
+        if (Gear^.Hedgehog^.RevengeHog <> nil) and (Gear^.Hedgehog^.RevengeHog = Attacker) then
+            LeaveMeAlone:= true;
+        // Check if attacker got revenge
+        if (Attacker^.RevengeHog <> nil) and (Attacker^.RevengeHog = Gear^.Hedgehog) then
+            begin
+            Attacker^.stats.GotRevenge:= true;
+            // Also reset the "in-row" counter to restore LeaveMeAlone/CutItOut taunts
+            Attacker^.stats.StepDamageRecvInRow:= 0;
+            Attacker^.RevengeHog:= nil;
+            end
+        // If not, victim remembers their attacker to plan *their* revenge
+        else
+            Gear^.Hedgehog^.RevengeHog:= Attacker;
+        end
+    end;
 
 //////////////////////////
 
@@ -103,6 +128,7 @@
 inc(Gear^.Hedgehog^.stats.StepDamageRecv, Damage);
 
 if CurrentHedgehog^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then inc(DamageClan, Damage);
+if CurrentHedgehog^.Team = Gear^.Hedgehog^.Team then inc(DamageTeam, Damage);
 
 if killed then
     begin
@@ -119,7 +145,11 @@
     if Gear = Attacker^.Gear then
         inc(Attacker^.Team^.stats.Suicides);
     if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
+        begin
         inc(KillsClan);
+        if Attacker^.Team = Gear^.Hedgehog^.Team then
+            inc(KillsTeam);
+        end;
     end;
 
 inc(DamageTotal, Damage);
@@ -147,6 +177,7 @@
 for t:= 0 to Pred(TeamsCount) do // send even on zero turn
     with TeamsArray[t]^ do
         for i:= 0 to cMaxHHIndex do
+            begin
             with Hedgehogs[i].stats do
                 begin
                 inc(DamageRecv, StepDamageRecv);
@@ -157,7 +188,18 @@
                     MaxStepDamageGiven:= StepDamageGiven;
                 if StepKills > MaxStepKills then
                     MaxStepKills:= StepKills;
+                if (Hedgehogs[i].Team <> nil) and (Hedgehogs[i].Team^.Clan^.ClanIndex <> CurrentHedgehog^.Team^.Clan^.ClanIndex) then
+                    begin
+                    if StepDamageRecv > 0 then
+                        inc(StepDamageRecvInRow)
+                    else
+                        StepDamageRecvInRow:= 0;
+                    if StepDamageRecvInRow >= 3 then
+                        LeaveMeAlone:= true;
+                    end;
                 end;
+            end;
+
 
 // Write into the death log which clans died in this turn,
 // important for final rankings.
@@ -241,8 +283,10 @@
             else
                 AddVoice(sndWatchIt, vpHurtSameClan)
         else
-            if random(2) = 0 then
+            // Attacked same team
+            if (random(2) = 0) and ((DamageTeam <> 0) or (KillsTeam > killsCheck) or (PoisonTeam <> 0)) then
                 AddVoice(sndSameTeam, vpHurtSameClan)
+            // Attacked same team or a clan member
             else
                 AddVoice(sndTraitor, vpHurtSameClan)
 
@@ -262,12 +306,35 @@
             AddVoice(sndEnemyDown, CurrentTeam^.voicepack)
         // 0 kills, only damage or poison
         else
-            // TODO: Play sndExcellent for a high damage shot.
-            // Not done yet because the fallback is sndEnemyDown.
-            if random(2) = 0 then
-                AddVoice(sndRegret, vpHurtEnemy)
+            // possible reactions of victim, in the order of preference:
+            // 1. claiming revenge
+            // 2. complaining about getting attacked too often
+            // 3. threatening enemy with retaliation
+            if CurrentHedgehog^.stats.GotRevenge then
+                begin
+                AddVoice(sndRevenge, CurrentHedgehog^.Team^.voicepack);
+                // If revenge taunt was added, one of the following voices is
+                // added as fallback (4th param), in case of a missing Revenge sound file.
+                case random(4) of
+                    0: AddVoice(sndRegret, vpHurtEnemy, false, true);
+                    1: AddVoice(sndGonnaGetYou, vpHurtEnemy, false, true);
+                    2: AddVoice(sndIllGetYou, vpHurtEnemy, false, true);
+                    3: AddVoice(sndJustYouWait, vpHurtEnemy, false, true);
+                    end;
+                end
             else
-                AddVoice(sndGonnaGetYou, vpHurtEnemy)
+                if LeaveMeAlone then
+                    if random(2) = 0 then
+                        AddVoice(sndCutItOut, vpHurtEnemy)
+                    else
+                        AddVoice(sndLeaveMeAlone, vpHurtEnemy)
+                else
+                    case random(4) of
+                        0: AddVoice(sndRegret, vpHurtEnemy);
+                        1: AddVoice(sndGonnaGetYou, vpHurtEnemy);
+                        2: AddVoice(sndIllGetYou, vpHurtEnemy);
+                        3: AddVoice(sndJustYouWait, vpHurtEnemy);
+                    end
 
     // Missed shot
     // A miss is defined as a shot with a damaging weapon with 0 kills, 0 damage, 0 hogs poisoned and 0 targets hit
@@ -308,16 +375,21 @@
                 StepDamageGiven:= 0;
                 StepPoisoned:= false;
                 StepDied:= false;
+                GotRevenge:= false;
                 end;
 
 Kills:= 0;
 KillsClan:= 0;
+KillsTeam:= 0;
 DamageClan:= 0;
+DamageTeam:= 0;
 DamageTurn:= 0;
 HitTargets:= 0;
 PoisonClan:= 0;
+PoisonTeam:= 0;
 PoisonTurn:= 0;
 AmmoUsedCount:= 0;
+LeaveMeAlone:= false;
 AmmoDamagingUsed:= false;
 isTurnSkipped:= false;
 end;
@@ -513,16 +585,20 @@
 procedure initModule;
 begin
     DamageClan  := 0;
+    DamageTeam  := 0;
     DamageTotal := 0;
     DamageTurn  := 0;
     PoisonClan  := 0;
+    PoisonTeam  := 0;
     PoisonTurn  := 0;
     KillsClan   := 0;
+    KillsTeam   := 0;
     Kills       := 0;
     KillsTotal  := 0;
     HitTargets  := 0;
     AmmoUsedCount := 0;
     AmmoDamagingUsed := false;
+    LeaveMeAlone := false;
     SkippedTurns:= 0;
     isTurnSkipped:= false;
     vpHurtSameClan:= nil;
--- a/hedgewars/uTeams.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uTeams.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -435,7 +435,7 @@
         NextClan:= false;
         end;
 
-    if (GameFlags and gfSwitchHog) <> 0 then
+    if ((GameFlags and gfSwitchHog) <> 0) and not(CurrentTeam^.hasGone) then
         begin
         g:= AddGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), gtSwitcher, 0, _0, _0, 0);
         CurAmmoGear:= g;
@@ -446,13 +446,12 @@
     end;
 IsGetAwayTime:= false;
 
+// turn start taunt: sndYesSir for own team, sndHmm for enemy or computer team
 if (TurnTimeLeft > 0) and (CurrentHedgehog^.BotLevel = 0) then
     begin
     if CurrentTeam^.ExtDriven then
         begin
-        if GetRandom(2) = 0 then
-             AddVoice(sndIllGetYou, CurrentTeam^.voicepack)
-        else AddVoice(sndJustYouWait, CurrentTeam^.voicepack)
+        AddVoice(sndHmm, CurrentTeam^.voicepack)
         end
     else
         begin
@@ -468,9 +467,7 @@
     begin
     if TurnTimeLeft > 0 then
         begin
-        if GetRandom(2) = 0 then
-             AddVoice(sndIllGetYou, CurrentTeam^.voicepack)
-        else AddVoice(sndJustYouWait, CurrentTeam^.voicepack)
+        AddVoice(sndHmm, CurrentTeam^.voicepack)
         end;
     ReadyTimeLeft:= 0
     end;
@@ -708,6 +705,7 @@
     CurrentHedgehog^.Gear:= Gear;
     CurrentHedgehog^.Name:= id;
     CurrentHedgehog^.InitialHealth:= Gear^.Health;
+    CurrentHedgehog^.RevengeHog:= nil;
     CurrHedgehog:= HedgehogsNumber;
     inc(HedgehogsNumber)
     end
--- a/hedgewars/uTypes.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uTypes.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -121,7 +121,7 @@
             vgtSmoothWindBar, vgtStraightShot, vgtNoPlaceWarn);
 
     // Damage can be caused by different sources
-    TDamageSource = (dsUnknown, dsFall, dsBullet, dsExplosion, dsShove, dsPoison);
+    TDamageSource = (dsUnknown, dsFall, dsBullet, dsExplosion, dsShove, dsPoison, dsHammer);
 
     // Available sounds
     TSound = (sndNone,
@@ -154,7 +154,8 @@
             sndCustom5, sndCustom6, sndCustom7, sndCustom8, sndMinigun, sndFlamethrower, sndIceBeamIdle,
             sndLandGun, sndCaseImpact, sndExtraDamage, sndFirePunchHit, sndGrenade, sndThisOneIsMine,
             sndWhatThe, sndSoLong, sndOhDear, sndGonnaGetYou, sndDrat, sndBugger, sndAmazing,
-            sndBrilliant, sndExcellent, sndFire, sndWatchThis, sndRunAway);
+            sndBrilliant, sndExcellent, sndFire, sndWatchThis, sndRunAway, sndRevenge, sndCutItOut,
+            sndLeaveMeAlone, sndOuch, sndHmm);
 
     // Available ammo types to be used by hedgehogs
     TAmmoType  = (amNothing, amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amPickHammer, // 6
@@ -330,17 +331,19 @@
         end;
 
     TStatistics = record
-        DamageRecv,
-        DamageGiven: Longword;
-        StepDamageRecv,
-        StepDamageGiven,
-        StepKills: Longword;
-        StepPoisoned,
-        StepDied,
-        Sacrificed: boolean;
-        MaxStepDamageRecv,
-        MaxStepDamageGiven,
-        MaxStepKills: Longword;
+        DamageRecv,              // total damage received
+        DamageGiven: Longword;   // total damage dealt
+        StepDamageRecvInRow,     // number of enemy turns in row this hog received any damage
+        StepDamageRecv,          // damage received in this turn
+        StepDamageGiven,         // damage dealt in this turn
+        StepKills: Longword;     // kills in this turn
+        StepPoisoned,            // whether hog got poisoned this turn
+        StepDied,                // whether hog died this turn
+        Sacrificed,              // whether hog was sacrificed in suicide attack (kamikaze, piano)
+        GotRevenge: boolean;     // whether hog got revenge in this turn
+        MaxStepDamageRecv,       // most damage received in one turn
+        MaxStepDamageGiven,      // most damage dealt in one turn
+        MaxStepKills: Longword;  // most kills in one turn
         FinishedTurns: Longword;
         end;
 
@@ -381,6 +384,7 @@
     TVoice = record
         snd: TSound;
         voicepack: PVoicePack;
+        isFallback: boolean;
         end;
 
     THHAmmo = array[0..cMaxSlotIndex, 0..cMaxSlotAmmoIndex] of TAmmo;
@@ -412,6 +416,7 @@
             Timer: Longword;
             HealthBarHealth: LongInt;
             Effects: array[THogEffect] of LongInt;
+            RevengeHog: PHedgehog;   // For which hog this hog wants revenge most. For sndRevenge taunt
             end;
 
     TTeam = record
--- a/hedgewars/uVariables.pas	Wed Oct 31 23:36:05 2018 +0100
+++ b/hedgewars/uVariables.pas	Thu Nov 01 02:55:22 2018 +0300
@@ -89,6 +89,7 @@
     CheckSum        : LongWord;
     CampaignVariable: shortstring;
     GameTicks       : LongWord;
+    OuchTauntTimer  : LongWord; // Timer which blocks sndOuch from being played too often and fast
     GameState       : TGameState;
     GameType        : TGameType;
     InputMask       : LongWord;
@@ -2807,6 +2808,7 @@
     CursorMovementX     := 0;
     CursorMovementY     := 0;
     GameTicks           := 0;
+    OuchTauntTimer      := 0;
     CheckSum            := 0;
     cWaterLine          := LAND_HEIGHT;
     cGearScrEdgesDist   := 240;
--- a/rust/integral-geometry/src/lib.rs	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/integral-geometry/src/lib.rs	Thu Nov 01 02:55:22 2018 +0300
@@ -37,6 +37,87 @@
     pub fn max_norm(self) -> i32 {
         std::cmp::max(self.x.abs(), self.y.abs())
     }
+
+    #[inline]
+    pub fn transform(self, matrix: &[i32; 4]) -> Self {
+        Point::new(matrix[0] * self.x + matrix[1] * self.y,
+                   matrix[2] * self.x + matrix[3] * self.y)
+    }
+}
+
+#[derive(PartialEq, Eq, Clone, Copy, Debug)]
+pub struct Size {
+    pub width: usize,
+    pub height: usize,
+}
+
+impl Size {
+    #[inline]
+    pub fn new(width: usize, height: usize) -> Self {
+        Size { width, height }
+    }
+
+    #[inline]
+    pub fn square(size: usize) -> Self {
+        Size { width: size, height: size }
+    }
+
+    #[inline]
+    pub fn area(&self) -> usize {
+        self.width * self.height
+    }
+
+    #[inline]
+    pub fn linear_index(&self, x: usize, y: usize) -> usize {
+        y * self.width + x
+    }
+
+    #[inline]
+    pub fn is_power_of_two(&self) -> bool {
+        self.width.is_power_of_two() && self.height.is_power_of_two()
+    }
+
+    #[inline]
+    pub fn next_power_of_two(&self) -> Self {
+        Self {
+            width: self.width.next_power_of_two(),
+            height: self.height.next_power_of_two()
+        }
+    }
+
+    #[inline]
+    pub fn to_mask(&self) -> SizeMask {
+        SizeMask::new(*self)
+    }
+}
+
+pub struct SizeMask{ size: Size }
+
+impl SizeMask {
+    #[inline]
+    pub fn new(size: Size) -> Self {
+        assert!(size.is_power_of_two());
+        let size = Size {
+            width: !(size.width - 1),
+            height: !(size.height - 1)
+        };
+        SizeMask { size }
+    }
+
+    #[inline]
+    pub fn contains_x<T: Into<usize>>(&self, x: T) -> bool {
+        (self.size.width & x.into()) == 0
+    }
+
+    #[inline]
+    pub fn contains_y<T: Into<usize>>(&self, y: T) -> bool {
+        (self.size.height & y.into()) == 0
+    }
+
+    #[inline]
+    pub fn contains(&self, point: Point) -> bool {
+        self.contains_x(point.x as usize) && self.contains_y(point.y as usize)
+    }
 }
 
 macro_rules! bin_op_impl {
--- a/rust/land2d/src/lib.rs	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/land2d/src/lib.rs	Thu Nov 01 02:55:22 2018 +0300
@@ -3,30 +3,24 @@
 
 use std::cmp;
 
-use integral_geometry::{ArcPoints, EquidistantPoints, LinePoints, Point};
+use integral_geometry::{
+    ArcPoints, EquidistantPoints, LinePoints,
+    Point, Size, SizeMask
+};
 
 pub struct Land2D<T> {
     pixels: vec2d::Vec2D<T>,
-    play_width: usize,
-    play_height: usize,
-    width_mask: usize,
-    height_mask: usize,
+    play_size: Size,
+    mask: SizeMask
 }
 
 impl<T: Copy + PartialEq> Land2D<T> {
-    pub fn new(play_width: usize, play_height: usize, fill_value: T) -> Self {
-        let real_width = play_width.next_power_of_two();
-        let real_height = play_height.next_power_of_two();
-
-        assert!(real_width > 0);
-        assert!(real_height > 0);
-
+    pub fn new(play_size: Size, fill_value: T) -> Self {
+        let real_size = play_size.next_power_of_two();
         Self {
-            pixels: vec2d::Vec2D::new(real_width, real_height, fill_value),
-            play_width,
-            play_height,
-            width_mask: !(real_width - 1),
-            height_mask: !(real_height - 1),
+            play_size,
+            pixels: vec2d::Vec2D::new(real_size, fill_value),
+            mask: real_size.to_mask()
         }
     }
 
@@ -41,23 +35,33 @@
     }
 
     #[inline]
+    pub fn size(&self) -> Size {
+        self.pixels.size()
+    }
+
+    #[inline]
     pub fn play_width(&self) -> usize {
-        self.play_width
+        self.play_size.width
     }
 
     #[inline]
     pub fn play_height(&self) -> usize {
-        self.play_height
+        self.play_size.height
+    }
+
+    #[inline]
+    pub fn play_size(&self) -> Size {
+        self.play_size
     }
 
     #[inline]
     pub fn is_valid_x(&self, x: i32) -> bool {
-        (x as usize & self.width_mask) == 0
+        self.mask.contains_x(x as usize)
     }
 
     #[inline]
     pub fn is_valid_y(&self, y: i32) -> bool {
-        (y as usize & self.height_mask) == 0
+        self.mask.contains_y(y as usize)
     }
 
     #[inline]
@@ -66,6 +70,11 @@
     }
 
     #[inline]
+    pub fn rows(&self) -> impl Iterator<Item = &[T]> {
+        self.pixels.rows()
+    }
+
+    #[inline]
     pub fn map<U: Default, F: FnOnce(&mut T) -> U>(&mut self, y: i32, x: i32, f: F) -> U {
         if self.is_valid_coordinate(x, y) {
             unsafe {
@@ -230,6 +239,30 @@
             .sum()
     }
 
+    fn fill_row(&mut self, center: Point, offset: Point, value: T) -> usize {
+        let row_index = center.y + offset.y;
+        if self.is_valid_y(row_index) {
+            let from_x = cmp::max(0, center.x - offset.x) as usize;
+            let to_x = cmp::min(self.width() - 1, (center.x + offset.x) as usize);
+            self.pixels[row_index as usize][from_x..=to_x]
+                .iter_mut().for_each(|v| *v = value);
+            to_x - from_x + 1
+        } else {
+            0
+        }
+    }
+
+    pub fn fill_circle(&mut self, center: Point, radius: i32, value: T) -> usize {
+        let transforms =
+            [[0, 1, 1, 0], [0, 1, -1, 0],
+             [1, 0, 0, 1], [1, 0, 0, -1]];
+        ArcPoints::new(radius).map(|vector| {
+            transforms.iter().map(|m|
+                self.fill_row(center, vector.transform(m), value)
+            ).sum::<usize>()
+        }).sum()
+    }
+
     pub fn draw_thick_line(&mut self, from: Point, to: Point, radius: i32, value: T) -> usize {
         let mut result = 0;
 
@@ -256,7 +289,7 @@
 
     #[test]
     fn basics() {
-        let l: Land2D<u8> = Land2D::new(30, 50, 0);
+        let l: Land2D<u8> = Land2D::new(Size::new(30, 50), 0);
 
         assert_eq!(l.play_width(), 30);
         assert_eq!(l.play_height(), 50);
@@ -273,7 +306,7 @@
 
     #[test]
     fn fill() {
-        let mut l: Land2D<u8> = Land2D::new(128, 128, 0);
+        let mut l: Land2D<u8> = Land2D::new(Size::square(128), 0);
 
         l.draw_line(Point::new(0, 0), Point::new(32, 96), 1);
         l.draw_line(Point::new(32, 96), Point::new(64, 32), 1);
--- a/rust/landgen/src/template_based.rs	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/landgen/src/template_based.rs	Thu Nov 01 02:55:22 2018 +0300
@@ -1,7 +1,6 @@
 use itertools::Itertools;
 
-use integral_geometry::Point;
-use integral_geometry::Rect;
+use integral_geometry::{Point, Size, Rect};
 use land2d::Land2D;
 use LandGenerationParameters;
 use LandGenerator;
@@ -9,8 +8,7 @@
 struct OutlinePoints {
     islands: Vec<Vec<Point>>,
     fill_points: Vec<Point>,
-    width: usize,
-    height: usize,
+    size: Size,
 }
 
 impl OutlinePoints {
@@ -33,18 +31,14 @@
                         }).collect()
                 }).collect(),
             fill_points: outline_template.fill_points.clone(),
-            width: outline_template.width,
-            height: outline_template.height,
+            size: outline_template.size
         }
     }
 
-    fn for_each<F: Fn(&mut Point)>(&mut self, f: F) {
-        self.islands
-            .iter_mut()
+    fn iter_mut(&mut self) -> impl Iterator<Item = &mut Point> {
+        self.islands.iter_mut()
             .flat_map(|i| i.iter_mut())
             .chain(self.fill_points.iter_mut())
-            .into_iter()
-            .for_each(f);
     }
 
     fn distort<I: Iterator<Item = u32>>(&mut self, random_numbers: &mut I) {
@@ -55,8 +49,7 @@
 struct OutlineTemplate {
     islands: Vec<Vec<Rect>>,
     fill_points: Vec<Point>,
-    width: usize,
-    height: usize,
+    size: Size,
     can_flip: bool,
     can_invert: bool,
     can_mirror: bool,
@@ -82,23 +75,22 @@
         let mut points =
             OutlinePoints::from_outline_template(&self.outline_template, random_numbers);
 
-        let mut land = Land2D::new(points.width, points.height, parameters.basic);
+        let mut land = Land2D::new(points.size, parameters.basic);
 
         let top_left = Point::new(
             (land.width() - land.play_width() / 2) as i32,
             (land.height() - land.play_height()) as i32,
         );
 
-        points.width = land.width();
-        points.height = land.height();
+        points.size = land.size();
 
-        points.for_each(|p| *p += top_left);
+        points.iter_mut().for_each(|p| *p += top_left);
 
         // mirror
         if self.outline_template.can_mirror {
             if let Some(b) = random_numbers.next() {
                 if b & 1 != 0 {
-                    points.for_each(|p| p.x = land.width() as i32 - 1 - p.x);
+                    points.iter_mut().for_each(|p| p.x = land.width() as i32 - 1 - p.x);
                 }
             }
         }
@@ -107,7 +99,8 @@
         if self.outline_template.can_flip {
             if let Some(b) = random_numbers.next() {
                 if b & 1 != 0 {
-                    points.for_each(|p| p.y = land.height() as i32 - 1 - p.y);
+                    points.iter_mut().for_each(|p|
+                        p.y = land.height() as i32 - 1 - p.y);
                 }
             }
         }
@@ -131,10 +124,9 @@
     let mut points = OutlinePoints {
         islands: vec![vec![]],
         fill_points: vec![Point::new(1, 1)],
-        width: 100,
-        height: 100,
+        size: Size::square(100)
     };
 
-    points.for_each(|p| p.x = 2);
+    points.iter_mut().for_each(|p| p.x = 2);
     assert_eq!(points.fill_points[0].x, 2);
 }
--- a/rust/theme-editor/Cargo.toml	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/theme-editor/Cargo.toml	Thu Nov 01 02:55:22 2018 +0300
@@ -13,4 +13,5 @@
 land2d = { path = "../land2d" }
 landgen = { path = "../landgen" }
 lfprng = { path = "../lfprng" }
+integral-geometry = { path = "../integral-geometry" }
 rand = "0.5"
\ No newline at end of file
--- a/rust/theme-editor/src/main.rs	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/theme-editor/src/main.rs	Thu Nov 01 02:55:22 2018 +0300
@@ -1,10 +1,17 @@
 use sdl2::{
     keyboard::Scancode,
-    event::EventType
+    event::EventType,
+    surface::Surface,
+    pixels::{
+        PixelFormatEnum, Color
+    }
 };
 
+use integral_geometry::{Point, Size};
+
 use rand::{
-    thread_rng, RngCore
+    thread_rng, RngCore, Rng,
+    distributions::uniform::SampleUniform
 };
 
 use landgen::{
@@ -33,6 +40,32 @@
     }
 }
 
+fn fill_pixels(pixels: &mut [u8], land: &Land2D<u32>) {
+    for (surf_row, land_row) in pixels.chunks_mut(land.width() * 4).zip(land.rows()) {
+        for (surf_pixel, land_pixel) in surf_row.chunks_mut(4).zip(land_row) {
+            if let [b, g, r, a] = surf_pixel {
+                *a = 255; *r = *land_pixel as u8;
+            }
+        }
+    }
+}
+
+fn fill_texture(surface: &mut Surface, land: &Land2D<u32>) {
+    if surface.must_lock() {
+        surface.with_lock_mut(|data| fill_pixels(data, land));
+    } else {
+        surface.without_lock_mut().map(|data| fill_pixels(data, land));
+    }
+}
+
+fn rnd<T: Default + SampleUniform + Ord>(max: T) -> T {
+    thread_rng().gen_range(T::default(), max)
+}
+
+const WIDTH: u32 = 512;
+const HEIGHT: u32 = 512;
+const SIZE: Size = Size {width: 512, height: 512};
+
 fn main() {
     let sdl = sdl2::init().unwrap();
     let _image = sdl2::image::init(sdl2::image::INIT_PNG).unwrap();
@@ -40,10 +73,30 @@
 
     let mut pump = sdl.event_pump().unwrap();
     let video = sdl.video().unwrap();
-    let _window = video.window("Theme Editor", 640, 480)
+    let window = video.window("Theme Editor", WIDTH, HEIGHT)
         .position_centered()
         .build().unwrap();
 
+    let mut land_surf = Surface::new(WIDTH, HEIGHT, PixelFormatEnum::ARGB8888).unwrap();
+
+    fn point() -> Point {
+        Point::new(rnd(WIDTH as i32), rnd(HEIGHT as i32))
+    }
+
+    let mut land = Land2D::new(SIZE, 0);
+    for i in 0..32 {
+        land.draw_thick_line(point(), point(), rnd(5), u32::max_value());
+
+        land.fill_circle(point(), rnd(60), u32::max_value());
+    }
+
+    fill_texture(&mut land_surf, &land);
+
+    let mut win_surf = window.surface(&pump).unwrap();
+    let win_rect = win_surf.rect();
+    land_surf.blit(land_surf.rect(), &mut win_surf, win_rect).unwrap();
+    win_surf.update_window();
+
     'pool: loop {
         use sdl2::event::Event::*;
         pump.pump_events();
@@ -53,8 +106,6 @@
                 Quit{ .. } => break 'pool,
                 _ => ()
             }
-        }    
+        }
     }
-}
-
-
+}
\ No newline at end of file
--- a/rust/vec2d/Cargo.toml	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/vec2d/Cargo.toml	Thu Nov 01 02:55:22 2018 +0300
@@ -4,3 +4,4 @@
 authors = ["Andrey Korotaev <a.korotaev@hedgewars.org>"]
 
 [dependencies]
+integral-geometry = { path = "../integral-geometry" }
--- a/rust/vec2d/src/lib.rs	Wed Oct 31 23:36:05 2018 +0100
+++ b/rust/vec2d/src/lib.rs	Thu Nov 01 02:55:22 2018 +0300
@@ -1,10 +1,12 @@
+extern crate integral_geometry;
+
 use std::ops::{Index, IndexMut};
 use std::slice::SliceIndex;
+use integral_geometry::Size;
 
 pub struct Vec2D<T> {
     data: Vec<T>,
-    width: usize,
-    height: usize,
+    size: Size,
 }
 
 impl<T> Index<usize> for Vec2D<T> {
@@ -12,62 +14,70 @@
 
     #[inline]
     fn index(&self, row: usize) -> &[T] {
-        debug_assert!(row < self.height);
+        debug_assert!(row < self.height());
 
-        let pos = row * self.width;
+        let pos = row * self.width();
 
-        &self.data[pos..pos + self.width]
+        &self.data[pos..pos + self.width()]
     }
 }
 
 impl<T> IndexMut<usize> for Vec2D<T> {
     #[inline]
     fn index_mut(&mut self, row: usize) -> &mut [T] {
-        debug_assert!(row < self.height);
+        debug_assert!(row < self.height());
+
+        let pos = row * self.width();
+
+        &mut self.data[pos..pos + self.size.width]
+    }
+}
 
-        let pos = row * self.width;
+impl <T> Vec2D<T> {
+    #[inline]
+    pub fn width(&self) -> usize {
+        self.size.width
+    }
 
-        &mut self.data[pos..pos + self.width]
+    #[inline]
+    pub fn height(&self) -> usize {
+        self.size.height
+    }
+
+    #[inline]
+    pub fn size(&self) -> Size {
+        self.size
     }
 }
 
 impl<T: Copy> Vec2D<T> {
-    pub fn new(width: usize, height: usize, value: T) -> Self {
-        Self {
-            data: vec![value; width * height],
-            width,
-            height,
-        }
-    }
-
-    #[inline]
-    pub fn width(&self) -> usize {
-        self.width
-    }
-
-    #[inline]
-    pub fn height(&self) -> usize {
-        self.height
+    pub fn new(size: Size, value: T) -> Self {
+        Self { size, data: vec![value; size.area()] }
     }
 
     #[inline]
     pub fn get(&self, row: usize, column: usize) -> Option<&<usize as SliceIndex<[T]>>::Output> {
-        self.data.get(row * self.width + column)
+        self.data.get(row * self.width() + column)
     }
 
     #[inline]
     pub fn get_mut(&mut self, row: usize, column: usize) -> Option<&mut <usize as SliceIndex<[T]>>::Output> {
-        self.data.get_mut(row * self.width + column)
+        self.data.get_mut(row * self.size.width + column)
     }
 
     #[inline]
     pub unsafe fn get_unchecked(&self, row: usize, column: usize) -> &<usize as SliceIndex<[T]>>::Output {
-        self.data.get_unchecked(row * self.width + column)
+        self.data.get_unchecked(row * self.width() + column)
     }
 
     #[inline]
     pub unsafe fn get_unchecked_mut(&mut self, row: usize, column: usize) -> &mut <usize as SliceIndex<[T]>>::Output {
-        self.data.get_unchecked_mut(row * self.width + column)
+        self.data.get_unchecked_mut(row * self.size.width + column)
+    }
+
+    #[inline]
+    pub fn rows(&self) -> impl Iterator<Item = &[T]> {
+        self.data.chunks(self.width())
     }
 }
 
@@ -77,10 +87,10 @@
 
     #[test]
     fn basics() {
-        let mut v: Vec2D<u8> = Vec2D::new(2, 3, 0xff);
+        let mut v: Vec2D<u8> = Vec2D::new(Size::new(2, 3), 0xff);
 
-        assert_eq!(v.width, 2);
-        assert_eq!(v.height, 3);
+        assert_eq!(v.width(), 2);
+        assert_eq!(v.height(), 3);
 
         assert_eq!(v[0][0], 0xff);
         assert_eq!(v[2][1], 0xff);
--- a/share/hedgewars/Data/Locale/de.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/de.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -157,7 +157,7 @@
 ["Attack Captain Lime before he attacks back"]="Greif Leutnant Limone an, bevor er angreift.",
 ["Attack From Rope: %s"] = "Angriff Vom Seil: %s", -- WxW
 ["Attack From Rope: You may only attack from a rope."] = "Angriff Vom Seil: Du darfst nur vom Seil angreifen.", -- WxW
-["Attack rule: %s"] = "Angriffsregel", -- WxW
+["Attack rule: %s"] = "Angriffsregel: %s", -- WxW
 ["Attack: Select this continent"] = "Angreifen: Diesen Kontinent wählen", -- Continental_supplies
 ["Attack: [Space]"] = "Angreifen: [Leertaste]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
 ["Attack the assassins before they attack back"]="Greif die Assassinen an, bevor sie angreifen.",
@@ -715,7 +715,7 @@
 ["Fuel: %d"] = "Treibstoff: %d", -- Tumbler
 ["Fuzzy Beard"] = "Stoppelbart", -- 
 ["“g=150”, where 150 is 150% of normal gravity."] = "»g=150«, wobei die »150« für 150% der Normalschwerkraft steht.", -- Gravity
-["“g=50, g2=150, period=4000” for gravity changing|from 50 to 150 and back with period of 4000 ms."] = "»g=50, g2=150, period=4000«, für Schwerkraft,|die von 50% bis 150% wechselt mit einer Periode von 4000ms.", -- Gravity
+["“g=50, g2=150, period=4000” for gravity changing|from 50 to 150 and back with period of 4000 ms."] = "»g=50, g2=150, period=4000«, für Schwerkraft,|die von 50 bis 150 wechselt mit einer Periode von 4000ms.", -- Gravity
 ["Galaxy Guardians"] = "Galaxiewächter", -- Big_Armory
 ["Game Modifiers: "]="Spiel-Modifikatoren: ",
 ["Game over!"] = "Spiel vorbei!", -- Space_Invasion
@@ -1908,8 +1908,8 @@
 ["Shield is fully recharged!"]="Schild vollständig aufgeladen!",
 ["Shield Master! +10 points!"] = "Schildmeister! +10 Punkte!", -- Space_Invasion
 ["Shield Miser! +%d points!"] = "Schildgeiz! +%d Punkte!", -- Space_Invasion
-["Shield OFF: %d power remaining"] = "Schild AUS: %s Energie verbleibend", -- Space_Invasion
-["Shield ON: %d power remaining"] = "Schild EIN: %s Energie verbleibend", -- Space_Invasion
+["Shield OFF: %d power remaining"] = "Schild AUS: %d Energie verbleibend", -- Space_Invasion
+["Shield ON: %d power remaining"] = "Schild EIN: %d Energie verbleibend", -- Space_Invasion
 ["Shield Seeker! +10 points!"] = "Schildsucher! +10 Punkte!", -- Space_Invasion
 ["Shinobi"] = "Shinobi", -- 
 ["%s hit the ground."] = "%s traf den Boden.", -- User_Mission_-_Rope_Knock_Challenge
--- a/share/hedgewars/Data/Locale/es.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/es.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -81,7 +81,7 @@
 --      ["Amazing! I was never beaten in a race before!"] = "", -- A_Space_Adventure:moon02
 --      ["Ammo depleted!"] = "", -- Space_Invasion
 --      ["Ammo: %d"] = "", -- Tumbler
-	["Ammo is reset at the end of your turn."] = "",
+--	["Ammo is reset at the end of your turn."] = "",
 --      ["Ammo Limit: Hogs can’t have more than 1 ammo per type"] = "", -- Highlander
 --      ["Ammo Maniac! +5 points!"] = "", -- Space_Invasion
 --      ["A mysterious Box"] = "", -- Basic_Training_-_Movement
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts	Thu Nov 01 02:55:22 2018 +0300
@@ -3344,11 +3344,11 @@
     </message>
     <message>
         <source>long jump</source>
-        <translation>遠いジャンプ</translation>
+        <translation>幅跳び</translation>
     </message>
     <message>
         <source>high jump</source>
-        <translation>高いジャンプ</translation>
+        <translation>高跳び</translation>
     </message>
     <message>
         <source>slot 10</source>
@@ -3423,7 +3423,7 @@
     <name>binds (descriptions)</name>
     <message>
         <source>Traverse gaps and obstacles by jumping:</source>
-        <translation>隙間や障害物を飛び越える:</translation>
+        <translation>隙間や障害物を跳び越える:</translation>
     </message>
     <message>
         <source>Fire your selected weapon or trigger an utility item:</source>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts	Thu Nov 01 02:55:22 2018 +0300
@@ -959,11 +959,11 @@
     </message>
     <message>
         <source>Reason:</source>
-        <translation type="unfinished"></translation>
+        <translation>Powód:</translation>
     </message>
     <message>
         <source>The connection was refused by the official server or timed out. Something seems to be wrong with the official server at the moment. This might be a temporary problem. Please try again later.</source>
-        <translation type="unfinished"></translation>
+        <translation>Połączenie zostało odrzucone przez oficjalny serwer lub przekroczyło limit czasu. Coś zdaje się być w tej chwili nie w porządku z oficjalnym serwerem. To może być tymczasowy problem. Proszę spróbować ponownie.</translation>
     </message>
     <message>
         <source>The connection was refused by the host or timed out. This might have one of the following reasons:
@@ -972,7 +972,12 @@
 - There is a temporary network problem
 
 Please check the host name and port settings and/or try again later.</source>
-        <translation type="unfinished"></translation>
+        <translation>Połączenie zostało odrzucone przez hosta lub przekroczyło limit czasu. Może to mieć jeden z poniższych powodów:
+- Program Serwera Hedgewars aktualnie nie chodzi na hoście
+- Podany numer portu jest nieprawidłowy
+- Jest tymczasowy problem z siecią
+
+Sprawdź nazwę hosta i ustawienia portu i/lub spróbuj ponownie później.</translation>
     </message>
 </context>
 <context>
@@ -1515,7 +1520,7 @@
     </message>
     <message>
         <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponieważ każdy miał taki sam kolor klanu, nie było powodu do walki. I tak jeże żyły w pokoju długo i szczęśliwie.</translation>
     </message>
 </context>
 <context>
@@ -1592,7 +1597,7 @@
     </message>
     <message>
         <source>Open the Hedgewars online game manual in your web browser</source>
-        <translation type="unfinished"></translation>
+        <translation>Otwórz podręcznik online Hedgewars w swojej przeglądarce internetowej</translation>
     </message>
 </context>
 <context>
@@ -2166,11 +2171,11 @@
     </message>
     <message>
         <source>Land can not be destroyed by most weapons.</source>
-        <translation type="unfinished"></translation>
+        <translation>Teren nie może zostać zniszczony przez większość broni.</translation>
     </message>
     <message>
         <source>%1 (%2)</source>
-        <translation type="unfinished">%1 (%2)</translation>
+        <translation>%1 (%2)</translation>
     </message>
 </context>
 <context>
@@ -2511,11 +2516,11 @@
     <message>
         <source>Dampen when losing focus</source>
         <extracomment>Checkbox text. If checked, the in-game audio volume is reduced (=dampened) when the game window loses its focus</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Przycisz w tle</translation>
     </message>
     <message>
         <source>Reduce the game audio volume if the game window has lost its focus</source>
-        <translation type="unfinished"></translation>
+        <translation>Zmniejsz głośność audio, gdy okno gry działa w tle</translation>
     </message>
 </context>
 <context>
@@ -3312,19 +3317,19 @@
     </message>
     <message>
         <source>The connection to the server is lost.</source>
-        <translation type="unfinished"></translation>
+        <translation>Połączenie z serwerem zostało utracone.</translation>
     </message>
     <message>
         <source>Schemes - Name already taken</source>
-        <translation type="unfinished"></translation>
+        <translation>Schematy - nazwa już zajęta</translation>
     </message>
     <message>
         <source>A scheme with the name &apos;%1&apos; already exists. Your scheme has been renamed to &apos;%2&apos;.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schemat z nazwą &apos;%1&apos; już istnieje. Twój schemat został przemianowany na &apos;%2&apos;.</translation>
     </message>
     <message>
         <source>A weapon scheme with the name &apos;%1&apos; already exists. Changes made to the weapon scheme have been discarded.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schemat broni z nazwą &apos;%1&apos; już istnieje. Zmiany dokonane w schemacie broni zostały odrzucone.</translation>
     </message>
 </context>
 <context>
@@ -3890,7 +3895,7 @@
     </message>
     <message>
         <source>clan chat</source>
-        <translation type="unfinished"></translation>
+        <translation>czat klanu</translation>
     </message>
 </context>
 <context>
@@ -3996,7 +4001,7 @@
     </message>
     <message>
         <source>Talk to your clan or all participants:</source>
-        <translation type="unfinished"></translation>
+        <translation>Mów do swojego klanu lub wszystkich uczestników:</translation>
     </message>
 </context>
 <context>
@@ -4837,111 +4842,111 @@
     </message>
     <message>
         <source>Kicked</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyrzucony</translation>
     </message>
     <message>
         <source>This server only allows registered users to join.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ten serwer pozwala na dołączenie jedynie zarejestrowanym użytkownikom.</translation>
     </message>
     <message>
         <source>heads</source>
-        <translation type="unfinished"></translation>
+        <translation>orzeł</translation>
     </message>
     <message>
         <source>tails</source>
-        <translation type="unfinished"></translation>
+        <translation>reszka</translation>
     </message>
     <message>
         <source>This server does not support replays!</source>
-        <translation type="unfinished"></translation>
+        <translation>Ten serwer nie obsługuje powtórek!</translation>
     </message>
     <message>
         <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
+        <translation>/greeting [wiadomość]: Ustaw lub wyczyść wiadomość do pokazania graczom, którzy dołączają do pokoju</translation>
     </message>
     <message>
         <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
-        <translation type="unfinished"></translation>
+        <translation>/save &lt;ID konfiguracji&gt; &lt;nazwa konfiguracji&gt;: Dodaj aktualną konfigurację jako głosowalny wybór w /callvote map</translation>
     </message>
     <message>
         <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>/delete &lt;ID konfiguracji&gt;: Usuń głosowalną konfigurację pokoju</translation>
     </message>
     <message>
         <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
-        <translation type="unfinished"></translation>
+        <translation>/saveroom &lt;nazwa pliku&gt;: Zapisz wszystkie głosowalne konfiguracje (oraz powitanie) tego pokoju do pliku</translation>
     </message>
     <message>
         <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
-        <translation type="unfinished"></translation>
+        <translation>/loadroom &lt;nazwa pliku&gt;: Wczytaj głosowalne konfiguracje pokoju (oraz powitanie) z pliku</translation>
     </message>
     <message>
         <source>&apos;Registered only&apos; state toggled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Stan &apos;tylko zarejestrowani&apos; przełączony.</translation>
     </message>
     <message>
         <source>Super power activated.</source>
-        <translation type="unfinished"></translation>
+        <translation>Super moc aktywowana.</translation>
     </message>
     <message>
         <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nieznana komenda lub nieprawidłowe parametry. Powiedz na czacie &apos;/help&apos; dla listy komend.</translation>
     </message>
     <message>
         <source>You can&apos;t kick yourself!</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie możesz wyrzucić siebie!</translation>
     </message>
     <message>
         <source>You can&apos;t kick the only other player!</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie możesz wyrzucić jedynego innego gracza!</translation>
     </message>
     <message>
         <source>The player is not in your room.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gracz nie jest w twoim pokoju.</translation>
     </message>
     <message>
         <source>This player is protected from being kicked.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gracz jest chroniony przed byciem wyrzuconym.</translation>
     </message>
     <message>
         <source>You&apos;re not the room master or a server admin!</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie jesteś mistrzem pokoju ani administratorem serwera!</translation>
     </message>
     <message>
         <source>You&apos;re already the room master.</source>
-        <translation type="unfinished"></translation>
+        <translation>Już jesteś mistrzem pokoju.</translation>
     </message>
     <message>
         <source>Greeting message cleared.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wiadomość powitalna wyczyszczona.</translation>
     </message>
     <message>
         <source>Greeting message set.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wiadomość powitalna ustawiona.</translation>
     </message>
     <message>
         <source>/callvote kick: This is only allowed in rooms without a room master.</source>
-        <translation type="unfinished"></translation>
+        <translation>/callvote kick: To jest dozwolone tylko w pokojach bez mistrza.</translation>
     </message>
     <message>
         <source>/callvote map: No maps available.</source>
-        <translation type="unfinished"></translation>
+        <translation>/callvote map: Brak dostępnych map.</translation>
     </message>
     <message>
         <source>You&apos;re the new room master!</source>
-        <translation type="unfinished"></translation>
+        <translation>Jesteś nowym mistrzem pokoju!</translation>
     </message>
     <message>
         <source>/quit: Quit the server</source>
-        <translation type="unfinished"></translation>
+        <translation>/quit: Wyjdź z serwera</translation>
     </message>
     <message>
         <source>This command is only available in the lobby.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ta komenda jest dostępna tylko w poczekalni.</translation>
     </message>
     <message>
         <source>This command is only available in rooms.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ta komenda jest dostępna tylko w pokojach.</translation>
     </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/it.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/it.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -237,7 +237,7 @@
 --      ["Bob"] = "", -- A_Space_Adventure:cosmos
 --      ["Bobo"] = "", -- User_Mission_-_Nobody_Laugh
     ["Bone Jackson"] = "Jackson Ossa", -- A_Classic_Fairytale:backstab
-    ["Bonely"] = "", -- A_Classic_Fairytale:shadow
+--    ["Bonely"] = "", -- A_Classic_Fairytale:shadow
 --      ["Bones"] = "", -- 
 --      ["BOOM! BOOM! BOOM! %s are the masters of destruction with %d destroyed invaders."] = "", -- Space_Invasion
     ["Boom!"] = "Kaboom!",
--- a/share/hedgewars/Data/Locale/ja.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/ja.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -52,7 +52,7 @@
 00:49=更生
 00:50=ドリル空襲
 00:51=泥玉
-00:52=武器を携えない
+00:52=武器なし
 00:53=時空移動装置
 00:54=土スプレー
 00:55=冷凍ガン
@@ -63,26 +63,26 @@
 00:60=ガトリング銃
 
 01:00=ロード中。。。
-01:01=ドロー!
-01:02=%1の勝ち!
+01:01=ドローです!
+01:02=%1の勝ちです!
 01:03=音量%1%
 01:04=ポーズ
 01:05=ゲームをやめますか(%1/%2)?
-01:06=サドンデス!
-01:07=残り%1
+01:06=サドンデス時間になりました!
+01:07=残り%1撃
 01:08=燃料%1%
 01:09=同期中。。。
 01:10=この道具はターンを終えなくても使えます!
 01:11=この武器や道具はまだ使えません!
 01:12=サドンデスまでの最後のターン!
 01:13=サドンデスまで残り%1ターン!
-01:14=%1、準備を!
+01:14=%1の準備時間です!
 01:15=わずかな
 01:16=低い
 01:17=通常の
 01:18=高い
 01:19=極端な
-01:20=%1弾み
+01:20=%1弾力
 01:21=オーディオミュート
 01:22=自動スキップ有効
 01:23=自動キャメラ有効
@@ -93,13 +93,13 @@
 01:27=+%1
 01:28=何もありません!
 01:29=未知のキー
-01:30=%1と%2の勝ち!
-01:31=%1と%2と%3の勝ち!
-01:32=%1と%2と%3と%4の勝ち!
-01:33=%1と%2と%3と%4と%5の勝ち!
-01:34=%1と%2と%3と%4と%5と%6の勝ち!
-01:35=%1と%2と%3と%4と%5と%6と%7の勝ち!
-01:36=みんなの勝ち!
+01:30=%1と%2の勝ちです!
+01:31=%1と%2と%3の勝ちです!
+01:32=%1と%2と%3と%4の勝ちです!
+01:33=%1と%2と%3と%4と%5の勝ちです!
+01:34=%1と%2と%3と%4と%5と%6の勝ちです!
+01:35=%1と%2と%3と%4と%5と%6と%7の勝ちです!
+01:36=みんなの勝ちです!
 01:37=%1が去りました。
 01:38=%1が戻りました。
 01:39=%1が自動的にターンをスキップしました。
@@ -356,21 +356,21 @@
 03:60=最強の機関銃
 
 ; Weapon Descriptions (use | as line breaks)
-04:00=シンプルな手榴弾で敵を攻撃する。|タイマーが0になると、爆発します。|「1-5」: 手榴弾タイマーをセットする|「正確な狙い」+「1-5」: 手榴弾の弾性を調整する|「攻撃」: 長押しでより遠く投げます
-04:01=クラスター弾で敵を攻撃する。|タイマーが0になると、小さな爆弾に分割されます。|「1-5」: 手榴弾タイマーをセットする|「正確な狙い」+「1-5」: 手榴弾の弾性を調整する|「攻撃」: 長押しでより遠く投げます
+04:00=シンプルな手榴弾で敵を攻撃する。|タイマーが0になると、爆発します。|「1-5」: 手榴弾タイマーをセットする|「正確な狙い」+「1-5」: 手榴弾の弾力を調整する|「攻撃」: 長押しでより遠く投げます
+04:01=クラスター弾で敵を攻撃する。|タイマーが0になると、小さな爆弾に分割されます。|「1-5」: 手榴弾タイマーをセットする|「正確な狙い」+「1-5」: 手榴弾の弾力を調整する|「攻撃」: 長押しでより遠く投げます
 04:02=風に影響される弾道発射体で敵を攻撃する。|「攻撃」: 長押しでより遠く発射します
 04:03=選択した目標にロックし、爆発的な蜂を発射する。|正確に攻撃するためには、全力で打たないほうがお勧めです。|「カーソル」: 標的を置く|「攻撃」: 長押しでより遠く発射します
 04:04=二発の散弾銃で敵を攻撃する。|弾のダメージ範囲が広いため、正確な狙いが必要ありません。|「攻撃」: 撃つ(複数)
 04:05=地下に移動しましょう!|地面に穴を開けると他の領域に到達できるようになります。|「攻撃」: 掘りの開始か停止をする
 04:06=敵を攻撃する方法が見当たらない時にはこれ!|ターンをスキップすればいいんです。|「攻撃」: ターンを終える
-04:07=ロープを使って、巨大な距離でも超えられます。|慣性を利用して敵を端から押し出すこともできます。|「攻撃」: ロップを投げるか離す|「カーソル」: 揺れる|「長いジャンプ」: 手榴弾か同類の武器を投げる
-04:08=狭いトンエルで地雷を置くと、敵が迂闊に近寄れないようにできます|自分で地雷を起動させる前に撤退してください!|「攻撃」: 地雷を足元に置く|「正確な狙い」+「1-5」: 地雷の弾性を調整する
+04:07=ロープを使って、巨大な距離でも超えられます。|慣性を利用して敵を端から押し出すこともできます。|「攻撃」: ロップを投げるか離す|「カーソル」: 揺れる|「幅跳び」: 手榴弾か同類の武器を投げる
+04:08=狭いトンエルで地雷を置くと、敵が迂闊に近寄れないようにできます|自分で地雷を起動させる前に撤退してください!|「攻撃」: 地雷を足元に置く|「正確な狙い」+「1-5」: 地雷の弾力を調整する
 04:09=狙いに自信を持たない時には、デザートイーグルの出番です|4発まで撃つことができます。|「攻撃」: 撃つ(複数)
 04:10=古代であり強力な爆発物です。|敵の足元に置いてから撤退することをわすれないでください。|「攻撃」: ダイナマイトを足元に置く
 04:11=海に打ち込んで、敵の針鼠を始末しよう!|地雷などを敵側に送ることもできます。|「攻撃」: 前にある全てを打つ
 04:12=敵に近づくことさえできれば、この強力な武術の使用が可能になります|「攻撃」: 昇竜拳の技を発動する
 04:13=UNUSED
-04:14=パラシュートさえあれば高所恐怖症も問題になりません!|自由落下が早すぎると、自動的に開いて針鼠を落下ダメージから守ります。|「攻撃」: パラシュートを開くか閉じる|「上下左右」: 飛ぶ方向を調整する|「長いジャンプ」: 手榴弾か同類の武器を投げる
+04:14=パラシュートさえあれば高所恐怖症も問題になりません!|自由落下が早すぎると、自動的に開いて針鼠を落下ダメージから守ります。|「攻撃」: パラシュートを開くか閉じる|「上下左右」: 飛ぶ方向を調整する|「幅跳び」: 手榴弾か同類の武器を投げる
 04:15=敵を攻撃する飛行機を呼ぶ|「左右」: 攻撃方向を決める|「カーソル」: 標的を置く
 04:16=敵の上に大量の地雷を落とす飛行機を呼ぶ|「左右」: 攻撃方向を決める|「カーソル」: 標的を置く
 04:17=避難する時にはブローランプがちからになります。|地面にトンエルを掘ると、敵の攻撃からの防御になります。|「上下」: 掘る方向を調整する|「攻撃」: 掘りの開始か停止をする
@@ -382,7 +382,7 @@
 04:23=針鼠の最後の手段です。決めた方向に飛び出して、|当たる全てにダメージを与えます|「攻撃」: 攻撃を開始する
 04:24=お誕生日おめでとうございます!|ケーキを敵側に歩かせて、爆発的なパーティーを齎すことができます|ほぼ全ての地形を乗り越えることができますが、歩く距離が限られています。|「攻撃」: ケーキを動かせるか止まって爆発させる
 04:25=この変装を使用する針鼠は非常に魅力的になり、|周りにいる針鼠を強く引きます。|その結果として、敵を罠に誘い出すことができます。|「攻撃」: 誘惑を発動する
-04:26=うまみと弾みのあるスイカで敵を攻撃する。|タイマーが0になると、爆発的な破片に分割します。|「1-5」: スイカのタイマーをセットする|「攻撃」: 長押しでより遠く投げます
+04:26=うまみと弾力のあるスイカで敵を攻撃する。|タイマーが0になると、爆発的な破片に分割します。|「1-5」: スイカのタイマーをセットする|「攻撃」: 長押しでより遠く投げます
 04:27=この悪魔の爆弾を投げて、敵を地獄の炎で覆う。|炎は長く燃え続きますので、距離を保つようにしてください。|「攻撃」: 長押しでより遠く投げます
 04:28=発砲する間もなく地面を掘り始める弾道発射体です。|タイマーが0になるか、地面を掘り通すかのときに爆発します。|「攻撃」: 長押しでより遠く発射します
 04:29=これは子供のおもちゃではありません!|大量の色鮮やかな玉の形をした爆弾を連発します。|「攻撃」: 全力しで撃つ|「上下」: 撃つ間に狙いを調整し続ける
@@ -395,12 +395,12 @@
 04:36=狙いが安定しない時には、現代技術がお役に立ちます|「攻撃」: レーザーサイトを有効にする
 04:37=日差しを避ける必要がありません。|この効果はターン終了までしか効きませんが、|その間に与えたダメージの80%をHPとして吸収できます。|「攻撃」: 吸血鬼効果を有効にする
 04:38=近距離であまり効果がない変わりに、狙撃銃は遠距離で非常に強力の武器になります。|「攻撃」: 一押しで組み込まれているレーザーサイトを有効にします。その後で押すと、射撃します(複数)|「左右」: 向く方向を変える
-04:39=空飛ぶ円盤に乗って、どんな辿り着きづらい場所にでも移動できます。|「攻撃」: 空飛ぶ円盤に乗るか降りる|「上左右」: 空飛ぶ円盤をその方向に一押しする|「長いジャンプ」: 手榴弾か同類の武器を投げる|「正確な狙い」+「長いジャンプ」: 十字線の方向に選択された武器を撃つ|「正確な狙い」+「上下」: 狙いを調整する
+04:39=空飛ぶ円盤に乗って、どんな辿り着きづらい場所にでも移動できます。|「攻撃」: 空飛ぶ円盤に乗るか降りる|「上左右」: 空飛ぶ円盤をその方向に一押しする|「幅跳び」: 手榴弾か同類の武器を投げる|「正確な狙い」+「幅跳び」: 十字線の方向に選択された武器を撃つ|「正確な狙い」+「上下」: 狙いを調整する
 04:40=地面を燃え上げらせる液体を含まれている瓶を投げる|「攻撃」: 長押しでより遠く投げます
 04:41=針鼠を載せて敵の上に毒入りの卵を落とす鳥を呼ぶ|「攻撃」: 一押しで呼んで、その後に卵を落とす|「上左右」: その方向に一羽ばたきをする
 04:42=この携帯系ポータルガンを使用すれば、|二つのポータルで繋がった位置の間に針鼠や武器を転送できます。|ゴムバンドには効きません。|「攻撃」: ポータルを撃つ|「切り替え」: ポータルの色を切り替える
 04:43=破壊力の極めて高いピアノを使って、演奏の初披露をしましょう!|演奏する針鼠も犠牲にしなければいけませんので、|同時に最後になりますけど。|「カーソル」: ピアノを落とす位置を決める|「F1-F9」: ピアノを弾く
-04:44=ただのチーズではなくて、もはや生物兵器です!|ダメージが小さい代わりに、その匂いを嗅いでしまった針鼠が毒にあたります|「1-5」: タイマーをセットする|「正確な狙い」+「1-5」: 弾性を調整する|「攻撃」: 長押しでより遠く投げます
+04:44=ただのチーズではなくて、もはや生物兵器です!|ダメージが小さい代わりに、その匂いを嗅いでしまった針鼠が毒にあたります|「1-5」: タイマーをセットする|「正確な狙い」+「1-5」: 弾力を調整する|「攻撃」: 長押しでより遠く投げます
 04:45=物理の授業の成果を見せる場です!その弾道に全てを焼き尽くす正弦波を作ります|有力なノックバックも起こしますので気をつけてください。|「攻撃」: 正弦波を撃つ
 04:46=燃える液体で敵を覆う|「攻撃」: 起動する|「上下」: 撃つ間に狙いを調整し続ける|「左右」: 出力を調整する
 04:47=地面に取り付く地雷を投げる。|上手に使えば、連鎖反応を起こすこともできるかもしれません。|「攻撃」: 長押しでより遠く投げます(複数)
@@ -413,7 +413,7 @@
 04:54=べとつく土の薄片を吹きかける。|橋をたてたり、トンネルを封鎖したりをするには役に立ちます。|「攻撃」: 起動する|「上下」: 撃つ間に狙いを調整し続ける
 04:55=氷河時代を再現しよう!|針鼠や物体を凍らせるのも、地面を滑り台に変えるのもできます。|必要になれば、海まで凍らせることができます。|「攻撃」: 起動する|「上下」: 撃つ間に狙いを調整し続ける
 04:56=包丁の使い道が多いです。|敵を襲ったり、トンネルを封鎖したりもその内にあります。|登山の補助にだってなります。|速度によってダメージが高まります。|「攻撃」: 長押しでより遠く投げます(複数)
-04:57=かなり弾性のあるゴムバンドを設置する。|針鼠や物体はダメージを受けずに跳ねります|「カーソル」: 適切な位置でゴムバンドを置く |「左右」: 向く方向を変える
+04:57=かなり弾力の高いゴムバンドを設置する。|針鼠や物体はダメージを受けずに弾みます|「カーソル」: 適切な位置でゴムバンドを置く |「左右」: 向く方向を変える
 04:58=自由に空に浮かぶ近接型爆弾です。|迂闊に近寄る針鼠を追いかけて、爆発します。|ダメージは普通の地雷より小さい。|「攻撃」: 長押しでより遠く投げます
 04:59=未完成
 04:60=弾の雨で敵を襲いましょう!|この機関銃に掛かれば、桁を三つ重ねても妨害になりません。|「攻撃」: 撃つ(複数)|「上下」: 撃つ間に狙いを調整し続ける
--- a/share/hedgewars/Data/Locale/lt.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/lt.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -1426,7 +1426,7 @@
 --      ["Most of the destructible terrain in marked with blue color"] = "", -- A_Space_Adventure:desert01
 --      ["Most of the destructible terrain is marked with dashed lines."] = "", -- A_Space_Adventure:desert01
 --      ["Most of the time you'll be able to use the freezer only."] = "", -- A_Space_Adventure:ice01
-   ["Movement: [Up], [Down], [Left], [Right]"] = "Judëjimas: [I Virðu, [I Apaèia], [I Kaire], [I Deðine]"],
+   ["Movement: [Up], [Down], [Left], [Right]"] = "Judëjimas: [I Virðu, [I Apaèia], [I Kaire], [I Deðine]",
 --      ["Mr Mango"] = "", -- A_Space_Adventure:fruit01
 --      ["Mudkip"] = "", -- 
 --      ["Multi-shot! +15 points!"] = "", -- Space_Invasion
@@ -1701,7 +1701,7 @@
 --      ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "", -- WxW
 --      ["Press [Long jump] to accept this configuration and start the game."] = "", -- WxW
-   ["Press [Precise] to skip intro"] = "Spausk [TaikluNusitaikima kad baigtum iëjima"],
+   ["Press [Precise] to skip intro"] = "Spausk [TaikluNusitaikima kad baigtum iëjima",
 --      ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "", -- WxW
 --      ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Princess"] = "", -- A_Classic_Fairytale:family, A_Classic_Fairytale:journey
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/missions_ja.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -0,0 +1,98 @@
+Basic_Training_-_Movement.name=基本移動練習
+Basic_Training_-_Movement.desc="新人はここから始めてください! いろんな地形の乗り越え方と針鼠の切り替え方を身に着けます。"
+
+Basic_Training_-_Bazooka.name=基本バズーカ練習
+Basic_Training_-_Bazooka.desc="バズーカの使い方と風の影響のことを習って、目標を全て消滅してください。"
+
+Basic_Training_-_Grenade.name=基本手榴弾練習
+Basic_Training_-_Grenade.desc="手榴弾の投げ方を習って、目標を全て消滅してください。"
+
+Basic_Training_-_Rope.name=基本ロープ練習
+Basic_Training_-_Rope.desc="ロープはいろいろに使えることができる道具ですが、使いこなすには多くの練習が必要になります。 ここでロープの基本を習います"
+
+Basic_Training_-_Flying_Saucer.name=基本空飛ぶ円盤練習
+Basic_Training_-_Flying_Saucer.desc="空飛ぶ円盤の操作を習得すれば、どこにでも辿り着くことができます。ここで操作と攻撃の方法を習います。"
+
+User_Mission_-_Dangerous_Ducklings.name=危なそうなアヒル
+User_Mission_-_Dangerous_Ducklings.desc="「よし、新人どもよ!ここまで身に付けたことを実戦で敵にぶつけてみよう!」"
+
+User_Mission_-_Diver.name=ダイバー
+User_Mission_-_Diver.desc="「この強襲上陸とやらは、あまり簡単に行きそうにないな。。。」"
+
+User_Mission_-_Teamwork.name=チームワーク
+User_Mission_-_Teamwork.desc="故障したロボットが軍事秘密を見張っています。この機密を手に入れるためには、針鼠二匹の特殊部隊をこの場に向かわせています。将来の作戦のためには、二匹も生き抜くことが必要不可欠です。"
+
+User_Mission_-_Teamwork_2.name=チームワークその二
+User_Mission_-_Teamwork_2.desc="サイバー帝国のアジトを発見することができました。見張りはたった一台のロボットのようです。アジトを制圧するためには、特殊部隊を指揮してロボットを消滅してください。前回のように、針鼠二匹も生き残らなければいけません。"
+
+User_Mission_-_Spooky_Tree.name=怪しげな樹木
+User_Mission_-_Spooky_Tree.desc="入手できる箱が沢山あります。その鳥はお腹が空いていなければいいんですが。。。"
+
+User_Mission_-_Bamboo_Thicket.name=竹林
+User_Mission_-_Bamboo_Thicket.desc="ロボットは竹林を脅し、動くものをほぼ完璧に正確打ち落とします。作戦を立てて、素早く敵を倒してください!"
+
+User_Mission_-_That_Sinking_Feeling.name=洪水
+User_Mission_-_That_Sinking_Feeling.desc="水量が素早く増えますし、時間も限られています。 みんなを助けることができますか?"
+
+User_Mission_-_Newton_and_the_Hammock.name=ニュートンとハンモック
+User_Mission_-_Newton_and_the_Hammock.desc="「覚えなさい、小さな針鼠たちよ!物体の速度は外力を与えない限り変わりません!」"
+
+User_Mission_-_The_Great_Escape.name=大脱走
+User_Mission_-_The_Great_Escape.desc="脱走して復習を敵を倒そう!"
+
+User_Mission_-_Rope_Knock_Challenge.name=ロープ落とし
+User_Mission_-_Rope_Knock_Challenge.desc="ロープをつかって、てきを全てうちおとしましょう!"
+
+User_Mission_-_Nobody_Laugh.name=笑い事
+User_Mission_-_Nobody_Laugh.desc="この道化師は、自分のことを面白いとか思っているそうですが、そうは行きません!数が多いが、こっちは時間が有利です。敵を全て倒してください。"
+
+User_Mission_-_RCPlane_Challenge.name=ラジコン飛行機挑戦
+User_Mission_-_RCPlane_Challenge.desc="ラジコン飛行機を使って箱を集めてください。飛行機を少なく使うと、より高い評価になります。"
+
+Big_Armory.name=兵器庫
+Big_Armory.desc="大量の武器をつかって、敵の針鼠八匹を一人で倒してください。"
+
+Bazooka_Battlefield.name=バズーカ戦場
+Bazooka_Battlefield.desc="忠実の騎士たちは敵に襲い掛かっています。バズーカのみを使用して、敵を倒してください!"
+
+Tentacle_Terror.name=触手恐怖
+Tentacle_Terror.desc="卑怯の敵は恐ろしい怪物に身を守られています。機会があれば、空襲で攻撃してきます。敵を倒すには、化物のようなロープ技術が必要になるかもしれません。"
+
+ClimbHome.name=登りかえり
+ClimbHome.desc="家がまだ遠いし、水量が増えています。できるだけ高く登ってください。"
+
+portal.name=ポータル挑戦
+portal.desc="ポータルを使って、敵を倒してください。"
+
+Target_Practice_-_Bazooka_easy.name=バズーカ射的練習(簡単)
+Target_Practice_-_Bazooka_easy.desc="標的をできるだけ早く撃ち落としてください!"
+
+Target_Practice_-_Bazooka_hard.name=バズーカ射的練習(困難)
+Target_Practice_-_Bazooka_hard.desc="標的が遠くにあっても撃ち落とせますか?"
+
+Target_Practice_-_Cluster_Bomb.name=クラスター弾射的練習
+Target_Practice_-_Cluster_Bomb.desc="標的を爆弾に浴びさせよう!"
+
+Target_Practice_-_Shotgun.name=散弾銃射的練習
+Target_Practice_-_Shotgun.desc="問う前には、撃つのです!"
+
+Basic_Training_-_Sniper_Rifle.name=狙撃銃射的練習
+Basic_Training_-_Sniper_Rifle.desc="狙撃者にとっては、最高の射撃場です!"
+
+Target_Practice_-_Homing_Bee.name=誘導バチ射的練習
+Target_Practice_-_Homing_Bee.desc="バチを使いこなすのは大変です!"
+
+Target_Practice_-_Grenade_easy.name=手榴弾射的練習(簡単)
+Target_Practice_-_Grenade_easy.desc="手榴弾戦士のための準備運動です。"
+
+Target_Practice_-_Grenade_hard.name=手榴弾射的練習(困難)
+Target_Practice_-_Grenade_hard.desc="標的を非常に当たりずらい位置に置きます。"
+
+Challenge_-_Speed_Shoppa_-_Hedgelove.name=ロープ競技(小)
+Challenge_-_Speed_Shoppa_-_Hedgelove.desc="小型マップで箱を集めてください。"
+
+Challenge_-_Speed_Shoppa_-_Ropes.name=ロープ競技(中)
+Challenge_-_Speed_Shoppa_-_Ropes.desc="中型マップで箱を集めてください。"
+
+Challenge_-_Speed_Shoppa_-_ShoppaKing.name=ロープ競技(大)
+Challenge_-_Speed_Shoppa_-_ShoppaKing.desc="大型マップで箱を集めてください。"
--- a/share/hedgewars/Data/Locale/pl.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/pl.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -4,7 +4,7 @@
     ["011101000"] = "011101000", -- A_Classic_Fairytale:dragon
     ["011101001"] = "011101001", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
     ["10 weapon schemes"] = "10 schematów broni", -- Continental_supplies
---      ["15+%d damage, %d invulnerable left"] = "", -- Continental_supplies
+    ["15+%d damage, %d invulnerable left"] = "15+%d obrażeń, pozostało %d niezniszczalnych", -- Continental_supplies
     ["1-5, Precise + 1-4: Choose structure type"] = "1-5, Precyzja + 1-4: Wybierz typ struktury", -- Construction_Mode
     ["+1 barrel!"] = "+1 beczka!", -- Tumbler
     ["%.1fs"] = "%.1fs", -- Racer, TechRacer
@@ -18,7 +18,7 @@
     ["+1 to the Mutant for killing anyone"] = "+1 dla Mutanta za zabicie kogokolwiek", -- Mutant
     ["+2 for becoming the Mutant"] = "+2 za zostanie Mutantem", -- Mutant
     ["30 minutes later..."] = "30 minut później...", -- A_Classic_Fairytale:shadow
---      ["%.3fs"] = "", -- A_Space_Adventure:ice02
+    ["%.3fs"] = "%.3fs", -- A_Space_Adventure:ice02
     ["5 additional enemies will be spawned during the game."] = "5 dodatkowych wrogów pojawi się podczas gry.", -- A_Space_Adventure:fruit01
     ["5 Deadly Hogs"] = "5 Zabójczych Jeży", -- A_Space_Adventure:death02
     ["6 more seconds added to the clock"] = "6 sekund dodano do zegara", -- A_Space_Adventure:ice02
@@ -99,12 +99,12 @@
     ["And where's all the weed?"] = "I gdzie jest całe zioło?", -- A_Classic_Fairytale:dragon
     ["And you believed me? Oh, god, that's cute!"] = "A ty mi wierzyłeś? O boże, to słodkie!", -- A_Classic_Fairytale:journey
     ["And you need to move to the top!"] = "I musisz dostać się na szczyt!", -- Basic_Training_-_Movement
---      ["An experimental editing tool for missions and more"] = "", -- HedgeEditor
---      ["Anno 1032"] = "", -- Continental_supplies
+    ["An experimental editing tool for missions and more"] = "Eksperymentalne narzędzie do edycji i więcej.", -- HedgeEditor
+    ["Anno 1032"] = "Rok 1032", -- Continental_supplies
     ["Anno 1032: [The explosion will make a strong push ~ Wide range, wont affect hogs close to the target]"] = "Anno 1032: [Eksplozja będzie miała silny odrzut ~ Szeroki zasięg, nie wpłynie na jeże blisko celu]", -- Continental_supplies
     ["An object has been destroyed before it took enough damage."] = "Obiekt został zniszczony zanim otrzymał wystarczająco dużo obrażeń.", -- SimpleMission
     ["Antarctica"] = "Antarktyda", -- Continental_supplies
---      ["Antarctic summer: Every 4th turn you get 1 girder, 1 mudball, 2 sine guns and 1 portable portal device."] = "", -- Continental_supplies
+    ["Antarctic summer: Every 4th turn you get 1 girder, 1 mudball, 2 sine guns and 1 portable portal device."] = "Antarktyczne lato: Co 4 tury dostajesz 1 belkę, 1 kulę błotną, 2 sinusoidalne giwery i 1 przenośne urządzenie portalowe.", -- Continental_supplies
     ["Antarctic summer: - Will give you one girder/mudball and two sineguns/portals every fourth turn."] = "Antarktyczne lato: Zapewni ci jedną belkę/kulę błotną i dwie sinusoidalne giwery/portale co każde cztery tury.", -- Continental_supplies
     ["Anti-Gravity Device Part (+1)"] = "Część Urządzenia Antygrawitacyjnego (+1)", -- A_Space_Adventure:desert01, A_Space_Adventure:fruit02, A_Space_Adventure:ice01
     ["Anton"] = "Antoni",
@@ -113,10 +113,10 @@
     ["A random hedgehog will inherit the weapons of his deceased team-mates."] = "Losowy jeż odziedziczy bronie jego poległych członków zespołu.", -- A_Space_Adventure:death02
     ["Arashi"] = "Araszi",
     ["Area"] = "Obszar", -- Continental_supplies
---      ["Areas surrounded by a green dashed outline are portal-proof and repel portals."] = "", -- A_Space_Adventure:final
---      ["Areas surrounded by a security border are indestructible."] = "", -- A_Space_Adventure:final
---      ["Areas with a green dashed outline are portal-proof."] = "", -- A_Space_Adventure:final
---      ["Areas with a security outline are indestructible."] = "", -- A_Space_Adventure:final
+    ["Areas surrounded by a green dashed outline are portal-proof and repel portals."] = "Obszary otoczone zielonym kreskowanym obrysem są portaloodporne i odrzucają portale.", -- A_Space_Adventure:final
+    ["Areas surrounded by a security border are indestructible."] = "Obszary otoczone granicą bezpieczeństwa są niezniszczalne.", -- A_Space_Adventure:final
+    ["Areas with a green dashed outline are portal-proof."] = "Obszary z zielonym kreskowanym obrysem są portaloodporne.", -- A_Space_Adventure:final
+    ["Areas with a security outline are indestructible."] = "Obszary z obrysem bezpieczeństwa są niezniszczalne.", -- A_Space_Adventure:final
     ["Are we there yet?"] = "Już dotarliśmy?", -- A_Classic_Fairytale:shadow
     ["Are you accusing me of something?"] = "Czy ty o coś mnie oskarżasz?", -- A_Classic_Fairytale:backstab
     ["Are you helping the aliens?"] = "Czy ty pomagasz obcym?", -- A_Classic_Fairytale:queen
@@ -145,14 +145,14 @@
     ["Attack From Rope: %s"] = "Atak z liny: %s", -- WxW
     ["Attack From Rope: You may only attack from a rope."] = "Atak z liny: Możesz atakować tylko z liny", -- WxW
     ["Attack rule: %s"] = "Zasada ataku: %s", -- WxW
---      ["Attack: Select this continent"] = "", -- Continental_supplies
+    ["Attack: Select this continent"] = "Atak: Wybierz ten kontynent", -- Continental_supplies
     ["Attack: [Space]"] = "Atak: [Spacja]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade, Basic_Training_-_Movement, Basic_Training_-_Rope
     ["Attack the assassins before they attack back"] = "Zaatakuj zabójców, zanim oni zaatakują", -- A_Space_Adventure:fruit02
     ["Attack: Throw ball"] = "Atak: Rzuć kulę", -- Knockball
     ["At the end of the game your health was %d."] = "Na końcu gry, twoje zdrowie wynasiło %d.", -- A_Space_Adventure:ice01
     ["At the start of the game each enemy hog has only the weapon that he is named after."] = "Na początku gry, każdy wrogi jeż ma tylko tę broń, po której jest nazwany.", -- A_Space_Adventure:death02
     ["Australia"] = "Australia", -- Continental_supplies
---      ["Available weapon specials:"] = "", -- Continental_supplies
+    ["Available weapon specials:"] = "Dostępne speciały broni:", -- Continental_supplies
     ["Average pilot"] = "Przeciętny pilot", -- User_Mission_-_RCPlane_Challenge
     ["Avoid bazookas, red and blue invaders."] = "Unikaj bazook, czerwonych i niebieskich najeźdźców.", -- Space_Invasion
     ["Avoid the mines!"] = "Unikaj min!", -- Basic_Training_-_Rope
@@ -161,7 +161,7 @@
     ["Back Breaker"] = "Łamacz Pleców", -- A_Classic_Fairytale:backstab
     ["Back in the village, after telling the villagers about the threat..."] = "Tymczasem w wiosce, po powiadomieniu mieszkańców o zagrożeniu...", -- A_Classic_Fairytale:united
     ["Back in the village, the two tribes finally started to live in harmony."] = "Tymczasem w wiosce, dwa plemienia w końcu zaczęły żyć w harmonii.", -- A_Classic_Fairytale:epil
-    ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
+--    ["Back Jump: [Backspace] ×2"] = "", -- Basic_Training_-_Movement
     ["Back Jumping (1/2)"] = "Skok w tył (1/2)", -- Basic_Training_-_Movement
     ["Back Jumping (2/2)"] = "Skok w tył (2/2)", -- Basic_Training_-_Movement
     ["Backstab"] = "Zdrada", -- A_Classic_Fairytale:backstab
@@ -178,7 +178,7 @@
     ["BARREL PLACEMENT MODE"] = "TRYB STAWIANIA BECZEK", -- HedgeEditor
     ["Barrier unlocked!"] = "Beczka odblokowana!", -- Basic_Training_-_Rope
     ["Baseballbat"] = "Kij bejsbolwy", -- Continental_supplies
---      ["Baseball bat specials cannot be used close to other hogs."] = "", -- Continental_supplies
+    ["Baseball bat specials cannot be used close to other hogs."] = "Speciały kija bejsbolowego nie mogą być użyte w pobliżu innych jeży.", -- Continental_supplies
     ["Baseball Bat with Ball"] = "Kij bejsbolowy z piłką", -- Knockball
     ["Base damage has been modified to 12 per shot."] = "Podstawowe obrażenia zostały zmodyfikowane do 12 na strzał.", -- Battalion
     ["Based on what you've learned, destroy the target on the girder and as always, land safely!"] = "Bazując na tym, co się nauczyłeś, zniszcz cel na belce i jak zawsze, wyląduj bezpiecznie!", -- Basic_Training_-_Flying_Saucer
@@ -195,7 +195,7 @@
     ["Batty"] = "Kijek",
     ["Bat your opponents through the|baskets and out of the map!"] = "Uderzaj swoich przeciwników|wyrzucając przez kosz, poza mapę!",
     ["Bazooka Battlefield"] = "Bazookowe pole bitwy", -- Bazooka_Battlefield
---      ["Bazooka Master"] = "", -- Basic_Training_-_Bazooka
+    ["Bazooka Master"] = "Mistrz bazooki", -- Basic_Training_-_Bazooka
     ["Bazookas are influenced by wind."] = "Wiatr ma wpływ na bazookę.", -- Basic_Training_-_Bazooka
     ["Bazooka Team"] = "Drużyna Bazooki", -- Basic_Training_-_Bazooka
     ["Bazooka Training"] = "Trening bazooki",
@@ -212,7 +212,7 @@
     ["Best team times: "] = "Najlepsze czasy drużyny: ", -- Racer, TechRacer
     ["Better get yourself another health crate to heal your wounds."] = "Lepiej zdobądź kolejną skrzynię ze zdrowiem, żeby uleczyć swoje rany.", -- Basic_Training_-_Movement
     ["Better luck next time!"] = "Więcej szczęścia następnym razem!", -- ClimbHome
---      ["Better Safe Than Sorry"] = "", -- A_Space_Adventure:desert02
+    ["Better Safe Than Sorry"] = "Lepiej dmuchać na zimne", -- A_Space_Adventure:desert02
     ["Beware, any damage taken will stay until you complete the moon's main mission"] = "Uważaj, jakiekolwiek otrzymane obrażenia zostaną, aż ukończysz księżycową misję", -- A_Space_Adventure:cosmos
     ["Beware of mines: They explode after 3 seconds."] = "Uważaj na miny: Wybuchają po 3 sekundach.", -- A_Classic_Fairytale:journey
     ["Beware of mines: They explode after 5 seconds."] = "Uważaj na miny: Wybuchają po 5 sekundach.", -- A_Classic_Fairytale:journey
@@ -251,11 +251,11 @@
     ["Bottom Feeder"] = "Pasożyt", -- Mutant
     ["Bounciness"] = "Odbijalność", -- Basic_Training_-_Grenade
     ["Bouncing Bomb"] = "Odbijająca się bomba", -- Basic_Training_-_Bazooka
---      ["Bouncy Boomerang"] = "", -- Continental_supplies
+    ["Bouncy Boomerang"] = "Odbijający się bumerang", -- Continental_supplies
     ["Bouncy Girder: [4]"] = "Odbijająca Belka: [4]", -- HedgeEditor
     ["Bouncy Land: [4]"] = "Odbijający Teren: [4]", -- HedgeEditor
     ["Bouncy Land"] = "Odbijający Teren", -- HedgeEditor
---      ["Bounty: Get 6 weapons for each kill (even on own hogs)."] = "", -- Continental_supplies
+    ["Bounty: Get 6 weapons for each kill (even on own hogs)."] = "Premia: Dostań 6 broni za każde zabójstwo (nawet na własnych jeżach).", -- Continental_supplies
     ["Bozo"] = "Bozo",
     ["Brain Blower"] = "Mózgorozwalacz", -- A_Classic_Fairytale:journey
     ["Brainiac"] = "Możdżak", -- A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
@@ -291,7 +291,7 @@
     ["But you said you'd let her go!"] = "Ale powiedziałeś, że ją wypuścisz!", -- A_Classic_Fairytale:journey
     ["But you saved me!"] = "Ale uratowałeś mnie!", -- A_Classic_Fairytale:queen
     ["By the way, not only bazookas will bounce on water, but also greandes and many other things."] = "Przy okazji, nie tylko bazooka odbija się od wody, ale rownież granaty i inne rzeczy.", -- Basic_Training_-_Bazooka
---      ["By the way, not only bazookas will bounce on water, but also grenades and many other things."] = "", -- Basic_Training_-_Bazooka
+    ["By the way, not only bazookas will bounce on water, but also grenades and many other things."] = "Przy okazji, nie tylko bazooki odbijają się od wody, ale również granaty i wiele innych rzeczy.", -- Basic_Training_-_Bazooka
     ["By the way, you can turn around without walking|by holding down Precise when you hit a walk control."] = "Przy okazji, możesz obracać się bez chodzenia|trzymając Precyzję, kiedy wciskasz przycisk chodzenia.", -- Basic_Training_-_Movement
     ["C-1"] = "C-1", -- portal
     ["C-2"] = "C-2", -- portal
@@ -335,7 +335,7 @@
     ["Chief Sandologist"] = "Naczelny Piaskolog", -- A_Space_Adventure:desert01
     ["Chikorita"] = "Chikorita",
     ["Choose Selection/Placement/Deletion: [Left], [Right]"] = "Wybierz Zaznaczanie/Ustawianie/Usuwanie: [Lewo], [Prawo]", -- HedgeEditor
---      ["Choose your continent wisely, as your decision will be permanent."] = "", -- Continental_supplies
+    ["Choose your continent wisely, as your decision will be permanent."] = "Wybierz swój kontynent mądrze, bo twoja decyzja będzie trwała.", -- Continental_supplies
     ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "Wybierz swoją stronę! Jeśli chcesz dołączyć do dziwnego mężczyzny, podejdź do niego.|W innym przypadku, odejdź od niego. Jeśli zdecydujesz się zaata... nieważne...", -- A_Classic_Fairytale:shadow
     ["Chunli"] = "Czunli",
     ["Clark Kent"] = "Clark Kent",
@@ -399,8 +399,8 @@
     ["Construction Station: Allows placement of|    girders, rubber, mines, sticky mines|    and barrels."] = "Stacja Konstrukcji: Pozwala na stawianie|    belek, gumy, min, min samoprzylepnych|    i beczek.", -- Construction_Mode
     ["Construction Station"] = "Stacja Konstrukcji", -- Construction_Mode
     ["Continental supplies"] = "Kontynentalne zaopatrzenie", -- Continental_supplies
---      ["Continent selection"] = "", -- Continental_supplies
---      ["Continents: Select a continent at the beginning."] = "", -- Continental_supplies
+    ["Continent selection"] = "Wybór kontynentu", -- Continental_supplies
+    ["Continents: Select a continent at the beginning."] = "Kontynenty: Wybierz kontynent na początku", -- Continental_supplies
     ["Control"] = "Kontrola", -- Control
     ["Control pillars to score points."] = "Kontroluj kolumny, by zdobyć punkty.",
     ["Controls: Hold the Attack key (space by default) to|fire the rope, then, once attached use:|Left and Right to swing the rope;|Up and Down to contract and expand."] = "Sterowanie: Przytrzymaj przycisk Ataku (domyślnie Spacja), by|wystrzelić linę, potem po zaczepieniu, użyj:|Lewo i Prawo, by rozhuśtać linę;|Góra i Dół, by skurczyć i rozszerzyć.", -- Basic_Training_-_Rope
@@ -427,7 +427,7 @@
     ["crate(s)"] = "skrzyń", -- SpeedShoppa
     ["Crazy Gravity: Gravity randomly changes within a range from %i%% to %i%% with a period of %s"] = "Szalona grawitacja: Grawitacja losowo zmienia się w zakresie od %i%% do %i%%, z okresem %s", -- Gravity
     ["Crazy Runner"] = "Szalony Biegacz", -- A_Space_Adventure:moon02
---      ["Cricket Time"] = "", -- Continental_supplies
+    ["Cricket Time"] = "Czas na krykieta", -- Continental_supplies
     ["Cricket time: [Fire away a 1 sec mine! ~ Cannot be fired close to another hog]"] = "Czas krykieta: [Wystrzel 1-sekundową minę! ~ Nie może być wystrzelone blisko innego jeża]", -- Continental_supplies
     ["CTF_Blizzard"] = "CTF Burza Śnieżna", -- CTF_Blizzard
     ["Cursor: Build structure"] = "Kursor: Zbuduj strukturę", -- Construction_Mode
@@ -438,7 +438,7 @@
     ["Cybernetic Empire"] = "Cybernetyczne Imperium",
     ["Cyborg. It's what the aliens call themselves."] = "Cyborgi. Tak nazywają siebie ci kosmici.", -- A_Classic_Fairytale:enemy
     ["Dahmer"] = "Damer", -- A_Classic_Fairytale:backstab
-    ["Daisy"] = "Stokrotka",
+    ["Daisy"] = "Daisy",
     ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "Młody!!! Złaź z mojej głowy!!!",
     ["DAMMIT, ROOKIE!"] = "Żółtodziobie!",
     ["+%d ammo"] = "+%d amunicji", -- Battalion
@@ -453,8 +453,8 @@
     ["%d/%d"] = "%d/%d", -- SpeedShoppa
     ["Deadly Grape"] = "Zabójczy Winogron", -- A_Space_Adventure:fruit02
     ["Deadweight"] = "Balast",
---      ["Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back."] = "", -- Continental_supplies
---      ["Deals 15 damage to all enemies in the circle."] = "", -- Continental_supplies
+    ["Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back."] = "Zadaj 15 obrażeń + 10% zdrowia twojego jeża wszystkim jeżom dookoła ciebie i dostań 2/3 z powrotem.", -- Continental_supplies
+    ["Deals 15 damage to all enemies in the circle."] = "Zadaje 15 obrażeń wszystkim wrogom w kole.", -- Continental_supplies
     ["Deer"] = "Jeleń",
     ["Defeat all enemies!"] = "Pokonaj wszystkich wrogów!", -- portal
     ["Defeat Professor Hogevil!"] = "Pokonaj Profesora Jeżozło!", -- A_Space_Adventure:death01
@@ -473,7 +473,7 @@
     ["Dense Cloud"] = "Gęsta Chmura", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
     ["Dense Cloud must have already told them everything..."] = "Gęsta Chmura pewnie im już wszystko powiedział...", -- A_Classic_Fairytale:shadow
     ["Dense Cloud?! What are you doing?!"] = "Gęsta Chmura?! Co ty robisz?!", -- A_Classic_Fairytale:queen
-    ["Depleted Kamikaze! +5 points!"] = "Wyczerpany Kamikaze! +% punktów", -- Space_Invasion
+    ["Depleted Kamikaze! +5 points!"] = "Wyczerpany Kamikaze! +5 punktów", -- Space_Invasion
     ["Derp"] = "Derp", -- User_Mission_-_Nobody_Laugh
     ["Desert Storm"] = "Pustynna Burza",
     ["Destroy all targets with no more than 10 bazookas."] = "Zniszcz wszystkie cele używając nie więcej niż 10 bazook.", -- Basic_Training_-_Bazooka
@@ -504,7 +504,7 @@
     ["Dimitry"] = "Dymitr",
     ["%d invaders have been destroyed in this game."] = "%d najeźdźców zostało zniszczonych w tej grze.", -- Space_Invasion
     ["Disabled"] = "Wyłączone", -- WxW
---      ["Disguise as a Rockhopper Penguin"] = "", -- Continental_supplies
+    ["Disguise as a Rockhopper Penguin"] = "Przebież się za Pingwina Rakietoskoczka", -- Continental_supplies
     ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "Przebranie za pingwina skalnegi: [Zamień miejsce z losowym wrogim jeżem w kole]", -- Continental_supplies
     ["Displacer"] = "Wypieracz",
     ["Disqualified!"] = "Zdyskwalifikowany!", -- User_Mission_-_That_Sinking_Feeling
@@ -546,7 +546,7 @@
     ["Dr. Jenner"] = "Dr Dżener",
     ["Dr. Jung"] = "Dr Dżang",
     ["Drone Hunter! +10 points!"] = "Łowca dronów! +10 punktów!", -- Space_Invasion
---      ["Drop a ball of dirt which turns into a|cluster on impact. Doesn’t end turn."] = "", -- Continental_supplies
+    ["Drop a ball of dirt which turns into a|cluster on impact. Doesn’t end turn."] = "Upuść kulę ziemi, która przy uderzeniu|zamieni się w odłamek. Nie kończy tury.", -- Continental_supplies
     ["Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"] = "Upuść bombę: [Upuść trochę heroicznego wiatru, który przy uderzeniu zamieni się w bombę]", -- Continental_supplies
     ["- Dropped flags may be returned or recaptured"] = "- Upuszczone flagi mogą być zwrócone lub ponownie przejęte", -- Capture_the_Flag
     ["Dropping a weapon while in water would just drown it, but launching one would work."] = "Upuszczenie broni pod wodą by ją utopiłą, ale wystrzelenie zadziała.", -- Basic_Training_-_Flying_Saucer
@@ -575,7 +575,7 @@
     ["Duration"] = "Czas trwania", -- Continental_supplies
     ["During the final testing of the device an accident happened."] = "Podczas finałowych testów urządzenia zdarzył się wypadek.", -- A_Space_Adventure:moon02
     ["During the game you can get new RC planes by collecting the weapon crates."] = "Podczas gry możesz zdobyć nowe samolociki, zbierając skrzynie z broniami.", -- A_Space_Adventure:desert03
---      ["Dust Storm"] = "", -- Continental_supplies
+    ["Dust Storm"] = "Burza pyłowa", -- Continental_supplies
     ["Dust storm: [Deals 15 damage to all enemies in the circle]"] = "Burza pyłowa: [Zadaje 15 obrażeń każdemu wrogowi w kole]", -- Continental_supplies
     ["Each time you destroy all the targets on your current level you'll get teleported to the next level."] = "Za każdym razem, gdy zniszczysz wszystkie cele na twoim aktualnym poziomie, zostaniesz przeteloportowany do następnego poziomu.", -- A_Space_Adventure:desert03
     ["Each time you play this missions enemy hogs will play in a random order."] = "Za każdym razem, gdy grasz w tę misję, wrogie jeże będą grały w losowym porządku.", -- A_Space_Adventure:death02
@@ -654,10 +654,10 @@
     ["Finish waypoint placement"] = "Zakończ stawianie punktów kontrolnych", -- Racer
     ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "Ukończ swój trening|Porada: Animacje mogą być pominięte przyciskiem [Precyzja]", -- A_Classic_Fairytale:first_blood
     ["Finite Ropes"] = "Skończone liny", -- Basic_Training_-_Rope
---      ["Fire a rocket with napalm."] = "", -- Continental_supplies
+    ["Fire a rocket with napalm."] = "Strzel rakietą z napalmem.", -- Continental_supplies
     ["Fire: [Precise]"] = "Strzel: [Precyzja]", -- Space_Invasion, Tumbler
---      ["Fire some exploding medicine that will heal 15 health to all hogs in its effect radius."] = "", -- Continental_supplies
---      ["Fire your hedgehog like a sticky mine."] = "", -- Continental_supplies
+    ["Fire some exploding medicine that will heal 15 health to all hogs in its effect radius."] = "Wystrzel eksplodujące lekarstwo, które wyleczy 15 zdrowia wszystkim jeżom w promieniu efektu.", -- Continental_supplies
+    ["Fire your hedgehog like a sticky mine."] = "Wystrzel swojego jeża jak minę samoprzylepną.", -- Continental_supplies
     ["First aid kits?!"] = "Apteczki?", -- A_Classic_Fairytale:united
     ["First Blood"] = "Pierwsza krew", -- A_Classic_Fairytale:first_blood
     ["- First clan to capture the flag wins"] = "- Pierwszy klan, który przejmie flagę, wygrywa", -- Capture_the_Flag
@@ -672,7 +672,7 @@
     ["Flag returned!"] = "Flaga odzyskana!",
     ["Flamer"] = "Miotacz ognia",
     ["Flaming Worm"] = "Płomienisty Robal", -- A_Classic_Fairytale:backstab
---      ["Flare"] = "", -- Continental_supplies
+    ["Flare"] = "Flara", -- Continental_supplies
     ["Flawless victory!"] = "Bezbłędne zwycięstwo!", -- User_Mission_-_RCPlane_Challenge
     ["Flee: Press [Jump]"] = "Ucieknij: Wciśnij [Skok]", -- A_Space_Adventure:fruit01
     ["Flesh for Brainz"] = "Mięso dla Mózgów", -- A_Classic_Fairytale:journey
@@ -680,7 +680,7 @@
     ["Flying Saucer Training"] = "Trening latającego talerza", -- Basic_Training_-_Flying_Saucer
     ["Fly into space to fight off the invaders with barrels!"] = "Leć w kosmos, by odeprzeć najeźdźców beczkami!", -- Space_Invasion
     ["Fly to the meteorite and detonate the explosives"] = "Poleć do meteorytu i zdetonuj ładunki", -- A_Space_Adventure:cosmos
---      ["Forgetfulness: You will lose all your weapons each turn."] = "", -- Continental_supplies
+    ["Forgetfulness: You will lose all your weapons each turn."] = "Zapominalstwo: W każdej turze stracisz wszystkie swoje bronie.", -- Continental_supplies
     ["For the next crate, you have to do back jumps."] = "Do następnej skrzyni musisz zrobić skoki w tył.", -- Basic_Training_-_Movement
     ["Four Eyes"] = "Czterooki",
     ["Frank"] = "Franek", -- User_Mission_-_Nobody_Laugh
@@ -713,7 +713,7 @@
     ["Gear information hidden"] = "Informacje o rzeczach ukryte", -- HedgeEditor
     ["Gear information shown"] = "Informacje o rzeczach pokazane", -- HedgeEditor
     ["Gear Placement Tool"] = "Narzędzie Ustawiania Rzeczy", -- HedgeEditor
---      ["General information:"] = "", -- Continental_supplies
+    ["General information:"] = "Ogólne informacje:", -- Continental_supplies
     ["General information"] = "Ogólne informacje", -- Continental_supplies
     ["General Lemon"] = "Generał Cytryna", -- A_Space_Adventure:fruit01
     ["Generator: Generates energy."] = "Generator: Generuje energię.", -- Construction_Mode
@@ -793,11 +793,11 @@
     ["Great! You will be contacted soon for assistance."] = "Świetnie! Niedługo skontaktujemy się z tobą po pomoc.", -- A_Classic_Fairytale:shadow
     ["Green Bananas won!"] = "Zielone Banany wygrywają!", -- A_Space_Adventure:fruit01
     ["Green Bananas"] = "Zielone Banany", -- A_Space_Adventure:fruit01
---      ["Green double rings also give you a new flying saucer."] = "", -- A_Space_Adventure:ice02
+    ["Green double rings also give you a new flying saucer."] = "Zielone podwójne pierścienie również dają nowy latający talerz.", -- A_Space_Adventure:ice02
     ["Green Hog Grape"] = "Zielonojeżowy Winogron", -- A_Space_Adventure:fruit01
     ["Green hogs won't intentionally hurt you."] = "Zielone jeże nie zaatakują cię umyślnie.", -- A_Space_Adventure:fruit01
     ["Greenhorn"] = "Żółtodziób", -- User_Mission_-_RCPlane_Challenge
---      ["Green Lipstick Bullet"] = "", -- Continental_supplies
+    ["Green Lipstick Bullet"] = "Pocisk zielonej szminki", -- Continental_supplies
     ["Green lipstick bullet: [Poisonous, deals no damage]"] = "Zielony szminkowy pocisk: [Zatruty, nie zadaje obrażeń]", -- Continental_supplies
     ["Green"] = "Zielony",
     ["Greetings, cloudy one!"] = "Witaj, chmurzysty", -- A_Classic_Fairytale:shadow
@@ -857,7 +857,7 @@
     ["HEDGEEDITOR"] = "JEŻEDYTOR", -- HedgeEditor
     ["HedgeEditor tool"] = "Narzędzie JeżEdytora", -- HedgeEditor
     ["Hedgehog"] = "Jeż",
---      ["Hedgehog Projectile"] = "", -- Continental_supplies
+    ["Hedgehog Projectile"] = "Pocisk jeżowy", -- Continental_supplies
     ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "Jeżowy pocisk: [Wystrzel swojego jeża jak minę samoprzylepną]", -- Continental_supplies
     ["Hedgehogs can not be deleted."] = "Jeże nie mogą być usunięte", -- HedgeEditor
     ["Hedgehogs will be revived after their death."] = "Jeże zostaną ożywione po śmierci.", -- Mutant
@@ -889,7 +889,7 @@
     ["Here we go!"] = "No to ruszamy!", -- A_Space_Adventure:moon01
     ["Here you will find the current mission instructions."] = "Tutaj znajdziesz instrukcje do aktualnej misji", -- Basic_Training_-_Movement
     ["Here you will learn how to fly the flying saucer|and get so learn some cool tricks."] = "Tutaj poznasz jak lata się latającym talerzem|i będziesz mieć szansę poznać odlotowe sztuczki.", -- Basic_Training_-_Flying_Saucer
---      ["Heroic Wind"] = "", -- Continental_supplies
+    ["Heroic Wind"] = "Heroiczny wiatr", -- Continental_supplies
     ["Hero Team"] = "Drużyna Bohatera", -- User_Mission_-_The_Great_Escape
     ["He's so brave..."] = "Jest taki odważny...", -- A_Classic_Fairytale:first_blood
     ["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device."] = "Był asystentem laboratoryjnym Dr Dobrojeża, wynalazcy urządzenia antygrawitacyjnego.", -- A_Space_Adventure:moon02
@@ -915,7 +915,7 @@
     ["Hi! Nice to meet you."] = "Cześć! Miło cię poznać.", -- A_Space_Adventure:ice01
     ["Hint: Double Jump - Press [Backspace] twice"] = "Wskazówka: Podwójny skok - Wciśnij [Backspace] dwa razy", -- A_Classic_Fairytale:first_blood
     ["Hint: Drilling holes should solve everything."] = "Wywiercenie dziur powinno wszystko rozwiązać.", -- A_Classic_Fairytale:family
---      ["Hint: Hold down [M] to review the mission texts."] = "", -- A_Classic_Fairytale:first_blood
+    ["Hint: Hold down [M] to review the mission texts."] = "Wskazówka: Przytrzymaj [M], by zobaczyć teksty misji.", -- A_Classic_Fairytale:first_blood
     ["Hint: If this mission panel disappears, you can|see it again by hitting the Pause or Quit key."] = "Wskazówka: Jeśli panel misji zniknie, możesz zobaczyć go ponownie, wciskając Pauzę lub Wyjście.", -- Basic_Training_-_Movement
     ["Hint: It might be a good idea to place a girder before starting to drill. Just saying."] = "Wskazówka: To może być dobry pomysł, by ustawić belki przed rozpoczęciem wiercenia. Tylko mówię.", -- A_Classic_Fairytale:family
     ["Hint: It might be easier if you vary the angle only slightly."] = "Wskazówka: Może być łatwiej, jeśli zmienisz kąt tylko trochę.", -- Basic_Training_-_Bazooka
@@ -926,8 +926,8 @@
     ["Hint: Select the low gravity and press [Fire]."] = "Porada: Wybierz niską grawitację i wciśnij [Strzał].", -- A_Classic_Fairytale:journey
     ["Hint: %s needs to get really close to the princess!"] = "Wskazówka: %s potrzebuje dostać się naprawdę blisko księżniczki!", -- A_Classic_Fairytale:family
     ["Hint: The rope only bends around objects.|When it doesn't hit anything, it's always straight."] = "Wskazówka: Lina owija się jedynie wokół obiektów.|Jeśli nic nie uderzy, zawsze jest prosta.", -- Basic_Training_-_Rope
---      ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "", -- Basic_Training_-_Movement
---      ["Hint: Use the quit key to see the team’s continent."] = "", -- Continental_supplies
+    ["Hint: To jump higher, wait a bit before you hit “High Jump” a second time."] = "Wskazówka: By skoczyć wyżej, poczekaj trochę zanim ponownie wciśniesz \"Wysoki skok\".", -- Basic_Training_-_Movement
+    ["Hint: Use the quit key to see the team’s continent."] = "Porada: Uzyj klawisza wyjścia, by zobaczyć kontynent drużyny", -- Continental_supplies
     ["Hint: When you shorten the rope, you move faster!|And when you lengthen it, you move slower."] = "Wskazówka: Kiedy skrócisz linę poruszasz się szybciej!|A kiedy ją wydłużysz, poruszasz się wolniej.", -- Basic_Training_-_Rope
     ["--- Hint ---"] = "--- Wskazówka ---", -- Battalion
     ["Hint: you might want to stay out of sight and take all the crates...|"] = "Porada: Możesz chcieć pozostać poza widokiem i zabrać wszystkie skrzynie...|", -- A_Classic_Fairytale:journey
@@ -1058,7 +1058,7 @@
     ["If you help us you can keep the device if you find it but we'll keep everything else."] = "Jeśli nam pomożesz, możesz zatrzymać urządzenie jeśli je znajdziesz, ale zatrzymay wszytko inne.", -- A_Space_Adventure:fruit02
     ["If you hurt an enemy, you'll get one third of the damage dealt."] = "Jeśli skrzywdzisz wroga, otrzymasz jedną trzecią zadanych obrażeń.", -- A_Space_Adventure:death02
     ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "Jeśli zranisz jeża, otrzymasz 35% zadanych obrażeń.", -- A_Space_Adventure:death02
---      ["If you just don’t care …"] = "", -- Continental_supplies
+    ["If you just don’t care …"] = "Jeśli ci nie zależy...", -- Continental_supplies
     ["If you kill a hedgehog with the respective weapon your health points will be set to 100."] = "Jeśli zabijesz jeża odpowiednią bronią, twoje zdrowie zostanie ustawione na 100.", -- A_Space_Adventure:death02
     ["If you kill an enemy, your health will be set to 100."] = "Jeśli zabijesz wroga, twoje zdrowie zostanie ustawione na 100.", -- A_Space_Adventure:death02
     ["If you know what I mean..."] = "Jeśli wiesz co mam na myśli...", -- A_Classic_Fairytale:shadow
@@ -1112,7 +1112,7 @@
     ["I'm here to help you rescue her."] = "Jestem tu pomóc ci ją uratować.", -- A_Classic_Fairytale:family
     ["I'm living a dream!"] = "Przeżywam sen!", -- A_Classic_Fairytale:queen
     ["I'm not sure about that!"] = "Nie jestem tego pewny!", -- A_Classic_Fairytale:united
---      ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "", -- Basic_Training_-_Movement
+    ["IMPORTANT: To see the mission panel again, hold the mission panel key."] = "WAŻNE: By ponownie zobaczyć panel misji, przytrzymaj klawisz panelu misji.", -- Basic_Training_-_Movement
     ["IMPORTANT: To see the mission panel again, use the quit or pause key."] = "WAŻNE: By zobaczyć panel misji ponownie, użyj przycisku wyjścia lub pauzy.", -- Basic_Training_-_Movement
     ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "Imponujące... nadal jesteś suchy, jak zwłoki jastrzębia po tygodniu na pustyni...", -- A_Classic_Fairytale:first_blood
     ["%i ms"] = "%i ms", -- Gravity
@@ -1124,7 +1124,7 @@
     ["I'm the spy! I've been giving you out!"] = "Jestem szpiegiem! Wydawałam was!", -- A_Classic_Fairytale:queen
     ["In am also entrusting you with some rope."] = "Powierzam ci również trochę liny.", -- A_Space_Adventure:cosmos
     ["In case you haven't noticed, I'm a woman, too!"] = "W razie, gdybyś nie zauważył, też jestem kobietą!", -- A_Classic_Fairytale:queen
---      ["Increase the dust storm damage by sacrificing|your invulnerable ammo."] = "", -- Continental_supplies
+    ["Increase the dust storm damage by sacrificing|your invulnerable ammo."] = "Zwiększ obrażenia burzy pyłowej poświęcając|swoją niezniszczalną amunicję.", -- Continental_supplies
     ["Incredible..."] = "Niesamowite...", -- A_Classic_Fairytale:shadow
     ["Indestructible Girder: [2]"] = "Niezniszczalna Belka: [2]", -- HedgeEditor
     ["Indestructible Land: [2]"] = "Niezniszczalny Teren: [2]", -- HedgeEditor
@@ -1136,7 +1136,7 @@
     ["I need to prevent their arrival!"] = "Muszę zapobiec ich przybyciu!", -- A_Classic_Fairytale:backstab
     ["I need to warn the others."] = "Muszę ostrzec innych.", -- A_Classic_Fairytale:backstab
     ["In fact, you are the only one that's been acting strangely."] = "Tak naprawdę, jesteś jedynym, który dziwnie się zachowywał.", -- A_Classic_Fairytale:backstab
---      ["Initial health: %d"] = "", -- Continental_supplies
+    ["Initial health: %d"] = "Początkowe zdrowie: %d", -- Continental_supplies
     ["Initiate escape wish!"] = "Inicjalizuj życzenie ucieczki!", -- A_Classic_Fairytale:queen
     ["In order to get to the other side, you need to get rid of the crates first."] = "Żeby dostać się na drugą stronę, musisz pozbyć się najpierw skrzyń.", -- A_Classic_Fairytale:dragon
     ["Insanity!"] = "Szaleństwo!", -- Mutant
@@ -1287,7 +1287,7 @@
     ["Lassard"] = "Draniówa",
     ["Last Resort: Having less than 25% base health gives kamikaze"] = "Ostatnia Deska Ratunku: Posiadanie mniej niż 25% bazowego zdrowia daje kamikaze", -- Battalion
     ["Last Target!"] = "Ostatni cel!",
---      ["Launch a bouncy ball which explodes into a crate."] = "", -- Continental_supplies
+    ["Launch a bouncy ball which explodes into a crate."] = "Wystrzel odbijającą się piłkę, która eksloduje w skrzynię.", -- Continental_supplies
     ["Launch some bazookas to destroy the targets!"] = "Wystrzel trochę bazook i zniszcz cele!", -- Basic_Training_-_Bazooka
     ["Leaderbot"] = "Dowódcobot", -- A_Classic_Fairytale:queen
     ["Leader"] = "Dowódca", -- A_Classic_Fairytale:enemy
@@ -1333,12 +1333,12 @@
     ["Little did they know that this hunt will mark them forever..."] = "Nie zdają sobie sprawy, że to polowanie naznaczy ich na zawsze...", -- A_Classic_Fairytale:shadow
     ["Little Obstacle Course"] = "Mały tor przeszkód", -- Basic_Training_-_Rope
     ["Lively Lifeguard"] = "Żwawy Ratownik",
---      ["Lonely Cries"] = "", -- Continental_supplies
-    ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "Samotne Łkanie: [Podnosi wodę, jeśli nie ma jeża w kole i zadaje 6 obrażeń każdemu wrogiemu jeżowi.]", -- Continental_supplies
+    ["Lonely Cries"] = "Samotne łkanie", -- Continental_supplies
+    ["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"] = "Samotne łkanie: [Podnosi wodę, jeśli nie ma jeża w kole i zadaje 6 obrażeń każdemu wrogiemu jeżowi.]", -- Continental_supplies
     ["Lonely Hog"] = "Samotny Jeż", -- ClimbHome
     ["Long Jump: [Enter]"] = "Długi skok: [Enter]", -- Basic_Training_-_Movement
     ["Long Live The Queen"] = "Niech żyje królowa", -- A_Classic_Fairytale:queen
---      ["Look around: [Mouse movement]"] = "", -- Basic_Training_-_Movement
+    ["Look around: [Mouse movement]"] = "Rozejrzyj się: [Ruch myszą]", -- Basic_Training_-_Movement
     ["Look, boss! There is the target!"] = "Zobacz, szefie! Tam jest cel!", -- A_Space_Adventure:moon01
     ["Look, I had no choice!"] = "Słuchaj, nie miałem wyboru!", -- A_Classic_Fairytale:backstab
     ["Look out! There's more of them!"] = "Uważaj! Jest ich więcej!", -- A_Classic_Fairytale:backstab
@@ -1374,7 +1374,7 @@
     ["Maybe you should try easier waypoints next time."] = "Może następnym razem powinieneś spróbować łatwiejszych punktów kontrolnych.", -- Racer
     ["May the spirits aid you in all your quests!"] = "Niech dusze pomogą wam w waszych zadaniach!", -- A_Classic_Fairytale:backstab
     ["Meals"] = "Mils",
---      ["Medicine"] = "", -- Continental_supplies
+    ["Medicine"] = "Lekarstwo", -- Continental_supplies
     ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "Lekarstwo: [Wystrzel trochę eksplodującego leku, który uleczy wszystkie jeże w jej zasięgu]", -- Continental_supplies
     ["Medic"] = "Medyk", -- Battalion
     ["MEDIUM"] = "ŚREDNI", -- Continental_supplies
@@ -1403,7 +1403,7 @@
     ["Mission failed!"] = "Misja zakończona niepowodzeniem!", -- Big_Armory
     ["Mission failure in %d s"] = "Porażka misji w %d s", -- Big_Armory
     ["Mission lost!"] = "Misja stracona!", -- Basic_Training_-_Grenade
---      ["Mission panel: [M]"] = "", -- Basic_Training_-_Movement
+    ["Mission panel: [M]"] = "Panel misji: [M]", -- Basic_Training_-_Movement
     ["Mission Panel"] = "Panel misji", -- Basic_Training_-_Movement
     ["MISSION SUCCESSFUL"] = "MISJA POWIODŁA SIĘ",
     ["Mission won!"] = "Misja wygrana!", -- Basic_Training_-_Grenade
@@ -1444,7 +1444,7 @@
     ["Nameless Heroes"] = "Bezimienni Bohaterowie",
     ["Nancy Screw"] = "Nansi Gwóźdź", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
     ["Napalm"] = "Napalm", -- Construction_Mode
---      ["Napalm Rocket"] = "", -- Continental_supplies
+    ["Napalm Rocket"] = "Rakieta napalmowa", -- Continental_supplies
     ["Napalm rocket: [Fire a bomb with napalm!]"] = "Napalmowa rakieta: [Wystrzel bombę z napalmem!]", -- Continental_supplies
     ["Naranja Jed"] = "Narandża Dżed", -- A_Space_Adventure:fruit01
     ["Natives"] = "Tubylcy", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
@@ -1474,7 +1474,7 @@
     ["Nobody Laugh"] = "Nikt się nie śmieje", -- User_Mission_-_Nobody_Laugh
     ["Nobody managed to finish the race. What a shame!"] = "Nikomu nie udało się ukończyć wyścigu. Co za wstyd!", -- Racer, TechRacer
     ["Nobody takes walks every day!"] = "Nikt nie chadza na spacery każdego dnia!", -- A_Classic_Fairytale:epil
---      ["No continent selected"] = "", -- Continental_supplies
+    ["No continent selected"] = "Nie wybrano kontynentu", -- Continental_supplies
     ["No, I am afraid I had to travel light."] = "Nie, obawiam się, że musiałem podróżować bez bagażu.", -- A_Space_Adventure:moon01
     ["No, I came back to help you out..."] = "Nie, wróciłem, by ci pomóc...", -- A_Classic_Fairytale:shadow
     ["No...I wonder where they disappeared?!"] = "Nie... ciekawe, gdzie oni zniknęli?!", -- A_Classic_Fairytale:journey
@@ -1498,7 +1498,7 @@
     ["Note: Some weapons have a second option (See continent information). Find and use them with the \""] = "Notka: Niektóre bronie mają drugą opcję (zobacz informację o kontynencie). Znajdź je i użyj przez \"", -- Continental_supplies
     ["Note: Some weapons have a second option (See continent information). Find and use them with the \"%s\" key."] = "Notka: Niektóre bronie mają drugą opcję (Patrz informacje kontynentowe). Znajdź je i użyj przyciskiem \"%s\".", -- Continental_supplies
     ["Note: This basic training assumes default controls."] = "Notka: Ten podstawowy trening zakłada domyślne sterowanie.", -- Basic_Training_-_Movement
---      ["Note: Walking is disabled in this mission."] = "", -- Basic_Training_-_Grenade
+    ["Note: Walking is disabled in this mission."] = "Uwaga: Chodzenie jest w tej misji wyłączone.", -- Basic_Training_-_Grenade
     ["Note: We only give you grenades if you stay in your flying saucer."] = "Notka: Dajemy ci granaty tylko, gdy jesteśw swoim spodku.", -- Basic_Training_-_Flying_Saucer
     ["Nothing of interest has happened."] = "Nic interesującego się nie wydarzyło.", -- Space_Invasion
     ["Not now, Fiery Water!"] = "Nie teraz, Ognista Wodo!", -- A_Classic_Fairytale:backstab
@@ -1519,7 +1519,7 @@
     ["Now how do I get on the other side?!"] = "Teraz, jak mam dostać się na drugą stronę?", -- A_Classic_Fairytale:dragon
     ["Now I have to climb these trees"] = "Teraz muszę wspiąć się na te drzewa", -- A_Space_Adventure:cosmos
     ["No Wind Influcence"] = "Bez wpływu wiatru", -- Basic_Training_-_Grenade
---      ["No Wind Influence"] = "", -- Basic_Training_-_Grenade
+    ["No Wind Influence"] = "Brak wpływu wiatru", -- Basic_Training_-_Grenade
     ["Now let's try to drop weapons while flying!"] = "Teraz spróbujmy zrzucić bronie latając!", -- Basic_Training_-_Flying_Saucer
     ["Now listen carefully! Below us there are tunnels that have been created naturally over the years"] = "Teraz słuchaj uważnie! Pod nami są tunele, które zostały naturalnie stworzone przez lata.", -- A_Space_Adventure:desert01
     ["Now try to get out of this bounce house|and take the next crate."] = "Teraz spróbuj wydostać się z tego odbijającego|domu i weź następną skrzynię.", -- Basic_Training_-_Movement
@@ -1605,7 +1605,7 @@
     ["Paul McHoggy"] = "Paul McJeżu", -- A_Space_Adventure:ice01, A_Space_Adventure:ice02
     ["Pause: [P]"] = "Pauza: [P]", -- Basic_Training_-_Movement
     ["Penalty: If you violate above rule, you have to skip in the next turn."] = "Kara: Jeśli naruszysz powyższą zasadę, będziesz musiał opuścić następną turę.", -- WxW
---      ["Penguin Roar"] = "", -- Continental_supplies
+    ["Penguin Roar"] = "Ryk pingwina", -- Continental_supplies
     ["Penguin roar: [Deal 15 damage + 10% of your hog’s health to all hogs around you and get 2/3 back]"] = "Ryk pingwina: [Zadaj 15 obrażeń + 10% zdrowia twojego jeża wszystkim jeżom wokół ciebie i otrzymaj 2/3 z powrotem]", -- Continental_supplies
     ["Penguin roar: [Deal 15 damage + 10% of your hogs health to all hogs around you and get 2/3 back]"] = "Ryk pingwina: [Zadaje 15 obrażeń + 10% zdrowia twojego jeża wszystkim jeżom dookoła i dostaje 2/3 z powrotem]", -- Continental_supplies
     ["Perfect! Now try to get the next crate without hurting yourself!"] = "Idealnie! Teraz spróbuj zdobyć następną skrzynię bez zranienia się!", -- A_Classic_Fairytale:first_blood
@@ -1653,7 +1653,7 @@
     ["- Place your clan flag at the end of your first turn"] = "- Ustaw flagę swojego klanu na końcu swojej pierwszej tury", -- Capture_the_Flag
     ["- Place your team flag at the end of your first turn"] = "- Postaw flagę twojej drużyny na końcu swojej pierwszej tury", -- Capture_the_Flag
     ["Planes used: %d"] = "Użyte samoloty: %d", -- User_Mission_-_RCPlane_Challenge
-    ["Planes Used:"] = "Użyte Samoloty: %d", -- User_Mission_-_RCPlane_Challenge
+    ["Planes Used:"] = "Użyte Samoloty:", -- User_Mission_-_RCPlane_Challenge
     ["Planes Used"] = "Użyte Samoloty", -- User_Mission_-_RCPlane_Challenge
     ["Planets with all missions completed will be marked with two flowers."] = "Planety ze wszystkimi misjami ukończonymi będą zaznaczone dwoma kwiatkami.", -- A_Space_Adventure:cosmos
     ["Planets with completed main missions will be marked with a flower."] = "Planety z ukończonymi głównymi misjami będą zaznaczone kwiatkiem.", -- A_Space_Adventure:cosmos
@@ -1674,7 +1674,7 @@
     ["points"] = "punkty", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
     ["point(s)"] = "punkt(y)", -- TargetPractice, Mutant
     ["Poisonous Apple"] = "Zatrute Jabłko", -- A_Space_Adventure:fruit02
---      ["Poisonous, deals no damage."] = "", -- Continental_supplies
+    ["Poisonous, deals no damage."] = "Zatrute, nie zadaje obrażeń.", -- Continental_supplies
     ["Poison"] = "Truciciel",
     ["Pokémon"] = "Pokémon",
     ["Poor %s (%s) died %d times."] = "Biedny %s (%s) umarł %d razy.", -- Mutant
@@ -1694,10 +1694,10 @@
     ["Prepare to flee!"] = "Przygotuj się do ucieczki!", -- A_Space_Adventure:cosmos
     ["Prepare yourself"] = "Przygotuj się",
     ["Press [Attack] (space bar by default) to start,|repeadedly tap the up, left and right movement keys to accelerate."] = "Wciśnij [Atak] (domyślnie spacja), by zacząć,|wielokrotnie wciskaj góra, lewo i prawo, by przyśpieszyć.", -- Basic_Training_-_Flying_Saucer
---      ["Press [Attack] (space bar by default) to start,|repeatedly tap the up, left and right movement keys to accelerate."] = "", -- Basic_Training_-_Flying_Saucer
+    ["Press [Attack] (space bar by default) to start,|repeatedly tap the up, left and right movement keys to accelerate."] = "Wciśnij [Atak] (domyślnie spacja), by zacząć,|wciśnij wielokrotnie przyciski ruchu w górę, lewo i prawo, by przyśpieszyć.", -- Basic_Training_-_Flying_Saucer
     ["Press [Attack] to begin."] = "Wciśnij [Atak], by zacząć.", -- A_Classic_Fairytale:first_blood
---      ["Press [Attack] to confirm."] = "", -- Continental_supplies
---      ["Press [Attack] to select this continent!"] = "", -- Continental_supplies
+    ["Press [Attack] to confirm."] = "Wciśnik [Atak], by zatwierdzić.", -- Continental_supplies
+    ["Press [Attack] to select this continent!"] = "Wciśnij [Atak], by wybrać ten kontynent!", -- Continental_supplies
     ["Press [Left] and [Right] to change the difficulty."] = "Wciśnij [Lewo] i [Prawo], by zmienić trudność.", -- A_Classic_Fairytale:first_blood
     ["Press [Left] or [Right] to move around, [Enter] to jump"] = "Wciśnij [Lewo] lub [Prawo], by poruszaćsię, [Enter] by skoczyć.", -- A_Classic_Fairytale:first_blood
     ["Press [Long jump] to accept this configuration and begin placing hedgehogs."] = "Wciśnij [Długi skok] by zaakceptować tę konfigurację i zacząć ustawiać jeże.", -- WxW
@@ -1705,7 +1705,7 @@
     ["Press [Precise] to skip intro"] = "Naciśnij [Precyzja] by pominąć intro",
     ["Press [Up] and [Down] to move between menu items.|Press [Attack], [Left], or [Right] to toggle."] = "Wciśnij [Góra] i [Dół], by poruszać się między pozycjami menu.|Wciśnij [Atak], [Lewo] lub [Prawo], by przełączyć.", -- WxW
     ["Prestigious Pilot"] = "Prestiżowy pilot", -- User_Mission_-_RCPlane_Challenge
---      ["Princess"] = "", -- A_Classic_Fairytale:family, A_Classic_Fairytale:journey
+    ["Princess"] = "Księżniczka", -- A_Classic_Fairytale:family, A_Classic_Fairytale:journey
     ["Princess Peach"] = "Księżniczka Peach",
     ["Private Nolak"] = "Szeregowiec Nolak", -- Target_Practice_-_Cluster_Bomb
     ["Problems, dude? Chillax!"] = "Problem, koleś? Wrzuć na luz!", -- A_Classic_Fairytale:epil
@@ -1734,7 +1734,7 @@
     ["Raging Buffalo"] = "Wściekły Bawół", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
     ["Ramesses"] = "Ramzes",
     ["Ramon"] = "Ramon", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
---      ["Random continent"] = "", -- Continental_supplies
+    ["Random continent"] = "Losowy kontynent", -- Continental_supplies
     ["Rank: %s"] = "Ranga: %s", -- User_Mission_-_RCPlane_Challenge
     ["Razac"] = "Razak", -- portal
     ["RC Plane Challenge"] = "Wyzwanie Samolotowe", -- User_Mission_-_RCPlane_Challenge
@@ -1769,14 +1769,14 @@
     ["Return to Leaks A Lot!"] = "Wróć do Sporego Przecieka!", -- A_Classic_Fairytale:shadow
     ["Return to the mission menu by pressing the \"Go back\" button."] = "Wróć do menu misji, wciskając przycisk \"Wstecz\".", -- A_Space_Adventure:cosmos
     ["Return to the Surface"] = "Wróć na Powierzchnię", -- A_Space_Adventure:fruit02
---      ["Return to the training menu by pressing the “Go back” button."] = "", -- Basic_Training_-_Movement
+    ["Return to the training menu by pressing the “Go back” button."] = "Wróć do menu treningu, wciskając przycisk \"Powrót\".", -- Basic_Training_-_Movement
     ["Rhombus"] = "Romb", -- Basic_Training_-_Movement
     ["Rider"] = "Jeźdźec", -- portal
     ["Rifleman"] = "Strzelec", -- Battalion
     ["Righteous Beard"] = "Cnotliwa Broda", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
     ["Right Tong"] = "Prawy Tong", -- Bazooka_Battlefield
     ["Ripe"] = "Dojrzały",
---      ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "", -- Continental_supplies
+    ["Rise the water if nobody else is in the circle and deal 6 damage to all enemy hogs."] = "Podwyższ wodę, jeśli nikt inny nie jest w kole i zadaj 6 obrażeń wszystkim wrogim jeżom.", -- Continental_supplies
     ["Robert Yellow Apple"] = "Robert Żółte Jabłko", -- A_Space_Adventure:fruit01
     ["Rocket"] = "Rakieta", -- Big_Armory
     ["Ronald"] = "Ronald", -- portal
@@ -1816,7 +1816,7 @@
     ["Ryu"] = "Ryu",
     ["%s: %.1fs"] = "%s: %.1fs", -- Racer, TechRacer
     ["%s (+1)"] = "%s (+1)", -- A_Space_Adventure:fruit03
---      ["Sabotage all hogs in the circle and fire a cluster above you.|Sabotaged hogs lose health and have to deal with a very high gravity during their turn."] = "", -- Continental_supplies
+    ["Sabotage all hogs in the circle and fire a cluster above you.|Sabotaged hogs lose health and have to deal with a very high gravity during their turn."] = "Sabotuj wszystkie jeże w kole i wystrzel odłamek nad siebie.|Sabotowane jeże tracą zdrowie i muszą sobie poradzić z wysoką grawitacją w swojej turze.", -- Continental_supplies
     ["Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]"] = "Sabotaż/Flara: [Sabotuje wszystkie jeże w kole i zadaje ~1 obrażeń LUB wystrzeliwuje w powietrze odłamek]", -- Continental_supplies
     ["Saint"] = "Święty", -- HedgeEditor, The_Specialists
     ["Salivaslurper"] = "Ślinosiorb", -- A_Classic_Fairytale:united
@@ -1825,7 +1825,7 @@
     ["Salvation was one step closer now..."] = "Odkupienie było teraz o krok bliżej...", -- A_Classic_Fairytale:dragon
     ["Sam"] = "Sam", -- A_Space_Adventure:cosmos
     ["Sandals?! I thought you left your ring!"] = "Sandały?! Myślałem, że zostawiłeś swój pierścień!", -- A_Classic_Fairytale:queen
---      ["%s and %s enter the battlefield"] = "", -- A_Space_Adventure:fruit01
+    ["%s and %s enter the battlefield"] = "%s i %s wchodzą na pole bitwy", -- A_Space_Adventure:fruit01
     ["Sandstorm"] = "Burza piaskowa", -- A_Space_Adventure:desert01
     ["Sandy"] = "Piaskowy", -- A_Space_Adventure:desert01
     ["Save as many hapless hogs as possible!"] = "Uratuj jak najwięcej nieszczęsnych jeży jak to możliwe!",
@@ -1853,9 +1853,9 @@
     ["Scores:"] = "Wyniki:", -- Mutant
     ["Scoring: "] = "Wynki: ", -- Mutant
     ["Script parameter examples:"] = "Przykłady parametrów skryptu:", -- Gravity
---      ["%s (%d)"] = "", -- Continental_supplies
+    ["%s (%d)"] = "%s (%d)", -- Continental_supplies
     ["%s: %d (deaths: %d)"] = "%s: %d (śmierci: %d)", -- Mutant
---      ["%s (%d), %d sec"] = "", -- Continental_supplies
+    ["%s (%d), %d sec"] = "%s (%d), %d sekund", -- Continental_supplies
     ["%s: Did not finish"] = "%s: Nie ukończył", -- Racer, TechRacer
     ["%s did not finish the race."] = "%s nie ukończył wyścigu", -- Racer, TechRacer
     ["%s didn't expect that."] = "%s nie spodziewał się tego", -- User_Mission_-_Rope_Knock_Challenge
@@ -1863,7 +1863,7 @@
     ["%s doesn’t really know how to handle a rope properly."] = "%s nie wie tak naprawdę jak posługiwać się liną.", -- ClimbHome
     ["%s (+%d)"] = "%s (+%d)", -- Battalion
     ["%s: %d"] = "%s: %d", -- Capture_the_Flag, Control
---      ["%s, %d sec"] = "", -- Continental_supplies
+    ["%s, %d sec"] = "%s, %d sekund", -- Continental_supplies
     ["Search for the device with the help of the other hedgehogs "] = "Poszukaj urządzenia z pomocą innych jeży", -- A_Space_Adventure:fruit02
     ["Searching in the dust"] = "Poszukiwanie w kurzu", -- A_Space_Adventure:desert01
     ["Searching the stars!"] = "Szukanie gwiazd!", -- A_Space_Adventure:cosmos
@@ -1874,7 +1874,7 @@
     ["See ya!"] = "Do zobaczenia!",
     ["Segmentation Paul"] = "Naruszenie Pawła", -- A_Classic_Fairytale:dragon
     ["Select a placement mode and read the infos|in the mission panel to learn how to use it."] = "Wybierz tryb ustawiania i przeczytaj informacje|w panelu misji, by dowiedzieć się jak go używać.", -- HedgeEditor
---      ["Select continent"] = "", -- Continental_supplies
+    ["Select continent"] = "Wybierz kontynent", -- Continental_supplies
     ["Select continent!"] = "Wybierz kontynent!", -- Continental_supplies
     ["Selection Mode"] = "Tryb Wyboru", -- HedgeEditor
     ["Select, modify, or delete girders, rubbers and sprites"] = "Wybierz, modyfikuj lub usuń belki, gumy i grafiki", -- HedgeEditor
@@ -1883,16 +1883,16 @@
     ["Select Rope"] = "Wybierz linę", -- Basic_Training_-_Rope
     ["Select “Switch Hedgehog” from the ammo menu and|hit the “Attack” key to proceed."] = "Wybierz “Zmień jeża” z menu amunicji i wciśnij “Atak”, by kontynuować", -- Basic_Training_-_Movement
     ["Select “Switch Hedgehog” from the ammo menu and|hit the “Attack” key."] = "Wybierz “Zmień jeża” z menu amunicji i wciśnij “Atak”.", -- Basic_Training_-_Movement
---      ["Select the current continent."] = "", -- Continental_supplies
+    ["Select the current continent."] = "Wybierz aktualny kontynent.", -- Continental_supplies
     ["Select the rope to begin!"] = "Wybierz linę, by zacząć!", -- Basic_Training_-_Rope
---      ["Select this item for a random continent."] = "", -- Continental_supplies
+    ["Select this item for a random continent."] = "Wybierz ten przedmiot dla losowego kontynentu.", -- Continental_supplies
     ["Select weapon: [Left click]"] = "Wybierz broń: [Lewy klik]", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
     ["Select Weapon"] = "Wybierz broń", -- Basic_Training_-_Bazooka, Basic_Training_-_Grenade
     ["Select win/lose condition: [Left], [Right]"] = "Wybierz warunki wygranej/przegranej: [Lewo], [Prawo]", -- HedgeEditor
     ["Select your continent/weaponset: with the \"Up\" or \"Down\" keys. You can also select one with the weapons menu."] = "Wybierz swój kontynent/zestaw broni używając klawiszy \"Góra\" lub \"Dół\". Możesz także wybrać je z menu broni.", -- Continental_supplies
     ["Select your continent/weaponset: With the \"Up\" or \"Down\" keys. You can also select one with the weapons menu."] = "Wybierz swój kontynent/zestaw broni wciskając klawisze \"Góra\" lub \"Dół\". Możesz także je wybrać używając menu broni.", -- Continental_supplies
---      ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "", -- Continental_supplies
---      ["%s enters the battlefield"] = "", -- A_Space_Adventure:fruit01
+    ["Select your continent with [Up]/[Down] or by selecting a representative weapon."] = "Wybierz swój kotnynent używając [Góra]/[Dół] lub wybierając reprezentatywną broń.", -- Continental_supplies
+    ["%s enters the battlefield"] = "%s wchodzi na pole bitwy", -- A_Space_Adventure:fruit01
     ["Sergey"] = "Sergiusz",
     ["Set bounciness: [Left Shift] + [1]-[5]"] = "Wybierz odbijalność: [Lewy Shift] + [1]-[5]", -- Basic_Training_-_Grenade
     ["Set detonation timer: [1]-[5]"] = "Wybierz czas detonacji: [1]-[5]", -- Basic_Training_-_Grenade
@@ -2008,7 +2008,7 @@
     ["Spacetrip"] = "Kosmiczna wycieczka", -- A_Space_Adventure:cosmos
     ["Spawn the crate and attack!"] = "Ustaw skrzynię i atakuj!", -- WxW
     ["Specials: Kings and air generals drop helpers, not weapons"] = "Specjalne: Królowie i powietrzni generałowie upuszczają pomocników, nie bronie", -- Battalion
---      ["Special weapons:"] = "", -- Continental_supplies
+    ["Special weapons:"] = "Bronie specjalne:", -- Continental_supplies
     ["Special Weapons:"] = "Specjalne bronie:", -- Continental_supplies
     ["Speckles"] = "Spekles",
     ["Specs Appeal"] = "Urok Speców",
@@ -2032,10 +2032,10 @@
     ["Squirtle"] = "Squirtle",
     ["Squishy"] = "Grząski",
     ["%s reached home in %.3f seconds. Congratulations!"] = "%s dotarł do domu w %.3f sekund. Gratulacje!", -- ClimbHome
---      ["%s: %s"] = "", -- Continental_supplies
+    ["%s: %s"] = "%s: %s", -- Continental_supplies
     ["%s (%s) destroyed %d invaders in one round."] = "%s (%s) zniszczył %d najeźdźców w jednej rundzie.", -- Space_Invasion
     ["%s (%s) does not have to feel ashamed for their best height of %d."] = "%s (%s) nie musi się wstydzić swojej najlepszej wysokości %d.", -- ClimbHome
---      ["%s, select your continent!"] = "", -- Continental_supplies
+    ["%s, select your continent!"] = "%s, wybierz swój kontynent!", -- Continental_supplies
     ["%s (%s) gave short shrift to the invaders: Longest combo of %d!"] = "%s (%s) dał najeźdźcom krótką pokutę: Najdłuższe kombo %d!", -- Space_Invasion
     ["%s (%s) has been invited to join the Planetary Association of the Hedgehogs, it destroyed a staggering %d invaders in just one round!"] = "%s (%s) został zaproszony do dołączenia do Planetarnego Stowarzyszenia Jeży, zniszczył zdumiewające %d najeźdźców w jednej rundzie!", -- Space_Invasion
     ["%s (%s) has captured the flag %d times."] = "%s (%s) przejął flagę %d razy.", -- Capture_the_Flag
@@ -2056,7 +2056,7 @@
     ["%s (%s) shot %d invaders and never missed in the best round!"] = "%s (%s) zestrzelił %d najeźdźców i nigdy nie spudłował w najlepszej rundzie!", -- Space_Invasion
     ["%s (%s) struck like a meteor: %d points in only one round!"] = "%s (%s) uderzył jak meteor: %d punktów w tylko jednej rundzie!", -- Space_Invasion
     ["%s still had a long way to go."] = "%s nadal miał daleką drogę do przejścia.", -- ClimbHome
---      ["%s stumbled."] = "", -- User_Mission_-_Rope_Knock_Challenge
+    ["%s stumbled."] = "%s potknął się.", -- User_Mission_-_Rope_Knock_Challenge
     ["%s (%s) tumbles like no other: %d points in one round."] = "%s (%s) toczy się jak nikt inny: %d punktów w jednej rundzie.", -- Space_Invasion
     ["%s stumpled."] = "%s potknął się.", -- User_Mission_-_Rope_Knock_Challenge
     ["%s (%s) was certainly not afraid of heights: Peak height of %d!"] = "%s (%s) z pewnością nie bał się wysokości: Szczytowa wysokość %d!", -- ClimbHome
@@ -2064,7 +2064,7 @@
     ["%s (%s) was on fire: Longest combo of %d."] = "%s (%s) palił się: Najdłuższe kombo %d.", -- Space_Invasion
     ["%s (%s) was panicly afraid of the water and decided to get in a safe distance of %d from it."] = "%s (%s) panicznie bał się wody i zdecydował się dostać na bezpieczną odległość %d od niej.", -- ClimbHome
     ["%s (%s) was the best baby tumbler: %d points in one round."] = "%s (%s) był najlepszym dziecięcym akrobatą: %d punktów w jednej rundzie.", -- Space_Invasion
-    ["%s (%s) was the greediest hedgehog and collected %d crates."] = "%s (%s) był najchciwszym jeżem i zebrał % skrzyń.", -- Mutant
+    ["%s (%s) was the greediest hedgehog and collected %d crates."] = "%s (%s) był najchciwszym jeżem i zebrał %d skrzyń.", -- Mutant
     ["%s (%s) was undoubtedly the very best professional tumbler in this game: %d points in one round!"] = "%s (%s) był niewątpliwie najlepszym profesjonalnym akrobatą w tej grze: %d punktów  w jednej rundzie.", -- Space_Invasion
     ["Star"] = "Gwiazda", -- Big_Armory
     ["Status update"] = "Aktualizacja statusu", -- Racer, TechRacer
@@ -2090,7 +2090,7 @@
     ["Stop right there, puny worms!"] = "Stójcie tam, mizerne robaki!", -- A_Classic_Fairytale:queen
     ["Street Fighters"] = "Uliczni Wojownicy",
     ["Strength: %d (multiplier for ammo)"] = "Siła: %d (wielokrotność amunicji)", -- Battalion
---      ["Strong knockback, but no poison."] = "", -- Continental_supplies
+    ["Strong knockback, but no poison."] = "Silny odrzut, ale bez trucizny.", -- Continental_supplies
     ["Stronglings"] = "Silniacy", -- A_Classic_Fairytale:shadow
     ["Structure Placement Mode"] = "Tryb Ustawiania Struktur", -- Construction_Mode
     ["Structure Placer"] = "Stawiacz Struktur", -- Construction_Mode
@@ -2104,7 +2104,7 @@
     ["Sunflame"] = "Słoneczny Płomień", -- Big_Armory
     ["Super weapons: A few crates contain very powerful weapons."] = "Super bronie: Parę skrzyń zawiera bardzo potężne bronie.", -- WxW
     ["Super weapons: %s"] = "Super bronie: %s", -- WxW
---      ["Supplies: Each continent gives you unique weapons, specials and health."] = "", -- Continental_supplies
+    ["Supplies: Each continent gives you unique weapons, specials and health."] = "Posiłki: Każdy kontynent daje ci unikalne bronie, speciały i zdrowie.", -- Continental_supplies
     ["Support Station: Allows placement of crates."] = "Stacja Wsparcia: Pozwala na ustawianie skrzyń.", -- Construction_Mode
     ["Support Station"] = "Stacja Wsparcia", -- Construction_Mode
     ["Sure!"] = "Jasne!", -- A_Classic_Fairytale:epil
@@ -2112,16 +2112,16 @@
     ["Surf Before Crate: You must bounce off the water once before you can get crates."] = "Serfuj przed skrzynią: Musisz raz się odbić od wody, zanim będziesz mógł zdobyć skrzynie.", -- WxW
     ["Surfer! +15 points!"] = "Surfer! +15 punktów!", -- Space_Invasion
     ["Surfer!"] = "Surfer!", -- WxW
---      ["Surprise supplies: Get 1-3 random weapons each turn."] = "", -- Continental_supplies
+    ["Surprise supplies: Get 1-3 random weapons each turn."] = "Niespodziewane posiłki: Dostań 1-3 losowych broni w każdej turze.", -- Continental_supplies
     ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "Przetrwaj!Porada: Przerywniki mogą zostać pominięte przyciskiem [Precyzja].", -- A_Classic_Fairytale:shadow
     ["%s violated the “All But Last” rule and will be penalized."] = "%s narusza zasadę \"Wszyscy Oprócz Ostatniego\" i będzie ukarany.", -- WxW
     ["%s violated the “Kill The Leader” rule and will be penalized."] = "%s narusza zasadę \"Zabij przywódcę\" i będzie ukarany.", -- WxW
---      ["Swap place with a random enemy in the circle."] = "", -- Continental_supplies
+    ["Swap place with a random enemy in the circle."] = "Zamień miejsce z losowym wrogiem w kole.", -- Continental_supplies
     ["%s was a good target."] = "%s był dobrym celem.", -- User_Mission_-_Rope_Knock_Challenge
     ["%s was close to home."] = "%s był blisko domu.", -- ClimbHome
     ["%s was damn close to home."] = "%s był piekielnie blisko domu.", -- ClimbHome
     ["%s was doomed from the beginning."] = "%s był na to skazany od początku.", -- User_Mission_-_Rope_Knock_Challenge
---      ["%s was extracted from the scheme"] = "", -- Continental_supplies
+    ["%s was extracted from the scheme"] = "%s został wydobyty ze schematu", -- Continental_supplies
     ["%s was good, but not good enough."] = "%s był dobry, ale nie wystarczająco.", -- ClimbHome
     ["%s was knocked away."] = "%s został zrzucony.", -- User_Mission_-_Rope_Knock_Challenge
     ["%s was really unlucky."] = "%s był prawdziwym pechowcem.", -- User_Mission_-_Rope_Knock_Challenge
@@ -2134,7 +2134,7 @@
     ["Swing: [Left]/[Right]"] = "Huśtaj się: [Lewo]/[Prawo]", -- Basic_Training_-_Rope
     ["%s wins!"] = "%s wygrywa!", -- Racer, Space_Invasion, TechRacer, ClimbHome
     ["%s wins with a best time of %.1fs."] = "%s wygrywa z najlepszym czasem %.1fs.", -- Racer, TechRacer
---      ["Switch: Drop ball of dirt from parachute (once)"] = "", -- Continental_supplies
+    ["Switch: Drop ball of dirt from parachute (once)"] = "Zmiana: Upuść kulę ziemi ze spadochronu (raz)", -- Continental_supplies
     ["Switched to "] = "Przełączono na ",
     ["Switch Hedgehog (1/3)"] = "Zmiana jeża (1/3)", -- Basic_Training_-_Movement
     ["Switch Hedgehog (2/3)"] = "Zmiana jeża (2/3)", -- Basic_Training_-_Movement
@@ -2143,7 +2143,7 @@
     ["Switch hedgehog: [Tabulator]"] = "Zmień jeża: [Tab]", -- Basic_Training_-_Movement
     ["Switch Hog"] = "Zmień Jeża", -- Construction_Mode
     ["switch"] = "przełącz", -- Continental_supplies
---      ["Switch: Select weapon special"] = "", -- Continental_supplies
+    ["Switch: Select weapon special"] = "Zmiana: Wybierz speciał broni", -- Continental_supplies
     ["Switch: Toggle crate radar"] = "Zmiana: Przełącz radar skrzyń", -- WxW
     ["Swords"] = "Miecze", -- Bazooka_Battlefield
     ["Syntax Errol"] = "Błąt Składni", -- A_Classic_Fairytale:dragon
@@ -2171,7 +2171,7 @@
     ["Team Identity Mode"] = "Tryb Tożsamości Drużyny", -- HedgeEditor
     ["TEAM IDENTITY MODE"] = "TRYB TOŻSAMOŚCI DRUŻYNY", -- HedgeEditor
     ["Team of Hearts"] = "Drużyna Serc", -- Challenge_-_Speed_Shoppa_-_Hedgelove
---      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
+    ["Teams are tied! Continue playing rounds until we have a winner!"] = "Drużyny remisują! Grajcie rundy, aż nie wyłonimy zwycięzcy!", -- Space_Invasion
     ["Team Scores:"] = "Wyniki drużyn:", -- Control
     ["Team scores:"] = "Wyniki drużyn:", -- Space_Invasion
     ["Teamwork 2"] = "Praca zespołowa 2", -- User_Mission_-_Teamwork_2
@@ -2185,12 +2185,12 @@
     ["Teleport hint: just use the mouse to select the destination!"] = "Porada do teleportu: po prostu użyj myszki, by wybrać cel teleportacji!", -- A_Classic_Fairytale:dragon
     ["Teleport hint: Just use the mouse to select the destination!"] = "Wskazówka do teleportu: Uzyj po prostu myszki, by wybrać cel!", -- A_Classic_Fairytale:dragon
     ["Teleport"] = "Teleport", -- Construction_Mode, Frenzy
---      ["Teleport to the impact location."] = "", -- Continental_supplies
---      ["Teleport to the top of the map, expect fall damage!"] = "", -- Continental_supplies
+    ["Teleport to the impact location."] = "Teleportuj się do miejsca uderzenia.", -- Continental_supplies
+    ["Teleport to the top of the map, expect fall damage!"] = "Teleportuj się na szczyt mapy, spodziewaj się obrażeń od upadku!", -- Continental_supplies
     ["Teleport unsuccessful. Please teleport within a clan teleporter's sphere of influence."] = "Teleportacja nieudana. Teleportuj się wewnątrz sfery wpływu teleportu klanowego.", -- Construction_Mode
     ["Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."] = "Teleport Nieudany. Proszę teleportować się wewnątrz sfery wpłyu klanowego teleportu.", -- Construction_Mode
     ["Tentacle Terror"] = "Mackowy terror", -- Tentacle_Terror
---      ["Textile industry: Will give you a parachute every second turn."] = "", -- Continental_supplies
+    ["Textile industry: Will give you a parachute every second turn."] = "Przemysł włókienniczy: Da ci spadochron co drugą turę.", -- Continental_supplies
     ["Thanks, dude! It really means a lot to me."] = "Dzięki, koleś! To naprawdę wiele dla mne znaczy.", -- A_Classic_Fairytale:epil
     ["Thanks!"] = "Dzięki!", -- A_Classic_Fairytale:family
     ["Thanks, man! It really means a lot to me."] = "Dzięki, ziom! To naprawdę wiele dla mne znaczy.", -- A_Classic_Fairytale:epil
@@ -2219,7 +2219,7 @@
     ["The aliens respect me, even worship me!"] = "Obcy mnie respektują, nawet mnie czczą!", -- A_Classic_Fairytale:queen
     ["The ally units share their ammo."] = "Sprzymierzone jednostki dzielą swoją amunicję.", -- A_Space_Adventure:fruit01
     ["The ammo of %s has been vaporized"] = "Amunicja %s została odparowana", -- Construction_Mode
---      ["The answer is ... entertainment. You'll see what I mean."] = "", -- A_Classic_Fairytale:backstab
+    ["The answer is ... entertainment. You'll see what I mean."] = "Odpowiedź to... rozrywka. Zobaczysz, co mam na myśli.", -- A_Classic_Fairytale:backstab
     ["The answer is...entertaintment. You'll see what I mean."] = "Odpowiedź to... rozrywka. Zobaczycie co mam na myśli.", -- A_Classic_Fairytale:backstab
     ["The anti-portal surface is all over the floor, and I have nothing to kill him. Dropping something could hurt him enough to kill him."] = "Antyportalowa powierzchnia jest na całej podłodze, a ja nie mam nic, by go zabić. Zrzucenie czegoś mogłoby go skrzywdzić wystarczająco, by go zabić.", -- portal
     ["The big bang"] = "Wielki wybuch", -- A_Space_Adventure:final
@@ -2228,15 +2228,15 @@
     ["The Bull's Eye"] = "Bycze Oko", -- A_Classic_Fairytale:first_blood
     ["The caves are well hidden, they won't find us there!"] = "Jaskinie są dobrze ukryte, nie znajdą nas tutaj!", -- A_Classic_Fairytale:united
     ["The clan of the Red Strawberry wants to take over the dominion and overthrow King Pineapple."] = "Klan Czerwonych Truskawek chce przejąć zwierzchnictwo i obalić Króla Ananasa.", -- A_Space_Adventure:fruit01
---      ["The continent of cowards"] = "", -- Continental_supplies
---      ["The continent of dust"] = "", -- Continental_supplies
---      ["The continent of firearms"] = "", -- Continental_supplies
---      ["The continent of greed"] = "", -- Continental_supplies
---      ["The continent of guerilla tactics"] = "", -- Continental_supplies
---      ["The continent of ice and science"] = "", -- Continental_supplies
---      ["The continent of medicine"] = "", -- Continental_supplies
---      ["The continent of ninjas"] = "", -- Continental_supplies
---      ["The continent of sports"] = "", -- Continental_supplies
+    ["The continent of cowards"] = "Kontynent tchórzy", -- Continental_supplies
+    ["The continent of dust"] = "Kontynent pyłu", -- Continental_supplies
+    ["The continent of firearms"] = "Kontynent broni palnej", -- Continental_supplies
+    ["The continent of greed"] = "Kontynent chciwości", -- Continental_supplies
+    ["The continent of guerilla tactics"] = "Kontynent taktyk partyzanckich", -- Continental_supplies
+    ["The continent of ice and science"] = "Kontynent lodu i nauki", -- Continental_supplies
+    ["The continent of medicine"] = "Kontynent lekarstw", -- Continental_supplies
+    ["The continent of ninjas"] = "Kontynent ninja", -- Continental_supplies
+    ["The continent of sports"] = "Kontynent sportu", -- Continental_supplies
     ["The Crate Frenzy"] = "Szał skrzyń", -- A_Classic_Fairytale:first_blood
     ["The Customer is King"] = "Król jest klientem", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
     ["The device part has been stolen!"] = "Część urządzenia została skradziona!", -- A_Space_Adventure:fruit02
@@ -2265,7 +2265,7 @@
     ["The flag will respawn next round."] = "Flaga pojawi się ponownie przy następnej rundzie.",
     ["The flood has stopped! Challenge over."] = "Powódź się zatrzymała! Wyzwanie skończone.", -- User_Mission_-_That_Sinking_Feeling
     ["The food bites back"] = "Jedzenie się odgryza", -- A_Classic_Fairytale:backstab
---      ["The forgotten continent"] = "", -- Continental_supplies
+    ["The forgotten continent"] = "Zapomniany kontynent", -- Continental_supplies
     ["The giant umbrella from the last crate should help break the fall."] = "Ogromna parasolka z ostatniej skrzyni powinna pomóc pokonać upadek.", -- A_Classic_Fairytale:first_blood
     ["The Great Escape"] = "Wielka ucieczka", -- User_Mission_-_The_Great_Escape
     ["The Green Bananas lost, try again!"] = "Zielone Banany przegrały, spróbuj ponownie!", -- A_Space_Adventure:fruit01
@@ -2295,7 +2295,7 @@
     ["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a laser sight."] = "Przez następne 4 razy, w których zagrasz misję \"Ostateczne spotkanie\", dostaniesz 20 więcej punktów zdrowia i celownik laserowy.", -- A_Space_Adventure:death02
     ["The next crate is an utility crate."] = "Następna skrzynia zawiera narzędzia.", -- Basic_Training_-_Movement
     ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "Następne jest bardzo trudne!|Porada: Masz wielokrotne wymachy!", -- Basic_Training_-_Rope
-    ["The next target can only be reached by something called “bouncing bomb”."] = "Następny cel może być sięgnięty jedynie przez coś nazwane "odbijająca się bomba".", -- Basic_Training_-_Bazooka
+    ["The next target can only be reached by something called “bouncing bomb”."] = "Następny cel może być sięgnięty jedynie przez coś nazwane \"odbijająca się bomba\".", -- Basic_Training_-_Bazooka
     ["The next target is high in the sky."] = "Następny cel jest wysoko w niebie.", -- Basic_Training_-_Bazooka
     ["Then how do they keep appearing?"] = "Więc jak oni się cały czas pojawiają?", -- A_Classic_Fairytale:shadow
     ["The Ninja-Samurai Alliance"] = "Sojusz Ninja-Samurajski",
@@ -2323,7 +2323,7 @@
     ["The score and deaths are shown next to the team bar."] = "Wynik i śmierci są pokazane obok paska drużyny.", -- Mutant
     ["These girders are slippery, like ice."] = "Belki są śliskie jak lód.", -- Basic_Training_-_Movement
     ["These primitive people are so funny!"] = "Prymitywni ludzie są tacy zabawni!", -- A_Classic_Fairytale:backstab
---      ["These weapon specials cannot be used close to other hogs."] = "", -- Continental_supplies
+    ["These weapon specials cannot be used close to other hogs."] = "Te speciały broni nie mogą zostać użyte w pobliżu innych jeży.", -- Continental_supplies
     ["The Shadow Falls"] = "Zapada cień", -- A_Classic_Fairytale:shadow
     ["The Showdown"] = "Pojedynek", -- A_Classic_Fairytale:shadow
     ["The Slaughter"] = "Rzeź", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:first_blood
@@ -2331,12 +2331,12 @@
     ["THE SPECIALISTS"] = "SPECJALIŚCI",
     ["The spinning arrows above your hedgehog show|which hedgehog is selected right now."] = "Kręcące się strzałki nad twoim jeżem pokazują,|który jeż jest właśnie wybrany.", -- Basic_Training_-_Movement
     ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "Dusze przodków są z pewnością zadowolone, Spory Przecieku.", -- A_Classic_Fairytale:first_blood
---      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
+    ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "Dusze przodków z pewnością są zadowolone, Spory Przecieku.", -- A_Classic_Fairytale:first_blood
     ["The targets will guide you through the training."] = "Cele poprowadzą cię przez trening.", -- Basic_Training_-_Rope
     ["The team continued their quest of finding the rest of the tribe."] = "Drużyna kontynuowała swoje zadanie odnalezienia reszty plemienia.", -- A_Classic_Fairytale:queen
---      ["The teams are tied for the fastest time."] = "", -- Racer, TechRacer
---      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
---      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
+    ["The teams are tied for the fastest time."] = "Drużyny remisują z najszybszym czasem.", -- Racer, TechRacer
+    ["The teams were tied, so an additional round has been played to determine the winner."] = "Drużyny zremisowały, więc dodatkowa runda została zagrana, by wyłonić zwycięzcę.", -- Space_Invasion
+    ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "Drużyny remisowały, więc %d dodatkowych rund zostało zagranych, by wyłonić zwycięzcę.", -- Space_Invasion
     ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "Czas, który ci pozostanie po dotarciu do niebieskiego jeża, zosanie dodany do następnej tury.", -- A_Space_Adventure:moon02
     ["The Torment"] = "Udręka", -- A_Classic_Fairytale:first_blood
     ["The truth about Professor Hogevil"] = "Prawda o Profesorze Jeżozło", -- A_Space_Adventure:moon02
@@ -2345,7 +2345,7 @@
     ["The Tunnel Maker"] = "Wytwórca Tuneli", -- A_Classic_Fairytale:journey
     ["The Ultimate Weapon"] = "Broń Ostateczna", -- A_Classic_Fairytale:first_blood
     ["The Union"] = "Unia", -- A_Classic_Fairytale:enemy
---      ["The Union: You can select a hedgehog at the start of your turns."] = "", -- Continental_supplies
+    ["The Union: You can select a hedgehog at the start of your turns."] = "Unia: Możesz wybrać jeża na początku swoich tur.", -- Continental_supplies
     ["The village, unprepared, was destroyed by the cyborgs..."] = "Wioska, nieprzygotowana, została zniszczona przez cyborgów...", -- A_Classic_Fairytale:journey
     ["The walk of Fame"] = "Spacer Chwały", -- A_Classic_Fairytale:shadow
     ["The wasted youth"] = "Zmarnowana młodość", -- A_Classic_Fairytale:first_blood
@@ -2374,7 +2374,7 @@
     ["This allows you to create and place mines,|sticky mines and barrels anywhere within your|clan's area of influence at the cost of energy."] = "To pozwala ci stworzyć i ustawić miny,|lepkie miny i beczki gdziekolwiek wewnątrz|strefy wpływu twojego klanu, kosztem energii.", -- Construction_Mode
     ["This allows you to create and place mines,|sticky mines and barrels anywhere within your|clan's area of influence at the cost of energy.|Up/down: Choose object type|Left/right: Choose timer (for mines)|Cursor: Place object"] = "To pozwala ci stworzyć i ustawić miny, samoprzylepne|miny i beczki gdziekolwiek wewnątrz strefy wpływu|twojego klanu, kosztem energii.|Góra/dół: Wybierz typ obiektu|Lewo/prawo: Wybierz czas (dla min)|Kursor: Ustaw obiekt", -- Construction_Mode
     ["This almost concludes our tutorial."] = "To prawie kończy nasz samouczek.", -- Basic_Training_-_Flying_Saucer
---      ["This also increases the effectiveness of Medicine."] = "", -- Continental_supplies
+    ["This also increases the effectiveness of Medicine."] = "To również zwiększa efektywność Lekarstwa.", -- Continental_supplies
     ["This game wasn’t really exciting."] = "Ta gra nie była naprawdę ekscytująca.", -- Space_Invasion
     ["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"] = "Ten Hog Solo jest taki naiwny! Kiedy wróci, zastrzelę go i zatrzymam urządzenie dla siebie!", -- A_Space_Adventure:fruit02
     ["This is a new personal best, congratulations!"] = "To nowy osobisty rekord, gratulacje!", -- A_Space_Adventure:death02, A_Space_Adventure:desert02, A_Space_Adventure:fruit03
@@ -2384,7 +2384,7 @@
     ["This island is the only place left on Earth with grass on it!"] = "Ta wyspa to jedyne pozostałe miejsce na Ziemi, w którym jest trawa!", -- A_Classic_Fairytale:enemy
     ["This is seems like a wealthy hedgehog, nice ..."] = "On wygląda jak bogaty jeż, nieźle...", -- A_Space_Adventure:desert01
     ["This is the mission panel."] = "To jest panel misji.", -- Basic_Training_-_Movement
---      ["This is the Olympic Stadium of Saucer Flying."] = "", -- A_Space_Adventure:ice02
+    ["This is the Olympic Stadium of Saucer Flying."] = "To jest Stadion Olimpijski Latania Spodkiem.", -- A_Space_Adventure:ice02
     ["This is the Olympic stadium of saucer flying."] = "To jest Stadion Olimpijski Latania Spodkiem.", -- A_Space_Adventure:ice02
     ["This is typical!"] = "To typowe!", -- A_Classic_Fairytale:dragon
     ["This must be some kind of sorcery!"] = "To musi być jakaś magia!", -- A_Classic_Fairytale:shadow
@@ -2397,17 +2397,17 @@
     ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "To było niesamowite przedstawienie! Ale to wyzwanie może być ukończone tyko jednym samolocikiem. Potrafsz wykombinować jak?", -- User_Mission_-_RCPlane_Challenge
     ["This will be fun!"] = "To będzie zabawne!", -- A_Classic_Fairytale:enemy
     ["This will be useful when I need a new platform or if I want to rise."] = "To będzie żyteczne, kiedy będę potrzebował platformy albo chciał się wznieść.", -- portal
---      ["This will certainly come in handy."] = "", -- User_Mission_-_Teamwork_2
+    ["This will certainly come in handy."] = "To z pewnością się przyda.", -- User_Mission_-_Teamwork_2
     ["This will certianly come in handy."] = "To zdecydowanie się przyda.", -- User_Mission_-_Teamwork_2
     ["Thompson"] = "Tomson",
     ["Those aliens are destroying the island!"] = "Ci obcy niszczą naszą wyspę!", -- A_Classic_Fairytale:family
     ["Those were scheduled for disposal anyway."] = "Ci i tak mieli iść do śmieci.", -- A_Classic_Fairytale:dragon
---      ["Throw a 1 second mine!"] = "", -- Continental_supplies
+    ["Throw a 1 second mine!"] = "Rzuć 1-sekundową minę!", -- Continental_supplies
     ["Throw a baseball at your foes|and send them flying!"] = "Rzuć piłkę baseballową w swoich wrogów|i spraw, że polecą.", -- Knockball
     ["Throw a grenade to destroy the target!"] = "Rzuć granatem, by zniszczyć cel!", -- Basic_Training_-_Grenade
     ["Throw some grenades to destroy the targets!"] = "Rzuć trochę granatów, by zniszczyć cele!", -- Basic_Training_-_Grenade
     ["Thug #%d"] = "Zbir #%d", -- A_Space_Adventure:death01
---      ["Tie-breaking round %d"] = "", -- Space_Invasion
+    ["Tie-breaking round %d"] = "Runda remisowa %d", -- Space_Invasion
     ["Timbers"] = "Drewna",
     ["Time: %.1fs"] = "Czas: %.1fs", -- Racer, TechRacer
     ["Time: %.3fs by %s"] = "Czas: %.3fs (%s)", -- TrophyRace
@@ -2429,13 +2429,13 @@
     ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "Porada: Fizyka liny jest inna od tej w prawdziwym świecie.|Wykorzystaj to na swoją korzyść!", -- Basic_Training_-_Rope
     ["Tip: You can change your flying saucer|in mid-flight by hitting the [Attack] key twice."] = "Porada: Możesz zmienić swój latający talerz|podczas lotu, wciskając dwukrotnie przycisk [Atak].", -- Basic_Training_-_Flying_Saucer
     ["Tiyuri"] = "Tiyuri",
-    ["Toad"] = "Ropucha",
+    ["Toad"] = "Toad",
     ["To begin, walk to the crate to the right."] = "By zacząć, idź do skrzyni po prawej.", -- Basic_Training_-_Movement
     ["To begin with the training, hit the attack key!"] = "By zacząć trening, wciśnij przycisk ataku!", -- Basic_Training_-_Movement
     ["To begin with the training, select the bazooka from the ammo menu!"] = "By zacząć trening, wybierz bazookę z menu amunicji!", -- Basic_Training_-_Bazooka
     ["To begin with the training, select the grenade from the ammo menu!"] = "By zacząć trening, wybierz granat z menu amunicji!", -- Basic_Training_-_Grenade
     ["To finish hedgehog selection, just do anything|with him, like walking."] = "By skończyć wybierać jeża, zrób z nim cokolwiek,|np. rusz się", -- Basic_Training_-_Movement
---      ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "", -- Basic_Training_-_Movement
+    ["To get over the next obstacles, keep some distance from the wall before you back jump."] = "By przekroczyć następną przeszkodę, utrzymaj trochę dystansu od ściany zanim skoczysz w tył.", -- Basic_Training_-_Movement
     ["To get over the water, you have to do multiple|rope shots and swings."] = "By przejść przez wodę, musisz wykonać wielokrotne|strzały i zamachy liną.", -- Basic_Training_-_Rope
     ["Toggle Editing Weapons and Tools: [Precise]+[2]"] = "Przełącz edytujące bronie i narzędzia: [Precyzja]+[2]", -- HedgeEditor
     ["Toggle Gear Information: [Precise]+[3]"] = "Przełącz informacje o rzeczach: [Precyzja]+[3]", -- HedgeEditor
@@ -2449,7 +2449,7 @@
     ["Too slow! Try again ..."] = "Za wolno! Spróbuj ponownie...", -- A_Space_Adventure:moon02
     ["Top-class elite pilot"] = "Elitarny pilot najwyższej klasy", -- User_Mission_-_RCPlane_Challenge
     ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "By postawić belkę wybierz ją, użyj [Lewo] i [Prawo], by wybrać kąt i długość, ustaw używając [Lewy Klik]", -- A_Classic_Fairytale:shadow
---      ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "", -- Basic_Training_-_Movement
+    ["To reach higher ground, walk to a ledge, look to the left, then do a back jump."] = "By dostać się na wyższy poziom, wejdź na krawędz, spójrz w lewo i wykonaj skok w tył.", -- Basic_Training_-_Movement
     ["Torn Muscle"] = "Rozerwany Mięsień", -- A_Classic_Fairytale:journey
     ["To the caves..."] = "Do jaskiń...", -- A_Classic_Fairytale:united
     ["Touch all waypoints as fast as you can!"] = "Dotknij wszystkich punktów kontrolnych najszybciej jak potrafisz!", -- Racer
@@ -2473,7 +2473,7 @@
     ["Trapper"] = "Traper", -- HedgeEditor
     ["Travel carefully as your fuel is limited"] = "Lataj ostrożnie, gdyż twoje paliwo jest ograniczone", -- A_Space_Adventure:cosmos
     ["Travel to all the neighbor planets and collect all the pieces"] = "Poleć na wszystkie sąsiednie planety i zbierz wszystkie części", -- A_Space_Adventure:cosmos
---      ["Treasure: Massive weapon bonus in first turn."] = "", -- Continental_supplies
+    ["Treasure: Massive weapon bonus in first turn."] = "Skarb: Masywny bonus broni w pierwszej turze.", -- Continental_supplies
     ["Tribe"] = "Plemię", -- A_Classic_Fairytale:backstab
     ["TrophyRace"] = "TrophyRace",
     ["Trunks"] = "Trunks",
@@ -2534,13 +2534,13 @@
     ["Unlucky Sods"] = "Pechowi Kolesie", -- User_Mission_-_Rope_Knock_Challenge
     ["Unstoppable!"] = "Nie do zatrzymania!",
     ["Unsuspecting Louts"] = "Niepodejrzewające Chamy", -- User_Mission_-_Rope_Knock_Challenge
---      ["Up/Down: Adjust dust storm damage"] = "", -- Continental_supplies
---      ["Up/Down: Browse through continents"] = "", -- Continental_supplies
+    ["Up/Down: Adjust dust storm damage"] = "Góra/Dół: Dostosuj obrażenia burzy pyłowej", -- Continental_supplies
+    ["Up/Down: Browse through continents"] = "Góra/Dół: Przeglądaj kontynenty", -- Continental_supplies
     ["Up/Down: Change placement mode"] = "Góra/Dół: Zmień tryb stawiania", -- HedgeEditor
     ["Up/down: Choose crate type"] = "Góra/Dół: Zmień typ skrzyni", -- Construction_Mode
     ["Up/down: Choose object type|1-5/Switch/Left/Right: Choose mine timer|Cursor: Place object"] = "Góra/Dół: Wybierz typ obiektu|1-5/Zmiana/Lewo/Prawo: Wybierz czas miny|Kursor: Ustaw obiekt", -- Construction_Mode
     ["Upper-class elite pilot"] = "Elitarny pilot wyższej klasy", -- User_Mission_-_RCPlane_Challenge
---      ["Upside-Down World"] = "", -- Continental_supplies
+    ["Upside-Down World"] = "Świat do góry nogami", -- Continental_supplies
     ["Use it wisely!"] = "Użyj tego mądrze!", -- A_Classic_Fairytale:dragon
     ["Use it with precaution!"] = "Użyj tego z ostrożnośćią!", -- A_Classic_Fairytale:first_blood
     ["User Challenge"] = "Wyzwanie użytkownika",
@@ -2634,7 +2634,7 @@
     ["Weapons: Each team starts with %d weapon points"] = "Bronie: ażda drużyna zaczyna z %d punktami broni", -- Battalion
     ["Weapons: Hogs will get 1 out of 3 weapons randomly each turn"] = "Bronie: Jeże dostaną 1 z 3 broni losowo w każdej turze", -- Battalion
     ["Weapons: Nearly every hog variant gets 1 kamikaze"] = "Bronie: Prawie każdy wariant jeża dostaje 1 kamikaze", -- Battalion
---      ["Weapon specials: Some weapons have special modes (see weapon description)."] = "", -- Continental_supplies
+    ["Weapon specials: Some weapons have special modes (see weapon description)."] = "Speciały broni: Niektóre bronie mają specjalne tryby (zobacz opis broni).", -- Continental_supplies
     ["Weapons Reset"] = "Reset broni",
     ["Weapons reset: The weapons are reset after each turn."] = "Reset broni: Bronie resetują się po każdej turze.", -- WxW
     ["We are indeed."] = "Jesteśmy zaiste.", -- A_Classic_Fairytale:backstab
@@ -2776,7 +2776,7 @@
     ["Yay, we won!"] = "Jej, wygraliśmy!", -- A_Classic_Fairytale:enemy
     ["Y Chwiliad"] = "Y Człiliad", -- A_Classic_Fairytale:dragon
     ["Yeah...I think it's a 'he', lol."] = "Racja... zdaje się, że to \"on\", lol.", -- A_Classic_Fairytale:shadow
---      ["Yeah, sure! I died. Hilarious!"] = "", -- A_Classic_Fairytale:backstab
+    ["Yeah, sure! I died. Hilarious!"] = "Tak, racja! Umarłem. Przezabawne!", -- A_Classic_Fairytale:backstab
     ["Yeah, sure! I died. Hillarious!"] = "Racja, pewnie! Umarłem. Komiczne.", -- A_Classic_Fairytale:backstab
     ["Yeah, take that!"] = "Tak, przyjmij to!", -- A_Classic_Fairytale:dragon
     ["Yeah? Watcha gonna do? Cry?"] = "Tak? Co zamierzasz zrobić? Płakać?", -- A_Classic_Fairytale:journey
@@ -2811,9 +2811,9 @@
     ["You can choose another planet by replaying this mission."] = "Możesz wyrać inną planetę, grając w tę misję jeszcze raz.", -- A_Space_Adventure:cosmos
     ["You can dive with your flying saucer!"] = "Możesz nurkować swoim spodkiem!", -- Basic_Training_-_Flying_Saucer
     ["You can even change your aiming direction in mid-flight if you first hold [Precice] and then press [Up] or [Down]."] = "Możesz zmieniać kierunek celowania w locie, jeśli najpierw przytrzymasz [Precyzja], a potem wciśniesz [Góra] lub [Dół].", -- Basic_Training_-_Flying_Saucer
---      ["You can even change your aiming direction in mid-flight if you first hold [Precise] and then press [Up] or [Down]."] = "", -- Basic_Training_-_Flying_Saucer
+    ["You can even change your aiming direction in mid-flight if you first hold [Precise] and then press [Up] or [Down]."] = "Możesz nawet zmienić swój kierunek celowania w czasie lotu, jeśli wpierw przytrzymasz [Precyzję] i wciśniesz [Góra] lub [Dół]", -- Basic_Training_-_Flying_Saucer
     ["You can further customize the race by changing the scheme script paramater."] = "Możesz jeszcze dostosować swój wyścig, zmieniając parametr skryptu w schemacie.", -- TechRacer
---      ["You can further customize the race by changing the scheme script parameter."] = "", -- TechRacer
+    ["You can further customize the race by changing the scheme script parameter."] = "Możesz bardziej dostosować wyścig, zmienając parametr skryptu w schemacie.", -- TechRacer
     ["You can only use the sniper rifle or the watermelon bomb."] = "Możesz użyć tylko karabinu snajperskiego lub bomby arbuzowej.", -- A_Space_Adventure:fruit03
     ["You can practice moving around and using utilities in this mission.|However, it will never end!"] = "W tej misji możesz poćwiczyć chodzenie i używanie narzędzi.|Jednakże, ona nigdy się nie skończy!", -- A_Classic_Fairytale:epil
     ["You can set the bounciness of grenades (and grenade-like weapons)."] = "Możesz ustawić odbijalnoś granatów (i granato-podobnych broni).", -- Basic_Training_-_Grenade
--- a/share/hedgewars/Data/Locale/pl.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/pl.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -60,7 +60,7 @@
 00:56=Tasak
 00:57=Guma
 00:58=Mina powietrzna
-
+00:59=Creeper
 00:60=Minigun
 
 01:00=Wczytywanie...
@@ -104,6 +104,13 @@
 01:38=%1 powraca.
 01:39=%1 automatycznie pomija turę.
 01:40=%1 klatek na sekundę
+01:41=Parsowanie Lua: WYŁĄCZONE
+01:42=Parsowanie Lua: WŁĄCZONE
+01:43=Parsowanie Lua jest niedozwolone w grze online!
+01:44=%1×
+01:45=%1: %2
+01:46=[Klan] %1: %2
+01:47=[%1]: %2
 
 ; Zdarzenia
 ; Jeż (%1) umiera
@@ -605,7 +612,7 @@
 03:56=Nie przytnij sobie igieł!
 03:57=Narzędzie
 03:58=Latająca bomba zbliżeniowa
-
+03:59=Niedokończona broń
 03:60=Ostateczna broń palna
 
 ; Weapon Descriptions (use | as line breaks)
@@ -640,7 +647,7 @@
 04:28=Krótko po wystrzeleniu, rakieta zacznie wiercić tunel w ziemi|i eksploduje gdy zapalnik zostanie uruchomiony lub jeśli|pojawi się po drugiej stronie terenu.|Atak: Przytrzymaj by strzelić z większą siłą
 04:29=Tego nie powinny używać dzieci!|Pistolet na kulki wystrzeliwuje tony małych|kolorowych kulek wypełnionych materiałem|wybuchowym.|Atak: Strzel kulkami|Góra/Dół: Kontynuuj celowanie
 04:30=Wezwij samolot, żeby zrzucić dużą ilość|napalmu. Dzięki dobremu celowi ten atak|może zlikwidować dużą część mapy, w tym|znajdujące się tam nieszczęsne jeże.|Lewo/Prawo: Określ kierunek ataku|Kursor: Wybierz obszar
-04:31=Zaatakuj odległych przeciwników, bądź zbierz|skrzynki! Nie zapomnij o zrzuceniu bomb!|Góra/Dół: Steruj samolotem|Atak: Zrzuć bombę (3x) |Długi skok: Niech Walkirie wkroczą na pole bitwy!
+04:31=Zaatakuj odległych przeciwników, bądź zbierz|skrzynki! Nie zapomnij o zrzuceniu bomb!|Lewo/Prawo: Steruj samolotem|Atak: Zrzuć bombę (3x) |Długi skok: Niech Walkirie wkroczą na pole bitwy!
 04:32=Niska grawitacja jest skuteczniejsza od dowolnej|diety! Skacz wyżej i na większy dystans lub pozwól|przeciwnikom lecieć jeszcze dalej.|Atak: Aktywuj
 04:33=Czasami potrzebujesz dodatkowego kopa|żeby zadawać większe obrażenia. Włącze-|nie spowoduje zwiększenie zadawanych|obrażeń o 50% do końca tury.|Atak: Aktywuj
 04:34=Czyni Cię nieważliwym na obrażenia do za-|kończenia tury. Ale nie szalej, nadal możesz|utonąć.|Atak: Aktywuj
@@ -668,7 +675,7 @@
 04:56=Rzuć w przeciwnika dwoma tasakami i zablokuj mu |drogę lub użyj ich do wspinaczki! Jednak uważaj! |Te tasaki są naprawdę ostre!|Atak: Przytrzymaj by rzucić z większą siłą (dwukrotnie)
 04:57=Tworzy elastyczne paski wykonane z gumy,|od których jeże i inne rzeczy odbijają się|bez obrażeń przy upadku.|Lewo/Prawo: Zmiana orientacji paska|Kursor: Umieść pasek w aktualnej pozycji
 04:58=Ta mina będzie się swobodnie unisić w powietrzu i|podążać za jeżami, które się do niej zblizą.|Jej eksplozja jest jednakże mniejsza niż miny przeciwpiechotnej.|Atak: Przytrzymaj by rzucić z większą siłą
-
+04:59=Ta broń jest niedokończona i eksperymentalna.|Używaj na własne ryzyko!
 04:60=Wywołaj deszcz pocisków na swoich wrogów!|A oni myśleli, że są bezpieczni za potrójną|warstwą belek.|Atak: Strzel z pełną mocą|Góra/Dół: Kontynuuj celowanie
           
 ; Game goal strings
@@ -695,3 +702,33 @@
 05:20=Każdy z jeży ma oddzielne uzbrojenie
 05:21=Zespół: Zespoły w klanie wykonują tury po kolei|Wspólny czas: Czas jest wspólny dla każdej drużyny w zespole
 05:22=Silny wiatr: Wiatr wpływa prawie na wszystko
+
+
+; Chat command help
+06:00=Lista podstawowych komend czatu klienta:
+06:01=/togglechat: Przełącz wyświetlanie czatu
+06:02=/clan <wiadomość>: Wyślij wiadomość tylko do członków klanu
+06:03=/me <wiadomość>: Akcja czatu, np. “/me je pizzę” staje się “* Gracz je pizzę”
+06:04=/pause: Przełącz pauzę
+06:05=/pause: Przełącz auto-pomijanie
+06:06=/fullscreen: Przełącz pełny ekran
+06:07=/quit: Wyjdź z Hedgewars
+06:08=/help: Wyświetl listę podstawowych komend czatu klienta
+06:09=/help taunts: Wyświetl listę kpiących komend czatu
+06:10=/history: Przełącz wyświetlanie długiej historii czatu
+06:11=/lua: Przełącz parsowanie Lua (dla twórców)
+06:12=Lista kpiacych komend czatu:
+06:13="tekst": Umieść tekst w dymku rozmowy
+06:14='tekst': Umieść tekst w dymku myślenia
+06:15=-tekst-: Umieść tekst w dymku krzyczenia
+06:16=Dla powyższych komend, podaj numer na początku tekstu, by wybrać jeża.
+06:17=/hsa <tekst>: Umieść tekst w dymku rozmowy w następnym ataku
+06:18=/hta <tekst>: Umieść tekst w dymku myślenia w następnym ataku
+06:19=/hya <tekst>: Umieść tekst w dymku krzyczenia w następnym ataku
+06:20=/hurrah: Spraw, by jeż się cieszył
+06:21=/ilovelotsoflemonade: Spraw, by jeż sikał
+06:22=/juggle: Spraw, by jeż żonglował
+06:23=/rollup: Spraw, by jeż przewrócił oczami
+06:24=/shrug: Spraw, by jeż wzruszył ramionami
+06:25=/wave: Spraw, by jeż pomachał dłonią
+06:26=Nieznana komenda lub niepoprawne parametry. Powiedz w czacie "/help" dla listy komend.
--- a/share/hedgewars/Data/Locale/pt_PT.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/pt_PT.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -1256,7 +1256,7 @@
 	["Keep it up!"] = "Continua assim!",
 --      ["Ken"] = "", -- 
 --      ["Kenshi"] = "", -- 
-	["Kerguelen"] = "", -- Continental_supplies
+--	["Kerguelen"] = "", -- Continental_supplies
 --      ["key."] = "", -- Continental_supplies
 --      ["Kill all enemy hedgehogs in a single turn."] = "", -- Big_Armory
 --      ["Kill him or skip your turn."] = "", -- A_Classic_Fairytale:backstab
@@ -1416,7 +1416,7 @@
 --      ["Modifiers: Unlimited attacks, shared clan ammo"] = "", -- Battalion
 --      ["Modify Sprite under Cursor: [Left Click]"] = "", -- HedgeEditor
 --      ["Molly"] = "", -- 
-	["Molotov"] = "", -- Continental_supplies
+--	["Molotov"] = "", -- Continental_supplies
 --      ["Monster kill!"] = "", -- Mutant
 --      ["Monsters"] = "", -- 
 --      ["Mooney"] = "", -- 
--- a/share/hedgewars/Data/Locale/tips_pl.xml	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/tips_pl.xml	Thu Nov 01 02:55:22 2018 +0300
@@ -6,12 +6,12 @@
     <tip>By grać ze swoim przyjacielem w tej samej drużynie, po prostu wybierzcie taki sam kolor obydwu zespołów. Każdy z was będzie sterować swoimi własnymi jeżami, ale wygracie bądź przegracie jako jedna drużyna.</tip>
     <tip>Niektóre z broni zadają mało punktów obrażeń, jednak użyte w odpowiednim momencie mogą pokazać pazur. Na przykład, spróbuj użyć pistoletu, by strącić swoich przeciwników do wody.</tip>
     <tip>Jeśli nie jesteś pewien, co zrobić w danej turze i nie chcesz tracić amunicji, możesz pominąć turę. Nie rób tak jednak zbyt często, gdyż nagła śmierć jest nieuchronna!</tip>
-    <tip>Znudzony domyślnymi ustawieniami gry? Spróbuj zagrać w którąś z misji. - oferują one zmienione zasady gry, w zależności od tej którą wybrałeś.</tip>
+    <tip>Znudzony domyślnymi ustawieniami gry? Spróbuj zagrać w którąś z misji - oferują one zmienione zasady gry, w zależności od tej którą wybrałeś.</tip>
     <tip>Gra zawsze będzie zapisywała ostatnią rozgrywkę jako demo. Wybierz "Grę Lokalną" i kliknij przycisk "Dema", który znajduje się w prawym dolnym rogu ekranu, by je odtworzyć i zarządzać nimi.</tip>
     <tip>Hedgewars jest darmową grą o otwartym kodzie, którą tworzymy w naszym wolnym czasie. Jeśli masz jakiś problem, zapytaj na naszym forum lub odwiedź nasz kanał IRC!</tip>
     <tip>Hedgewars jest darmową grą o otwartym kodzie, którą tworzymy w naszym wolnym czasie. Jeśli ją lubisz, wspomóż nas małą wpłatą lub wnieś w nią trochę własnej pracy!</tip>
     <tip>Hedgewars jest darmową grą o otwartym kodzie, którą tworzymy w naszym wolnym czasie. Jeśli tylko chcesz, rozdaj ją swojej rodzinie i kolegom!</tip>
-    <tip>Hedgewars jest darmową grą o otwartym kodzie, którą tworzymy w naszym wolnym czasie, tylko dla zabawy! Poznaj twórcó na <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
+    <tip>Hedgewars jest darmową grą o otwartym kodzie, którą tworzymy w naszym wolnym czasie, tylko dla zabawy! Poznaj twórców na <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
     <tip>Od czasu do czasu będą organizowane mistrzostwa. Będą one ogłaszane z wyprzedzeniem na <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a>.</tip>
     <tip>Hedgewars jest dostępne w wielu językach. Jeśli brakuje tłumaczenia w twoim języku bądź jest ono niekompletne, nie bój się z nami skontaktować!</tip>
     <tip>Hedgewars może być uruchomione na różnych systemach operacyjnych, takich jak Microsoft Windows, Mac OS X, oraz GNU/Linux.</tip>
--- a/share/hedgewars/Data/Locale/tr.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/tr.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -1718,7 +1718,6 @@
 --      ["Protect the King: When the king dies, so does the team"] = "", -- Battalion
 --      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
 --      ["Protect yourselves!|Grenade hint: Set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-	["PUNKTESTAND"] = "",
 --      ["Purple"] = "", -- 
 --      ["Pyro"] = "", -- HedgeEditor, The_Specialists
 --      ["Pyromancer"] = "", -- Battalion
@@ -2016,7 +2015,6 @@
 --      ["Spectator"] = "", -- 
 --      ["Speed Roping"] = "", -- Basic_Training_-_Rope
 --      ["Speed Shoppa"] = "", -- SpeedShoppa
-	["Spielmodifikatoren: "] = "",
 --      ["Spike"] = "", -- A_Space_Adventure:desert01
 --      ["Spikes"] = "", -- 
 --      ["Spiky Cheese"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
--- a/share/hedgewars/Data/Locale/uk.lua	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Locale/uk.lua	Thu Nov 01 02:55:22 2018 +0300
@@ -3017,6 +3017,5 @@
         ["'Zooka Team"] = "Команда 'Zooka",
 --      ["Zook"] = "", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
 --      ["Zork"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
-        ["Ей! Так не чесно!"] = "", -- A_Classic_Fairytale:journey
         ["!!!"] = "Я!",
 }
--- a/share/hedgewars/Data/Sounds/voices/British/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/British/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Classic/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Classic/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,14 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+# FIXME: Revenge.ogg is "I'll get you back" but this taunt is meant for
+# successful reveng, not the announcement thereof.
+#Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Default/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Default/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Default_uk/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Default_uk/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Mobster/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Mobster/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Pirate/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Pirate/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Robot/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Robot/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Russian/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Russian/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Singer/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Singer/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg
--- a/share/hedgewars/Data/Sounds/voices/Surfer/CMakeLists.txt	Wed Oct 31 23:36:05 2018 +0100
+++ b/share/hedgewars/Data/Sounds/voices/Surfer/CMakeLists.txt	Thu Nov 01 02:55:22 2018 +0300
@@ -6,6 +6,7 @@
 Byebye.ogg
 Comeonthen.ogg
 Coward.ogg
+Cutitout.ogg
 Drat.ogg
 Enemydown.ogg
 Excellent.ogg
@@ -16,6 +17,7 @@
 Gonnagetyou.ogg
 Grenade.ogg
 Hello.ogg
+Hmm.ogg
 Hurry.ogg
 Illgetyou.ogg
 Incoming.ogg
@@ -23,6 +25,7 @@
 Justyouwait.ogg
 Kamikaze.ogg
 Laugh.ogg
+Leavemealone.ogg
 Melon.ogg
 Missed.ogg
 Nooo.ogg
@@ -30,10 +33,12 @@
 Ohdear.ogg
 Ooff*.ogg
 Oops.ogg
+Ouch.ogg
 Ow*.ogg
 PoisonCough.ogg
 PoisonMoan.ogg
 Reinforcements.ogg
+Revenge.ogg
 Runaway.ogg
 Sameteam.ogg
 Solong.ogg