summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2019-02-24 15:01:47 +0100
committerDidier Raboud <odyx@debian.org>2019-02-24 15:01:47 +0100
commit79b111dee86d6440debd4694b57cc0be6fd1e58f (patch)
tree0d19aa6b589708126460c9bd4af058412c410358
parentfddbb44d340ab917df694d04c82733500bff68a4 (diff)
parenta8c7c83494c86457091dc1b1ac8b1aa5b7d03a9c (diff)
Merge tag 'upstream/1.14.0' into debian/experimental
-rw-r--r--CMakeLists.txt14
-rw-r--r--COPYING29
-rw-r--r--README-user.md107
-rw-r--r--README.md5
-rw-r--r--README.voices.md38
-rw-r--r--blupi.pngbin0 -> 73786 bytes
-rw-r--r--planetblupi.6.ronn8
-rw-r--r--resources/data/de/stories.blp148
-rw-r--r--resources/data/en/stories.blp186
-rw-r--r--resources/data/he/stories.blp1113
-rw-r--r--resources/data/it/stories.blp186
-rw-r--r--resources/data/pl/stories.blp70
-rw-r--r--resources/data/pt/stories.blp1144
-rw-r--r--resources/data/tr/stories.blp1096
-rw-r--r--resources/image/button00.pngbin34918 -> 45187 bytes
-rw-r--r--resources/image/he/init.pngbin0 -> 78084 bytes
-rw-r--r--resources/image/little.pngbin1088 -> 2166 bytes
-rw-r--r--resources/image/setup00.pngbin203607 -> 211042 bytes
-rw-r--r--resources/image/text.pngbin7422 -> 20741 bytes
-rw-r--r--resources/linux/planetblupi.appdata.xml21
-rw-r--r--resources/po/fr.po14
-rw-r--r--resources/po/he.po975
-rw-r--r--resources/po/it.po40
-rw-r--r--resources/po/pl.po38
-rw-r--r--resources/po/planetblupi.pot2
-rw-r--r--resources/po/pt.po960
-rw-r--r--resources/po/tr.po972
-rw-r--r--resources/sound/he/sound002.wavbin0 -> 17004 bytes
-rw-r--r--resources/sound/he/sound003.wavbin0 -> 15020 bytes
-rw-r--r--resources/sound/he/sound004.wavbin0 -> 24094 bytes
-rw-r--r--resources/sound/he/sound005.wavbin0 -> 25810 bytes
-rw-r--r--resources/sound/he/sound006.wavbin0 -> 32812 bytes
-rw-r--r--resources/sound/he/sound007.wavbin0 -> 31532 bytes
-rw-r--r--resources/sound/he/sound008.wavbin0 -> 25838 bytes
-rw-r--r--resources/sound/he/sound009.wavbin0 -> 26348 bytes
-rw-r--r--resources/sound/he/sound010.wavbin0 -> 19564 bytes
-rw-r--r--resources/sound/he/sound014.wavbin0 -> 18732 bytes
-rw-r--r--resources/sound/he/sound017.wavbin0 -> 44332 bytes
-rw-r--r--resources/sound/he/sound018.wavbin0 -> 94766 bytes
-rw-r--r--resources/sound/he/sound019.wavbin0 -> 45422 bytes
-rw-r--r--resources/sound/he/sound027.wavbin0 -> 44398 bytes
-rw-r--r--resources/sound/he/sound033.wavbin0 -> 76462 bytes
-rw-r--r--resources/sound/he/sound037.wavbin0 -> 66670 bytes
-rw-r--r--resources/sound/he/sound056.wavbin0 -> 52782 bytes
-rw-r--r--resources/sound/he/sound057.wavbin0 -> 28716 bytes
-rw-r--r--resources/sound/he/sound058.wavbin0 -> 42358 bytes
-rw-r--r--resources/sound/he/sound059.wavbin0 -> 38548 bytes
-rw-r--r--resources/sound/he/sound060.wavbin0 -> 26284 bytes
-rw-r--r--resources/sound/he/sound061.wavbin0 -> 22508 bytes
-rw-r--r--resources/sound/he/sound062.wavbin0 -> 32236 bytes
-rw-r--r--resources/sound/he/sound063.wavbin0 -> 35886 bytes
-rw-r--r--resources/sound/he/sound064.wavbin0 -> 35948 bytes
-rw-r--r--resources/sound/he/sound065.wavbin0 -> 30766 bytes
-rw-r--r--resources/sound/he/sound066.wavbin0 -> 43886 bytes
-rw-r--r--resources/sound/he/sound067.wavbin0 -> 48046 bytes
-rw-r--r--resources/sound/he/sound068.wavbin0 -> 26924 bytes
-rw-r--r--resources/sound/he/sound069.wavbin0 -> 24620 bytes
-rw-r--r--resources/sound/he/sound070.wavbin0 -> 26626 bytes
-rw-r--r--resources/sound/he/sound071.wavbin0 -> 20972 bytes
-rw-r--r--resources/sound/he/sound072.wavbin0 -> 30636 bytes
-rw-r--r--resources/sound/he/sound073.wavbin0 -> 22892 bytes
-rw-r--r--src/blupi.cxx38
-rw-r--r--src/button.cxx89
-rw-r--r--src/button.h6
-rw-r--r--src/decblupi.cxx38
-rw-r--r--src/decor.cxx16
-rw-r--r--src/decstat.cxx22
-rw-r--r--src/def.h14
-rw-r--r--src/event.cxx366
-rw-r--r--src/event.h3
-rw-r--r--src/menu.cxx20
-rw-r--r--src/misc.cxx11
-rw-r--r--src/misc.h11
-rw-r--r--src/pixmap.cxx66
-rw-r--r--src/pixmap.h14
-rw-r--r--src/progress.cxx29
-rw-r--r--src/sound.h6
-rw-r--r--src/text.cxx257
-rw-r--r--src/text.h9
79 files changed, 7396 insertions, 785 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 192e9bf..55246d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,8 +14,8 @@ link_directories (${CMAKE_INSTALL_PREFIX}/lib)
project (planetblupi)
set (PB_VERSION_MAJOR 1)
-set (PB_VERSION_MINOR 13)
-set (PB_VERSION_PATCH 2)
+set (PB_VERSION_MINOR 14)
+set (PB_VERSION_PATCH 0)
set (PB_VERSION_EXTRA "")
set (PB_PRODUCT_NAME "Planet Blupi")
set (PB_PACKAGE_NAME "planetblupi")
@@ -93,10 +93,13 @@ else ()
)
endif ()
file (COPY resources/image DESTINATION share/planetblupi)
-file (COPY resources/movie DESTINATION share/planetblupi)
+if (NOT BUILD_JS)
+ file (COPY resources/movie DESTINATION share/planetblupi)
+endif ()
file (COPY resources/sound DESTINATION share/planetblupi)
file (COPY resources/music DESTINATION share/planetblupi)
file (COPY LICENSE.all DESTINATION share/doc/planetblupi)
+file (COPY COPYING DESTINATION share/doc/planetblupi)
file (RENAME "${CMAKE_BINARY_DIR}/share/doc/planetblupi/LICENSE.all"
"${CMAKE_BINARY_DIR}/share/doc/planetblupi/copyright")
@@ -306,9 +309,14 @@ if (NOT BUILD_JS)
install (DIRECTORY resources/sound DESTINATION share/planetblupi)
install (DIRECTORY resources/music DESTINATION share/planetblupi)
install (FILES LICENSE.all DESTINATION share/doc/planetblupi RENAME copyright)
+ install (FILES COPYING DESTINATION share/doc/planetblupi)
if (UNIX AND NOT APPLE)
install (DIRECTORY resources/icon/hicolor DESTINATION share/icons)
+ install (
+ FILES resources/linux/${PB_PACKAGE_NAME}.appdata.xml
+ DESTINATION share/metainfo
+ )
endif ()
if (NOT USE_APPIMAGE)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c627928
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+# Copying
+
+| Years | People |
+| --------- | ---------------------------------------------------------------- |
+| | **Developers** |
+| 1997 | Daniel Roux and Denis Dumoulin |
+| 2017-2019 | Mathieu Schroeter |
+| | |
+| | **Voices** |
+| 1997 | Daniel Roux, David Besuchet, Michael Walz and Garry Goodman |
+| | |
+| | **Translators** |
+| 1997 | Christian Alleyn, Michael Walz, David Besuchet, Cedric Freeman, |
+| | Adrienne Magnin and Wendy de Pauli |
+| 2005 | Rodolfo Andrade de Oliveira and Vanessa Alexandre Vieira |
+| 2017 | Catia Guidi and Mateusz Lis |
+| 2019 | punctdan _(@github)_ and TheShwarma _(@twitter)_ |
+| | |
+| | **Missions** |
+| 1997 | Daniel Roux, Adrien Roux and Denis Dumoulin |
+| | |
+| | **Testers** |
+| 1997 | Denis Dumoulin, Adrien Roux, Michael Walz, René Beuchat, |
+| | Pierre Arnaud, Michèle Cottler, Arnaud Cottler, Daniel Durussel, |
+| | Audrey Durussel, Laurianne Durussel, Philippe Menu, |
+| | Michael Bloch, Florian Stutzmann, Fabrice Bodmer, |
+| | Rachel Besuchet, Pauline Rochat, Antoine Richoy, |
+| | Fabrice Marquis, Steve Guex, Simon Lopez, David Piot, |
+| | Yves Burgos and Jeremy Kull |
diff --git a/README-user.md b/README-user.md
deleted file mode 100644
index 7543bd4..0000000
--- a/README-user.md
+++ /dev/null
@@ -1,107 +0,0 @@
-
-# Planet Blupi
-
-This version contains over 30 missions and a built in editor, which enables you
-to construct your own missions.
-
-## Configuration
-
-| Category | Description |
-| -------- | ----------- |
-| OS | At least GNU/Linux 2.6.32, macOS 10.9 or Microsoft Windows Vista |
-| VIDEO | An 3D accelerated video card is highly recommended |
-| SOUND | Any sound card supported by ALSA, PulseAudio, macOS or DirectSound |
-| INPUT | Keyboard and mouse |
-
-## Screen problems
-
-What ever your screen resolution is, the game "Planet Blupi" always runs in
-640x480 on full screen. If your screen does not support this mode, you may run
-the game by default in windowed mode. Proceed as follows:
-
-1. Quit the game _Planet Blupi_.
-2. Open the file `share/planetblupi/data/config.json` with a text editor.
-3. Replace `fullscreen: true` by `fullscreen: false`.
-4. Save and restart the game.
-
-In this mode the screen is no more scrolled if the mouse touches the window
-border. Use the Keyboard arrows instead.
-
-> It's possible to start the game with `--fullscreen off` instead of editing
-> the `config.json` file.
-
-If the problem persists, maybe you should try to start the game with the software
-renderer. Edit the `config.json` file and add `"renderer": "software"` or start
-the game with `--renderer software`.
-
-On Windows, an other possibility exists. You can try to change the driver used
-by the software renderer. By default it uses `"direct3d"`, you can change by
-`"opengl"` with `"driver": "opengl"` with the `config.json` file or
-`--driver opengl` by command line argument.
-
-## Mouse
-
-Left button:
-This button is always used in three steps:
-
-1. Select a Blupi.
-2. Click where you want him to act.
-3. Click the button corresponding to the required operation.
-
-If the chosen Blupi is already selected (blue or red circle around him),
-step 1) is not necessary.
-
-You may select several Blupis by maintaining the Shift button pressed.
-
-Right button:
-The right button is a shortcut. It orders the selected Blupi to do the most
-useful operation on the selected spot.
-
-## Keyboard
-
-| Keys | Description |
-| ------------ | ----------- |
-| <kbd>Arrows</kbd> | Scrolls the visible part of the scene. |
-| <kbd>Spacebar</kbd> | Shows or hides items. |
-| <kbd>F1</kbd> | Describes the goal without interrupting the game. |
-| <kbd>F5</kbd> | Normal speed (x1). |
-| <kbd>F6</kbd> | Double speed (x2). |
-| <kbd>Home</kbd> | Returns to place of mission departure |
-| <kbd>Ctrl</kbd>+<kbd>F9</kbd>..<kbd>F12</kbd> | Bookmarks a spot. |
-| <kbd>F9</kbd>..<kbd>F12</kbd> | Returns to the corresponding bookmarked spot. |
-| <kbd>Pause</kbd> | Temporarily suspends the game. |
-
-When you switch to an other application, the game is automatically paused.
-
-## Music
-
-The music is provided in OGG and MIDI formats. The OGG variant is prefered
-because the render is the same for all platforms. For purist fanboys, it's
-possible to enforce the MIDI variant by starting the game with the
-`--restore-midi` command line argument. Note that in this case, it's possible
-to lose some instruments, it depends of your system.
-
-> You can edit the `share/planetblupi/data/config.json` file and add an entry
-> `"restoremidi": true`, or simply use the new settings available in the global
-> settings screen in the game.
-
-If you want, you can overload all musics with yours by providing OGG or MIDI
-music files in your user directory.
-
-On Windows, type `%APPDATA%\Epsitec SA\Planet Blupi` in the file browser,
-on macOS, look at `~/Library/Application Support/Epsitec SA/Planet Blupi`, and
-on Linux, look at `~/.local/share/Epsitec SA/Planet Blupi`.
-
-You can create a `music` sub-directory with your music. For example:
-`%LOCALAPPDATA%\Epsitec SA\Planet Blupi\music\music000.ogg`.
-
-Only 10 musics are supported: `music000` to `music009`.
-
-## Epsitec SA
-
-_Planet Blupi_ is an original creation of [Epsitec SA][1].
-
-http://www.blupi.org
-info@blupi.org
-
-[1]: http://www.epsitec.ch
diff --git a/README.md b/README.md
index 50bca49..d2266dc 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,12 @@
-
# Planet Blupi
+![blupi](blupi.png)
+
Please, do not use this repository directly for development but refer to the
bundle located at <https://github.com/blupi-games/planetblupi-dev.git>.
+See the [manpage](planetblupi.6.ronn) for a user README.
+
## Original versions (1997)
You can find "mostly" the original source code from previous versions (v1.7 and
diff --git a/README.voices.md b/README.voices.md
new file mode 100644
index 0000000..bba64d6
--- /dev/null
+++ b/README.voices.md
@@ -0,0 +1,38 @@
+# Blupi voices
+
+| File | Context | en | en_US | fr | de | it | pl (proposal) |
+| -------- | ---------------------------------- | --------------------- | ----------------------- | ----------------------- | ------------------- | ----------------- | --------------------- |
+| sound056 | Blupi can't do what is asked for | I can't do that | I can't do it | J'y arrive pas | **?** | **?** | Nie mogę tego zrobić |
+| sound057 | " | Impossible | Impossible | Impossible | **?** | **?** | Niemożliwe |
+| sound058 | " | Oh no | No way | Mais non | Nein nein | **?** | Nie ma mowy |
+| sound002 | Blupi is selected | Yes? | Yes? | Oui ? | Ja? | Si? | Tak? |
+| sound003 | " | Hi! | Hi! | Ohé | **?** | **?** | Cześć! |
+| sound004 | " | Master? | Yes Master! | Maître ? | Meister? | **?** | Tak szefie? |
+| sound059 | " | What's the news? | What do you want? | C'est à quel sujet ? | **?** | **?** | W czym mogę pomóc? |
+| sound060 | " | Hello boss | Hey boss | A vos ordres ! | **?** | **?** | Cześć szefie! |
+| sound061 | " | What's up? | What's up? | Qu'est-ce qu'y y'a ? | Was ist los? | **?** | Co tam? |
+| sound062 | Blupi is selected when he is tired | Not again | Not again | Ouaip ! | **?** | **?** | Tylko nie to |
+| sound063 | " | I beg your pardon? | Pardon me? | J'vous demande pardon ? | Was ist los?! | **?** | Przepraszam? |
+| sound064 | " | Now what? | Now what? | Quoi encore ! | Jaa! | **?** | I co teraz? |
+| sound065 | Blupi is selected too many times | I'm fed up | I'm fed up | Ca suffit maint'nant. | **?** | **?** | Mam już dosyć |
+| sound066 | " | Leave me alone | Leave me alone | Laissez-moi tranquille. | **?** | **?** | Zostaw mnie w spokoju |
+| sound067 | " | You're driving me mad | You're driving me crazy | J'vais m'fâcher ! | **?** | **?** | Denerwujesz mnie |
+| sound005 | Blupi begins an action | It won't be long | Okay | D'accord ! | Okay | Okay | Okej |
+| sound006 | " | Let's go! | Let's go! | J'y vais | **?** | **?** | Idziemy! |
+| sound007 | " | Just a sec | Just a sec | Un instant | **?** | Un momento | Chwilunia |
+| sound068 | " ... if multiple selection | You're the boss | You're the boss | C'est vous l'patron | In Ordnung | **?** | Ty jesteś tu szefem |
+| sound069 | " ... " | Why not? | Why not? | C'est d'accord | Alles klar | **?** | Czemu nie? |
+| sound070 | " ... " | Right! | Alright! | Entendu | **?** | **?** | Jasne! |
+| sound008 | Blupi has finished an action | There you are | There you are | Et voilà | **?** | **?** | I gotowe |
+| sound009 | " | Done that | All done | J'y suis | Fertig | **?** | Wszystko zrobione |
+| sound010 | " | Finish! | Finished! | Terminé! | Ich bin fertig | Finito! | Już! |
+| sound071 | " | It's done | It's done | C'est fait | **?** | **?** | Zrobione |
+| sound072 | " | It's finished | It's finished | C'est fini | Fertig | **?** | Skończone |
+| sound073 | " | I've finished | I've finished | J'ai fini | Ich bin fertig | **?** | Skończyłem |
+| sound014 | Blupi takes his momentum to jump | Hop! | Ha! | Hop! | Hop! | Boal! | Hop! |
+| sound017 | Blupi is burning | Aaaouch! | AAAAaaaaahh! | Aaaaaaaahhhh... | Aouaah-aouahh | Aaaaaaaahhhh... | Ałłłć! |
+| sound018 | Blupi dies of exhaustion | Chiuu...[pssst...] | Haaa...[pssst...] | Pffff...[hennnn...] | **?** | Haaa...[pffff...] | Fiu...[pssst...] |
+| sound019 | Blupi eats tomatoes | Yummy-yummy | Yumm-yumm | Miam-miam | Mjam-mjam | **?** | Mniam-mniam |
+| sound027 | Blupi catches a virus | A-tissue! | A-chu! | A-tchou! | **?** | **?** | A-psik! |
+| sound033 | Blupi picks flowers | La-la-lalalala... ♪♫ | Laa-lalala... ♪♫ | Lalalalala... ♪♫ | Laa-lalalalaa... ♪♫ | **?** | TROLOLOLOLO... ♪♫ |
+| sound037 | Blupi is crushed by a bulldozer | Au-aaa...! | AAAAa! | Aie | Aouuuu...! | **?** | Ajjj! |
diff --git a/blupi.png b/blupi.png
new file mode 100644
index 0000000..0924020
--- /dev/null
+++ b/blupi.png
Binary files differ
diff --git a/planetblupi.6.ronn b/planetblupi.6.ronn
index cf237a6..d87626e 100644
--- a/planetblupi.6.ronn
+++ b/planetblupi.6.ronn
@@ -45,7 +45,7 @@ borders. Use the keyboard arrows instead.
It's possible to start the game with `--fullscreen off` instead of editing
the `config.json` file.
-An other way is to start the game in legacy mode. With this mode, the game
+Another way is to start the game in legacy mode. With this mode, the game
runs with the original 640x480 resolution. Use `--legacy` on the command
line.
@@ -53,7 +53,7 @@ If the problem persists, maybe you should try to start the game with the
software renderer. Edit the `config.json` file and add `"renderer": "software"`
or start the game with `--renderer software`.
-An other possibility exists. You can try to change the driver used by the
+Another possibility exists. You can try to change the driver used by the
accelerated renderer. By default it uses `"direct3d"`, you can change by
`"opengl"` with `"driver": "opengl"` with the `config.json` file or
`--driver opengl` by command line argument.
@@ -104,11 +104,11 @@ useful operation on the selected spot.
* <kbd>Pause</kbd>:
Temporarily suspends the game (excepted with the hard difficulty).
-When you switch to an other application, the game is automatically paused.
+When you switch to another application, the game is automatically paused.
## MUSIC
-The music is provided in *OGG* and *MIDI* formats. The *OGG* variant is prefered
+The music is provided in *OGG* and *MIDI* formats. The *OGG* variant is preferred
because the render is the same for all platforms. For purist fanboys, it's
possible to enforce the *MIDI* variant by starting the game with the
`--restore-midi` command line argument. Note that in this case, it's possible
diff --git a/resources/data/de/stories.blp b/resources/data/de/stories.blp
index 896dd6b..049ded8 100644
--- a/resources/data/de/stories.blp
+++ b/resources/data/de/stories.blp
@@ -47,7 +47,7 @@ schwieriger:
2| blau = voll in Form
-Trick :
+Trick:
Wenn du das Sichtfenster verschieben
willst, bringe entweder den Mauszeiger
@@ -65,7 +65,7 @@ $3
-Trick :
+Trick:
Wenn Du besonders schnell sein willst,
dann halte die Maus mit der rechten
@@ -73,7 +73,7 @@ Hand und drücke auf die Pfeiltasten
mit der linken Hand (oder umgekehrt).
$4
-1|Ziel :
+1|Ziel:
1|
1|Alle vier Blupis müssen die Häuser
1|auf den Inseln im Norden erreichen.
@@ -83,12 +83,12 @@ $4
2|zu haben.
$5
-1|Ziel :
+1|Ziel:
1|
1|Lege zwei Tomatenhaufen auf die
1|gestreiften Quadrate.
1|
-1|Gehe folgendermassen vor :
+1|Gehe folgendermassen vor:
1|
1|1) Fälle einen Baum
@@ -101,7 +101,7 @@ $5
2| die Tomaten nicht essen).
$6
-1|Ziel :
+1|Ziel:
1|
1|Alle Blupis müssen eines der Häuser
1|auf einer kleinen Insel erreichen.
@@ -166,7 +166,7 @@ ist bedroht !
-2|Trick :
+2|Trick:
2|
2|Wenn Blupi von einem Baum ver-
2|deckt ist, kannst Du die Bäume
@@ -176,7 +176,7 @@ ist bedroht !
@1
-1|Lösung :
+1|Lösung:
1|
1|Befehle einem Blupi Bäume zu
1|fällen, und befehle den zwei
@@ -198,12 +198,12 @@ ist bedroht !
2| essen und suche das Dorf.
2|
2|
-2|Achtung :
+2|Achtung:
2|Ein unvorhergesehenes Ereignis
2|wird eintreten.
@2
-1|Hinweise :
+1|Hinweise:
1|
1|Baue zwei Palisaden, um die
1|Spinne daran zu hindern, die
@@ -213,20 +213,20 @@ ist bedroht !
2|im Osten.
#3
-1|Ziel :
+1|Ziel:
1|
1|Verhindere, dass die zwei
1|Blupis verbrennen, indem Du
1|eine Mauer baust.
-2|Achtung :
+2|Achtung:
2|
2|Der Moosuntergrund brennt
2|sehr gut...
@3
-1|Lösung :
+1|Lösung:
1|
1|1) Bearbeite einen Felsen
1|
@@ -241,13 +241,13 @@ ist bedroht !
#4
-1|Ziel :
+1|Ziel:
1|
1|Alle vier Blupis müssen die
1|gestreiften Quadrate erreichen.
@4
-1|Lösung :
+1|Lösung:
1|
1|1) Fälle einen Baum.
1|
@@ -262,13 +262,13 @@ ist bedroht !
2|nun die Brücke überqueren.
#5
-1|Die Falle :
+1|Die Falle:
1|Achtung, der Boden wo die Blupis
1|gefangen sind ist brennbar, und
1|die Feuersbrunst kommt immer
1|näher.
1|
-1|Ziel :
+1|Ziel:
1|Alle Blupis müssen überleben, bis
1|das Feuer ausgegangen ist.
@@ -277,7 +277,7 @@ ist bedroht !
2|anstrengend, dass der Blupi
2|danach stirbt !
-Trick :
+Trick:
Wenn Du das Spiel zu langsam
findest, kannst Du es schneller
machen indem Du auf die Taste
@@ -285,7 +285,7 @@ F6 drückst. Mit F5 wird das
Spiel dann wieder langsamer.
@5
-1|Hinweise :
+1|Hinweise:
1|
1|Du musst vier Mauern auf den
1|grauen Platten bauen. Dazu
@@ -299,7 +299,7 @@ Spiel dann wieder langsamer.
2|ausgegangen ist.
#6
-1|Ziel :
+1|Ziel:
1|
1|Beschütze das Lager so schnell
1|wie möglich mit vier Wachtürmen.
@@ -308,14 +308,14 @@ Spiel dann wieder langsamer.
1|Quadrate im Osten erreichen.
-2|Trick :
+2|Trick:
2|Du kannst mehrere Blupis auf
2|einmal auswählen, indem Du die
2|Umschalt Taste drückst, während
2|Du auf die Blupis klickst.
@6
-1|Lösung :
+1|Lösung:
1|
1|Befehle vier Blupis Felsen zu
1|bearbeiten (bei kleine Felsen
@@ -333,7 +333,7 @@ Spiel dann wieder langsamer.
2|Quadrate im Osten erreichen.
#7
-1|Ziel :
+1|Ziel:
1|
1|Die vier Blupis müssen die
1|gestreiften Quadrate erreichen:
@@ -343,13 +343,13 @@ Spiel dann wieder langsamer.
-2|Achtung :
+2|Achtung:
2|
2|Du kannst hier leider kein
2|Gartenhäuschen bauen.
@7
-1|Lösung :
+1|Lösung:
1|
1|Befehle einem der Blupis die
1|Tomaten zu nehmen, um diese
@@ -367,7 +367,7 @@ Spiel dann wieder langsamer.
2|genügend Kraft um zu gehen.
#8
-Ziel :
+Ziel:
1|Vermeide die Ansteckung von
1|einem oder zwei Blupis, und finde
@@ -378,12 +378,12 @@ Ziel :
1|Haus gelangen.
-2|Hinweis :
+2|Hinweis:
2|
2|Baue ein Labor...
@8
-1|Hinweise :
+1|Hinweise:
1|
1|Aus Steinen kannst Du ein Labor
1|bauen. Im Labor kannst Du dann
@@ -398,7 +398,7 @@ Ziel :
#9
-1|Ziel :
+1|Ziel:
1|
1|Finde heraus, wie Du die Eisbahn
1|überqueren kannst.
@@ -410,7 +410,7 @@ Ziel :
2|Kraft !
@9
-1|Hinweise :
+1|Hinweise:
1|
1|Baue zwei Wachtürme, um die
1|Spinnen abzuhalten.
@@ -425,7 +425,7 @@ Ziel :
2|der Eisbahn verspeisen.
#10
-1|Ziel :
+1|Ziel:
1|
1|Erreiche die Insel im Westen und
1|sprenge die Palisade.
@@ -434,7 +434,7 @@ Ziel :
2|gestreiften Quadrate.
@10
-1|Hinweise :
+1|Hinweise:
1|
1|Baue eine Brücke zu den vier
1|gefangenen Blupis. Bearbeite
@@ -448,14 +448,14 @@ Ziel :
#11
-1|Ziel :
+1|Ziel:
1|
1|Erreiche die Häuser im Norden.
1|Pass aber auf, denn sie sind
1|sehr gut bewacht.
@11
-1|Hinweise :
+1|Hinweise:
1|
1|Baue eine Brücke zu der Insel
1|im Nordwesten, und fabriziere
@@ -468,7 +468,7 @@ Ziel :
#12
-1|Ziel :
+1|Ziel:
1|
1|Drei Blupis müssen zu dem ver-
1|lassenen Blupi auf der Insel
@@ -476,7 +476,7 @@ Ziel :
1|
@12
-1|Hinweise :
+1|Hinweise:
1|
1|Baue ein Gartenhäuschen und
1|pflanze Tomaten an.
@@ -490,7 +490,7 @@ Ziel :
#13
-1|Ziel :
+1|Ziel:
1|
1|Entledige Dich der sechs Spinnen.
1|Die vier ersten sind einfache, aber
@@ -499,14 +499,14 @@ Ziel :
-2|Trick :
+2|Trick:
2|
2|Finde heraus wie Du Gift im Labor
2|herstellen kannst.
@13
-1|Hinweise :
+1|Hinweise:
1|
1|Die vier ersten Spinnen kannst
1|Du fangen, indem Du mit Hilfe
@@ -525,13 +525,13 @@ Ziel :
#14
-1|Ziel :
+1|Ziel:
1|
1|Blupi muss nur zu seinem Haus
1|zurückfinden.
@14
-1|Hinweise :
+1|Hinweise:
1|
1|Untersuche den Untergrund, da
1|wo sich die Kieselsteine
@@ -551,7 +551,7 @@ Ziel :
#15
-1|Ziel :
+1|Ziel:
1|
1|Ein einziger Blupi muss das Haus
1|im Norden erreichen.
@@ -561,7 +561,7 @@ Ziel :
2|vernichten.
@15
-1|Hinweise :
+1|Hinweise:
1|
1|Baue ein Gartenhäuschen und
1|zwei Wachtürme auf den grauen
@@ -588,7 +588,7 @@ Ziel :
@16
-1|Hinweise :
+1|Hinweise:
1|
1|Im Nordosten befindet sich ein
1|Bergwerk. Baue eine Werkstatt
@@ -606,7 +606,7 @@ Ziel :
2|und baue eine Beammaschine.
#17
-1|Ziel :
+1|Ziel:
1|
1|Alle fünf Blupis müssen ein
1|Haus erreichen.
@@ -615,7 +615,7 @@ Ziel :
2|sich hinter dem feindlichen Lager.
-Trick :
+Trick:
Du kannst mehrere Blupis auf
einmal auswählen, indem Du die
@@ -652,7 +652,7 @@ Du auf die Blupis klickst.
2|finden.
@18
-1|Hinweise :
+1|Hinweise:
1|
1|Baue ein Boot am Ufer des Sees
1|im Westen und lande auf der
@@ -672,7 +672,7 @@ Du auf die Blupis klickst.
@19
-1|Hinweise :
+1|Hinweise:
1|
1|Baue Eisen ab und baue eine
1|Rüstung. Die Rüstung schützt
@@ -694,13 +694,13 @@ Du auf die Blupis klickst.
2|Planierraupen in die Luft sprengen
#20
-1|Ziel :
+1|Ziel:
1|
1|Zerstöre alle feindliche Gebäude.
1|
@20
-1|Hinweise :
+1|Hinweise:
1|
1|Produziere ein Maximum an
1|Dynamit, Fallen, usw. und
@@ -717,7 +717,7 @@ Du auf die Blupis klickst.
2|Haus wiederfinden.
@21
-1|Hinweise :
+1|Hinweise:
1|
1|Lege das Dynamit in die Nähe
1|des Durchgangs durch die Felsen.
@@ -736,7 +736,7 @@ Du auf die Blupis klickst.
2|ganz im Osten zu zerstören.
#22
-1|Ziel :
+1|Ziel:
1|
1|1) Baue Boote.
1|
@@ -746,7 +746,7 @@ Du auf die Blupis klickst.
2| Feindeinrichtungen.
@22
-1|Hinweise :
+1|Hinweise:
1|
1|Auf der Insel im Nordwesten gibt
1|es Eisenvorkommen.
@@ -766,7 +766,7 @@ Du auf die Blupis klickst.
@23
-1|Hinweise :
+1|Hinweise:
1|
1|Der isolierte Blupi muss sich
1|vom Roboter entfernen und zum
@@ -789,12 +789,12 @@ Du auf die Blupis klickst.
1|
1|
2|
-2|Ziel :
+2|Ziel:
2|
2|Zerstöre alle Feinde.
@24
-1|Hinweise :
+1|Hinweise:
1|
1|Lauf schnell nach rechts und
1|baue ein Boot.
@@ -812,7 +812,7 @@ Du auf die Blupis klickst.
1|Blupi die Existenz eines
1|geheimnisvollen Elements,
1|das von dem Roboter mitge-
-1|bracht worden ist :
+1|bracht worden ist:
1|
1| das Platinium
1|
@@ -821,14 +821,14 @@ Du auf die Blupis klickst.
1|logischen Fortschritt.
-2|Ziel :
+2|Ziel:
2|
2|Lege das Platinium auf die
2|gestreiften Quadrate. Es
2|befindet sich neben der Rakete.
@25
-1|Hinweise :
+1|Hinweise:
1|
1|Neutralisiere die beiden Planier-
1|raupen mit Klebefallen.
@@ -850,13 +850,13 @@ Du auf die Blupis klickst.
1|Weise.
-2|Ziel :
+2|Ziel:
2|
2|Hilf Blupi sein Haus
2|wiederzufinden.
@26
-1|Hinweise :
+1|Hinweise:
1|
1|Mit dem Platiniumwürfel kannst
1|Du in der Werkstatt einen
@@ -872,21 +872,21 @@ Du auf die Blupis klickst.
2|die Eisbahn.
#27
-1|Situation :
+1|Situation:
1|
1|Der Roboter besitzt die Unver-
1|schämtheit, seine Basis direkt
1|neben Blupis Dorf zu bauen.
-2|Ziel :
+2|Ziel:
2|
2|Erreiche das Feindliche Lager
2|und sprenge alles in
2|die Luft.
@27
-1|Hinweise :
+1|Hinweise:
1|
1|Baue so schnell wie möglich
1|eine Beammaschine, mit der Du
@@ -902,26 +902,26 @@ Du auf die Blupis klickst.
2|
2|Du kannst das feindliche Lager
2|im Norden auf zwei verschiedene
-2|Weisen erreichen :
+2|Weisen erreichen:
2|
2|1) mit Booten
2|2) mit einer Brücke
#28
-1|Situation :
+1|Situation:
1|
1|Blupi hat versehentlich eine
1|Mauer rund um sein Haus gebaut.
-2|Ziel :
+2|Ziel:
2|
2|Blupi muss (nur ?) in sein
2|Haus gelangen.
@28
-1|Hinweise :
+1|Hinweise:
1|
1|Auf der kleinen Insel im Norden
1|gibt es Eier.
@@ -935,14 +935,14 @@ Du auf die Blupis klickst.
#29
-1|Situation :
+1|Situation:
1|
1|Blupis Lebensraum wird mehr und
1|mehr durch den Roboter und seine
1|Schergen bedroht.
-2|Ziel :
+2|Ziel:
2|
2|Blupi muss zuerst ein gut
2|befestigtes Dorf bauen, um
@@ -950,7 +950,7 @@ Du auf die Blupis klickst.
2|und alle Feinde zu vernichten.
@29
-1|Hinweise :
+1|Hinweise:
1|
1|Beschütze das Dorf mit Wach-
1|türmen.
@@ -968,7 +968,7 @@ Du auf die Blupis klickst.
2|Rüstungen herstellen.
#30
-1|Situation :
+1|Situation:
1|
1|Der Krieg hat nun lange genug
1|gedauert. Blupi hat mit dem
@@ -981,7 +981,7 @@ Du auf die Blupis klickst.
1|immer zu verlassen.
-2|Ziel :
+2|Ziel:
2|
2|Bereite den Weg vor, so dass der
2|Roboter seine Rakete erreichen.
@@ -991,7 +991,7 @@ Du auf die Blupis klickst.
2|fertig ist.
@30
-1|Hinweise :
+1|Hinweise:
1|
1|Die Rakete befindet sich im
1|Südosten.
diff --git a/resources/data/en/stories.blp b/resources/data/en/stories.blp
index 3d1e2a7..4f96ebc 100644
--- a/resources/data/en/stories.blp
+++ b/resources/data/en/stories.blp
@@ -1,5 +1,5 @@
$1
-1|Goal :
+1|Goal:
1|
1|Each Blupi must enter a house. To
1|do so, always use the left button of
@@ -29,7 +29,7 @@ $1
$2
Here is a second exercise a bit more
-complicated :
+complicated:
1|Transport both piles of planks on
1|the striped paving stones on
@@ -47,7 +47,7 @@ complicated :
-Clue :
+Clue:
To scroll your screen, you may
draw your mouse to the side of
the screen or use the keyboard
@@ -65,14 +65,14 @@ $3
-Clue :
+Clue:
It is more efficient to
use the mouse in one hand
and use the other hand
for the keyboard arrows.
$4
-1|Goal :
+1|Goal:
1|
1|The four Blupis must reach the
1|houses on the northern islands.
@@ -81,7 +81,7 @@ $4
2|enough strength to jump.
$5
-1|Goal :
+1|Goal:
1|
1|Drop two batches of tomatoes
1|on the striped paving stones.
@@ -93,7 +93,7 @@ $5
2|stones (do not eat them).
$6
-1|Goal :
+1|Goal:
1|
1|Each Blupi must reach a house on
1|a small island.
@@ -138,10 +138,10 @@ The spaceship crash has set fire
to the forest. Blupi' village is
now threatened.
-1|Goal :
+1|Goal:
1|
1|Prevent the village from burning.
-1|To do so, there is only one way :
+1|To do so, there is only one way:
1|Cut some trees down on the left.
@@ -149,7 +149,7 @@ now threatened.
-2|Clue :
+2|Clue:
2|
2|If a Blupi is hidden by trees,
2|press space bar. Doing so will
@@ -157,7 +157,7 @@ now threatened.
2|transparent.
@1
-1|Solution :
+1|Solution:
1|
1|Order the Blupi on the left to
1|cut several trees down. The
@@ -165,7 +165,7 @@ now threatened.
1|the planks away.
#2
-1|Situation :
+1|Situation:
1|
1|Blupi is far away from his village
1|and lost. He must organize himself
@@ -182,14 +182,14 @@ now threatened.
2|
-2|Watch out :
+2|Watch out:
2|
2|Something unusual is going to
2|happen.
@2
-1|Clues :
+1|Clues:
1|
1|First of, all you must build
1|two palisades in the north
@@ -203,7 +203,7 @@ now threatened.
#3
-1|Goal :
+1|Goal:
1|
1|Prevent the four lost Blupis from
1|burning.
@@ -213,13 +213,13 @@ now threatened.
-2|Watch out :
+2|Watch out:
2|
2|The ground is made of moss
2|which burns very easily.
@3
-1|Solution :
+1|Solution:
1|
1|1) Carve a rock.
1| Smaller rocks are quicker to
@@ -231,13 +231,13 @@ now threatened.
2|3) Wait for the fire to stop.
#4
-1|Goal :
+1|Goal:
1|
1|Make the four Blupis reach the
1|striped paving stones.
@4
-1|Solution :
+1|Solution:
1|
1|1) Cut a tree down
1|
@@ -255,30 +255,30 @@ now threatened.
2|the striped paving stones.
#5
-1|The trap :
+1|The trap:
1|Careful, the ground where the
1|Blupis are prisoners can easily
1|burn and fire is approaching.
1|
-1|Goal :
+1|Goal:
1|Resist until the fire has
1|burnt out.
-2|Watch out :
+2|Watch out:
2|Building a wall is a very
2|exhausting job for Blupi. Once
2|finished, he will die !
-Clue :
+Clue:
If the game does not run fast
enough for you, press key F6
to speed it up. F5 runs the
game at it's normal speed.
@5
-1|Clues :
+1|Clues:
1|
1|You must build four walls on
1|the gray paving stones. You
@@ -291,7 +291,7 @@ game at it's normal speed.
2|the fire comes and stops.
#6
-1|Goal :
+1|Goal:
1|
1|A danger is present: protect
1|the camp as fast as possible
@@ -309,7 +309,7 @@ game at it's normal speed.
-Clue :
+Clue:
You may select several Blupis at
the same time by maintaining
@@ -318,7 +318,7 @@ clicking on each Blupi.
@6
-1|Solution :
+1|Solution:
1|
1|You must ask four Blupis to
1|quickly carve a rock each.
@@ -339,7 +339,7 @@ clicking on each Blupi.
2|south-east.
#7
-1|Goal :
+1|Goal:
1|
1|The four Blupis must reach
1|the striped paving stones.
@@ -350,13 +350,13 @@ clicking on each Blupi.
-2|Watch out :
+2|Watch out:
2|
2|The ground is inappropriate
2|for building a garden shed.
@7
-1|Solution :
+1|Solution:
1|
1|Ask a Blupi to remove the
1|tomatoes so that the spiders
@@ -372,7 +372,7 @@ clicking on each Blupi.
2|he can eat them.
#8
-1|Goal :
+1|Goal:
1|
1|Avoid one or two Blupis from
1|being contaminated and find a
@@ -387,12 +387,12 @@ clicking on each Blupi.
-2|Clue :
+2|Clue:
2|
2|Construct a laboratory.
@8
-1|Clues :
+1|Clues:
1|
1|A laboratory must be made of
1|stones. It will enable you to
@@ -407,7 +407,7 @@ clicking on each Blupi.
2|The houses are in the south-east.
#9
-1|Goal :
+1|Goal:
1|
1|Find a way to cross the ice rink.
1|
@@ -417,14 +417,14 @@ clicking on each Blupi.
-2|Note :
+2|Note:
2|
2|Blupi can walk on ice. However
2|the ice being slippery, he will
2|loose a lot of strength.
@9
-1|Clues :
+1|Clues:
1|
1|Two towers will have to be built
1|to protect the Blupis from the
@@ -440,7 +440,7 @@ clicking on each Blupi.
2|tomatoes before he crosses.
#10
-1|Goal :
+1|Goal:
1|
1|Reach the island in the
1|north-east and blow the
@@ -451,7 +451,7 @@ clicking on each Blupi.
2|striped paving stones.
@10
-1|Clues :
+1|Clues:
1|
1|Build a bridge in the direction of
1|the four prisoners. This enables
@@ -473,14 +473,14 @@ clicking on each Blupi.
2|protect them from the explosion.
#11
-1|Goal :
+1|Goal:
1|
1|Reach the houses in the
1|north-east. Be careful,
1|they are well guarded.
@11
-1|Clues :
+1|Clues:
1|
1|Build a bridge towards the
1|north-west island and then
@@ -497,14 +497,14 @@ clicking on each Blupi.
2|bulldozers.
#12
-1|Goal :
+1|Goal:
1|
1|Three Blupis must join the
1|isolated Blupi on an island
1|in the north-west.
@12
-1|Clues :
+1|Clues:
1|
1|Build a garden shed and grow
1|tomatoes.
@@ -520,7 +520,7 @@ clicking on each Blupi.
2|hides two viruses.
#13
-1|Goal :
+1|Goal:
1|
1|Get rid of the six spiders.
1|
@@ -533,13 +533,13 @@ clicking on each Blupi.
-2|Clue :
+2|Clue:
2|
2|Find out how to produce poison
2|in the laboratory.
@13
-1|Clues :
+1|Clues:
1|
1|The first four spiders will be
1|caught with traps made from
@@ -558,13 +558,13 @@ clicking on each Blupi.
2|the tomatoes to the laboratory.
#14
-1|Goal :
+1|Goal:
1|
1|Blupi must simply go home.
1|
@14
-1|Clues :
+1|Clues:
1|
1|Prospect for iron under the
1|small pebbles. Drop the planks
@@ -586,7 +586,7 @@ clicking on each Blupi.
2|into the jeep and buzz off.
#15
-1|Goal :
+1|Goal:
1|
1|Only one Blupi must reach
1|the house in the north-east.
@@ -596,7 +596,7 @@ clicking on each Blupi.
2|installations.
@15
-1|Clues :
+1|Clues:
1|
1|Build a garden shed and two
1|protection towers on the gray
@@ -619,7 +619,7 @@ clicking on each Blupi.
2|east to destroy the enemy camp.
#16
-1|Situation :
+1|Situation:
1|
1|Blupi is lost in an arid part of
1|his planet with no trees.
@@ -627,13 +627,13 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|The two Blupis must go back
2|home to their village.
@16
-1|Clues :
+1|Clues:
1|
1|Find the mine in the north-east,
1|carve a rock to build a
@@ -649,7 +649,7 @@ clicking on each Blupi.
2|tree and make a teleporter.
#17
-1|Goal :
+1|Goal:
1|
1|The five Blupis must reach
1|a house.
@@ -668,7 +668,7 @@ clicking on each Blupi.
-Clue :
+Clue:
You may select several Blupis
at the same time by maintaining
@@ -676,7 +676,7 @@ the Shift key pressed while
clicking on each Blupi.
@17
-1|Clues :
+1|Clues:
1|
1|A Blupi can now go to the house
1|on the western side of the island.
@@ -694,7 +694,7 @@ clicking on each Blupi.
2|witha time bomb.
#18
-1|Situation :
+1|Situation:
1|
1|While Blupi was collecting
1|flowers, he did not realize
@@ -706,13 +706,13 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Blupi must flee and find a
2|way of getting home.
@18
-1|Clues :
+1|Clues:
1|
1|Find the water stretch to the
1|west. Make a boat. Be careful,
@@ -728,7 +728,7 @@ clicking on each Blupi.
2|bulldozers.
#19
-1|Situation :
+1|Situation:
1|
1|Four bulldozers are threatening
1|Blupi's village.
@@ -737,12 +737,12 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Destroy the bulldozers
@19
-1|Clues :
+1|Clues:
1|
1|Ask a Blupi to extract iron
1|and build an armour. It will
@@ -763,13 +763,13 @@ clicking on each Blupi.
2|the bulldozers.
#20
-1|Goal :
+1|Goal:
1|
1|Destroy all enemy installations.
1|
@20
-1|Clues :
+1|Clues:
1|
1|Produce as much dynamite,
1|traps, etc. as possible before
@@ -777,7 +777,7 @@ clicking on each Blupi.
1|protect the enemy camp.
#21
-1|Situation :
+1|Situation:
1|
1|Blupi has been captured by
1|a nasty robot. He is held
@@ -787,13 +787,13 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Blupi must escape and find
2|his house.
@21
-1|Clues :
+1|Clues:
1|
1|Take the dynamite from the
1|northeast. Place it next to a
@@ -813,7 +813,7 @@ clicking on each Blupi.
2|the blue barrier in the east.
#22
-1|Goals :
+1|Goals:
1|
1|1) Make boats.
1|
@@ -822,7 +822,7 @@ clicking on each Blupi.
1|3) Destroy all enemy installations.
@22
-1|Clues :
+1|Clues:
1|
1|The island in the north-east
1|has a lot of iron.
@@ -832,7 +832,7 @@ clicking on each Blupi.
2|dynamite and sticky traps.
#23
-1|Situation :
+1|Situation:
1|
1|Blupi is very curious: after
1|having observed the robot
@@ -843,14 +843,14 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Bring in support and destroy
2|the enemy !
@23
-1|Clues :
+1|Clues:
1|
1|The isolated Blupi must go
1|away from the robot and go
@@ -871,19 +871,19 @@ clicking on each Blupi.
2|Blupi.
#24
-1|Situation :
+1|Situation:
1|
1|The region is full of enemies.
1|
-2|Goal :
+2|Goal:
2|
2|Destroy all enemies.
@24
-1|Clues :
+1|Clues:
1|
1|Go south-east to avoid the
1|fire and make a boat with
@@ -899,7 +899,7 @@ clicking on each Blupi.
1|Blupi has been suspecting
1|that the robot brought
1|something strange on his
-1|planet :
+1|planet:
1|
1| Platinium....
1|
@@ -910,12 +910,12 @@ clicking on each Blupi.
2|
-2|Goal :
+2|Goal:
2|Bring a cube of platinum onto
2|the striped paving stones.
@25
-1|Clues :
+1|Clues:
1|
1|Destroy the two bulldozers with
1|the sticky traps. Make a boat in
@@ -943,12 +943,12 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Help Blupi find his house.
@26
-1|Clues :
+1|Clues:
1|
1|Make a helping robot with the
1|cube of platinum in the factory
@@ -966,7 +966,7 @@ clicking on each Blupi.
2|the first jump.
#27
-1|Situation :
+1|Situation:
1|
1|The robot has had the cheek
1|to install his village nearby
@@ -975,13 +975,13 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Reach enemy camp and
2|destroy everything.
@27
-1|Clues :
+1|Clues:
1|
1|Make a teleporter as fast as
1|possible so that you reach
@@ -1002,22 +1002,22 @@ clicking on each Blupi.
2|Up to you to choose !
#28
-1|Situation :
+1|Situation:
1|
1|Whilst building his house,
-1|Blupi made a mistake :
+1|Blupi made a mistake:
1|he built a wall around it.
-2|Goal :
+2|Goal:
2|
2|Blupi must simply go home.
@28
-1|Clues :
+1|Clues:
1|
1|A small island in the north
1|has a lot of eggs.
@@ -1038,7 +1038,7 @@ clicking on each Blupi.
2|protection wall.
#29
-1|Situation :
+1|Situation:
1|
1|The free space is being more
1|and more occupied by the robot
@@ -1048,7 +1048,7 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Blupi must build his village
2|and work out good defense
@@ -1058,7 +1058,7 @@ clicking on each Blupi.
2|eliminate all of his enemies.
@29
-1|Clues :
+1|Clues:
1|
1|He must build protection towers
1|on the north-west side, on the
@@ -1078,11 +1078,11 @@ clicking on each Blupi.
2|and make bombs and armours.
#30
-1|Situation :
+1|Situation:
1|
1|This war can no longer last.
1|Blupi and the last robot have
-1|come to an agreement :
+1|come to an agreement:
1|He will help the robot back to
1|his rocket and, in return,
1|the robot will definitively
@@ -1091,7 +1091,7 @@ clicking on each Blupi.
-2|Goal :
+2|Goal:
2|
2|Prepare the path to the rocket
2|so that the robot can leave
@@ -1101,7 +1101,7 @@ clicking on each Blupi.
2|path is finished.
@30
-1|Clues :
+1|Clues:
1|
1|Carve a rock in the southeast.
1|Cut a tree down and make a
diff --git a/resources/data/he/stories.blp b/resources/data/he/stories.blp
new file mode 100644
index 0000000..49fdaa0
--- /dev/null
+++ b/resources/data/he/stories.blp
@@ -0,0 +1,1113 @@
+$1
+1|מטרה:
+1|
+1|כל בלופי חייב להכנס לבית. כדי
+1|לעשות זאת, תמיד השתמשו בלחצן
+1|השמאלי של העכבר
+
+2|)1 לחצו על בלופי
+2| טבעת כחולה תופיעה מסביבו
+2| ותעיד כי הוא הדמות הנבחרת.
+2|
+2|)2 לחצו על הבית שלו
+2|
+2|)3 לחצו על כפתור "המשך"
+2|
+2|)4 חזרו על הפעולה עבור
+2| הבלופי השני.
+
+
+
+
+
+
+
+
+
+ לאחר שקראתם את ההוראות הללו
+ לחצו על הקוביות שבתחתית.
+
+$2
+הנה עוד תרגיל, מעט יותר
+מסובך:
+
+1|העבירו את שתי ערימות הקרשים
+1|למרצפות המפוספסות שנמצאות
+1|בצד ימין
+1|
+1|בלופי חייב לאכול עגבניות כדי
+1|לאגור מספיק כח לביצוע
+1|הפעולה הזאת. זיכרו שכאשר
+2|הוא אוכל, הטבעת האדומה שעל
+2|רגלו הופכת לכחולה. הדבר
+2|מעיד על רמת האנרגיה שלו.
+2|
+2| אדום = עייף
+2| כחול = בכושר מלא
+
+
+
+רמז:
+לגלילת המסך, אתם יכולים
+למשוך את העכבר לצידי המסך או
+להשתמש בחיצי המקלדת.
+
+
+$3
+1|מצאו את הביצים...
+1|
+1|על ידי הנחתם על המדגרה,
+1|ארבעה בלופים חדשים
+1|יבקעו.
+
+
+
+
+
+
+רמז:
+יהיה יותר יעיל להשתמש
+בעכבר ביד אחד, ובחיצי
+המקלדת ביד השניה.
+
+
+$4
+1|מטרה:
+1|
+1|ארבעת הבלופים חייבים להגיע
+1|לבתים באיים הצפוניים.
+
+2|כל בלופי חייב לאכול על מנת
+2|שיהיה לו כח לקפוץ.
+
+$5
+1|מטרה:
+1|
+1|עליכם להפיל שתי קבוצות של עגבניות
+1|על המרצפות המחוספסות.
+
+2|כדי להצליח, עליכם לכרות את העצים
+2|לבנות צריף, לגדל עגבניות,
+2|לשים שתי קבוצות של עגבניות
+2|על המרצפות המחוספסות.
+2|(לא לאכול אותם).
+
+$6
+1|מטרה:
+1|
+1|כל בלופי חייב להגיע לבית שנמצא על
+1|אי קטן.
+1|לצערינו, אין מספיק
+1|אוכל עבור בלופי אחד.
+2|אתם תצטרכו למצוא דרך
+2|לייצר מספיק אוכל עבור
+2|כולם.
+2|
+2|למזלנו, יש באי
+2|הרבה עצים.
+
+#h1
+בלופי חי לו בשלווה באי שלו
+כאשר מטאור מוזר נפל לו
+באיזור צחיח.
+רק מאוחר יותר, בלופי הבין
+שהיבול שלו תמיד מושמד על ידי
+עכביש ענקי.
+
+למרות שהמצב הגופני של בלופי
+מצויין, עכשיו הוא מתעטש
+והוא נדבק במחלה נדירה.
+
+#h2
+מה קורה?
+
+למעשה, המטאור המוזר הוא
+ספינת החלל הנושאת בתוכה
+רובוט מיוחד.
+הרובוט הזה בונה בתי חרושת
+שמייצרים אוייבים.
+
+בלופי חייב לנצל את כל המשאבים
+הטבעיים כדי להיפטר
+מהמפריעים.
+
+#1
+ספינת החלל שהתרסקה, הציתה
+שריפה בכל היער. הכפר של
+בלופי נמצא עכשיו בסכנה.
+
+1|מטרה:
+1|
+1|למנוע מהשריפה להגיע לכפר.
+1|יש רק דרך אחת להצליח בפעולה:
+1|לכרת כמה עצים משמאל.
+
+
+
+
+
+
+2|רמז:
+2|
+2|אם בלופי חבוי בין העצים
+2|לחץ על מקש הרווח, וכך יהפכו
+2|העצים לשקופים באופן
+2|זמני.
+
+@1
+1|פתרון:
+1|
+1|הורה לבלופי השמאלי לכרת
+1|מספר עצים. שני הבלופים
+1|הנותרים יעבירו את
+1|הקרשים הרחק מהשריפה.
+
+#2
+1|המצב:
+1|
+1|בלופי נאבד, ונמצא רחוק מהכפר שלו
+1|הוא חייב לארגן את עצמו לפני
+1|שיתחיל לחפש את הכפר שלו.
+1|
+1|)1 לבנות צריף ולגדל
+1| עגבניות
+
+2|)2 לבנות מדגרה כדי להשיג
+2| הספקה.
+2|
+2|)3 להאכיל את ארבעת הבלופים
+2| ולמצוא את הכפר.
+2|
+
+
+2|זהירות:
+2|
+2|משהו יוצא דופן עומד
+2|להתרחש.
+
+
+@2
+1|רמזים:
+1|
+1|בתחילה, עליכם לבנות
+1|בצפון שתי גדרות
+1|שימנעו מהעכביש להגיע.
+1|רק אז תהיה אפשרות לבנות
+2|בשלווה צריף, ולגדל
+2|עגבניות.
+2|
+2|כדי להגיע לארבעת הבתים
+2|אתם חייבים ללכת מזרחה.
+
+
+#3
+1|מטרה:
+1|
+1|למנוע את הישרפותם של ארבעת
+1|הבלופים.
+1|
+1|לסיים את החומה.
+
+
+
+
+2|זהירות:
+2|
+2|הקרקע עשויה טחב,
+2|חומר שנישרף בקלות.
+
+@3
+1|פתרון:
+1|
+1|)1 חיצבו בסלע.
+1| סלעים קטנים, קל
+1| יותר לחצוב.
+
+2|)2 בנו חומה בין שתי החומות
+2| שכבר קיימות.
+2|
+2|)3 חכו שהשריפה תיפסק.
+
+#4
+1|מטרה:
+1|
+1|לעזור לארבעת הבלופים
+1|להגיע למרצפות המפוספסות.
+
+@4
+1|פתרון:
+1|
+1|)1 כרתו עץ אחד.
+1|
+1|)2 העבר את הקרשים
+1| לשפת המים.
+1|
+1|)3 בנה גשר לעבר שני
+1| הבלופים העייפים.
+
+2|)4 חזרו על פעולה זו
+2| שלוש פעמים.
+2|
+2|הבלופים העייפים יוכלו כעת
+2|לחצות את הגשר ולהגיע
+2|למרצפות המפוספסות.
+
+#5
+1|המלכודת:
+1|זהירות, הקרקע שבה כלואים
+1|הבלופים, יכולה בקלות להישרף,
+1|והאש מתקרבת.
+1|
+1|מטרה:
+1|התנגדו לאש עד
+1|שתחלש.
+
+2|זהירות:
+2|בניית חומה היא עבודה מאוד
+2|מתישה עבור בלופי. ברגע
+2|שיסיים, הוא ימות!
+
+
+
+רמז:
+אם המשחק איטי מדי בשבילכם,
+לחצו על מקש 6f כדי להגביר
+את המהירות. מקש 5f מחזיר
+את המשחק למהירות הנורמלית.
+
+@5
+1|רמזים:
+1|
+1|אתם חייבים לבנות ארבע חומות
+1|על המרצפות האפורות. תצטרכו
+1|לכרת שני עצים כדי לבנות
+1|צריף ומדגרה.
+1|
+
+2|כאשר החומות תהינה גמורות.
+2|תצטרכו לחכות עד שהאש תגיע
+2|ותיפסק.
+
+#6
+1|מטרה:
+1|
+1|קיימת סכנה: צריך להגן על המחנה
+1|במהירות האפשרית בעזרת
+1|ארבעה מגדלים.
+
+2|הגיעו אל המרצפות
+2|המפוספסות שנמצאות
+2|בדרום מזרח.
+
+
+
+
+
+
+
+
+
+רמז:
+
+ישנה אפשרות לבחור מספר בלופים
+בו זמנית על ידי לחיצה רצופה על
+המקש tfihs ועל כל אחד
+מהבלופים.
+
+
+@6
+1|פתרון:
+1|
+1|עליכם לתת לארבעת הבלופים
+1|לחצוב בסלע במהירות. סלעים
+1|קטנים קל יותר לחצוב
+1|
+1|
+1|העבירו את ארבעת ערימות הסלעים
+1|למרצפות האפורות, והתחילו
+1|לבנות הגנה על המגדלים.
+1|
+
+2|חכו להגעת הוירוס
+2|ולמותו על ידי הזרם.
+2|
+2|ארבעת הבלופים האחרים
+2|יכולים ללכת בשקט
+2|למרצפות המפוספסות
+2|שנמצאות בדרום מזרח.
+
+#7
+1|מטרה:
+1|
+1|ארבעת הבלופים צריכים להגיע
+1|למרצפות המפוספסות.
+1|יהיה עליכם לשמור על
+1|על הבלופי הרחוק ביותר.
+
+
+
+
+2|הזהרו:
+2|
+2|האדמה לא מתאימה כדי
+2|לבנות עליה צריף.
+
+@7
+1|פתרון:
+1|
+1|בקש מבלופי להזיז את
+1|העגבניות כדי שהעכבישים
+1|לא יאכלו אותם.
+1|
+1|בעזרת בלופי אחר, קפוץ לאי
+1|המזרחי, ובנה גשר שיחבר
+1|את האי עם המרצפות המפוספסות.
+1|
+
+2|קחו את העגבניות לעבר
+2|הבלופי העייף, כדי
+2|שיאכל אותם.
+
+#8
+1|מטרה:
+1|
+1|מנעו מבלופי אחד או שניים
+1|להידבק במחלה, ומצאו תרופה עבור
+1|אלו שכבר נידבקו.
+1|
+1|בסוף, כל בלופי חייב להכנס לתוך
+1|ביתו.
+
+
+
+
+
+
+
+2|רמז:
+2|
+2|הרכיבו מעבדה.
+
+@8
+1|רמזים:
+1|
+1|על המעבדה להיות עשויה מסלעים.
+1|הדבר יאפשר לכם להפוך את הפרחים
+1|הצהובים לתרופה עבור
+1|הבלופים החולים.
+1|
+
+2|עליכם לבנות גשר כדי
+2|להביא את התרופה לבלופים
+2|החולים.
+2|
+2|הבתים נמצאים בדרום מזרח.
+
+#9
+1|מטרה:
+1|
+1|מצאו את הדרך לחצות את
+1|רחבת הקרח.
+1|ולהגיע אל המרצפות המפוספסות.
+
+
+
+
+
+
+2|הערה:
+2|
+2|בלופי יכול ללכת על הקרח, אבל
+2|הקרח מאוד חלק, ובלופי יאבד
+2|הרבה מכוחו.
+@9
+1|רמזים:
+1|
+1|צריך לבנות שני מגדלים כדי
+1|להגן על הבלופים מפני העכבישים.
+1|
+1|
+1|תצטרכו לבנות צריף ומדגרה כדי
+1|שהביצים יוכלו לבקוע.
+1|
+
+2|בלופי מאבד הרבה כח כאשר
+2|הוא חוצה את רחבת הקרח. לכן,
+2|צריך לתת לו עגבניות לפני
+2|שהוא חוצה את הרחבה.
+
+#10
+1|מטרה:
+1|
+1|להגיע אל האי שנמצא בצפון
+1|מזרח, ושם לפוצץ את הגדר.
+1|
+
+2|כל מה שצריך לעשות עכשיו זה
+2|להגיע עם ארבעת הבלופים
+2|על המרצפות המפוספסות.
+
+@10
+1|רמזים:
+1|
+1|צריך לבנות גשר בכיוון ארבעת
+1|האסירים הבלופים. הדבר יעזור לכם
+1|לחצוב בסלע, שאותו תיקח מאוחר
+1|יותר כדי לבנות מעבדה.
+1|
+1|
+1|הפרחים הכחולים נמצאים
+1|בדרום מזרח. בזכות המעבדה
+1|הם יהפכו לחומר נפץ.
+1|
+
+2|היעזרו בחומר הנפץ כדי להרוס
+2|את הגדר שלוכדת בתוכה את
+2|ארבעת האסירים הבלופים.
+2|
+2|בתחילה יש צורך להוציא את
+2|האסירים ובכך, להגן עליהם
+2|מפני התפוצצות.
+
+#11
+1|מטרה:
+1|
+1|להגיע אל הבתים שבצפון
+1|מזרח. הזהרו! הבתים הללו
+1|מוגנים כהלכה.
+
+@11
+1|רמזים:
+1|
+1|צריך לבנות גשר לעבר האי
+1|שנמצא בצפון מערב. ואז
+1|להכין לפחות ארבע חבילות
+1|של חומר נפץ.
+
+2|הורידו את חומר הנפץ בצפון,
+2|באיזור של הדחפורים.
+2|
+2|
+2|כל עוד חומר הנפץ אינו מוכן,
+2|הימנעו מלהגיע לאיזור הצפון,
+2|אחרת תתוקפו על ידי הדחפורים.
+2|
+
+#12
+1|מטרה:
+1|
+1|שלושת הבלופים צריכים להצטרף
+1|לבלופי המבודד שנמצא על האי
+1|בכיוון צפון מערב.
+
+@12
+1|רמזים:
+1|
+1|צריך לבנות צריף ולגדל
+1|עגבניות.
+1|
+1|יצירת חומר נפץ נעשית מפרחים
+1|כחולים שאותם ניתן למצוא
+1|בצפון מזרח.
+
+2|העבירו את חומר הנפץ אל האי
+2|שממוקם במערב.
+2|
+2|היזהרו! בדרך מסתתרים
+2|שני וירוסים.
+
+#13
+1|מטרה:
+1|
+1|להיפטר משישה עכבישים.
+1|
+1|ארבעת הראשונים יהיו קלים.
+1|השניים הנותרים יהיו יותר
+1|קשים.
+
+
+
+
+
+
+2|רמז:
+2|
+2|מיצאו איך מכינים רעל
+2|במעבדה.
+
+@13
+1|רמזים:
+1|
+1|ארבעת העכבישים הראשונים יתפסו
+1|על ידי מלכודות שהוכנו מפרחים
+1|ירוקים במעבדה.
+1|
+1|
+1|את המלכודות צריך למקם קרוב
+1|לעכבישים.
+
+2|שני האחרונים יורעלו מעגבניות
+2|ששונו במעבדה.
+2|
+2|
+2|
+2|צריך לבנות גשר כדי להעביר את
+2|העגבניות למעבדה.
+
+#14
+1|מטרה:
+1|
+1|בלופי פשוט צריך להגיע הביתה.
+1|
+
+@14
+1|רמז:
+1|
+1|חפשו ברזל באזור האבנים הקטנות
+1|הורידו את הקרשים על הדגל שתמצאו
+1|ובנו מכרה.
+1|
+1|חיצבו בסלע כדי לבנות בית מלאכה.
+1|שם תוכלו להשתמש בברזל.
+1|
+
+2|קחו את הפצצה, קיפצו אל תוך הג'יפ
+2|וסעו מזרחה. הג'יפ יגן עליכם
+2|מהדחפורים.
+2|
+2|
+2|כאשר תשיגו את הגדר, תהיו חייבים
+2|לעזוב את הג'יפ במהירות, להוריד
+2|את פצצת הזמן, להפעיל אותה,
+2|לחזור אל הג'יפ ולהתרחק מהפצצה.
+2|
+
+#15
+1|מטרה:
+1|
+1|על בלופי אחד בלבד להגיע
+1|אל הבית שבצפון מזרחה.
+
+2|כדי לפעול כך, עליכם להרוס
+2|את מתקני האוייב.
+2|
+
+@15
+1|רמזים:
+1|
+1|צריך לבנות צריף ושני מגדלי
+1|שמירה על המרצפות האפורות.
+1|
+1|
+1|צריך לבנות גשר כדי לחבר את האי
+1|במזרח. בחרו סוג אחר של פרחים
+1|והביאו אותם בחזרה למחנה.
+1|
+
+2|צריך לבנות מעבדה, צרו חומרי נפץ
+2|ומלכודות דביקות. הגנת המחנה
+2|מתבצעת על ידי הנחת מלכודות
+2|דביקות בתוך המחנה, והנחת חומרי
+2|נפץ מחוצה לו.
+2|
+2|כאשר יהיו לכם מספיק חומרי נפץ
+2|ומלכודות, שילחו בלופי אחד
+2|לכיוון צפון מזרחה כדי להרוס
+2|מחנה האוייב.
+
+#16
+1|המצב:
+1|
+1|בלופי אבד באיזור צחיח
+1|ללא עצים.
+
+
+
+
+2|מטרה:
+2|
+2|שני הבלופים חייבים לחזור
+2|הביתה לכפר שלהם.
+
+@16
+1|רמזים:
+1|
+1|מיצאו את המכרה שבצפון מערב.
+1|חיצבו בסלע כדי לבנות בית -
+1|מלאכה, הכינו פצצת זמן, שני
+1|ג'יפים וחפשו את מחנה האוייב
+1|בדרום מערב.
+
+2|פוצצו את המחסומים שמגנים
+2|על מחנה האוייב. נסו לפוצץ
+2|גם את הדחפורים.
+2|
+2|לכו דרומה, חפשו עץ
+2|ובנו ממנו משגר.
+
+#17
+1|מטרה:
+1|
+1|חמשת הבלופים חייבים
+1|להגיע הביתה.
+
+2|זהירות! אחד מהבתים נמצא
+2|מאחורי מחנה האוייב.
+
+
+
+
+
+
+
+
+
+
+
+
+רמז:
+
+ישנה אפשרות לבחור מספר בלופים
+בו זמנית על ידי לחיצה רצופה על
+המקש tfihs ועל כל אחד
+מהבלופים.
+
+@17
+1|רמזים:
+1|
+1|בלופי יכול עכשיו ללכת לבית שנמצא
+1|בצד המערבי של האי.
+1|הארבעה האחרים חייבים לעזוב
+1|במהירות בגלל הדחפורים.
+1|הבלופים חייבים ללכת צפון מזרחה.
+
+2|בהמשך, בצפון מזרח, אתם תמצאו
+2|מחנה שמוקף בחומות.
+2|
+2|מצפון לכפר יש הרבה
+2|ברזל.
+2|
+2|הכינו סירה, ושוטו איתה לצפון מזרח
+2|עם פצצת זמן.
+
+#18
+1|המצב:
+1|
+1|בזמן שבלופי אסף פרחים
+1|הוא לא תאר לעצמו שהוא
+1|נמצא רחוק מהבית שלו.
+1|עכשיו הוא אבוד באיזור
+1|מלא באויבים.
+
+
+
+
+
+2|מטרה:
+2|
+2|בלופי חייב להימלט
+2|ולמצוא את דרכו הביתה.
+
+@18
+1|רמזים:
+1|
+|1מצאו את את פלג המים במערב.
+1|בנו סירה. היזהרו,
+1|הרבה וירוסים מסתובבים
+1|בסביבה.
+
+|2בעזרת הסירה, תוכלו לעבור
+2|את החומה ולרדת מהסירה
+2|בגדת הנהר.
+2|
+2|הבית כבר לא רחוק עכשיו.
+2|היזהרו! אתם חייבים להימנע
+2|ממפגש עם הדחפורים.
+
+#19
+1|המצב:
+1|
+1|ארבעה דחפורים מאיימים
+1|על הכפר של בלופי.
+
+
+
+
+
+2|מטרה:
+2|
+2|להשמיד את הדחפורים.
+
+@19
+1|רמזים:
+1|
+1|בקשו מבלופי לחלץ ברזל,
+1|ולהכין ממנו מגן. זה
+1|יגן עליו מהאש.
+1|
+1|לכו מזרחה ובנו סירה. עלו על
+1|הסירה וחפשו אי שעליו יש עץ.
+1|כירתו את העץ ושימו אותו על
+1|אי גדול יותר. הכינו משגר.
+2|המשגר יביא אתכם לסדנת נשק.
+2|
+2|
+2|
+2|שימו קצת חומר נפץ ליד
+2|החומה ופוצצו אותה.
+2|בשאר חומרי הנפץ אתם
+2|יכולים להשמיד את
+2|הדחפורים.
+
+#20
+1|מטרה:
+1|
+1|השמדת מיתקני האוייב.
+1|
+
+@20
+1|רמזים:
+1|
+1|יצרו כמה שיותר חומר נפץ
+1|ומלכודות לפני שאתם מפוצצים
+1|את המחסומים שמגינים על מחנה
+1|האוייב.
+
+#21
+1|המצב:
+1|
+1|בלופי נלכד על ידי רובוט.
+1|הוא מוחזק כאסיר בתחנה
+1|של הרובוט במחנה.
+1|
+
+
+
+
+2|מטרה:
+2|
+2|בלופי חייב לברוח ולמצוא
+2|את ביתו.
+@21
+1|רמזים:
+1|
+1|קחו את חומר הנפץ מצפון מזרח.
+1|מקמו אותו בסמוך למחסום הכחול,
+1|מול הרווח בין הסלעים. הדחפורים
+1|יגיעו, ויגרמו לחומר הנפץ להתפוצץ.
+1|ההתפוצצות תשמיד את המחסום.
+1|
+
+2|ברחו למזרח עד שתגיעו לנהר.
+2|הכינו לכם סירה בעזרת הקרשים.
+2|אתם תיזדקקו לערימת הקרשים
+2|השניה כדי לבנות סירה מאוחר יותר.
+2|אך לפני כן, עליכם לתפוס "מחשמל"
+|2בעזרת המלכודות הדביקות, וליצור
+2|פצצת זמן שתשמיד את המחסום
+2|הכחול שנמצא במזרח.
+2|
+
+#22
+1|מטרות:
+1|
+1|)1 הכנת סירות.
+1|
+1|)2 חקירת כל האיים.
+1|
+1|)3 השמדת כל מתקני האוייב.
+
+@22
+1|רמזים:
+1|
+1|באי שבצפון מזרח
+1|יש הרבה ברזל.
+
+2|באי שבמזרח יש את כל
+2|הדרוש כדי להכין חומר
+2|נפץ ומלכודות דביקות.
+
+#23
+1|המצב:
+1|
+1|בלופי מאוד סקרן: לאחר
+1|שהתבונן ברובוט זמן רב
+1|בלופי הבין שגם הוא
+1|אבוד בעצמו.
+
+
+
+
+
+2|מטרה:
+2|
+2|להכניס הספקה ולהשמיד
+2|את האוייב.
+
+
+@23
+1|רמזים:
+1|
+1|הבלופי המבודד חייב להתרחק
+1|מהרובוט וללכת לכיוון מזרח.
+1|בלופי חייב לחצוב בסלע, כך
+1|שיוכל להגיע אל העצים, ושם
+1|להכין משגר.
+1|
+
+2|עם קבוצה נוספת של בלופים,
+2|אתם צריכים להכין סירה,
+2|למצוא את הפצצה בצפון מזרח,
+2|ולפוצץ את המחסום בדרום.
+2|פעולות אלו יאפשרו לכם
+2|להביא את העצים אל האי
+2|העזוב כדי להכין משגר.
+2|זה יעזור לכם להצטרף ולעזור
+2|לבלופי האבוד.
+2|
+
+#24
+1|המצב:
+1|
+1|האיזור מלא באוייבים.
+1|
+
+
+
+2|מטרה:
+2|
+2|השמדת כל האוייבים.
+
+@24
+1|רמזים:
+1|
+1|לכו צפון מזרחה כדי להימנע
+1|ממגע עם האש, והכינו סירה
+1|עם העץ האחרון שנשאר.
+1|
+1|במחנה אתם תמצאו
+1|ברזל.
+2|מצפון למחנה, תמצאו
+2|ארבעה ביצים.
+
+#25
+1|בלופי חושד שהרובוט
+1|הביא משהו מוזר לעולם
+1|שלו:
+1|
+1|
+1| פלטינה...
+1|
+1|הפלטינה, מונחת לצד הטיל.
+2|תוכלו בעזרתה להשיג גישה
+2|לטכנולוגיה של האוייב.
+2|
+2|
+
+
+2|מטרה:
+2|להביא קוביה של פלטינה
+2|אל המרצפות המפוספסות.
+
+@25
+1|רמזים:
+1|
+1|צריך להרוס שני דחפורים בעזרת
+1|מלכודות דביקות. להכין סירה
+1|מצפון למחנה הראשון של האוייב,
+1|ואז לעלות לסירה עם פצצת זמן
+1|ולשוט מזרחה.
+1|
+1|חפשו נתיב בין סלעים אשר
+1|נע דרומה. מחנה האוייב
+2|נמצא רחוק במזרח.
+2|שם תצטרכו לפוצץ את המחסום
+2|כדי להגיע אל הפלטינה.
+2|
+2|
+2|
+2|החזירו את הפלטינה בחזרה
+2|למחנה.
+
+#26
+1|קוביית הפלטינה תשיג עבורכם
+1|גישה לטנולוגיה של האוייב.
+1|השתמשו בה בצורה נכונה.
+
+
+
+
+
+2|מטרה:
+2|
+2|עיזרו לבלופי למצוא את ביתו.
+
+@26
+1|רמזים:
+1|
+1|הרכיבו מקובית הפלטינה רובוט
+1|שיעזור לכם והכינו פצצת
+1|זמן.
+1|
+1|קחו את הרובוט והפצצה.
+1|הרובוט יכול לחצות את המחנה
+1|המערבי של האוייב בלי שיבחינו
+2|בו. פוצצו את המחסום שנמצא
+2|בצפון, וקחו את העגבניות
+2|כדי להאכיל את הבלופים
+2|שנמצאים במחנה.
+2|
+2|הניחו את העגבניות
+2|לפני הקפיצה הראשונה.
+
+#27
+1|המצב:
+1|
+1|לרובוט יש את החוצפה למקם
+1|את הכפר שלו בסמוך לכפר
+1|של הבלופים.
+
+
+
+
+2|מטרה:
+2|
+2|להגיע אל מחנה האוייב
+2|ולהשמיד הכל.
+
+@27
+1|רמזים:
+1|
+1|הכינו משגר במהירות האפשרית
+1|כך שתוכלו להגיע אל האי
+1|עם הביצים.
+1|בנו שני מגדלי שמירה במקום
+1|שנמצאות ערימות אבנים.
+1|בנו גדר מצד שמאל, ומצד
+1|ימין של כל מגדל שמירה.
+1|
+
+2|עכשיו אתם יכולים להרגע!
+2|
+2|יש לכם שתי דרכים להגיע אל
+2|מחנה האוייב שבצפון.
+2|על ידי סירה או על ידי
+2|בניית גשר.
+2|
+2|זה נתון לבחירתך!
+
+#28
+1|המצב:
+1|
+1|בזמן שבלופי בנה את ביתו
+1|הוא עשה טעות:
+1|הוא בנה חומה מסביב.
+
+
+
+
+
+2|מטרה:
+2|
+2|בלופי צריך פשוט להגיע הביתה.
+
+@28
+1|רמזים:
+1|
+1|באי קטן שנמצא בצפון
+1|יש הרבה ביצים.
+1|
+1|עליכם לחצות את מחנה
+1|האוייב במהירות כדי
+1|להימנע ממגע עם הדחפורים
+1|שמגיעים מהצפון ומהדרום,
+1|כך שתוכלו לקטוף
+2|פרחים כחולים.
+2|
+2|בלופי אחר יוכל לקחת אותם
+2|ולייצר מהם חומר נפץ.
+2|
+2|הסלעים היחידים שתוכלו להשתמש
+2|בהם, נמצאים מדרום למחנה האוייב,
+2|ממש מחוץ לחומת ההגנה.
+2|
+
+#29
+1|המצב:
+1|
+1|השטח הפנוי נכבש אט אט
+1|על ידי הרובוט
+1|ועוזריו.
+
+
+
+
+
+2|מטרה:
+2|
+2|בלופי חייב לבנות את הכפר שלו
+2|ולפתח טקטיקות הגנה
+2|טובות.
+2|
+2|אז הוא יוכל לתקוף
+2|ולחסל את כל אוייביו.
+
+@29
+1|רמזים:
+1|
+1|בלופי חייב לבנות מגדלי שמירה
+1|בצד הצפון מערבי, בצד הצפון
+1|מזרחי, ובצד הדרום מזרחי.
+1|כל הסלעים נמצאים
+1|בצפון מערב.
+1|
+1|אל תכרתו את העצים שנמצאים
+1|ליד הגדר. הם יוכלו להיות מועילים
+1|כנגד הפצצה הקפיצית.
+
+2|הפרחים הירוקים שבמערב
+2|מאפשרים לכם לייצר מלכודות
+2|דביקות כדי להגן על הכפר.
+2|
+2|חלצו ברזל מדרום מערב, והכינו
+2|ממנו פצצות ומגינים.
+
+#30
+1|המצב:
+1|
+1|המלחמה הזאת לא יכולה להמשך.
+1|בלופי והרובוט האחרון הגיעו
+1|להסכמה:
+1|בלופי יעזור לרובוט לחזור
+1|לטיל שלו, ובתמורה הרובוט
+1|יעזוב את העולם של בלופי
+1|לתמיד!
+
+
+
+
+2|מטרה:
+2|
+2|להכין את נתיב הדרך לטיל
+2|כדי שהרובוט יוכל לעזוב את
+2|הפלנטה. הרובוט כועס על כך
+2|שהפסיד בקרב ולכן הוא מסרב
+2|לעבור עד שנתיב הדרך
+2|יהיה מוכן.
+
+@30
+1|רמזים:
+1|
+1|חיצבו בסלע שבדרום מזרח.
+1|כירתו עץ, והכינו ממנו סירה.
+1|בעזרת הסירה, חפשו אי בצפון
+1|מזרח, חפשו שם ברזל, והקימו
+1|שם מכרה ומפעל.
+1|צריך לייצר פצצה שתאפשר לכם
+2|לפוצץ את המחסומים שנמצאים
+2|בסביבת הרובוט.
+2|
+2|
+2|כל מה שצריך לעשות, זה לבנות גשר
+2|כדי שהרובוט יוכל לחזור
+2|אל הטיל שלו.
diff --git a/resources/data/it/stories.blp b/resources/data/it/stories.blp
index 887ae52..1209664 100644
--- a/resources/data/it/stories.blp
+++ b/resources/data/it/stories.blp
@@ -1,5 +1,5 @@
$1
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Ogni Blupi deve entrare in una casa.
1|Per fare ciò, utilizza il pulsante
@@ -30,7 +30,7 @@ $1
$2
Ecco un altro esercizio un pochino più
-difficile :
+difficile:
1|E' sufficiente trasportare due cumuli
1|di legno sulle lastre tratteggiate
@@ -41,14 +41,14 @@ difficile :
2|necessaria. Ti accorgerai che quando
2|mangia l'anello rosso ai suoi piedi
2|diventa blu. Questo anello indica il
-2|suo livello d'energia :
+2|suo livello d'energia:
2|
2| rosso = stanco
2| blu = in piena forma
-Trucco :
+Trucco:
Per far scorrere la parte visibile puoi
portare il mouse sul bordo dello schermo,
oppure utilizzare i tasti freccia della
@@ -65,14 +65,14 @@ $3
-Trucco :
+Trucco:
Potrai ottenere migliori risultati
tenendo il mouse con la mano destra,
e azionando i tasti freccia
della tastiera con la mano sinistra !
$4
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|I quattro Blupi devono raggiungere
1|le case che si trovano su altre isole
@@ -82,11 +82,11 @@ $4
2|la forza di saltare !
$5
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Deporre due lotti di pomodori sulle
1|lastre tratteggiate. Per fare ciò è
-1|necessario :
+1|necessario:
1|
1|1) Abbattere il boschetto.
@@ -98,7 +98,7 @@ $5
2| lastre tratteggiate (senza mangiarli).
$6
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Ogni Blupi deve raggiungere una
1|casa su una piccola isola.
@@ -149,7 +149,7 @@ la foresta, in lontananza.
Il villaggio di Blupi è in pericolo !
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Impedire che le case del villaggio
1|brucino. Per fare ciò vi è un solo
@@ -161,7 +161,7 @@ Il villaggio di Blupi è in pericolo !
-2|Trucco :
+2|Trucco:
2|
2|Se un Blupi è nascosto tra gli
2|alberi, premi la barra spaziatrice
@@ -169,7 +169,7 @@ Il villaggio di Blupi è in pericolo !
2|alberi trasparenti.
@1
-1|Soluzione :
+1|Soluzione:
1|
1|Ordinare al Blupi di sinistra di
1|abbattere degli alberi poco più
@@ -181,7 +181,7 @@ Il villaggio di Blupi è in pericolo !
2|dal fuoco !
#2
-1|Situazione :
+1|Situazione:
1|
1|Blupi si è perso in una radura
1|distante dal suo villaggio. Deve
@@ -199,13 +199,13 @@ Il villaggio di Blupi è in pericolo !
2|
-2|Attenzione :
+2|Attenzione:
2|
2|Qualche cosa di strano sta per
2|accadere !
@2
-1|Indizi :
+1|Indizi:
1|
1|E' prima di tutto necessario
1|costruire due palizzate a nord,
@@ -218,7 +218,7 @@ Il villaggio di Blupi è in pericolo !
2|bisogna cercare in direzione est.
#3
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Impedire che i quattro Blupi
1|smarriti nella foresta muoiano
@@ -230,14 +230,14 @@ Il villaggio di Blupi è in pericolo !
-2|Attenzione :
+2|Attenzione:
2|
2|Quando il terreno è costituito
2|da muschio, brucia
2|meravigliosamente bene ...
@3
-1|Soluzione :
+1|Soluzione:
1|
1|1) Spaccare una roccia.
1| Le rocce più piccole si spaccano
@@ -250,13 +250,13 @@ Il villaggio di Blupi è in pericolo !
2| spenga ...
#4
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Consentire ai quattro Blupi di
1|raggiungere le lastre tratteggiate.
@4
-1|Soluzione :
+1|Soluzione:
1|
1|1) Abbattere un albero.
1|
@@ -273,22 +273,22 @@ Il villaggio di Blupi è in pericolo !
2|le lastre tratteggiate.
#5
-1|La trappola :
+1|La trappola:
1|Attenzione, il terreno dove sono
1|prigionieri i Blupi è molto
1|infiammabile e l'incendio avanza ...
1|
-1|Obbiettivo :
+1|Obbiettivo:
1|Resistere sino a che l'incendio non
1|è stato domato.
-2|Attenzione :
+2|Attenzione:
2|La costruzione di un muro è un
2|lavoro massacrante. E' inevitabile
2|che Blupi muoia una volta
2|concluso un muro !
-Trucco :
+Trucco:
Se il gioco si svolge troppo
lentamente per i tuoi gusti, premi
il tasto F6 per accelerarlo.
@@ -296,7 +296,7 @@ Premendo il tasto F5 potrai
ristabilire la velocità normale.
@5
-1|Indizi :
+1|Indizi:
1|
1|E' necessario costruire quattro
1|muri sulle lastre grigie. Per
@@ -311,7 +311,7 @@ ristabilire la velocità normale.
2|sua estinzione ...
#6
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Proteggi il più rapidamente
1|possibile il campo trincerato
@@ -326,7 +326,7 @@ ristabilire la velocità normale.
-Trucco :
+Trucco:
E' possibile selezionare diversi
Blupi contemporaneamente
mantenendo premuto il tasto
@@ -334,7 +334,7 @@ Maiuscolo e cliccando al tempo
stesso su ogni Blupi.
@6
-1|Soluzione :
+1|Soluzione:
1|
1|Bisogna chiedere in fretta ai
1|quattro Blupi di spaccare ognuno
@@ -355,20 +355,20 @@ stesso su ogni Blupi.
2|tratteggiate a sud-est.
#7
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|I quattro Blupi devono raggiungere
1|le lastre tratteggiate.
1|Sarà necessario prendersi cura del
1|povero Blupi più lontano ...
-2|Attenzione :
+2|Attenzione:
2|
2|Il terreno non consente di costruire
2|un capanno da giardino !
@7
-1|Soluzione :
+1|Soluzione:
1|
1|Chiedere ad un Blupi di prendere
1|dei pomodori per salvarli dai
@@ -383,7 +383,7 @@ stesso su ogni Blupi.
2|possa nutrire prima di spostarsi.
#8
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Cerca di evitare che uno o due
1|Blupi vengano contaminati, poi
@@ -395,12 +395,12 @@ stesso su ogni Blupi.
-2|Indizio :
+2|Indizio:
2|
2|Costruisci un laboratorio ...
@8
-1|Indizi :
+1|Indizi:
1|
1|E' necessario costruire un
1|laboratorio usando delle pietre.
@@ -415,7 +415,7 @@ stesso su ogni Blupi.
2|Le case si trovano a sud-est ...
#9
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Trova il modo per passare oltre
1|la pista di pattinaggio ...
@@ -423,7 +423,7 @@ stesso su ogni Blupi.
-2|Nota :
+2|Nota:
2|
2|Blupi può camminare sul ghiaccio.
2|L'unico inconveniente è che Blupi
@@ -431,7 +431,7 @@ stesso su ogni Blupi.
2|facendo perde molte forze !
@9
-1|Indizi :
+1|Indizi:
1|
1|E' necessario costruire due torri
1|per proteggersi dai ragni.
@@ -450,7 +450,7 @@ stesso su ogni Blupi.
2|prima di attraversarla !
#10
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Raggiungere l'isola a nord-est,
1|poi saltare la palizzata.
@@ -460,7 +460,7 @@ stesso su ogni Blupi.
2|tratteggiate ...
@10
-1|Indizi :
+1|Indizi:
1|
1|E' necessario costruire un ponte in
1|direzione dei quattro prigionieri.
@@ -482,14 +482,14 @@ stesso su ogni Blupi.
2|proteggerli dall'esplosione ...
#11
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Raggiungere le case a nord-est.
1|Ma attenzione, sono ben
1|custodite ...
@11
-1|Indizi :
+1|Indizi:
1|
1|Costruisci un ponte verso l'isola
1|situata a nord-ovest, poi produci
@@ -507,14 +507,14 @@ stesso su ogni Blupi.
2|bulldozer ...
#12
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Tre Blupi devono raggiungere
1|il Blupi isolato su un'isola lontana
1|in direzione nord-ovest.
@12
-1|Indizi :
+1|Indizi:
1|
1|Costruisci un capanno da giardino
1|e coltiva pomodori.
@@ -532,7 +532,7 @@ stesso su ogni Blupi.
2|pericolosi ...
#13
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Sbarazzarsi dei sei ragni.
1|
@@ -541,13 +541,13 @@ stesso su ogni Blupi.
1|ultimi due, dovrai ricorrere a dei
1|trucchi ...
-2|Trucco :
+2|Trucco:
2|
2|Trova il modo di produrre del
2|veleno nel laboratorio.
@13
-1|Indizi :
+1|Indizi:
1|
1|I primi quattro ragni vengono
1|catturati con delle trappole
@@ -567,13 +567,13 @@ stesso su ogni Blupi.
2|al laboratorio.
#14
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Blupi deve semplicemente tornare
1|nella sua casa ...
@14
-1|Indizi :
+1|Indizi:
1|
1|Sonda il terreno costituito da
1|piccoli sassi alla ricerca di ferro.
@@ -596,7 +596,7 @@ stesso su ogni Blupi.
2|e allontanarti ...
#15
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Un solo Blupi deve raggiungere
1|la casa situata a nord-est.
@@ -606,7 +606,7 @@ stesso su ogni Blupi.
2|postazioni nemiche.
@15
-1|Indizi :
+1|Indizi:
1|
1|Costruisci un capanno da giardino
1|e due torri di protezione sulle
@@ -629,19 +629,19 @@ stesso su ogni Blupi.
2|il campo nemico ...
#16
-1|Situazione :
+1|Situazione:
1|
1|Blupi si è smarrito in una regione
1|arida e priva di alberi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|I due Blupi devono rientrare
2|al villaggio nelle loro case ...
@16
-1|Indizi :
+1|Indizi:
1|
1|Trova la miniera di ferro a
1|nord-est poi taglia una roccia
@@ -662,7 +662,7 @@ stesso su ogni Blupi.
2|teletrasporto ...
#17
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|I cinque Blupi devono raggiungere
1|ognuno una casa.
@@ -671,7 +671,7 @@ stesso su ogni Blupi.
2|dietro il campo nemico !
-Trucco :
+Trucco:
E' possibile selezionare
diversi Blupi contemporaneamente
mantenendo premuto il tasto
@@ -679,7 +679,7 @@ Maiuscolo e cliccando al tempo
stesso sui Blupi.
@17
-1|Indizi :
+1|Indizi:
1|
1|Un Blupi può immediatamente
1|raggiungere la casa sull'isola
@@ -700,7 +700,7 @@ stesso sui Blupi.
2|scoppio ritardato ...
#18
-1|Situazione :
+1|Situazione:
1|
1|Mentre Blupi coglieva
1|tranquillamente dei fiori,
@@ -713,13 +713,13 @@ stesso sui Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Blupi deve fuggire e trovare un
2|modo per tornare a casa sua.
@18
-1|Indizi :
+1|Indizi:
1|
1|Trova la distesa d'acqua che si
1|trova a ovest e costruisci
@@ -738,18 +738,18 @@ stesso sui Blupi.
2|bulldozer !
#19
-1|Situazione :
+1|Situazione:
1|
1|Quattro bulldozer terrorizzano
1|il villaggio di Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Eliminare i bulldozer ...
@19
-1|Indizi :
+1|Indizi:
1|
1|Chiedi a un Blupi di estrarre
1|del ferro e di costruire poi una
@@ -772,13 +772,13 @@ stesso sui Blupi.
2|bulldozer !
#20
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|Distruggere tutte le postazioni
1|nemiche.
@20
-1|Indizi :
+1|Indizi:
1|
1|Produrre più dinamite possibile,
1|più trappole possibili, ecc ...
@@ -786,7 +786,7 @@ stesso sui Blupi.
1|che circonda il campo nemico ...
#21
-1|Situazione :
+1|Situazione:
1|
1|Blupi è stato catturato dal
1|robot cattivo.
@@ -795,13 +795,13 @@ stesso sui Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Blupi deve fuggire ...
2|e tornare a casa sua.
@21
-1|Indizi :
+1|Indizi:
1|
1|Prendi la dinamite a nord-est.
1|Posizionala in seguito contro una
@@ -822,7 +822,7 @@ stesso sui Blupi.
2|la barriera blu a est.
#22
-1|Obbiettivo :
+1|Obbiettivo:
1|
1|1) Costruire delle barche.
1|
@@ -832,7 +832,7 @@ stesso sui Blupi.
2| postazioni nemiche.
@22
-1|Indizi :
+1|Indizi:
1|
1|L'isola a nord-est contiene del
1|minerale di ferro.
@@ -842,7 +842,7 @@ stesso sui Blupi.
2|dinamite e delle trappole collose.
#23
-1|Situazione :
+1|Situazione:
1|
1|Blupi è un gran curiosone: dopo
1|avere osservato il robot, per lungo
@@ -850,13 +850,13 @@ stesso sui Blupi.
1|smarrito ...
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Far arrivare dei rinforzi poi
2|distruggere tutti i nemici !
@23
-1|Indizi :
+1|Indizi:
1|
1|Il Blupi isolato deve allontanarsi
1|dal robot e andare verso ovest.
@@ -876,18 +876,18 @@ stesso sui Blupi.
2|e aiutare il Blupi smarrito ...
#24
-1|Situazione :
+1|Situazione:
1|
1|La regione è infestata dai nemici.
1|
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Eliminare tutti i nemici ...
@24
-1|Indizi :
+1|Indizi:
1|
1|Fuggi verso sud-est per evitare
1|l'incendio, poi costruisci una barca
@@ -904,7 +904,7 @@ stesso sui Blupi.
1|Da qualche tempo Blupi sospetta
1|dell'esistenza di uno strano
1|materiale portato sul suo
-1|pianeta dal robot :
+1|pianeta dal robot:
1|
1| il Platinium ...
1|
@@ -914,13 +914,13 @@ stesso sui Blupi.
2|tecnologia nemica.
2|
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Riporta un cubo di Platinium
2|sulle lastre tratteggiate.
@25
-1|Indizi :
+1|Indizi:
1|
1|Elimina i due bulldozer con le
1|trappole collose. Costruisci una
@@ -943,13 +943,13 @@ stesso sui Blupi.
1|l'accesso alla tecnologia nemica
1|se utilizzato correttamente.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Aiuta Blupi a ritrovare la sua
2|casa ...
@26
-1|Indizi :
+1|Indizi:
1|
1|Costruisci un robot-aiutante con
1|il cubo di Platinium in fabbrica.
@@ -968,7 +968,7 @@ stesso sui Blupi.
2|del primo salto.
#27
-1|Situazione :
+1|Situazione:
1|
1|Con gran faccia tosta, il robot
1|ha posto la sua base proprio
@@ -976,13 +976,13 @@ stesso sui Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Raggiungere il campo nemico
2|poi distruggere tutto ...
@27
-1|Indizi :
+1|Indizi:
1|
1|Costruisci il più rapidamente
1|che puoi un teletrasporto, al fine
@@ -996,7 +996,7 @@ stesso sui Blupi.
2|sollievo !
2|
2|Hai due possibilità per raggiungere
-2|il campo nemico a nord :
+2|il campo nemico a nord:
2|
2|1) delle barche
2|2) un ponte
@@ -1004,7 +1004,7 @@ stesso sui Blupi.
2|A te la scelta ...
#28
-1|Situazione :
+1|Situazione:
1|
1|Blupi è un gran distratto.
1|Infatti ha costruito un muro
@@ -1012,13 +1012,13 @@ stesso sui Blupi.
1|sbaglio ...
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Blupi deve semplicemente
2|rientrare a casa ...
@28
-1|Indizi :
+1|Indizi:
1|
1|In un'isoletta a nord si trovano
1|molte uova.
@@ -1037,7 +1037,7 @@ stesso sui Blupi.
2|di cinta.
#29
-1|Situazione :
+1|Situazione:
1|
1|Lo spazio libero è sempre più
1|occupato dal robot e dai suoi
@@ -1046,7 +1046,7 @@ stesso sui Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Blupi deve costruire il suo villaggio
2|prevedendo delle difese efficaci.
@@ -1055,7 +1055,7 @@ stesso sui Blupi.
2|nemici ...
@29
-1|Indizi :
+1|Indizi:
1|
1|Costruire delle torri a nord-est,
1|a nord-ovest e a sud-est.
@@ -1076,7 +1076,7 @@ stesso sui Blupi.
2|armature ...
#30
-1|Situazione :
+1|Situazione:
1|
1|Questa guerra non può più durare.
1|Un accordo è stato concluso con
@@ -1089,7 +1089,7 @@ stesso sui Blupi.
-2|Obbiettivo :
+2|Obbiettivo:
2|
2|Preparare il cammino affinché il
2|robot possa raggiungere il suo
@@ -1099,7 +1099,7 @@ stesso sui Blupi.
2|terminato !
@30
-1|Indizi :
+1|Indizi:
1|
1|Spaccare della roccia a sud-est.
1|Abbattere un albero e costruire
diff --git a/resources/data/pl/stories.blp b/resources/data/pl/stories.blp
index e69574f..d2ac7ba 100644
--- a/resources/data/pl/stories.blp
+++ b/resources/data/pl/stories.blp
@@ -194,7 +194,8 @@ Blupich jest zagrożona.
1|
1|Na początek musisz zbudować
1|dwie palisady na północy
-1|by powstrzymać pająka przed przyjściem.
+1|by powstrzymać pająka przed
+1|przyjściem.
1|Dopiero wtedy wybuduj
2|szopkę ogrodową i sadź
2|pomidory w spokoju.
@@ -365,7 +366,8 @@ każdego Blupiego.
1|Jeden z Blupich musi
1|przeskoczyć na wschodnią
1|wyspę i wybudować most
-1|prowadzący do nawierzchni docelowej.
+1|prowadzący do nawierzchni
+1|docelowej.
2|Przynieś pomidory do
2|zmęczonego Blupiego, żeby
@@ -458,8 +460,9 @@ każdego Blupiego.
1|
1|Niebieskie kwiaty są na
1|południowym wschodzie.
-1|W laboratorium można wykorzystać
-1|je do produkcji dynamitu.
+1|W laboratorium można
+1|wykorzystać je do produkcji
+1|dynamitu.
2|Użyj dynamitu by zniszczyć
2|palisadę blokującą drogę
@@ -634,7 +637,8 @@ każdego Blupiego.
1|i 2 Jeepy i znajdź przeciwny obóz
1|na południowym zachodzie.
-2|Wysadź barierę chroniącą wrogi obóz.
+2|Wysadź barierę chroniącą wrogi
+2|obóz.
2|Postaraj się wysadzić przy tym
2|również buldożery.
2|
@@ -670,9 +674,10 @@ klikania na każdym Blupim.
@17
1|Solucja:
1|
-1|Blupi może iść do domu na zachodniej
-1|części wyspy. Pozostała czwórka musi
-1|iść dość szybko by nie paść ofiarą
+1|Blupi może iść do domu na
+1|zachodniej części wyspy.
+1|Pozostała czwórka musi iść
+1|dość szybko by nie paść ofiarą
1|buldożerów. Blupi muszą iść na
1|północny wschód.
@@ -683,7 +688,8 @@ klikania na każdym Blupim.
2|są duże pokłady żelaza.
2|
2|Stwórz łódź i podążaj na
-2|północny wschód z bombą zegarową.
+2|północny wschód z bombą
+2|zegarową.
#18
1|Sytuacja:
@@ -744,12 +750,13 @@ klikania na każdym Blupim.
1|Wejdź na pokład i poszukaj innej
1|wyspy z drzewami. Zetnij drzewo
1|i przetransportuj deski na większą
-2|wyspę. Stwórz teleporter. Przeniesie
-2|cię on do zbrojowni.
+2|wyspę. Stwórz teleporter.
+2|Przeniesie cię on do zbrojowni.
2|
2|
2|Umieść trochę dynamitu niedaleko
-2|muru otaczającego teren i wysadź go.
+2|muru otaczającego teren i wysadź
+2|go.
2|Za pomocą reszty dynamitu możesz
2|zniszczyć buldożery.
@@ -796,11 +803,11 @@ klikania na każdym Blupim.
2|na rzekę. Stwórz łódź z desek.
2|Będziesz potrzebować też drugiej
2|sterty desek by zbudować później
-2|drugą łódź. Zanim to zrobisz, musisz
-2|złapać paralizatora w klejącą pułapkę
-2|i stworzyć bombę zegarową w celu
-2|zniszczenia niebieskiej bariery
-2|na wschodzie.
+2|drugą łódź. Zanim to zrobisz,
+2|musisz złapać paralizatora w
+2|klejącą pułapkę i stworzyć bombę
+2|zegarową w celu zniszczenia
+2|niebieskiej bariery na wschodzie.
#22
1|Cele:
@@ -904,11 +911,12 @@ klikania na każdym Blupim.
@25
1|Solucja:
1|
-1|Zneutralizuj 2 buldożery za pomocą
-1|klejących pułapek. Stwórz łódź na
-1|północ od pierwszego wrogiego obozu,
-1|zaokrętuj razem z bombą zegarową
-1|i udaj się na wschód.
+1|Zneutralizuj 2 buldożery za
+1|pomocą klejących pułapek. Stwórz
+1|łódź na północ od pierwszego
+1|wrogiego obozu, zaokrętuj razem
+1|z bombą zegarową i udaj się na
+1|wschód.
1|
1|Znajdź ścieżkę między skałami
1|prowadzącą na południe.
@@ -942,10 +950,11 @@ klikania na każdym Blupim.
1|i stwórz bombę zegarową.
1|
1|Weź robota i bombę. Robot może
-1|przekroczyć wrogi obóz na zachodzie
-1|bez przeszkód. Wysadź barierę na
-2|północy i weź pomidory by nakarmić
-2|Blupiego w swoim obozie.
+1|przekroczyć wrogi obóz na
+1|zachodzie bez przeszkód. Wysadź
+1|barierę na północy i weź
+1|pomidory by nakarmić
+1|Blupiego w swoim obozie.
2|
2|Połóż pomidory na ziemi zanim
2|wykonasz skok.
@@ -1055,12 +1064,13 @@ klikania na każdym Blupim.
1|Mogą okazać się przydatne
1|w starciu ze skaczącymi bombami!
-2|Zielone kwiaty na wschodzie pozwolą
-2|ci stworzyć klejące pułapki by obronić
-2|wioskę.
+2|Zielone kwiaty na wschodzie
+2|pozwolą ci stworzyć klejące
+2|pułapki by obronić wioskę.
2|
2|Wydobądź żelazo na południowym
-2|zachodzie i stwórz bomby i pancerze.
+2|zachodzie i stwórz bomby i
+2|pancerze.
#30
1|Sytuacja:
diff --git a/resources/data/pt/stories.blp b/resources/data/pt/stories.blp
new file mode 100644
index 0000000..138d639
--- /dev/null
+++ b/resources/data/pt/stories.blp
@@ -0,0 +1,1144 @@
+$1
+1|Objetivo:
+1|
+1|Cada Blupi deve entrar em uma casa.
+1|Para fazer isso, sempre use o botao
+1|esquerdo do mouse.
+
+2|1) Clique em um Blupi.
+2| Um anel vai aparecer em volta
+2| dele indicando que esta selecionado.
+2|
+2|2) Clique em sua casa.
+2|
+2|3) Clique em "Ir"
+2|
+2|4) Repita esses passos para
+2| o segundo Blupi.
+
+
+
+
+
+
+
+
+
+ Depois de ter lido esses passos
+ clique no dado abaixo para jogar.
+
+$2
+Existe um segundo treino um pouco mais
+complicado:
+
+1|Transportar ambas pilhas de madeiras
+1|para o pavimento de pedra na
+1|direita.
+1|
+1|Blupi deve comer tomates para
+1|acumular energia suficiente para
+1|fazer isso. Note que
+2|quando ele come, o anel vermelho
+2|torna-se azul. Isso
+2|indica seu nivel de energia.
+2|
+2| vermelho = cansado
+2| azul = energia
+
+
+
+Dica:
+Para arrastar sua tela, você pode
+arrastar seu mouse para o lado da
+tela ou usar as setas do seu
+teclado.
+
+$3
+1|Encontre os ovos ...
+1|
+1|Colocando-os na incubadora,
+1|quatro novos Blupis
+1|nascerao dos ovos.
+
+
+
+
+
+
+Dica:
+é mais eficiente usar
+o mouse e o teclado
+ao mesmo tempo.
+
+$4
+1|Objetivo:
+1|
+1|Os quatro Blupis devem chegar nas
+1|casas ao norte da ilha.
+
+2|Cada Blupi deve comer para ter
+2|energia suficiente para pular.
+
+$5
+1|Objetivo:
+1|
+1|Colocar dois grupos de tomates
+1|no pavimento de pedra.
+
+2|Para isso você deve cortar as
+2|plantas e construir uma casa do
+2|jardim, plantar os tomates e
+2|depositar dois grupos de tomates
+2|no pavimento de pedra (sem comer).
+
+$6
+1|Objetivo:
+1|
+1|Cada Blupi deve chegar em casa
+1|em uma pequena ilha.
+1|Infelizmente existe comida suficiente
+1|para apenas um Blupi.
+2|Você vai precisar encontrar uma
+2|forma de produzir comida suficiente
+2|para todos os outros.
+2|
+2|Felizmente, a ilha possui
+2|muitas plantas.
+
+#h1
+A vida do Blupi em seu planeta
+era perfeita. Tudo era muito
+bonito e quieto até que um dia
+um estranho meteorito caiu em
+um local remoto.
+
+Algum tempo depois, Blupi
+percebeu que sua colheita
+estava sendo devastada por
+aranhas gigantes.
+
+E ainda parece que apesar da sua
+excelente forma fisica, Blupi
+pegou uma curiosa doença.
+Ele agora espirra e tosse bastante.
+
+#h2
+O que esta acontecendo?
+
+Bem, o estranho meteorito parece
+ser uma nave espacial. Restou
+somente um sobrevivente na
+batida, e parecer ser um robo.
+E a unica coisa que ele quer é
+construir fabricas para produzir
+todo tipo de maquinas perversas
+para acabar com o planeta do
+Blupi.
+
+O Blupi precisa da sua ajuda e
+habilidade para obter uma
+vantagem de todos os recursos
+naturais para se livrar desses
+intrusos...
+
+#1
+A nave espacial colocou fogo na
+floresta. Agora a vila do Blupi
+pode estar em perigo.
+
+1|Objetivo:
+1|
+1|Impedir que a vila seja queimada.
+1|Para fazer isso, existe apenas uma
+1|maneira: Cortar algumas plantas
+1|do lado esquerdo.
+
+
+
+
+
+2|Dica:
+2|
+2|Se um Blupi ficar escondido atras
+2|de uma planta, pressione a barra
+2|de espaço. Fazendo isso ele vai
+2|aparecer transparente por alguns
+2|instantes.
+
+@1
+1|Soluçao:
+1|
+1|Levar o Blupi para a esquerda
+1|para cortar algumas plantas. Os
+1|dois outros Blupis podem
+1|carregar as madeiras.
+
+#2
+1|Objetivo:
+1|
+1|Blupi esta longe e perdido da
+1| sua vila. Ele deve se organizar
+1|antes de procurar pela vila.
+1|
+1|1) Construa uma casa do jardim e
+1| plante tomates.
+
+2|2) Construa uma incubadora para
+2| obter ajuda.
+2|
+2|3) Alimente os quatro Blupis e
+2| procure pela vila.
+2|
+
+
+2|Tenha cuidado:
+2|
+2|Algumas coisas incomuns
+2|podem acontecer.
+
+
+@2
+1|Dicas:
+1|
+1|Primeiro, você deve construir
+1|duas barreiras no norte
+1|para parar a aranha.
+1|Somente assim sera possivel
+2|construir uma casa do jardim
+2|e plantar tomates em paz.
+2|
+2|Para alcançar as quatro casas
+2|você deve comer.
+
+
+#3
+1|Objetivo:
+1|
+1|Evitar que os quatro Blupis
+1|se queimem.
+1|
+1|Termine a parede.
+
+
+
+
+2|Tenha cuidado:
+2|
+2|O terreno é feito de musgo
+2|que queima mais facilmente.
+
+@3
+1|Soluçao:
+1|
+1|1) Esculpir uma pedra.
+1| As pedras menores ficam
+1| prontas rapidamente.
+
+2|2) Construa uma parede entre
+2| as outras duas.
+2|
+2|3) Espere até que o fogo acabe.
+
+#4
+1|Objetivo:
+1|
+1|Faça os quatro Blupis
+1|alcançarem o pavimento
+1|de pedra
+
+@4
+1|Soluçao:
+1|
+1|1) Corte uma planta
+1|
+1|2) Leve as madeiras para
+1| perto da margem.
+1|
+1|3) Construa uma ponte entre
+1| os dois Blupis cansados.
+
+2|4) Repita estes passos
+2| três vezes.
+2|
+2|Os Blupis cansados podem
+2|atravessar a ponte e alcançar
+2|o pavimento de pedras.
+
+#5
+1|A armadilha:
+1|Cuidado, o terreno onde os
+1|Blupis estao prisioneiros
+1|podem se queimar.
+1|
+1|Objetivo:
+1|
+1|Resista até quando o fogo
+1|tiver apagado.
+
+2|Tome Cuidado:
+2|Construir uma parede é trabalho
+2|muito cansativo para o Blupi.
+2|Quando ele terminar, vai morrer !
+
+
+
+Dica:
+Se o jogo estiver muito devagar
+para você, pressione a tecla F6
+para aumentar a velocidade. E
+F5 para voltar ao normal.
+
+@5
+1|Dicas:
+1|
+1|Você deve construir quatro
+1|paredes no pavimento cinza.
+1|Você vai ter que cortar duas
+1|plantas para construir uma casa
+1|do jardim e uma incubadora.
+
+2|Quando as paredes estiverem
+2|terminadas, você vai ter que
+2|esperar até o fogo acabar.
+
+#6
+1|Objetivo:
+1|
+1|Um perigo esta presente: proteja
+1|o campo o mais depressa possivel
+1|com quatro torres.
+
+2|Agora você pode juntar
+2|os pavimentos de pedra no
+2|sudeste.
+
+
+
+
+
+
+
+
+
+Dica:
+
+Você pode selecionar muitos Blupis
+ao mesmo tempo mantendo
+a tecla shift pressionada enquanto
+clica em cada Blupi.
+
+
+@6
+1|Soluçao:
+1|
+1|Você deve colocar quatro Blupis
+1|para esculpir as pedras
+1|rapidamente. As menores ficam
+1|prontas mais rapidamente.
+1|
+1|Transporte as quatro pilhas de
+1|pedras para o pavimento cinza
+1|escuro e comece a construir
+1|as torres de proteçao.
+
+2|Espere pela chegada e
+2|destruiçao dos virus.
+2|
+2|Os outros quatro Blupis
+2|podem ir rapidamente para
+2|o pavimento de pedra no
+2|sudeste.
+
+#7
+1|Objetivo:
+1|
+1|Os quatro Blupis devem
+1|alcançar o pavimento de
+1|pedras. Você devera tomar
+1|cuidado com o Blupi
+1|mais distante.
+
+
+
+
+
+2|Tome cuidado:
+2|
+2|O terreno é inapropriado
+2|para construir uma casa do
+2|jardim.
+
+@7
+1|Soluçao:
+1|
+1|Faça um Blupi guardar um
+1|tomate rapidamente para que
+1|as aranhas nao o comam.
+1|
+1|Com outro Blupi, pule na
+1|outra ilha e construa uma ponte
+1|que vai ligar as duas ilhas.
+
+2|Carregue os tomates para o
+2|Blupi casado para que ele
+2|possa comer.
+
+#8
+1|Objetivo:
+1|
+1|Evitar que um ou dois Blupis
+1|se contaminem e encontrar um
+1|remedio para curar os outros.
+1|
+1|Finalmente cada Blupi deve
+1|entrar em uma casa.
+
+
+
+
+
+
+
+2|Dica:
+2|
+2|Construa um laboratorio.
+
+@8
+1|Soluçao:
+1|
+1|Um laboratorio de pedra deve
+1|ser feito. Ele vai permitir que
+1|você transforme as flores
+1|amarelas em remedio para
+1|curar os Blupis.
+
+2|Você precisa construir uma
+2|ponte para levar o remedio
+2|para curar os Blupis.
+2|
+2|As casas ficam no sudeste da ilha.
+
+#9
+1|Objetivo:
+1|
+1|Encontrar uma forma para
+1|atravessar a pista de gelo.
+
+
+
+
+
+
+2|Nota:
+2|
+2|Blupi pode andar no gelo. Mas
+2|como o gelo é muito escorregadio,
+2|ele vai perder muita energia.
+
+@9
+1|Soluçao:
+1|
+1|Construa duas torres para
+1|proteger os Blupis das
+1|aranhas.
+1|
+1|Você precisa construir uma casa
+1|do jardim e uma incubadora
+1|para deixar os ovos chocarem.
+
+2|Blupi perde muita força
+2|quando ele atravessa a pista
+2|de gelo. Portanto, você deve
+2|levar os tomates antes da pista.
+
+#10
+1|Objetivo:
+1|
+1|Alcançar a ilha no
+1|nordeste e explodir
+1|uma barreira.
+
+2|Tudo o que você precisa fazer
+2|agora é colocar os quatro
+2|Blupis no pavimento de pedra.
+
+@10
+1|Soluçao:
+1|
+1|Construa uma ponta na direçao
+1|dos quatro prisioneiros. Você pode
+1|esculpir uma pedra para
+1|construir um laboratorio.
+1|
+1|As flores azuis podem ser
+1|encontradas no sudeste.
+1|Levando-as para o laboratorio,
+1|elas podem ser transformadas
+1|em dinamite.
+
+2|Use a dinamite para destruir
+2|a barreira que esta prendendo
+2|os quatro prisioneiros Blupis.
+2|
+2|Primeiro, você precisa
+2|afastar os prisioneiros para
+2|protegê-los da explosao.
+
+#11
+1|Objetivo:
+1|
+1|Alcançar as casas no
+1|nordeste. Tome cuidado,
+1|elas estao bem guardadas.
+
+@11
+1|Dicas:
+1|
+1|Construa uma ponte no sentido
+1|da ilha noroeste e depois
+1|faça pelo menos quatro pacotes
+1|de dinamite.
+
+2|Coloque as dinamites no
+2|norte corretamente perto das
+2|escavadoras.
+2|
+2|Enquanto as dinamites nao
+2|estiverem prontas, evite ir
+2|ao norte ou você sera atacado
+2|pelas escavadoras.
+
+#12
+1|Objetivo:
+1|
+1|Três Blupis devem se unir
+1| com o Blupi isolado na ilha
+1|no lado noroeste.
+
+@12
+1|Dica:
+1|
+1|Construa uma casa do jardim
+1|e plante tomates.
+1|
+1|Faça dinamites com as flores
+1|azuis que podem ser
+1|encontradas no nordeste.
+
+2|Transporte as dinamites para
+2|a ilha situada no oeste.
+2|
+2|Tome cuidado, o caminho possui
+2|dois virus escondidos.
+
+#13
+1|Objetivo:
+1|
+1|Conseguir se livrar das seis
+1|aranhas.
+1|
+1|As quatro primeiras serao
+1|faceis. As duas restantes
+1|serao mais dificeis.
+
+
+
+
+
+
+2|Dica:
+2|
+2|Descubra como produzir
+2|remedio no laboratorio.
+
+@13
+1|Soluçao:
+1|
+1|As primeiras quatro aranhas
+1|podem ser capturadas com
+1|armadilhas feitas com as flores
+1|verdes no laboratorio.
+1|
+1|As armadilhas devem ser
+1|colocadas perto das aranhas.
+
+2|As outras duas podem ser
+2|com os tomates que foram
+2|alterados no
+2|laboratorio.
+2|
+2|Construa uma ponte para carregar
+2|os tomates para o laboratorio.
+
+#14
+1|Objetivo:
+1|
+1|O Blupi deve simplesmente
+1|ir para casa.
+1|
+
+@14
+1|Soluçao:
+1|
+1|Procure por ferro sobre o
+1|terreno rochoso. Coloque uma
+1|madeira na bandeira e
+1|construa uma mina.
+1|
+1|Esculpa uma rocha para construir
+1|uma oficina aonde você vai
+1|poder utilizar o ferro.
+
+2|Pegue a bomba, suba no
+2|jeep e ande para o leste.
+2|O jeep vai te proteger das
+2|escavadoras.
+2|
+2|Quando você chegar na barreira,
+2|você deve deixar o seu jeep
+2|rapidamente, deixar a bomba ,
+2|liga-la, entrar no jeep e
+2|fugir
+
+#15
+1|Objetivo:
+1|
+1|Somente um Blupi
+1|deve alcançar a casa no
+1|nordeste.
+
+2|Para fazer isso, você deve
+2|destruir as diversas
+2|instalaçoes inimigas.
+
+@15
+1|Dicas:
+1|
+1|Construa uma casa do jardim
+1|e duas torres no pavimento
+1|cinza escuro.
+1|
+1|Construa uma ponte para ligar
+1|a ilha ao leste. Selecione
+1|diferentes tipos de flores e as
+1|traga para o campo.
+
+2|Construa um laboratorio, faça
+2|dinamites e armadilhas pegajosas.
+2|Proteja o campo com as
+2|armadilhas pegajosas e
+2|fora com as dinamites.
+2|
+2|Quando você achar que possui
+2|dinamites e armadilhas suficientes,
+2|mande um pequeno comando para
+2|o nordeste de destrua o campo
+2|inimigo
+
+#16
+1|Situaçao:
+1|
+1|Blupi esta perdido em uma parte
+1|arida do planeta sem nenhuma
+1|planta.
+
+
+
+
+2|Objetivo:
+2|
+2|Os dois Blupis devem voltar
+2|para casa em sua vila.
+
+@16
+1|Dicas:
+1|
+1|Encontre a mina no nordeste,
+1|esculpa uma rocha e construa
+1|uma oficina, faça uma bomba
+1|e dois jeeps, e procure o
+1|campo inimigo no sudoeste.
+
+2|Exploda a barreira no campo
+2|inimigo. Tente explodir junto
+2|as escavadoras.
+2|
+2|Você deve ir para o sul e
+2|procurar pela planta e fazer
+2|um teletransportador.
+
+#17
+1|Objetivo:
+1|
+1|Os cinco Blupis devem
+1|alcançar uma casa.
+
+2|Cuidado, uma casa fica
+2|atras do campo inimigo.
+
+
+
+
+
+
+
+
+
+
+
+
+Dica:
+
+Você pode selecionar alguns
+Blupis ao mesmo tempo
+mantendo a tecla Shift selecionada
+enquanto clica em cada Blupi.
+
+@17
+1|Soluçao:
+1|
+1|Um Blupi pode ir para a casa
+1|no lado oeste da ilha.
+1|Os outros quatro devem ir embora
+1|rapidamente por causa das
+1|escavadoras. Os Blupis
+1|devem ir para o nordeste.
+
+2|Mais adiante, você deve encontrar
+2|uma vila cercada por barreiras.
+2|
+2|No norte da ilha, existe muito
+2|ferro.
+2|
+2|Você deve fazer um bote e ir
+2|para o nordeste da ilha com
+2|uma bomba.
+
+#18
+1|Situaçao:
+1|
+1|Enquanto Blupi estava
+1|colhendo flores, ele nao percebeu
+1|que estava perdido da sua
+1|casa. Agora ele esta perdido
+1|em um lugar cheio de inimigos.
+
+
+
+
+
+2|Objetivo:
+2|
+2|Blupi deve fugir e encontrar
+2|uma forma para voltar para casa.
+
+@18
+1|Dicas:
+1|
+1|Encontre a agua localizada no
+1|oeste. Faça um bote. Cuidado,
+1|pode pode encontrar muitos
+1|virus espalhados em volta.
+
+2|Com o bote, você pode
+2|atravessar e desembarcar
+2|na margem.
+2|
+2|A casa esta perto agora. Tenha
+2|cuidado, você deve evitar
+2|as escavadoras.
+
+#19
+1|Situaçao:
+1|
+1|Quatro escavadoras parecem
+1|ameaçando a vila do Blupi.
+
+
+
+
+
+2|Objetivo:
+2|
+2|Destruir as escavadoras
+
+@19
+1|Dicas:
+1|
+1|Faça um Blupi extrair ferro
+1|e construir uma armadura. Ela vai
+1|pretegê-lo do fogo.
+1|
+1|Ande para o leste e construa um
+1|bote. Embarque e procure por
+1|outra ilha com planta. Corte a
+1|planta e coloque a madeira
+2|na ilha maior. Faça um
+2|teletransportador. Ele vai te levar
+2|para a fortaleza.
+2|
+2|Coloque algumas dinamites perto
+2|das paredes e exploda-as
+2|Com o restante das
+2|dinamites, você pode destruir
+2|as escavadoras.
+
+#20
+1|Objetivo:
+1|
+1|Destruir todas as instalaçoes
+1|inimigas.
+1|
+
+@20
+1|Dicas:
+1|
+1|Produza muitas dinamites,
+1|armadilhas, etc. possiveis antes
+1|de explodir as barreiras que
+1|protegem o campo inimigo.
+
+#21
+1|Situaçao:
+1|
+1|Blupi foi capturado por um
+1|robo asqueroso. Ele é um
+1|prisioneiro na base de campo
+1|do robo.
+
+
+
+
+2|Objetivo:
+2|
+2|Blupi deve escapar e achar
+2|sua casa.
+
+@21
+1|Dicas:
+1|
+1|Pegue a dinamite do nordeste.
+1|Coloque-a perto da barreira
+1|azul no espaço vazio nas
+1|rochas. Quando as escavadoras
+1|passarem pelas dinamites, elas
+1|podem destruir as barreiras.
+
+2|Corra para o leste ate alcançar
+2|o rio. Faça um bote com as
+2|plantas. Você vai precisar de
+2|uma segunda pilha de madeiras
+2|para construir um bote depois.
+2|Antes disso, você vai ter que
+2|pegar o eletrocondutor com
+2|a armadilha pegajosa e fazer
+2|uma bomba para destruir a
+2|barreira azul no leste.
+
+#22
+1|Objetivo:
+1|
+1|1) Fazer botes.
+1|
+1|2) Explorar toda a ilha.
+1|
+1|3) Destruir todas instalaçoes
+1| inimigas.
+
+@22
+1|Dicas:
+1|
+1|A ilha no nordeste tem
+1|muito ferro.
+
+2|A ilha no leste tem tudo o
+2|que você precisa para fazer
+2|dinamite e armadilhas pegajosas.
+
+#23
+1|Situaçao:
+1|
+1|Blupi parece estar curioso.
+1|Depois de ter observado o robo
+1|por um longo tempo, ele percebe
+1|agora que ele esta perdido.
+
+
+
+
+2|Objetivo:
+2|
+2|Trazer ajuda e destruir
+2|os inimigos!
+
+
+@23
+1|Dicas:
+1|
+1|O Blupi isolado deve ir
+1|longe do robo e ir para o
+1|leste. Blupi deve esculpir
+1|uma rocha para permitir
+1|alcançar a madeira, e entao
+1|fazer um teletransportador.
+
+2|Com o segundo grupo de
+2|Blupis, você deve fazer um
+2|bote, encontrar a bomba no
+2|nordeste e explodir a barreira no
+2|sul. Isto vai permitir você trazer
+2|a madeira para perto da ilha
+2|e fazer um teletransportador para
+2|permitir você se unir e ajudar
+2|o Blupi perdido.
+
+#24
+1|Situaçao:
+1|
+1|O lugar possui muitos inimigos.
+1|
+
+
+
+2|Objetivo:
+2|
+2|Destruir todos os inimigos.
+
+@24
+1|Dicas:
+1|
+1|Vai para o sudeste para evitar
+1|o fogo e faça um bote com
+1|uma planta restante.
+1|
+1|No campo, você vai encontrar
+1|algum ferro.
+
+2|No norte do campo, você vai
+2|encontrar alguns ovos.
+
+#25
+1|Blupi ficou desconfiado
+1|porque o trouxe algumas
+1|coisas estranhas para o
+1|seu planeta:
+1|
+1| Platina....
+1|
+1|A platina, que foi colocada
+2|perto do foguete do robo,
+2|vai dar acesso à tecnologia
+2|do inimigo.
+2|
+
+
+2|Objetivo:
+2|
+2|Trazer cubo de platina para
+2|o pavimento de pedra.
+
+@25
+1|Soluçao:
+1|
+1|Destruir duas escavadoras com
+1|armadilhas pegajosas. Fazer um
+1|bote no norte do primeiro campo
+1|inimigo, depois embarcar com uma
+1|bomba e ir para o leste.
+1|
+1|Procurar por um caminho entre as
+1|rochas indo para o sul. O campo
+2|inimigo com o foguete esta
+2|longe do leste. Você vai precisar
+2|explodir uma barreira para
+2|permitir pegar e carregar a
+2|platina.
+2|
+2|Traga a platina de volta
+2|para a base.
+
+#26
+1|O cubo de Platina vai permitir
+1|você acessar a tecnologia inimiga
+1|para usa-la corretamente.
+
+
+
+
+
+2|Objetivo:
+2|
+2|Ajudar o Blupi a encontrar a
+2|sua casa.
+
+@26
+1|Dicas:
+1|
+1|Fazer um robo ajudante com o
+1|cubo de platina na fabrica e
+1|fazer uma bomba.
+1|
+1|Pegar o robo e a bomba.
+1|O robo pode cruzar o oeste
+1do campo inimigo sem ser
+2|notado. Exploda a barreira
+2|no norte e pegue os tomates
+2|para alimentar o Blupi
+2|no campo.
+2|
+2|Largue os tomates antes de
+2|pular.
+
+#27
+1|Situaçao:
+1|
+1|O robo teve o atrevimento de
+1|instalar a sua vila perto da
+1|vila do Blupi.
+
+
+
+
+2|Objetivo:
+2|
+2|Alcançar o campo inimigo e
+2|destruir tudo.
+
+@27
+1|Dicas:
+1|
+1|Fazer um teletransportador o
+1|mais rapido possivel para você
+1|alcançar a ilha com os ovos.
+1|Construir duas torres nas
+1|pedras na cor cinza escuro.
+1|Construir uma barreira na
+1|esquerda e direita de cada
+1|torre.
+
+2|Agora você pode respirar !
+2|
+2|Você tem duas formas para
+2|alcançar o campo inimigo no
+2|norte, pelo bote ou
+2|construindo uma ponte.
+2|
+2|Você pode escolher !
+
+#28
+1|Situaçao:
+1|
+1|Enquanto estava construindo
+1|sua casa, Blupi fez um erro:
+1|ele construiu uma parede em
+1|volta dela.
+
+
+
+
+
+2|Objetivo:
+2|
+2|Blupi deve simplesmente
+2|ir para casa.
+
+@28
+1|Dicas:
+1|
+1|Uma pequena ilha no norte
+1|tem muitos ovos.
+1|
+1|Você precisa atravessar o
+1|campo inimigo rapidamente
+1|para evitar que as
+1|escavadoras venham do
+1|norte e do sul, para que
+2|você possa colher
+2|flores azuis.
+2|Outro Blupi pode pega-las
+2|para fazer dinamites.
+2|
+2|Você vai poder usar somente
+2uma rocha que esta no campo
+2|inimigo, simplesmente fora
+2|da parede de proteçao.
+
+#29
+1|Situaçao:
+1|
+1|O espaço livre parece estar sendo
+1|ocupado mais e mais pelo robo
+1|e seus ajudantes.
+
+
+
+
+
+2|Objetivo:
+2|
+2|Blupi deve construir sua vila
+2|e elaborar uma boa tatica
+2|de defesa.
+2|
+2|Ele vai ter que atacar e
+2|eliminar todos os seus inimigos.
+
+@29
+1|Dicas:
+1|
+1|Ele deve construir torres de
+1|proteçao no noroeste,
+1|nordeste e no lado sudeste.
+1|Todas as rochas podem ser
+1|encontradas no noroeste.
+1|
+1|Deixe as plantas perto das
+1|barreiras. Elas podem ser
+1|utilizadas contra as bombas !
+
+2|As flores verdes no leste permitem
+2|você fazer armadilhas pegajosas
+2|para defender a vila.
+2|
+2|Extraia ferro no sudoeste e faça
+2|bombas e armadilhas.
+
+#30
+1|Situaçao:
+1|
+1|Esta guerra precisa acabar logo.
+1|Blupi e o robo tiveram que
+1|fazer um acordo:
+1|Ele precisa ajudar o robo a voltar
+1|para o seu foguete, em retorno,
+1|o robo vai deixar de forma
+1|definitiva o planeta do Blupi.
+
+
+
+
+2|Objetivo:
+2|
+2|Preparar o caminho para o
+2|foguete para que o robo possa
+2|deixar o planeta. Tendo perdido
+2|a batalha, o robo ficou zangado
+2|e se recusa a se mover até que
+2|o caminho esteja terminado.
+
+@30
+1|Dicas:
+1|
+1|Esculpa uma rocha no sudeste.
+1|Corte uma planta e faça um bote.
+1|Com o bote, procure por uma
+1|ilha no nordeste.
+1|Procure por algum ferro, construa
+1|uma mina e uma fabrica. Faça uma
+2|bomba, que vai permitir você
+2|explodir as barreiras em volta do
+2|do robo.
+2|
+2|Tudo o que você precisa, seria
+2|construir uma ponte para que o
+2|robo possa voltar ao seu foguete.
diff --git a/resources/data/tr/stories.blp b/resources/data/tr/stories.blp
new file mode 100644
index 0000000..d7a5985
--- /dev/null
+++ b/resources/data/tr/stories.blp
@@ -0,0 +1,1096 @@
+$1
+1|Hedef:
+1|
+1|Her Blupi bir eve girmek zorunda.
+1|Bunu yapmak için, her zaman sol
+1|fare tuşunu kullan.
+
+2|1) Bir Blupi'ye tıkla
+2| Onun etrafında, seçildiğini
+2| gösteren mavi bir halka
+2| belirecek.
+2|
+2|2) Onun evine tıkla
+2|
+2|3) "git" butonuna bas
+2|
+2|4) İkinci Blupi için aynı
+2| işlemleri tekrar et.
+
+
+
+
+
+
+
+ Bu yönergeleri okuduktan sonra,
+ aşağıdaki zara bas.
+
+$2
+İşte daha karışık olan ikinci
+alıştırma:
+
+1|Her iki kalas yığınını sağdaki
+1|çizgili parke taşına taşı.
+1|
+1|Blupi, bu işlem sırasında
+1|yeterli güç toplamak için
+1|domates yemeli. Öyle ki, onları
+2|yediği zaman, ayağındaki
+2|kırmızı halka maviye dönüşür. Bu
+2|onun enerji seviyesini gösterir.
+2|
+2| kırmızı = bitkin
+2| mavi = formda
+
+
+
+İpucu:
+Ekranı kaydırmak için, fareni
+ekranın kenarına çekebilir
+veya klavye yön tuşlarını
+kullanabilirsin.
+
+$3
+1|Yumurtaları bul ...
+1|
+1|Onları inkübatöre koyduktan
+1|sonra, dört yeni Blupi
+1|yumurtadan çıkacak.
+
+
+
+
+
+
+İpucu:
+Bir elle fareyi kullanırken
+diğeriyle klavye yön oklarını
+kullanmak daha etkili.
+
+$4
+1|Hedef:
+1|
+1|Dört Blupi kuzeydeki adalarda
+1|bulunan evlere ulaşmalı.
+
+2|Her Blupi, zıplamak için gereken
+2|gücü almak için yemek yemeli.
+
+$5
+1|Hedef:
+1|
+1|İki grup domatesi çizgili
+1|parke taşının üzerine koy.
+
+2|Bunu yapmak için, ağaçları
+2|kesmelisin, bir bahçe kulübesi
+2|inşa etmelisin, domates
+2|yetiştirmelisin ve iki grup
+2|domatesi çizgili parke taşının
+2|üzerine koymalısın (onları sakın
+2|yeme).
+
+$6
+1|Hedef:
+1|
+1|Her Blupi, küçük bir adada
+1|bulunan bir eve ulaşmalı.
+1|Ne yazık ki, burada sadece tek
+1|Blupi'ye yetecek kadar yemek var.
+2|Senin hepsine yetecek kadar
+2|yemek üretmek için bir yol
+2|bulman lazım.
+2|
+2|Neyse ki, adada bir sürü ağaç
+2|var.
+
+#h1
+Blupi, adasında sessizce
+yaşamaktayken, garip bir göktaşı
+kurak bir alana düşer.
+
+Hemen ardından, Blupi, ekinlerinin
+iri örümcekler tarafından tahrip
+edildiğini farkeder.
+
+Blupi, kusursuz formuna rağmen,
+ciddi bir hastalığa yakalandı ve
+şimdi hapşırmakta.
+
+#h2
+Neler oluyor burada?
+
+Aslında tuhaf göktaşı, çok özel
+bir robot taşıyan uzay gemisi.
+
+Bu robot düşman üreten fabrikalar
+inşa ediyor.
+
+Blupi bu davetsiz misafirlerden
+kurtulmak için bütün doğal
+kaynakları kullanmalı.
+
+#1
+Uzay gemisi çarpışması ormanda
+yangın çıkardı. Blupi'lerin
+köyü şimdi tehlikede.
+
+1|Hedef:
+1|
+1|Köyün yanmasını engelle.
+1|Bunu yapmak için sadece bir yol
+1|var:
+1|Solda bulunan ağaçların
+1|bazılarını kes.
+
+
+
+
+
+
+2|İpucu:
+2|
+2|Eğer bir Blupi ağaçların arkasına
+2|gizlenmişse, boşluk tuşuna bas.
+2|Bunu yapmak, ağaçları geçici
+2|olarak saydam hale getirecek.
+
+@1
+1|Çözüm:
+1|
+1|Soldaki Blupi'ye birçok ağacı
+1|kesmesi için buyur. Diğer iki
+1|Blupi kalasları uzağa taşıyacak.
+
+#2
+1|Durum:
+1|
+1|Blupi köyünden uzakta ve
+1|kayboldu. O, köyünü aramadan
+1|önce düzen kurmalı.
+1|
+1|1) Bir bahçe kulübesi inşa et ve
+1| domates yetiştir
+
+2|2) Destek kazanmak için bir
+2| inkübatör inşa et.
+2|
+2|3) Dört Blupi'yi besle ve köyü
+2| bulmaya git.
+2|
+
+
+2|Dikkat et:
+2|
+2|Sıradışı bir şey olacak.
+
+
+@2
+1|İpuçları:
+1|
+1|Öncelikle, örümceğin gelmesini
+1|engellemek için kuzeye iki
+1|kazıklı çit inşa etmelisin.
+1|Ancak o zaman, huzur içinde
+2|bir bahçe kulübesi inşa
+2|edebileceksin ve domates
+2|yetiştirebileceksin.
+2|
+2|Dört eve ulaşmak için, doğuya
+2|gitmelisin.
+
+
+#3
+1|Hedef:
+1|
+1|Dört kayıp Blupi'nin yanmasını
+1|engelle.
+1|
+1|Duvarı bitir.
+
+
+
+
+2|Dikkat et:
+2|
+2|Zemin, kolay yanabilen
+2|yosunlardan ibaret.
+
+@3
+1|Çözüm:
+1|
+1|1) Kaya kes.
+1| Ufak kayaları kesmek daha
+1| hızlı.
+
+2|2) İki mevcut duvar arasına
+2| yeni bir duvar inşa et.
+2|
+2|3) Yangının durmasını bekle.
+
+#4
+1|Hedef:
+1|
+1|Dört Blupi'nin çizgili parke
+1|taşına ulaşmasını sağla.
+
+@4
+1|Çözüm:
+1|
+1|1) Bir ağaç kes.
+1|
+1|2) Kalasları suyun kenarına
+1| taşı.
+1|
+1|3) İki bitkin Blupi'ye doğru
+1| bakan bir köprü inşa et.
+
+2|4) Bu işlemi üç kere tekrarla.
+2|
+2|Bitkin Blupi'ler şimdi
+2|köprüden geçip çizgili parke
+2|taşına ulaşabilir.
+
+#5
+1|Tuzak:
+1|Dikkat, Blupi'lerin esir
+1|olduğu toprak kolayca alev
+1|almakta ve yangın daha da
+1|yaklaşmakta.
+1|
+1|Hedef:
+1|Yangın sönene kadar dayan.
+
+2|Dikkat et:
+2|Duvar yapmak Blupi için çok
+2|yorucu bir iş. Duvarı
+2|bitirdiğinde, Blupi ölür !
+
+
+
+İpucu:
+Eğer oyun senin için yeterince
+hızlı değilse, oyunu
+hızlandırmak için F6'ya bas.
+F5, oyunu normal hızda
+çalıştırır.
+
+@5
+1|İpuçları:
+1|
+1|Gri parke taşlarının üzerine
+1|dört duvar inşa etmelisin.
+1|Bir bahçe kulübesi ve
+1|inkübatör inşa etmek için
+1|iki ağaç kesmelisin.
+
+2|Duvarlar bittiğinde, yangın
+2|durana kadar beklemelisin.
+
+#6
+1|Hedef:
+1|
+1|Bir tehlike söz konusu:
+1|kampı derhal dört kuleyle
+1|korumalısın.
+
+2|Çizgili parke taşına
+2|güneydoğuda kavuşacaksın.
+
+
+
+
+
+
+
+
+
+İpucu:
+
+Shift tuşu basılıyken her bir
+Blupi'ye tıklarsan, birkaç
+Blupi'yi aynı anda seçebilirsin.
+
+
+@6
+1|Çözüm:
+1|
+1|Dört Blupi'nin hemen kaya
+1|kesmesini talep etmelisin.
+1|Küçük kayaları kesmek daha
+1|kolay.
+1|
+1|Dört taş yığınını gri parke
+1|taşına ulaştır ve koruma
+1|kulelerini inşa etmeye başla.
+
+2|Virüslerin gelişini bekle ve
+2|yıkımını izle.
+2|
+2|Diğer dört Blupi, güneydoğudaki
+2|çizgili parke taşına yavaşça
+2|gidebilir.
+
+#7
+1|Hedef:
+1|
+1|Dört Blupi çizgili parke
+1|taşına ulaşmalı. En uzaktaki
+1|Blupi ile de ilgilenmek
+1|zorundasın.
+
+
+
+
+
+2|Dikkat et:
+2|
+2|Toprak, bahçe kulübesi inşa
+2|etmek için uygun değil.
+
+@7
+1|Çözüm:
+1|
+1|Bir Blupi'ye domatesleri
+1|kaldırmasını talep et, böylece
+1|örümcekler onları yiyemeyecek.
+1|
+1|Diğer Blupi ile, doğudaki
+1|adaya zıpla, çizgili parke
+1|taşını buraya bağlayan bir
+1|köprü inşa et.
+
+2|Domatesleri bitkin Blupi'ye
+2|doğru taşı, böylece o bunları
+2|yiyebilir.
+
+#8
+1|Hedef:
+1|
+1|Bir veya iki Blupi'ye mikrop
+1|bulaşmasını önle ve hasta
+1|olanlara bir ilaç bul.
+1|
+1|Son olarak, her Blupi
+1|bir eve girmeli.
+
+
+
+
+
+
+
+2|İpucu:
+2|
+2|Bir laboratuvar kur.
+
+@8
+1|İpuçları:
+1|
+1|Laboratuvar taştan yapılmalı
+1|O, sarı çiçekleri, hasta
+1|Blupi'leri iyileştiren bir ilaca
+1|dönüştürmende yararlı
+1|olacak.
+
+2|Hasta Blupi'lere ilaç getirmek
+2|için bir köprü inşa etmelisin.
+2|
+2|Evler güneydoğuda bulunmakta.
+
+#9
+1|Hedef:
+1|
+1|Buz pistini geçmek için bir
+1|yol bul.
+1|
+
+
+
+
+
+
+2|Not:
+2|
+2|Blupi buzda yürüyebilir. Ancak
+2|kaygan buzda, o bir sürü güç
+2|kaybeder.
+
+@9
+1|İpuçları:
+1|
+1|Blupi'leri örümcüklerden
+1|korumak için iki kule inşa
+1|edilmeli.
+1|
+1|Yumurtaların açılması için
+1|bir bahçe kulübesi ve
+1|inkübatör inşa etmelisin.
+
+2|Buz ringini geçerken, Blupi
+2|çok fazla güç kaybeder. Bu
+2|yüzden geçmeden önce ona
+2|domates getirmelisin.
+
+#10
+1|Hedef:
+1|
+1|Kuzeydoğudaki adaya ulaş ve
+1|kazıklı çiti havaya uçur.
+
+2|Şimdi yapman gereken tek şey,
+2|dört Blupi'yi çizgili parke
+2|taşına yerleştirmek.
+
+@10
+1|İpuçları:
+1|
+1|Dört esirin doğrultusunda
+1|bir köprü inşa et. Bu,
+1|laboratuvar kurmak için
+1|gereken kayayı kesip onu bahçe
+1|kulübesinin yanına götürmene
+1|olanak sağlayacak.
+1|
+1|Mavi çiçekler güneydoğuda.
+1|Laboratuvar sayesinde, bunlar
+1|dinamite dönüştürülebilir.
+
+2|Dinamiti kullanarak dört
+2|Blupi'yi esir tutan kazıklı çiti
+2|yok et.
+2|
+2|Öncelikle, esirleri patlamadan
+2|korumak için geriye çek.
+
+#11
+1|Hedef:
+1|
+1|Kuzeydoğudaki evlere ulaş.
+1|Dikkatli ol, orası sımsıkı
+1|koruma altında.
+
+@11
+1|İpuçları:
+1|
+1|Kuzeybatıdaki adaya doğru bir
+1|köprü inşa et ve sonra en az
+1|dört paket dinamit yap.
+
+2|Dinamitleri kuzeye,
+2|buldozerlere oldukça yakın
+2|bir yere bırak.
+2|
+2|Dinamit yapılmadığı sürece,
+2|kuzeye gitmekten kaçın. Yoksa
+2|buldozerlerin ilgisini
+2|çekersin.
+
+#12
+1|Hedef:
+1|
+1|Üç Blupi, yalnız bir Blupi'nin
+1|bulunduğu kuzeybatıdaki bir
+1|adaya varmalı.
+
+@12
+1|İpuçları:
+1|
+1|Bir bahçe kulübesi inşa et ve
+1|domates yetiştir.
+1|
+1|Kuzeybatıda bulunan mavi
+1|çiçekler ile dinamit yap.
+1|
+
+2|Dinamiti, batıda yer alan
+2|adaya ulaştır.
+2|
+2|Dikkatli ol, yolda iki virüs
+2|gizleniyor.
+
+#13
+1|Hedef:
+1|
+1|Altı örümcekten kurtul.
+1|
+1|İlk dört örümcekten kurtulmak
+1|kolay. Kalan ikisinden
+1|kurtulmak daha zor.
+
+
+
+
+
+
+2|İpucu:
+2|
+2|Laboratuvarda nasıl zehir
+2|üretebileceğini öğren.
+
+@13
+1|İpuçları:
+1|
+1|İlk dört örümcek, laboratuvarda
+1|yeşil çiçeklerden yapılan tuzakla
+1|yakalanacak.
+1|
+1|Tuzaklar örümceklerin yakınına
+1|yerleştirilmelidir.
+
+2|Son ikisi, laboratuvarda
+2|değiştirilen domateslerle
+2|zehirlenecek.
+2|
+2|Domatesleri laboratuvara
+2|taşımak için bir köprü inşa et.
+
+#14
+1|Hedef:
+1|
+1|Blupi yalnızca eve gitmeli.
+1|
+
+@14
+1|İpuçları:
+1|
+1|Küçük çakıl taşlarının altında
+1|demir ara. Kalasları bayrağın
+1|olduğu yere bırak ve maden
+1|inşa et.
+1|
+1|Atölye inşa etmek için kaya kes,
+1|böylece demiri kullanabilirsin.
+
+2|Bir bomba al, jipe bin ve
+2|doğuya git. Jip seni
+2|buldozerlerden koruyacak.
+2|
+2|Kazıklı çite vardığında, jipi
+2|derhal terketmelisin, saatli
+2|bombayı bırakmalısın ve
+2|çalıştırmalısın. Daha sonra jipe
+2|geri binmelisin ve oradan
+2|uzaklaşmalısın.
+
+#15
+1|Hedef:
+1|
+1|Yalnız bir Blupi kuzeydoğudaki
+1|eve ulaşmalı.
+
+2|Bunu yapmak için, birçok
+2|düşman tesisini yok etmelisin.
+
+@15
+1|İpuçları:
+1|
+1|Çizgili parke taşının olduğu
+1|yere bir bahçe kulübesi ve
+1|iki koruma kulesi inşa et.
+1|
+1|Doğudaki adayı birleştirmek
+1|için bir köprü inşa et.
+1|Çeşitli çiçekler topla ve
+1|bunları ana kampa geri getir.
+
+2|Bir laboratuvar inşa et,
+2|dinamit ve yapışkan tuzaklar
+2|yap. Kampı içeriden yapışkan
+2|tuzaklar ile, dışarıdan
+2|dinamitler ile koru.
+2|
+2|Yeterli dinamitin ve tuzağın
+2|olduğunu düşündüğünde, düşman
+2|kampını yok etmek için
+2|kuzeydoğuya ufak bir komando
+2|birliği gönder.
+
+#16
+1|Durum:
+1|
+1|Blupi, gezegeninin ağaç olmayan,
+1|kurak bir yerinde kayıp.
+
+
+
+
+2|Hedef:
+2|
+2|İki Blupi kendi köylerine geri
+2|dönmeli.
+
+@16
+1|İpuçları:
+1|
+1|Kuzeydoğudaki madeni bul, bir
+1|atölye inşa etmek için kaya kes,
+1|saatli bir bomba ve iki jip yap ve
+1|güneybatıdaki düşman kampını
+1|ara.
+
+2|Düşman kampını koruyan bariyeri
+2|patlat. Buldozeri de patlatmaya
+2|çalış.
+2|
+2|Güneye git, yalnız duran bir
+2|ağacı ara ve ışınlayıcı inşa et.
+
+#17
+1|Hedef:
+1|
+1|Beş Blupi bir eve ulaşmalı.
+1|
+
+2|Dikkat, bir ev düşman kampının
+2|arkasında.
+
+
+
+
+
+
+
+
+
+
+
+
+İpucu:
+
+Shift tuşu basılıyken her bir
+Blupi'ye tıklarsan, birkaç
+Blupi'yi aynı anda seçebilirsin.
+
+@17
+1|İpuçları:
+1|
+1|Bir Blupi şimdi adanın
+1|batısındaki eve gidebilir.
+1|Diğer dördü buldozerlerden
+1|dolayı derhal oradan ayrılmalı.
+1|Blupi'ler kuzeydoğuya gitmeli.
+
+2|Kuzeydoğunun daha ötesinde,
+2|kazıklı çitle sarılı bir köy
+2|bulacaksın.
+2|
+2|Köyün kuzeyinde bir sürü demir
+2|var.
+2|
+2|Bir kayık yap ve saatli bir
+2|bomba ile kuzeydoğuya git.
+
+#18
+1|Durum:
+1|
+1|Blupi çiçek toplarken, evinden
+1|çok uzakta olduğunu farketmedi.
+1|O şimdi düşmanlarla dolu bir
+1|alanda kayboldu.
+
+
+
+
+
+2|Hedef:
+2|
+2|Blupi kaçmalı ve eve dönmenin
+2|bir yolunu bulmalı.
+
+@18
+1|İpuçları:
+1|
+1|Batıya uzanan nehri bul ve bir
+1|kayık yap. Dikkatli ol, bir
+1|sürü virüs etrafta geziyor.
+
+2|Kayıkla, duvarı geçebilir ve
+2|nehir kıyısına çıkabilirsin.
+2|
+2|Ev şimdi çok uzak değil.
+2|Buldozerlerden uzak durma
+2|konusunda dikkatli ol.
+
+#19
+1|Durum:
+1|
+1|Dört buldozer, Blupi'lerin
+1|evini tehlike altına sokuyor.
+
+
+
+
+
+2|Hedef:
+2|
+2|Buldozerleri yok et.
+
+@19
+1|İpuçları:
+1|
+1|Bir Blupi'nin demir aramasını
+1|ve zırh yapmasını talep et.
+1|Zırh, onu yangından koruyacak.
+1|
+1|Doğuya git ve bir kayık yap.
+1|Karaya çık ve ağaç olan bir
+1|ada ara. Ağacı kes ve
+1|tahtayı daha büyük olan bir
+2|adaya götür. Bir ışınlayıcı
+2|inşa et. O seni silah
+2|deposuna götürecek.
+2|
+2|Etrafı çevreleyen duvarların
+2|yanına birkaç dinamit koy ve
+2|onları patlat. Kalan dinamitle,
+2|buldozerleri yok edebilirsin.
+
+#20
+1|Hedef:
+1|
+1|Bütün düşman tesislerini yok
+1|et.
+1|
+
+@20
+1|İpuçları:
+1|
+1|Düşman kampını koruyan
+1|bariyerleri yok etmeden önce,
+1|olabildiğnce çok dinamit,
+1|tuzak, vb. üret.
+
+#21
+1|Durum:
+1|
+1|Blupi, kötü bir robot
+1|tarafından ele geçirildi.
+1|O, robotun kampında esir
+1|olarak tutuluyor.
+
+
+
+
+2|Hedef:
+2|
+2|Blupi kaçmalı ve evini
+2|bulmalı.
+
+@21
+1|İpuçları:
+1|
+1|Kuzeydoğuda bulunan dinamiti
+1|al. Onu, kayalardaki bir
+1|boşluğa bakan mavi bir
+1|bariyerin yanına yerleştir.
+1|Buldozer gelecek ve dinamitin
+1|patlamasına neden olacak. Bu
+1|da bariyeri patlatacak.
+
+2|Nehre ulaşana kadar doğuya
+2|doğru koş. Kalaslarla bir
+2|kayık yap. İkinci kalas
+2|yığınına, sonra yine bir kayık
+2|yapmak için ihtiyacın olacak.
+2|Bunu yapmadan önce,
+2|elekrikçarparı yapışkan bir
+2|tuzakla yakalamalısın ve
+2|doğudaki mavi bariyeri saatli
+2|bir bombayla yok etmelisin.
+
+#22
+1|Hedefler:
+1|
+1|1) Kayıklar yap.
+1|
+1|2) Bütün adaları keşfet.
+1|
+1|3) Bütün düşman tesislerini
+1| yok et
+
+@22
+1|İpuçları:
+1|
+1|Kuzeydoğudaki ada bir sürü
+1|demire sahip.
+
+2|Doğudaki ada, dinamit ve
+2|yapışkan tuzak yapmak için
+2|gereken her şeye sahip.
+
+#23
+1|Durum:
+1|
+1|Blupi çok meraklı: Robotu iyice
+1|gözlemledikten sonra, şimdi
+1|robotun kendini kaybettiğini
+1|farketti.
+
+
+
+
+
+2|Hedef:
+2|
+2|Destek getir ve düşmanı yok
+2|et.
+
+
+@23
+1|İpuçları:
+1|
+1|Ayrı olan Blupi, robottan
+1|uzaklaşmalı ve batıya gitmeli.
+1|Blupi tahtaya ulaşmak için
+1|kaya kesmeli ve ışınlayıcı
+1|inşa etmeli.
+
+2|İkinci Blupi grubuyla,
+2|bir kayık yapmalısın,
+2|kuzeydoğudaki bombayı
+2|bulmalısın ve güneydeki
+2|bariyeri patlatmalısın. Bu,
+2|terkedilecek olan adaya tahta
+2|getirmeni sağlayacak, böylece
+2|kaybolmuş Blupi'ye katılmak
+2|ve yardım etmek için bir
+2|ışınlayıcı inşa edebilirsin.
+
+#24
+1|Durum:
+1|
+1|Bölge düşmanlarla dolu.
+1|
+
+
+
+2|Hedef:
+2|
+2|Bütün düşmanları yok et.
+
+@24
+1|İpuçları:
+1|
+1|Yangından uzak durmak için
+1|güneydoğuya git ve kalan
+1|ağaçla bir kayık yap.
+1|
+1|Kampta biraz demir bulacaksın.
+1|
+
+2|Kampın kuzeyinde biraz yumurta
+2|bulacaksın.
+
+#25
+1|Blupi robotun kendi gezegeninden
+1|garip bir şey getirdiğinden
+1|şüpheleniyor:
+1|
+1| Platin....
+1|
+1|Robotun roketinin yanında
+2|duran platin, Blupi'nin düşman
+2|teknolojisine erişimini
+2|sağlayacak.
+2|
+
+
+2|Hedef:
+2|Bir küp platini çizgili parke
+2|taşının üzerine koy.
+
+@25
+1|İpuçları:
+1|
+1|İki buldozeri yapışkan tuzaklar
+1|ile imha et. İlk düşman kampının
+1|kuzeyinde bir kayık yap, sonra
+1|saatli bir bomba ile karaya çık
+1|ve doğuya git.
+1|
+1|Kayaların arasında, güneye doğru
+1|giden bir patika ara. Roketin
+2|bulunduğu düşman kampı doğuda
+2|uzakta bir yerde. Platini ele
+2|geçirebilmek için bariyeri
+2|patlatman gerekecek.
+2|
+2|Platini ana kampa geri götür.
+
+#26
+1|Platin küp, senin düşman
+1|teknolojisine erişimini
+1|sağlayacak, o yüzden onu
+1|doğru şekilde kullan.
+
+
+
+
+
+2|Hedef:
+2|
+2|Blupi'nin evini bulmasına
+2|yardım et.
+
+@26
+1|İpuçları:
+1|
+1|Atölyede platin küpü kullanarak
+1|yardımcı bir robot yap ve saatli
+1|bir bomba yap.
+1|
+1|Robotu ve bombayı al. Robot,
+1|batıdaki düşman kampını
+1|farkedilmeden geçebilir.
+2|Kuzeydeki bariyeri patlat ve
+2|ana kamptaki Blupi'leri beslemek
+2|için domates al.
+2|
+2|İlk zıplayıştan önce domatesleri
+2|yere bırak.
+
+#27
+1|Durum:
+1|
+1|Robot, Blupi köyünün yakınına
+1|kendi köyünü kurma
+1|küstahlığında bulundu.
+
+
+
+
+2|Hedef:
+2|
+2|Düşman kampına ulaş ve
+2|her şeyi yok et.
+
+@27
+1|İpuçları:
+1|
+1|Hemen bir ışınlayıcı inşa et,
+1|böylece yumurtalı adaya
+1|ulaşabilirsin. Taş yığınlarının
+1|olduğu yere iki koruma kulesi inşa
+1|et. Her kulenin sağına ve soluna
+1|kazıklı çit kur.
+
+2|Şimdi nefes alabilirsin !
+2|
+2|Kuzeyde bulunan düşman
+2|kampına ulaşmak için iki yolun
+2|var, ya kayıkla ya da köprü
+2|yaparak.
+2|
+2|Seçmek sana düşüyor !
+
+#28
+1|Durum:
+1|
+1|Blupi, evini inşa ederken bir
+1|hata yaptı: etrafına bir duvar
+1|ördü.
+
+
+
+
+
+2|Hedef:
+2|
+2|Blupi yalnızca eve gitmeli.
+
+@28
+1|İpuçları:
+1|
+1|Kuzeyde küçük bir adada bir
+1|sürü yumurta var.
+1|
+1|Kuzeyden ve güneyden gelen
+1|buldozerleri önlemek için
+1|düşman kampını çabucak geçmek
+1|zorundasın, böylece mavi
+1|çiçekleri toplayabilirsin. Bir başka
+2|Blupi bunları dinamit yapmak
+2|için götürebilir.
+2|
+2|Kullanılabilecek tek kaya, düşman
+2|kampının güneyinde, koruma
+2|kulesinin hemen dışında
+2|bulunuyor.
+
+#29
+1|Durum:
+1|
+1|Boş alanlar, robot ve destekçileri
+1|tarafından git gide dolduruluyor.
+
+
+
+
+
+2|Hedef:
+2|
+2|Blupi köyünü kurmalı ve iyi
+2|savunma taktikleri geliştirmeli.
+2|
+2|Sonra o, bütün düşmanlara
+2|saldırıp onları yok edebilir.
+
+@29
+1|İpuçları:
+1|
+1|Blupi; kuzeybatı, kuzeydoğu ve
+1|güneydoğu taraflarında koruma
+1|kuleleri inşa etmeli. Bütün kayalar
+1|kuzeybatıda bulunmakta.
+1|
+1|Kazıklı çit yakınındaki ağaçları
+1|sakın kesme. Onlar, zıplayan
+1|bombalara karşı faydalı olabilir.
+
+2|Doğuda bulunan yeşil çiçekler,
+2|köyü savunmak amacıyla
+2|yapışkan tuzaklar yapmanı
+2|sağlayacak.
+2|
+2|Güneybatıda demir çıkar ve
+2|bombalar ve zırhlar yap.
+
+#30
+1|Durum:
+1|
+1|Bu savaş daha fazla süremez.
+1|Blupi ve son robot bir
+1|anlaşmaya vardılar: Robotun,
+1|Blupi'nin gezegeninden ayrılması
+1|karşılığında, Blupi, robotun
+1|roketine dönmesine yardım
+1|edecek.
+
+
+
+
+2|Hedef:
+2|
+2|Rokete giden patikayı hazırla,
+2|böylece robot, gezegenden
+2|ayrılabilir. Savaşı kaybetmekten
+2|dolayı robot kızgın, bu yüzden
+2|patika bitene kadar kımıldamayı
+2|reddediyor.
+
+@30
+1|İpuçları:
+1|
+1|Güneydoğuda bir kaya kes. Bir
+1|ağaç kes ve bir kayık yap.
+1|Kayıkla, kuzeydoğuda bir ada
+1|ara. Biraz demir ara, bir maden
+1|ve atölye kur. Robotun
+1|etrafındaki bariyerleri patlatmanı
+2|sağlayacak olan bir bomba yap.
+2|
+2|Yapman gereken son şey bir
+2|köprü yapmak, böylece robot,
+2|roketine geri dönebilir. \ No newline at end of file
diff --git a/resources/image/button00.png b/resources/image/button00.png
index b390654..7458180 100644
--- a/resources/image/button00.png
+++ b/resources/image/button00.png
Binary files differ
diff --git a/resources/image/he/init.png b/resources/image/he/init.png
new file mode 100644
index 0000000..9780325
--- /dev/null
+++ b/resources/image/he/init.png
Binary files differ
diff --git a/resources/image/little.png b/resources/image/little.png
index 1b2d9ef..d6ec018 100644
--- a/resources/image/little.png
+++ b/resources/image/little.png
Binary files differ
diff --git a/resources/image/setup00.png b/resources/image/setup00.png
index c7049f8..4793560 100644
--- a/resources/image/setup00.png
+++ b/resources/image/setup00.png
Binary files differ
diff --git a/resources/image/text.png b/resources/image/text.png
index 40f14bd..be14abb 100644
--- a/resources/image/text.png
+++ b/resources/image/text.png
Binary files differ
diff --git a/resources/linux/planetblupi.appdata.xml b/resources/linux/planetblupi.appdata.xml
new file mode 100644
index 0000000..e053b48
--- /dev/null
+++ b/resources/linux/planetblupi.appdata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+ <id>planetblupi</id>
+ <metadata_license>MIT</metadata_license>
+ <project_license>GPL-3.0+</project_license>
+ <name>Planet Blupi</name>
+ <summary>Planet Blupi - A delirious spell-binding game</summary>
+ <description>
+ <p>Planet Blupi is a strategy and adventure game. It subtly blends action with thought-provoking challenges. Behind the quiet and gentle facade, you'll enjoy a fascinating diversion full of surprises.</p>
+ </description>
+ <launchable type="desktop-id">planetblupi.desktop</launchable>
+ <url type="homepage">http://blupi.org/</url>
+ <screenshots>
+ <screenshot type="default">
+ <image>http://devel.schroetersa.ch/blupi.org/download/screen/planetblupi.png</image>
+ </screenshot>
+ </screenshots>
+ <provides>
+ <id>planetblupi.desktop</id>
+ </provides>
+</component> \ No newline at end of file
diff --git a/resources/po/fr.po b/resources/po/fr.po
index 2932770..fcb9835 100644
--- a/resources/po/fr.po
+++ b/resources/po/fr.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-08 07:29+0200\n"
-"PO-Revision-Date: 2018-08-08 07:29+0200\n"
+"PO-Revision-Date: 2019-02-17 23:21+0100\n"
"Last-Translator: Mathieu Schroeter <mathieu@schroetersa.ch>\n"
"Language-Team: French <kde-i18n-doc@kde.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.9\n"
+"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid " - FFmpeg (LGPLv2.1)"
@@ -502,7 +502,7 @@ msgstr "Sol inflammable"
msgid "Insert CD-Rom Planet Blupi and wait a few seconds..."
msgstr ""
-"Veuillez insérer le CD-Rom Planète Blupi, puis attendre quelques secondes ..."
+"Veuillez insérer le CD-Rom Planet Blupi, puis attendre quelques secondes ..."
msgid ""
"Interface language\n"
@@ -693,10 +693,10 @@ msgid "Paving stones"
msgstr "Dalles"
msgid "Planet Blupi"
-msgstr "Planète Blupi"
+msgstr "Planet Blupi"
msgid "Planet Blupi -- stop"
-msgstr "Planète Blupi -- arrêt"
+msgstr "Planet Blupi -- arrêt"
msgid "Planks"
msgstr "Planches"
@@ -738,7 +738,7 @@ msgid "Quit"
msgstr "Quitte"
msgid "Quit Planet Blupi"
-msgstr "Quitter Planète Blupi"
+msgstr "Quitter Planet Blupi"
msgid "Quit construction"
msgstr "Terminer la construction"
@@ -957,7 +957,7 @@ msgid "You have failed, try again..."
msgstr "C'est raté, essaie encore une fois..."
msgid "You have played Planet Blupi."
-msgstr "Vous avez joué à Planète Blupi."
+msgstr "Vous avez joué à Planet Blupi."
#, c-format
msgid "construction %d, time %d"
diff --git a/resources/po/he.po b/resources/po/he.po
new file mode 100644
index 0000000..4f87c7c
--- /dev/null
+++ b/resources/po/he.po
@@ -0,0 +1,975 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-01-27 15:19+0100\n"
+"PO-Revision-Date: 2019-02-17 14:11+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2.1\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? "
+"2 : 3);\n"
+
+msgid " - FFmpeg (LGPLv2.1)"
+msgstr " - FFmpeg (LGPLv2.1)"
+
+msgid " - GNU/gettext and GNU/libiconv (GPLv3)"
+msgstr " - GNU/gettext and GNU/libiconv (GPLv3)"
+
+msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)"
+msgstr " - SDL2, SDL2_image and SDL2_mixer (zlib license)"
+
+msgid " - SDL_kitchensink (MIT)"
+msgstr " - SDL_kitchensink (MIT)"
+
+msgid " - argagg (MIT)"
+msgstr " - argagg (MIT)"
+
+msgid " - libasound (LGPLv2.1)"
+msgstr " - libasound (LGPLv2.1)"
+
+msgid " - libcurl (MIT/X derivate)"
+msgstr " - libcurl (MIT/X derivate)"
+
+msgid " - libogg and libvorbis (own license)"
+msgstr " - libogg and libvorbis (own license)"
+
+msgid " - libpng (own license)"
+msgstr " - libpng (own license)"
+
+msgid " - libpulse (LGPLv2.1)"
+msgstr " - libpulse (LGPLv2.1)"
+
+msgid " - libsndfile (LGPLv3)"
+msgstr " - libsndfile (LGPLv3)"
+
+msgid " - zlib (own license)"
+msgstr " - zlib (own license)"
+
+msgid "(isolated tower)"
+msgstr "(מגדל מבודד)"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Build a bridge"
+msgstr ""
+"1: לכרות עץ\n"
+"2: לבנות גשר"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a boat"
+msgstr ""
+"1: לכרות עץ\n"
+"2: לבנות סירה"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a palisade"
+msgstr ""
+"1: לכרות עץ\n"
+"2: לבנות גדר"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a Jeep"
+msgstr ""
+"1: להפיק ברזל\n"
+"2: לבנות ג'יפ"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a bomb"
+msgstr ""
+"1: להפיק ברזל\n"
+"2: להכין פצצה"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make an armour"
+msgstr ""
+"1: להפיק ברזל\n"
+"2: לבנות מגן"
+
+msgid ""
+"1: Grow tomatoes\n"
+"2: Eat"
+msgstr ""
+"1: לגדל עגבניות\n"
+"2: לאכול"
+
+msgid ""
+"1: Make a bunch\n"
+"2: Transform"
+msgstr ""
+"1: לאסוף\n"
+"2: לשנות"
+
+msgid ""
+"1: Take\n"
+"2: Build a bridge"
+msgstr ""
+"1: לקחת\n"
+"2: לבנות גשר"
+
+msgid ""
+"1: Take\n"
+"2: Build palisade"
+msgstr ""
+"1: לקחת\n"
+"2: לבנות גדר"
+
+msgid ""
+"1: Take\n"
+"2: Make a boat"
+msgstr ""
+"1: לקחת\n"
+"2: לבנות סירה"
+
+msgid ""
+"1: Take\n"
+"2: Transform"
+msgstr ""
+"1: לקחת\n"
+"2: לשנות"
+
+msgid ""
+"1|Drop planks on striped \n"
+"1|paving stones."
+msgstr ""
+"1|הורידו את הקרשים על\n"
+"1|המרצפות המפוספסות"
+
+msgid ""
+"1|Drop platinium on striped \n"
+"1|paving stones."
+msgstr ""
+"1|הורידו את הפלטינה על\n"
+"1|המרצפות המפוספסות"
+
+msgid ""
+"1|Drop tomatoes on striped \n"
+"1|paving stones."
+msgstr ""
+"1|הורידו את העגבניות על\n"
+"1|המרצפות המפוספסות"
+
+msgid ""
+"1|Each Blupi in\n"
+"1|his house."
+msgstr ""
+"1|כל בלופי\n"
+"1|לביתו"
+
+msgid ""
+"1|Go on striped\n"
+"1|paving stones."
+msgstr ""
+"1|לכו אל המרצפות\n"
+"1|המפוספסות"
+
+msgid "1|Goal :"
+msgstr "1|מטרה:"
+
+msgid ""
+"1|Kill all\n"
+"1|enemies !"
+msgstr ""
+"1|הרגו את כל\n"
+"1|האוייבים"
+
+msgid ""
+"1|Resist until\n"
+"1|fire extinction ..."
+msgstr ""
+"1|התנגדו לאש עד\n"
+"1|שתכבה"
+
+#, c-format
+msgid ""
+"1|The Blupi population must\n"
+"1|be of at least %d Blupi."
+msgstr ""
+"1|אוכלוסיית הבלופים חייבת \n"
+"1|להיות לפחות %d בלופים"
+
+msgid ""
+"1|The robot must reach\n"
+"1|the striped paving stones."
+msgstr ""
+"1|הרובוט חייב להגיע אל\n"
+"1|המרצפות המפוספסות"
+
+msgid "Aliasing"
+msgstr "מצב חלק"
+
+msgid "All licenses are available under share/doc/planetblupi/copyright"
+msgstr "כל הרישיונות זמינים תחת share/doc/planetblupi/copyright"
+
+msgid "Already two teleporters"
+msgstr "יש כבר שני משגרים"
+
+msgid "Another mistake..."
+msgstr "עוד טעות!"
+
+msgid "Anti-aliasing"
+msgstr "מצב אנטי-חלק"
+
+msgid "Armour"
+msgstr "שיריון"
+
+msgid "Available buttons"
+msgstr "כפתורים זמינים"
+
+msgid "Bang, failed again !"
+msgstr "בום! שוב נכשלתם!"
+
+msgid "Bank"
+msgstr "גדה"
+
+msgid "Blow up"
+msgstr "לפוצץ"
+
+msgid "Blupi"
+msgstr "בלופי"
+
+msgid "Blupi in house"
+msgstr "בלופי בתוך הבית"
+
+msgid "Blupi on striped paving stones"
+msgstr "בלופי על המרצפות המפוספסות"
+
+msgid "Blupi's energy"
+msgstr "האנרגיה של בלופי"
+
+msgid "Blupi's house"
+msgstr "הבית של בלופי"
+
+msgid "Boat"
+msgstr "סירה"
+
+msgid "Bouncing bomb"
+msgstr "להקפיץ פצצה"
+
+msgid "Bridge"
+msgstr "גשר"
+
+msgid "Bridge finished"
+msgstr "גשר גמור"
+
+msgid "Buildings"
+msgstr "בניינים"
+
+msgid "Bulldozer"
+msgstr "דחפור"
+
+msgid "Bunch of flowers"
+msgstr "זר פרחים"
+
+msgid "Burnt ground"
+msgstr "אדמה שרופה"
+
+msgid "Cancel last operation"
+msgstr "בטל פעולה אחרונה"
+
+msgid "Carve a rock"
+msgstr "לחצוב בסלע"
+
+msgid "Carve rocks"
+msgstr "לחצוב סלעים"
+
+msgid ""
+"Change the\n"
+"display mode"
+msgstr ""
+"לשנות את\n"
+"מצב התצוגה"
+
+msgid ""
+"Change the\n"
+"render quality"
+msgstr ""
+"לשנות את איכות\n"
+"העיבוד הגרפי"
+
+msgid ""
+"Change the\n"
+"window size"
+msgstr ""
+"לשנות את\n"
+"גודל החלון"
+
+msgid ""
+"Choose the\n"
+"music format"
+msgstr ""
+"לבחור את\n"
+"פורמט המוזיקה"
+
+msgid "Construct this game"
+msgstr "הרכב את המשחק"
+
+msgid "Construction"
+msgstr "בנייה"
+
+msgid "Construction number"
+msgstr "בנייה מספר"
+
+msgid "Continue this game"
+msgstr "המשך משחק נוכחי"
+
+msgid "Cut down a tree"
+msgstr "לכרות עץ"
+
+msgid "Cut down trees"
+msgstr "לכרות עצים"
+
+msgid "Decorative plants"
+msgstr "צמחי נוי"
+
+msgid "Delete figure"
+msgstr "מחק דמות"
+
+msgid "Delete fire"
+msgstr "מחק אש"
+
+msgid "Delete item"
+msgstr "מחק פריט"
+
+msgid "Demo"
+msgstr "הדגמה"
+
+msgid "Desert"
+msgstr "מדבר"
+
+msgid "Desktop"
+msgstr "שולחן עבודה"
+
+msgid "Desktop mode"
+msgstr "מצב שולחן העבודה"
+
+msgid "Difficult"
+msgstr "קשה"
+
+msgid "Disable anti-aliasing"
+msgstr "כבה אנטי-חלק"
+
+msgid "Drink"
+msgstr "לשתות"
+
+msgid "Drop"
+msgstr "להפיל"
+
+msgid "Dynamite"
+msgstr "חומר נפץ"
+
+msgid "E"
+msgstr "מז"
+
+msgid "Easy"
+msgstr "קל"
+
+msgid "Eat"
+msgstr "לאכול"
+
+msgid "Eggs"
+msgstr "ביצים"
+
+msgid "Electrocutor"
+msgstr "מחשמל"
+
+msgid "Enable anti-aliasing"
+msgstr "הפעל אנטי-חלק"
+
+msgid "Ending conditions"
+msgstr "תנאים לסיום"
+
+msgid "Enemy barrier"
+msgstr "מחסום האויב"
+
+msgid "Enemy buildings"
+msgstr "בנייני האויב"
+
+msgid "Enemy construction"
+msgstr "מבנה האויב"
+
+msgid "Enemy ground"
+msgstr "אדמת אויב"
+
+msgid "Enemy rocket"
+msgstr "טיל האויב"
+
+msgid "Excellent..."
+msgstr "נהדר"
+
+msgid "Extract iron"
+msgstr "להפיק ברזל"
+
+msgid "Faster"
+msgstr "מהיר יותר"
+
+msgid "Finish"
+msgstr "סיום"
+
+msgid "Fire"
+msgstr "אש"
+
+msgid "Fire out"
+msgstr "אש כובתה"
+
+msgid "Flag"
+msgstr "דגל"
+
+msgid "Flowers"
+msgstr "פרחים"
+
+msgid "Forest"
+msgstr "יער"
+
+msgid "Forest under snow"
+msgstr "יער מתחת לשלג"
+
+msgid "Fullscreen"
+msgstr "מסך מלא"
+
+msgid "Game paused"
+msgstr "המשחק נעצר"
+
+msgid "Garden shed"
+msgstr "חלקת גינה"
+
+msgid ""
+"Global game\n"
+"speed"
+msgstr ""
+"מהירות\n"
+"המשחק כולו"
+
+msgid "Global settings"
+msgstr "הגדרות גלובליות "
+
+msgid "Go"
+msgstr "המשך"
+
+msgid "Grow tomatoes"
+msgstr "לגדל עגבניות"
+
+msgid "Help"
+msgstr "עזרה"
+
+msgid "Help number"
+msgstr "עזרה מספר"
+
+msgid "Helper robot"
+msgstr "רובוט עוזר"
+
+msgid "Ice"
+msgstr "קרח"
+
+msgid "Impossible"
+msgstr "בלתי אפשרי"
+
+#, c-format
+msgid "Impossible to win if less than %d Blupi"
+msgstr "בלתי אפשרי לנצח אם פחות מ %d בלופים"
+
+msgid "Inadequate ground"
+msgstr "קרקע לא מתאימה"
+
+msgid "Increase volume"
+msgstr "הוספת נפח"
+
+msgid "Increase window size"
+msgstr "להגדיל את גודל החלון"
+
+msgid "Incubator"
+msgstr "מדגרה"
+
+msgid "Incubator or teleporter"
+msgstr "מדגרה או משגר"
+
+msgid "Inflammable ground"
+msgstr "קרקע דליקה"
+
+msgid "Insert CD-Rom Planet Blupi and wait a few seconds..."
+msgstr "אנא הכנס את תקליטור המשחק וחכה מספר שניות"
+
+msgid ""
+"Interface language\n"
+"and sounds"
+msgstr ""
+"שפת הממשק\n"
+"וצלילים"
+
+msgid "Interrupt"
+msgstr "להפסיק"
+
+msgid "Iron"
+msgstr "ברזל"
+
+msgid "Items"
+msgstr "פריטים"
+
+msgid "Jeep"
+msgstr "ג'יפ"
+
+msgid "Laboratory"
+msgstr "מעבדה"
+
+msgid "Last construction resolved !"
+msgstr "הבנייה האחרונה נפתרה!"
+
+msgid "Leave Jeep"
+msgstr "לעזוב את הג'יפ"
+
+msgid "Legacy"
+msgstr "גרסה ישנה"
+
+msgid "Legacy mode (640x480)"
+msgstr "מצב גרסה ישנה(640x480)"
+
+#, c-format
+msgid "Lost if less than %d Blupi"
+msgstr "אבוד אם פחות מ %d בלופים"
+
+msgid "Make a Jeep"
+msgstr "לבנות ג'יפ"
+
+msgid "Make a helper robot"
+msgstr "לבנות רובוט עוזר"
+
+msgid "Make a time bomb"
+msgstr "לבנות פצצת זמן"
+
+msgid "Make armour"
+msgstr "לבנות שריון"
+
+msgid "Make bunch of flowers"
+msgstr "לאסוף זר פרחים"
+
+msgid "Make bunches of flowers"
+msgstr "לאסוף זרי פרחים"
+
+msgid "Master robot"
+msgstr "הרובוט העליון"
+
+msgid "Medical potion"
+msgstr "שיקוי רפואי"
+
+msgid "Midi"
+msgstr "מידי"
+
+msgid "Mine"
+msgstr "מכרה"
+
+msgid "Miscellaneous ground"
+msgstr "קרקע מגוונת"
+
+msgid "Mission number"
+msgstr "משימה מספר"
+
+msgid "Mission over..."
+msgstr "המשימה הסתיימה..."
+
+msgid "Missions"
+msgstr "משימות"
+
+msgid ""
+"Music\n"
+"volume"
+msgstr ""
+"עוצמת\n"
+"המוזיקה"
+
+msgid "Music choice"
+msgstr "בחירת מוסיקה"
+
+msgid "Music number 1"
+msgstr "מוסיקה מספר 1"
+
+msgid "Music number 10"
+msgstr "מוסיקה מספר 10"
+
+msgid "Music number 2"
+msgstr "מוסיקה מספר 2"
+
+msgid "Music number 3"
+msgstr "מוסיקה מספר 3"
+
+msgid "Music number 4"
+msgstr "מוסיקה מספר 4"
+
+msgid "Music number 5"
+msgstr "מוסיקה מספר 5"
+
+msgid "Music number 6"
+msgstr "מוסיקה מספר 6"
+
+msgid "Music number 7"
+msgstr "מוסיקה מספר 7"
+
+msgid "Music number 8"
+msgstr "מוסיקה מספר 8"
+
+msgid "Music number 9"
+msgstr "מוסיקה מספר 9"
+
+msgid "N"
+msgstr "צ"
+
+#, c-format
+msgid "New version available for download on www.blupi.org (v%s)"
+msgstr "גרסה חדשה זמינה להורדה בכתובת www.blupi.org (v%s)"
+
+msgid "Next game"
+msgstr "משחק הבא"
+
+msgid "Next language"
+msgstr "שפה הבאה"
+
+msgid "Next page"
+msgstr "הדף הבא"
+
+msgid "No"
+msgstr "לא"
+
+msgid "No more enemies"
+msgstr "אין יותר אויבים"
+
+msgid "No music"
+msgstr "ללא מוסיקה"
+
+msgid "No video"
+msgstr "בלי ווידאו"
+
+msgid "No, not that way !"
+msgstr "לא! לא בדרך הזאת."
+
+msgid "No, wrong way ..."
+msgstr "לא, זאת הדרך הלא נכונה."
+
+msgid "None"
+msgstr "ללא גלילה"
+
+msgid "Normal ground"
+msgstr "קרקע רגילה"
+
+msgid "Not available"
+msgstr "לא זמין"
+
+msgid "Not enough energy"
+msgstr "אין מספיק אנרגיה"
+
+msgid "Now go on mission."
+msgstr "עכשיו התחילו בפעולה"
+
+msgid "Occupied ground"
+msgstr "קרקע מאוכלסת"
+
+msgid "Ogg"
+msgstr "קובץ אוג"
+
+msgid "Open another game"
+msgstr "טען משחק אחר"
+
+msgid "Opposite bank no good"
+msgstr "הגדה ממול לא מתאימה"
+
+msgid "Palisade"
+msgstr "גדר"
+
+msgid "Paving stones"
+msgstr "מרצפות"
+
+msgid "Planet Blupi"
+msgstr "הכוכב בלופי"
+
+msgid "Planet Blupi -- stop"
+msgstr "הכוכב בלופי -- עצור"
+
+msgid "Planks"
+msgstr "קרשים"
+
+msgid "Planks on striped paving stones"
+msgstr "קרשים על האבנים המפוספסות"
+
+msgid "Platinium"
+msgstr "פלטינה"
+
+msgid "Platinium on striped paving stones"
+msgstr "פלטינה על המרצפות המפוספסות"
+
+msgid "Play this game"
+msgstr "שחק במשחק הנוכחי"
+
+msgid "Poison"
+msgstr "עגבניות מורעלות"
+
+msgid "Prairie"
+msgstr "ערבה"
+
+msgid "Previous game"
+msgstr "משחק קודם"
+
+msgid "Previous language"
+msgstr "שפה קודמת"
+
+msgid "Previous page"
+msgstr "דף קודם"
+
+msgid "Prospect for iron"
+msgstr "לחפש ברזל"
+
+msgid "Protection tower"
+msgstr "מגדל שמירה"
+
+msgid "Quit"
+msgstr "צא"
+
+msgid "Quit Planet Blupi"
+msgstr "צא מבלופי"
+
+msgid "Quit construction"
+msgstr "יציאה מבנייה"
+
+msgid "Quit this game"
+msgstr "צא ממשחק נוכחי"
+
+msgid "REC"
+msgstr "הקלטה"
+
+msgid "Reduce volume"
+msgstr "הפחתת עוצמה"
+
+msgid "Reduce window size"
+msgstr "הפחתת גודל החלון"
+
+msgid "Repeat"
+msgstr "חזור"
+
+msgid "Restart this game"
+msgstr "התחל מחדש משחק נוכחי"
+
+msgid "Robot on striped paving stones"
+msgstr "רובוט על המרצפות המפוספסות"
+
+msgid "Rocks"
+msgstr "סלעים"
+
+msgid "S"
+msgstr "ד"
+
+msgid "Save"
+msgstr "שמור"
+
+msgid "Save this game"
+msgstr "שמור משחק נוכחי"
+
+msgid "Scenery choice"
+msgstr "בחירת נוף"
+
+msgid ""
+"Scroll speed\n"
+"with mouse"
+msgstr ""
+"מהירות גלילה\n"
+"בעזרת עכבר"
+
+msgid ""
+"Select the\n"
+"window mode"
+msgstr ""
+"בחירת מצב\n"
+"החלון"
+
+msgid "Settings"
+msgstr "הגדרות"
+
+msgid "Show videos"
+msgstr "הצג ווידאו"
+
+msgid "Sick Blupi"
+msgstr "בלופי חולה"
+
+msgid "Skill level"
+msgstr "דרגת מיומנות"
+
+msgid "Slower"
+msgstr "איטי"
+
+msgid ""
+"Sound effect\n"
+"volume"
+msgstr ""
+"עוצמת האפקטים\n"
+"הקוליים"
+
+msgid "Special pavings"
+msgstr "ריצוף מיוחד"
+
+msgid "Spider"
+msgstr "עכביש"
+
+msgid "Starting fire"
+msgstr "הצת אש"
+
+msgid "Sterile ground"
+msgstr "קרקע מחוטאת"
+
+msgid "Sticky trap"
+msgstr "מלכודת דביקה"
+
+msgid "Stones"
+msgstr "אבנים"
+
+msgid "Stop"
+msgstr "עצור"
+
+msgid "Striped paving stones"
+msgstr "מרצפות מפוספסות"
+
+msgid "Take"
+msgstr "לקחת"
+
+msgid "Teleporter"
+msgstr "משגר"
+
+msgid ""
+"This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains"
+msgstr "זהו משחק מקורי מאת Epsitec SA, CH-1400 Yverdon-les-Bains"
+
+msgid "This game uses statically linked free and open-source libraries:"
+msgstr "המשחק משתמש בספריות קוד מקור חינמיות פתוחות"
+
+msgid "Time bomb"
+msgstr "פצצת זמן"
+
+msgid "Tired Blupi"
+msgstr "בלופי עייף"
+
+msgid "Tomatoes"
+msgstr "עגבניות"
+
+msgid "Tomatoes on striped paving stones"
+msgstr "עגבניות על המרצפות המפוספסות"
+
+msgid "Too close to water"
+msgstr "קרוב מדי למים"
+
+msgid "Training"
+msgstr "אימון"
+
+msgid "Training number"
+msgstr "אימון מספר"
+
+msgid "Transform"
+msgstr "לשנות"
+
+msgid "Transport"
+msgstr "להוביל"
+
+msgid "Trapped enemy"
+msgstr "אויב לכוד"
+
+msgid "Tree"
+msgstr "עץ"
+
+msgid "Tree trunks"
+msgstr "גזע עץ"
+
+msgid "Use Midi music (original)"
+msgstr "להשתמש במוזיקת מידי (מקור)"
+
+msgid "Use Ogg music"
+msgstr "להשתמש במוזיקת אוג"
+
+msgid "Version"
+msgstr "גרסה"
+
+msgid "Very good, success on all missions !"
+msgstr "יפה מאוד! הצלחתם בכל המשימות!"
+
+msgid "Very good."
+msgstr "ממש מעולה"
+
+msgid ""
+"Video\n"
+"sequences"
+msgstr ""
+"וידאו\n"
+"רצף"
+
+msgid "Virus"
+msgstr "וירוס"
+
+msgid "W"
+msgstr "מע"
+
+msgid "Wall"
+msgstr "חומה"
+
+msgid "Wall or palisade"
+msgstr "חומה או גדר"
+
+msgid "Water"
+msgstr "מים"
+
+msgid "We hope you have had as much fun playing the game as we had making it !"
+msgstr "אנחנו מקווים שנהנתם לשחק במשחק לפחות כמו שנהננו ליצור אתו"
+
+msgid "Weapons"
+msgstr "כלי נשק"
+
+msgid "Well done !"
+msgstr "כל הכבוד!"
+
+msgid "Windowed"
+msgstr "מצב חלון"
+
+msgid "Work done"
+msgstr "העבודה הושלמה"
+
+msgid "Workshop"
+msgstr "בית מלאכה"
+
+msgid "Yes"
+msgstr "כן"
+
+msgid "Yes, great ..."
+msgstr "כן, מצוין..."
+
+msgid "You have failed, try again..."
+msgstr "נכשלתם, נסו שוב..."
+
+msgid "You have played Planet Blupi."
+msgstr "שיחקתם בבלופי."
+
+#, c-format
+msgid "construction %d, time %d"
+msgstr "בנייה %d זמן %d"
+
+msgid "en"
+msgstr "he"
+
+msgid "free slot"
+msgstr "מקום פנוי"
+
+msgid "http://www.blupi.org info@blupi.org"
+msgstr "http://www.blupi.org info@blupi.org"
+
+#, c-format
+msgid "mission %d, time %d"
+msgstr "פעולה %d זמן %d"
+
+#, c-format
+msgid "training %d, time %d"
+msgstr "אימון %d זמן %d"
diff --git a/resources/po/it.po b/resources/po/it.po
index b4c3b70..11f949a 100644
--- a/resources/po/it.po
+++ b/resources/po/it.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-08 07:29+0200\n"
-"PO-Revision-Date: 2017-12-14 23:15+0100\n"
-"Last-Translator: \n"
+"PO-Revision-Date: 2019-02-18 15:22+0100\n"
+"Last-Translator: Mathieu Schroeter <mathieu@schroetersa.ch>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.5\n"
+"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid " - FFmpeg (LGPLv2.1)"
@@ -209,7 +209,7 @@ msgstr ""
"1|le lastre tratteggiate."
msgid "Aliasing"
-msgstr ""
+msgstr "Aliasing"
msgid "All licenses are available under share/doc/planetblupi/copyright"
msgstr "Tutte le license sono disponibili in share/doc/planetblupi/copyright"
@@ -221,7 +221,7 @@ msgid "Another mistake..."
msgstr "Ahimè, hai sbagliato un'altra volta..."
msgid "Anti-aliasing"
-msgstr ""
+msgstr "Anti-aliasing"
msgid "Armour"
msgstr "Armatura"
@@ -286,23 +286,20 @@ msgstr "Spacca una roccia"
msgid "Carve rocks"
msgstr "Spacca delle roccie"
-#, fuzzy
msgid ""
"Change the\n"
"display mode"
msgstr ""
"Cambiare la\n"
-"dimensione\n"
-"della finestra"
+"visualizzazione"
-#, fuzzy
msgid ""
"Change the\n"
"render quality"
msgstr ""
"Cambiare la\n"
-"dimensione\n"
-"della finestra"
+"qualità\n"
+"dell'immagina"
msgid ""
"Change the\n"
@@ -316,6 +313,9 @@ msgid ""
"Choose the\n"
"music format"
msgstr ""
+"Scegliere il\n"
+"formato\n"
+"della musica"
msgid "Construct this game"
msgstr "Costruire questa partita"
@@ -354,16 +354,16 @@ msgid "Desert"
msgstr "Deserto"
msgid "Desktop"
-msgstr ""
+msgstr "Risoluzione"
msgid "Desktop mode"
-msgstr ""
+msgstr "Modo desktop"
msgid "Difficult"
msgstr "Difficile"
msgid "Disable anti-aliasing"
-msgstr ""
+msgstr "Disattivare anti-aliasing"
msgid "Drink"
msgstr "Bevi"
@@ -390,7 +390,7 @@ msgid "Electrocutor"
msgstr "Folgoratore"
msgid "Enable anti-aliasing"
-msgstr ""
+msgstr "Attivare anti-aliasing"
msgid "Ending conditions"
msgstr ""
@@ -538,10 +538,10 @@ msgid "Leave Jeep"
msgstr "Lascia la Jeep"
msgid "Legacy"
-msgstr ""
+msgstr "Originale"
msgid "Legacy mode (640x480)"
-msgstr ""
+msgstr "Originale (640x480)"
#, c-format
msgid "Lost if less than %d Blupi"
@@ -670,7 +670,7 @@ msgid "Normal ground"
msgstr "Terreno normale"
msgid "Not available"
-msgstr ""
+msgstr "Non disponibile"
msgid "Not enough energy"
msgstr "Energia limitata"
@@ -895,10 +895,10 @@ msgid "Tree trunks"
msgstr "Tronchi"
msgid "Use Midi music (original)"
-msgstr ""
+msgstr "Utilizzare la musica Midi (originale)"
msgid "Use Ogg music"
-msgstr ""
+msgstr "Utilizzare la musica Ogg"
msgid "Version"
msgstr "Versione"
diff --git a/resources/po/pl.po b/resources/po/pl.po
index 42eab85..7f661cb 100644
--- a/resources/po/pl.po
+++ b/resources/po/pl.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-08 07:29+0200\n"
-"PO-Revision-Date: 2017-12-14 23:15+0100\n"
+"PO-Revision-Date: 2019-02-17 23:22+0100\n"
"Last-Translator: tomangelo <tomangelo@wp.pl>\n"
"Language-Team: TerranovaTeam <contact@colobot.info>\n"
"Language: pl\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.0.5\n"
+"X-Generator: Poedit 2.2.1\n"
msgid " - FFmpeg (LGPLv2.1)"
msgstr " - FFmpeg (LGPLv2.1)"
@@ -210,7 +210,7 @@ msgstr ""
"1|nawierzchni docelowej."
msgid "Aliasing"
-msgstr ""
+msgstr "Pikselizacja"
msgid "All licenses are available under share/doc/planetblupi/copyright"
msgstr "Wszystkie licencje dostępne są w share/doc/planetblupi/copyright"
@@ -222,7 +222,7 @@ msgid "Another mistake..."
msgstr "Znowu pomyłka..."
msgid "Anti-aliasing"
-msgstr ""
+msgstr "Wygładzanie"
msgid "Armour"
msgstr "Zbroja"
@@ -287,21 +287,19 @@ msgstr "Wyłup skałę"
msgid "Carve rocks"
msgstr "Wyłup skały"
-#, fuzzy
msgid ""
"Change the\n"
"display mode"
msgstr ""
-"Zmień rozmiar\n"
-"okna"
+"Zmień tryb\n"
+"wyświetlania"
-#, fuzzy
msgid ""
"Change the\n"
"render quality"
msgstr ""
-"Zmień rozmiar\n"
-"okna"
+"Zmień jakość\n"
+"renderowania"
msgid ""
"Change the\n"
@@ -314,6 +312,8 @@ msgid ""
"Choose the\n"
"music format"
msgstr ""
+"Wybierz format\n"
+"muzyki"
msgid "Construct this game"
msgstr "Edytuj poziom"
@@ -352,16 +352,16 @@ msgid "Desert"
msgstr "Pustynia"
msgid "Desktop"
-msgstr ""
+msgstr "Pulpit"
msgid "Desktop mode"
-msgstr ""
+msgstr "Tryb pulpitu"
msgid "Difficult"
msgstr "Trudny"
msgid "Disable anti-aliasing"
-msgstr ""
+msgstr "Wyłącz wygładzanie"
msgid "Drink"
msgstr "Wypij"
@@ -388,7 +388,7 @@ msgid "Electrocutor"
msgstr "Paralizator"
msgid "Enable anti-aliasing"
-msgstr ""
+msgstr "Włącz wygładzanie"
msgid "Ending conditions"
msgstr "Warunki zwycięstwa"
@@ -534,10 +534,10 @@ msgid "Leave Jeep"
msgstr "Opuść Jeepa"
msgid "Legacy"
-msgstr ""
+msgstr "Zgodność"
msgid "Legacy mode (640x480)"
-msgstr ""
+msgstr "Tryb zgodności (640x480)"
#, c-format
msgid "Lost if less than %d Blupi"
@@ -666,7 +666,7 @@ msgid "Normal ground"
msgstr "Zwykła ziemia"
msgid "Not available"
-msgstr ""
+msgstr "Niedostępne"
msgid "Not enough energy"
msgstr "Za mało siły"
@@ -891,10 +891,10 @@ msgid "Tree trunks"
msgstr "Pnie drzew"
msgid "Use Midi music (original)"
-msgstr ""
+msgstr "Muzyka Midi (oryginalna)"
msgid "Use Ogg music"
-msgstr ""
+msgstr "Muzyka Ogg"
msgid "Version"
msgstr "Wersja"
diff --git a/resources/po/planetblupi.pot b/resources/po/planetblupi.pot
index 1cc0fea..36bc15f 100644
--- a/resources/po/planetblupi.pot
+++ b/resources/po/planetblupi.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-08-08 07:29+0200\n"
+"POT-Creation-Date: 2019-02-17 14:11+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/resources/po/pt.po b/resources/po/pt.po
new file mode 100644
index 0000000..54a67a0
--- /dev/null
+++ b/resources/po/pt.po
@@ -0,0 +1,960 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-01-25 23:40+0100\n"
+"PO-Revision-Date: 2019-02-17 23:23+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2.1\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgid " - FFmpeg (LGPLv2.1)"
+msgstr " - FFmpeg (LGPLv2.1)"
+
+msgid " - GNU/gettext and GNU/libiconv (GPLv3)"
+msgstr ""
+
+msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)"
+msgstr ""
+
+msgid " - SDL_kitchensink (MIT)"
+msgstr " - SDL_kitchensink (MIT)"
+
+msgid " - argagg (MIT)"
+msgstr " - argagg (MIT)"
+
+msgid " - libasound (LGPLv2.1)"
+msgstr " - libasound (LGPLv2.1)"
+
+msgid " - libcurl (MIT/X derivate)"
+msgstr ""
+
+msgid " - libogg and libvorbis (own license)"
+msgstr ""
+
+msgid " - libpng (own license)"
+msgstr ""
+
+msgid " - libpulse (LGPLv2.1)"
+msgstr " - libpulse (LGPLv2.1)"
+
+msgid " - libsndfile (LGPLv3)"
+msgstr " - libsndfile (LGPLv3)"
+
+msgid " - zlib (own license)"
+msgstr ""
+
+msgid "(isolated tower)"
+msgstr "(torre isolada)"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Build a bridge"
+msgstr ""
+"1: Cortar planta \n"
+"2: Construir uma ponte"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a boat"
+msgstr ""
+"1: Cortar uma planta \n"
+"2: Fazer um bote"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a palisade"
+msgstr ""
+"1: Cortar uma planta \n"
+"2: Fazer uma barreira"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a Jeep"
+msgstr ""
+"1: Extrair Ferro\n"
+"2: Fazer um Jeep"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a bomb"
+msgstr ""
+"1: Extrair ferro\n"
+"2: Fazer uma bomba"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make an armour"
+msgstr ""
+"1: Extrair ferro\n"
+"2: Fazer uma armadura"
+
+msgid ""
+"1: Grow tomatoes\n"
+"2: Eat"
+msgstr ""
+"1: Cultivar tomates\n"
+"2: Comer"
+
+msgid ""
+"1: Make a bunch\n"
+"2: Transform"
+msgstr ""
+"1: Fazer um ramo\n"
+"2: Transformar"
+
+msgid ""
+"1: Take\n"
+"2: Build a bridge"
+msgstr ""
+"1: Pegar\n"
+"2: Construir uma ponte"
+
+msgid ""
+"1: Take\n"
+"2: Build palisade"
+msgstr ""
+"1: Pegar\n"
+"2: Construir barreira"
+
+msgid ""
+"1: Take\n"
+"2: Make a boat"
+msgstr ""
+"1: Pegar\n"
+"2: Fazer um bote"
+
+msgid ""
+"1: Take\n"
+"2: Transform"
+msgstr ""
+"1: Pegar\n"
+"2: Transformar"
+
+msgid ""
+"1|Drop planks on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Largar madeira no \n"
+"1|pavimento de pedra."
+
+msgid ""
+"1|Drop platinium on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Largar a platina no \n"
+"1|pavimento de pedra."
+
+msgid ""
+"1|Drop tomatoes on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Largar tomates no \n"
+"1|pavimento de pedra."
+
+msgid ""
+"1|Each Blupi in\n"
+"1|his house."
+msgstr ""
+"1|Cada Blupi na\n"
+"1|sua casa."
+
+msgid ""
+"1|Go on striped\n"
+"1|paving stones."
+msgstr ""
+"1|Ir para\n"
+"1| pavimento de pedra."
+
+msgid "1|Goal :"
+msgstr "1|Objetivo :"
+
+msgid ""
+"1|Kill all\n"
+"1|enemies !"
+msgstr ""
+"1|Matar todos os\n"
+"1|inimigos !"
+
+msgid ""
+"1|Resist until\n"
+"1|fire extinction ..."
+msgstr ""
+"1|Resistir até\n"
+"1|fogo acabar..."
+
+#, c-format
+msgid ""
+"1|The Blupi population must\n"
+"1|be of at least %d Blupi."
+msgstr ""
+"1|A população Blupi deve\n"
+"1|ser de pelo menos %d \n"
+"1|Blupi."
+
+msgid ""
+"1|The robot must reach\n"
+"1|the striped paving stones."
+msgstr ""
+"1|O robo deve atingir\n"
+"1|o pavimento de pedra."
+
+msgid "Aliasing"
+msgstr ""
+
+msgid "All licenses are available under share/doc/planetblupi/copyright"
+msgstr ""
+
+msgid "Already two teleporters"
+msgstr "Dois teletransportadores"
+
+msgid "Another mistake..."
+msgstr "Outro erro..."
+
+msgid "Anti-aliasing"
+msgstr ""
+
+msgid "Armour"
+msgstr "Armadura"
+
+msgid "Available buttons"
+msgstr "Botoes disponiveis"
+
+msgid "Bang, failed again !"
+msgstr "Puxa, falhou novamente !"
+
+msgid "Bank"
+msgstr "Margem"
+
+msgid "Blow up"
+msgstr "Explodir"
+
+msgid "Blupi"
+msgstr "Blupi"
+
+msgid "Blupi in house"
+msgstr "Blupi em casa"
+
+msgid "Blupi on striped paving stones"
+msgstr "Blupi no pavimento de pedra"
+
+msgid "Blupi's energy"
+msgstr "Energia do Blupi"
+
+msgid "Blupi's house"
+msgstr "Casa do Blupi"
+
+msgid "Boat"
+msgstr "Bote"
+
+msgid "Bouncing bomb"
+msgstr "Bomba Maluca"
+
+msgid "Bridge"
+msgstr "Ponte"
+
+msgid "Bridge finished"
+msgstr "Ponte terminada"
+
+msgid "Buildings"
+msgstr "Construçãoes"
+
+msgid "Bulldozer"
+msgstr "Escavadora"
+
+msgid "Bunch of flowers"
+msgstr "Ramos de flores"
+
+msgid "Burnt ground"
+msgstr "Terreno queimado"
+
+msgid "Cancel last operation"
+msgstr "Cancelar ultima operação"
+
+msgid "Carve a rock"
+msgstr "Esculpir uma pedra"
+
+msgid "Carve rocks"
+msgstr "Esculpir pedras"
+
+msgid ""
+"Change the\n"
+"display mode"
+msgstr ""
+
+msgid ""
+"Change the\n"
+"render quality"
+msgstr ""
+
+msgid ""
+"Change the\n"
+"window size"
+msgstr ""
+
+msgid ""
+"Choose the\n"
+"music format"
+msgstr ""
+
+msgid "Construct this game"
+msgstr "Construir este jogo"
+
+msgid "Construction"
+msgstr "Projetar"
+
+msgid "Construction number"
+msgstr "Projeto numero"
+
+msgid "Continue this game"
+msgstr "Continuar este jogo"
+
+msgid "Cut down a tree"
+msgstr "Cortar uma Planta"
+
+msgid "Cut down trees"
+msgstr "Cortar Plantas"
+
+msgid "Decorative plants"
+msgstr "Planta decorativa"
+
+msgid "Delete figure"
+msgstr "Apagar figura"
+
+msgid "Delete fire"
+msgstr "Apagar fogo"
+
+msgid "Delete item"
+msgstr "Apagar item"
+
+msgid "Demo"
+msgstr "Demo"
+
+msgid "Desert"
+msgstr "Deserto"
+
+msgid "Desktop"
+msgstr ""
+
+msgid "Desktop mode"
+msgstr ""
+
+msgid "Difficult"
+msgstr "Dificil"
+
+msgid "Disable anti-aliasing"
+msgstr ""
+
+msgid "Drink"
+msgstr "Beber"
+
+msgid "Drop"
+msgstr "Largar"
+
+msgid "Dynamite"
+msgstr "Dinamite"
+
+msgid "E"
+msgstr "L"
+
+msgid "Easy"
+msgstr "Facil"
+
+msgid "Eat"
+msgstr "Comer"
+
+msgid "Eggs"
+msgstr "Ovos"
+
+msgid "Electrocutor"
+msgstr "Eletrocondutor"
+
+msgid "Enable anti-aliasing"
+msgstr ""
+
+msgid "Ending conditions"
+msgstr "Condições finais"
+
+msgid "Enemy barrier"
+msgstr "Barreira inimiga"
+
+msgid "Enemy buildings"
+msgstr "Construçãoe inimiga"
+
+msgid "Enemy construction"
+msgstr "Construção inimiga"
+
+msgid "Enemy ground"
+msgstr "Terreno Inimigo"
+
+msgid "Enemy rocket"
+msgstr "Foguete inimigo"
+
+msgid "Excellent..."
+msgstr "Excelente..."
+
+msgid "Extract iron"
+msgstr "Extrair ferro"
+
+msgid "Faster"
+msgstr "Mais rapido"
+
+msgid "Finish"
+msgstr "Terminar"
+
+msgid "Fire"
+msgstr "Fogo"
+
+msgid "Fire out"
+msgstr "Resistir até o fogo acabar"
+
+msgid "Flag"
+msgstr "Bandeira"
+
+msgid "Flowers"
+msgstr "Flores"
+
+msgid "Forest"
+msgstr "Floresta"
+
+msgid "Forest under snow"
+msgstr "Floresta debaixo de neve"
+
+msgid "Fullscreen"
+msgstr ""
+
+msgid "Game paused"
+msgstr "Jogo pausado"
+
+msgid "Garden shed"
+msgstr "Casa do jardim"
+
+msgid ""
+"Global game\n"
+"speed"
+msgstr "Velocidade"
+
+msgid "Global settings"
+msgstr ""
+
+msgid "Go"
+msgstr "Ir"
+
+msgid "Grow tomatoes"
+msgstr "Plantar tomates"
+
+msgid "Help"
+msgstr "Ajuda"
+
+msgid "Help number"
+msgstr "Ajuda numero"
+
+msgid "Helper robot"
+msgstr "Robo Ajudante"
+
+msgid "Ice"
+msgstr "Gelo"
+
+msgid "Impossible"
+msgstr "Impossivel"
+
+#, c-format
+msgid "Impossible to win if less than %d Blupi"
+msgstr "Impossivel vencer se tiver menos que %d Blupi"
+
+msgid "Inadequate ground"
+msgstr "Terreno inadequado"
+
+msgid "Increase volume"
+msgstr "Aumentar Volume"
+
+msgid "Increase window size"
+msgstr ""
+
+msgid "Incubator"
+msgstr "Incubadora"
+
+msgid "Incubator or teleporter"
+msgstr "Incubadora ou teletransportador"
+
+msgid "Inflammable ground"
+msgstr "Terreno inflamavel"
+
+msgid "Insert CD-Rom Planet Blupi and wait a few seconds..."
+msgstr "Insira o CD-Rom Planet Blupi e aguarde alguns segundos..."
+
+msgid ""
+"Interface language\n"
+"and sounds"
+msgstr ""
+
+msgid "Interrupt"
+msgstr "Interromper"
+
+msgid "Iron"
+msgstr "Ferro"
+
+msgid "Items"
+msgstr "Itens"
+
+msgid "Jeep"
+msgstr "Jeep"
+
+msgid "Laboratory"
+msgstr "Laboratorio"
+
+msgid "Last construction resolved !"
+msgstr "Ultima construção resolvida !"
+
+msgid "Leave Jeep"
+msgstr "Deixar o Jeep"
+
+msgid "Legacy"
+msgstr ""
+
+msgid "Legacy mode (640x480)"
+msgstr ""
+
+#, c-format
+msgid "Lost if less than %d Blupi"
+msgstr "Perder se tiver menos do que %d Blupi"
+
+msgid "Make a Jeep"
+msgstr "Fazer um Jeep"
+
+msgid "Make a helper robot"
+msgstr "Fazer um robo ajudante"
+
+msgid "Make a time bomb"
+msgstr "Fazer uma bomba"
+
+msgid "Make armour"
+msgstr "Fazer armadura"
+
+msgid "Make bunch of flowers"
+msgstr "Fazer um ramo de flor"
+
+msgid "Make bunches of flowers"
+msgstr "Fazer ramos de flores"
+
+msgid "Master robot"
+msgstr "Robo principal"
+
+msgid "Medical potion"
+msgstr "Remédio"
+
+msgid "Midi"
+msgstr "Midi"
+
+msgid "Mine"
+msgstr "Mina"
+
+msgid "Miscellaneous ground"
+msgstr "Terreno Misto"
+
+msgid "Mission number"
+msgstr "Missao numero"
+
+msgid "Mission over..."
+msgstr "Missao completada..."
+
+msgid "Missions"
+msgstr "Missoes"
+
+msgid ""
+"Music\n"
+"volume"
+msgstr ""
+"Musica\n"
+"Volume"
+
+msgid "Music choice"
+msgstr "Musica escolhida"
+
+msgid "Music number 1"
+msgstr "Musica 1"
+
+msgid "Music number 10"
+msgstr "Musica 10"
+
+msgid "Music number 2"
+msgstr "Musica 2"
+
+msgid "Music number 3"
+msgstr "Musica 3"
+
+msgid "Music number 4"
+msgstr "Musica 4"
+
+msgid "Music number 5"
+msgstr "Musica 5"
+
+msgid "Music number 6"
+msgstr "Musica 6"
+
+msgid "Music number 7"
+msgstr "Musica 7"
+
+msgid "Music number 8"
+msgstr "Musica 8"
+
+msgid "Music number 9"
+msgstr "Musica 9"
+
+msgid "N"
+msgstr "N"
+
+#, c-format
+msgid "New version available for download on www.blupi.org (v%s)"
+msgstr ""
+
+msgid "Next game"
+msgstr "Jogo seguinte"
+
+msgid "Next language"
+msgstr ""
+
+msgid "Next page"
+msgstr "Pagina seguinte"
+
+msgid "No"
+msgstr "Nao"
+
+msgid "No more enemies"
+msgstr "Matar inimigos"
+
+msgid "No music"
+msgstr "Sem musica"
+
+msgid "No video"
+msgstr "Sem video"
+
+msgid "No, not that way !"
+msgstr "Caminho errado !"
+
+msgid "No, wrong way ..."
+msgstr "Caminho errado ..."
+
+msgid "None"
+msgstr "Nenhum"
+
+msgid "Normal ground"
+msgstr "Terreno normal"
+
+msgid "Not available"
+msgstr ""
+
+msgid "Not enough energy"
+msgstr ""
+
+msgid "Now go on mission."
+msgstr "Agora continue a missao."
+
+msgid "Occupied ground"
+msgstr "Terreno ocupado"
+
+msgid "Ogg"
+msgstr "Ogg"
+
+msgid "Open another game"
+msgstr "Abrir outro jogo"
+
+msgid "Opposite bank no good"
+msgstr "Margem oposta ruim"
+
+msgid "Palisade"
+msgstr "Barreira"
+
+msgid "Paving stones"
+msgstr "Pavimento de pedra"
+
+msgid "Planet Blupi"
+msgstr "Planet Blupi"
+
+msgid "Planet Blupi -- stop"
+msgstr "Planet Blupi -- parar"
+
+msgid "Planks"
+msgstr "Madeiras"
+
+msgid "Planks on striped paving stones"
+msgstr "Madeira no pavimento de pedra"
+
+msgid "Platinium"
+msgstr "Platina"
+
+msgid "Platinium on striped paving stones"
+msgstr "Platina no pavimento de pedra"
+
+msgid "Play this game"
+msgstr "Jogar este jogo"
+
+msgid "Poison"
+msgstr "Veneno"
+
+msgid "Prairie"
+msgstr "Campina"
+
+msgid "Previous game"
+msgstr "Jogo anterior"
+
+msgid "Previous language"
+msgstr ""
+
+msgid "Previous page"
+msgstr "Pagina anterior"
+
+msgid "Prospect for iron"
+msgstr "Procurar por ferro"
+
+msgid "Protection tower"
+msgstr "Torre"
+
+msgid "Quit"
+msgstr "Sair"
+
+msgid "Quit Planet Blupi"
+msgstr "Sair do Planet Blupi"
+
+msgid "Quit construction"
+msgstr "Encerrar projeto"
+
+msgid "Quit this game"
+msgstr "Encerrar este jogo"
+
+msgid "REC"
+msgstr "REC"
+
+msgid "Reduce volume"
+msgstr "Diminuir Volume"
+
+msgid "Reduce window size"
+msgstr ""
+
+msgid "Repeat"
+msgstr "Repetir"
+
+msgid "Restart this game"
+msgstr "Reiniciar este jogo"
+
+msgid "Robot on striped paving stones"
+msgstr "Robo no pavimento de pedra"
+
+msgid "Rocks"
+msgstr "Rochas"
+
+msgid "S"
+msgstr "S"
+
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Save this game"
+msgstr "Salvar este jogo"
+
+msgid "Scenery choice"
+msgstr "Cenario escolhido"
+
+msgid ""
+"Scroll speed\n"
+"with mouse"
+msgstr ""
+"Velocidade de\n"
+"Rolagem com mouse"
+
+msgid ""
+"Select the\n"
+"window mode"
+msgstr ""
+
+msgid "Settings"
+msgstr "Ajustes"
+
+msgid "Show videos"
+msgstr "Mostrar Video"
+
+msgid "Sick Blupi"
+msgstr "Blupi doente"
+
+msgid "Skill level"
+msgstr "Dificuldade"
+
+msgid "Slower"
+msgstr "Mais devagar"
+
+msgid ""
+"Sound effect\n"
+"volume"
+msgstr ""
+"Efeitos de som\n"
+"Volume"
+
+msgid "Special pavings"
+msgstr "Pavimento Especial"
+
+msgid "Spider"
+msgstr "Aranha"
+
+msgid "Starting fire"
+msgstr "Iniciar fogo"
+
+msgid "Sterile ground"
+msgstr "Terreno sem vida"
+
+msgid "Sticky trap"
+msgstr "Armadilha pegajosa"
+
+msgid "Stones"
+msgstr "Pedras"
+
+msgid "Stop"
+msgstr "Parar"
+
+msgid "Striped paving stones"
+msgstr "Terreno de pedras"
+
+msgid "Take"
+msgstr "Pegar"
+
+msgid "Teleporter"
+msgstr "Teletransportador"
+
+msgid "This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains"
+msgstr ""
+
+msgid "This game uses statically linked free and open-source libraries:"
+msgstr ""
+
+msgid "Time bomb"
+msgstr "Bomba"
+
+msgid "Tired Blupi"
+msgstr "Blupi cansado"
+
+msgid "Tomatoes"
+msgstr "Tomates"
+
+msgid "Tomatoes on striped paving stones"
+msgstr "Tomates no pavimento de pedra"
+
+msgid "Too close to water"
+msgstr "Muito perto da agua"
+
+msgid "Training"
+msgstr "Treino"
+
+msgid "Training number"
+msgstr "Treino numero"
+
+msgid "Transform"
+msgstr "Transformar"
+
+msgid "Transport"
+msgstr "Transporte"
+
+msgid "Trapped enemy"
+msgstr "Prender inimigos"
+
+msgid "Tree"
+msgstr "Planta"
+
+msgid "Tree trunks"
+msgstr "Tronco de Planta"
+
+msgid "Use Midi music (original)"
+msgstr ""
+
+msgid "Use Ogg music"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Very good, success on all missions !"
+msgstr "Muito bom, sucesso em todas as missoes !"
+
+msgid "Very good."
+msgstr "Muito bom."
+
+msgid ""
+"Video\n"
+"sequences"
+msgstr ""
+"Video\n"
+"Sequencia"
+
+msgid "Virus"
+msgstr "Virus"
+
+msgid "W"
+msgstr "O"
+
+msgid "Wall"
+msgstr "Parede"
+
+msgid "Wall or palisade"
+msgstr "Parede ou Barreira"
+
+msgid "Water"
+msgstr "Agua"
+
+msgid "We hope you have had as much fun playing the game as we had making it !"
+msgstr "Esperamos que você tenha se divertido com este super jogo !"
+
+msgid "Weapons"
+msgstr "Armas"
+
+msgid "Well done !"
+msgstr "Muito bem !"
+
+msgid "Windowed"
+msgstr ""
+
+msgid "Work done"
+msgstr "Trabalho Feito"
+
+msgid "Workshop"
+msgstr "Oficina"
+
+msgid "Yes"
+msgstr "Sim"
+
+msgid "Yes, great ..."
+msgstr "Sim, perfeito ..."
+
+msgid "You have failed, try again..."
+msgstr "Você falhou, tente novamente..."
+
+msgid "You have played Planet Blupi."
+msgstr "Você jogou o Planet Blupi."
+
+#, c-format
+msgid "construction %d, time %d"
+msgstr "Projeto %d, tempo %d"
+
+msgid "en"
+msgstr "pt"
+
+msgid "free slot"
+msgstr "pista livre"
+
+msgid "http://www.blupi.org info@blupi.org"
+msgstr "http://www.blupi.org info@blupi.org"
+
+#, c-format
+msgid "mission %d, time %d"
+msgstr "missao %d, tempo %d"
+
+#, c-format
+msgid "training %d, time %d"
+msgstr "treino %d, tempo %d"
diff --git a/resources/po/tr.po b/resources/po/tr.po
new file mode 100644
index 0000000..7b3aca4
--- /dev/null
+++ b/resources/po/tr.po
@@ -0,0 +1,972 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-08-08 07:29+0200\n"
+"PO-Revision-Date: 2019-02-17 23:26+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: tr_TR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid " - FFmpeg (LGPLv2.1)"
+msgstr " - FFmpeg (LGPLv2.1)"
+
+msgid " - GNU/gettext and GNU/libiconv (GPLv3)"
+msgstr " - GNU/gettext ve GNU/libiconv (GPLv3)"
+
+msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)"
+msgstr " - SDL2, SDL2_image ve SDL2_mixer (zlib lisansı)"
+
+msgid " - SDL_kitchensink (MIT)"
+msgstr " - SDL_kitchensink (MIT)"
+
+msgid " - argagg (MIT)"
+msgstr " - argagg (MIT)"
+
+msgid " - libasound (LGPLv2.1)"
+msgstr " - libasound (LGPLv2.1)"
+
+msgid " - libcurl (MIT/X derivate)"
+msgstr " - libcurl (MIT/X türevi)"
+
+msgid " - libogg and libvorbis (own license)"
+msgstr " - libogg and libvorbis (kendi lisansı)"
+
+msgid " - libpng (own license)"
+msgstr " - libpng (kendi lisansı)"
+
+msgid " - libpulse (LGPLv2.1)"
+msgstr " - libpulse (LGPLv2.1)"
+
+msgid " - libsndfile (LGPLv3)"
+msgstr " - libsndfile (LGPLv3)"
+
+msgid " - zlib (own license)"
+msgstr " - zlib (kendi lisansı)"
+
+msgid "(isolated tower)"
+msgstr "(ayrık kule)"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Build a bridge"
+msgstr ""
+"1: Bir ağaç kes \n"
+"2: Bir köprü inşa et"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a boat"
+msgstr ""
+"1: Bir ağaç kes \n"
+"2: Bir kayık yap"
+
+msgid ""
+"1: Cut down a tree \n"
+"2: Make a palisade"
+msgstr ""
+"1: Bir ağaç kes \n"
+"2: Kazıklı bir çit yap"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a Jeep"
+msgstr ""
+"1: Demir çıkar \n"
+"2: Bir jip yap"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make a bomb"
+msgstr ""
+"1: Demir çıkar \n"
+"2: Bir bomba yap"
+
+msgid ""
+"1: Extract iron\n"
+"2: Make an armour"
+msgstr ""
+"1: Demir çıkar \n"
+"2: Bir zırh yap"
+
+msgid ""
+"1: Grow tomatoes\n"
+"2: Eat"
+msgstr ""
+"1: Domates yetiştir \n"
+"2: Ye"
+
+msgid ""
+"1: Make a bunch\n"
+"2: Transform"
+msgstr ""
+"1: Bir demet çiçek topla\n"
+"2: Dönüştür"
+
+msgid ""
+"1: Take\n"
+"2: Build a bridge"
+msgstr ""
+"1: Al\n"
+"2: Bir köprü inşa et"
+
+msgid ""
+"1: Take\n"
+"2: Build palisade"
+msgstr ""
+"1: Al\n"
+"2: Kazıklı bir çit yap"
+
+msgid ""
+"1: Take\n"
+"2: Make a boat"
+msgstr ""
+"1: Al\n"
+"2: Bir kayık yap"
+
+msgid ""
+"1: Take\n"
+"2: Transform"
+msgstr ""
+"1: Al\n"
+"2: Dönüştür"
+
+msgid ""
+"1|Drop planks on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Kalasları çizgili parke \n"
+"1|taşına bırak."
+
+msgid ""
+"1|Drop platinium on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Platini çizgili parke \n"
+"1|taşına bırak."
+
+msgid ""
+"1|Drop tomatoes on striped \n"
+"1|paving stones."
+msgstr ""
+"1|Domatesleri çizgili parke \n"
+"1|taşına bırak."
+
+msgid ""
+"1|Each Blupi in\n"
+"1|his house."
+msgstr ""
+"1|Her Blupi kendi\n"
+"1|evinde olmalı."
+
+msgid ""
+"1|Go on striped\n"
+"1|paving stones."
+msgstr ""
+"1|Çizgili parke taşı\n"
+"1| üzerinde dur."
+
+msgid "1|Goal :"
+msgstr "1|Hedef :"
+
+msgid ""
+"1|Kill all\n"
+"1|enemies !"
+msgstr ""
+"1|Bütün düşmanları\n"
+"1|öldür !"
+
+msgid ""
+"1|Resist until\n"
+"1|fire extinction ..."
+msgstr ""
+"1|Yangın sönene\n"
+"1|kadar diren."
+
+#, c-format
+msgid ""
+"1|The Blupi population must\n"
+"1|be of at least %d Blupi."
+msgstr ""
+"1|Blupi nüfusu\n"
+"1|en az %d olmalı."
+
+msgid ""
+"1|The robot must reach\n"
+"1|the striped paving stones."
+msgstr ""
+"1|Robot çizgili parke\n"
+"1|taşına ulaşmalı."
+
+msgid "Aliasing"
+msgstr "Örtüşme"
+
+msgid "All licenses are available under share/doc/planetblupi/copyright"
+msgstr "Bütün lisanslar share/doc/planetblupi/copyright yolu altında mevcut"
+
+msgid "Already two teleporters"
+msgstr "Zaten iki ışınlayıcı var"
+
+msgid "Another mistake..."
+msgstr "Yine olmadı.."
+
+msgid "Anti-aliasing"
+msgstr "Örtüşme önleme"
+
+msgid "Armour"
+msgstr "Zırh"
+
+msgid "Available buttons"
+msgstr "Mevcut butonlar"
+
+msgid "Bang, failed again !"
+msgstr "Güm, yine başaramadık !"
+
+msgid "Bank"
+msgstr "Kıyı"
+
+msgid "Blow up"
+msgstr "Patlat"
+
+msgid "Blupi"
+msgstr "Blupi"
+
+msgid "Blupi in house"
+msgstr "Blupi evde olsun"
+
+msgid "Blupi on striped paving stones"
+msgstr "Blupi çizgili parke taşı üzerinde olsun"
+
+msgid "Blupi's energy"
+msgstr "Blupi'nin enerjisi"
+
+msgid "Blupi's house"
+msgstr "Blupi'nin evi"
+
+msgid "Boat"
+msgstr "Kayık"
+
+msgid "Bouncing bomb"
+msgstr "Zıplayan bomba"
+
+msgid "Bridge"
+msgstr "Köprü"
+
+msgid "Bridge finished"
+msgstr "Köprü tamamlandı"
+
+msgid "Buildings"
+msgstr "Binalar"
+
+msgid "Bulldozer"
+msgstr "Buldozer"
+
+msgid "Bunch of flowers"
+msgstr "Bir demet çiçek"
+
+msgid "Burnt ground"
+msgstr "Yanmış zemin"
+
+msgid "Cancel last operation"
+msgstr "Son işlemi iptal et"
+
+msgid "Carve a rock"
+msgstr "Kayayı kes"
+
+msgid "Carve rocks"
+msgstr "Kayaları kes"
+
+msgid ""
+"Change the\n"
+"display mode"
+msgstr ""
+"Görüntü modunu\n"
+"değiştir"
+
+msgid ""
+"Change the\n"
+"render quality"
+msgstr ""
+"Görüntü kalitesini\n"
+"değiştir"
+
+msgid ""
+"Change the\n"
+"window size"
+msgstr ""
+"Pencere\n"
+"büyüklüğünü\n"
+"değiştir"
+
+msgid ""
+"Choose the\n"
+"music format"
+msgstr ""
+"Müzik formatını\n"
+"değiştir"
+
+msgid "Construct this game"
+msgstr "Bu oyunu tasarla"
+
+msgid "Construction"
+msgstr "Oyun tasarlama"
+
+msgid "Construction number"
+msgstr "Oyun no"
+
+msgid "Continue this game"
+msgstr "Bu oyuna devam et"
+
+msgid "Cut down a tree"
+msgstr "Ağacı kes"
+
+msgid "Cut down trees"
+msgstr "Ağaçları kes"
+
+msgid "Decorative plants"
+msgstr "Süs bitkiler"
+
+msgid "Delete figure"
+msgstr "Karakteri sil"
+
+msgid "Delete fire"
+msgstr "Yangını sil"
+
+msgid "Delete item"
+msgstr "Öğeyi sil"
+
+msgid "Demo"
+msgstr "Demo"
+
+msgid "Desert"
+msgstr "Çöl"
+
+msgid "Desktop"
+msgstr "Masaüstü"
+
+msgid "Desktop mode"
+msgstr "Masaüstü modu"
+
+msgid "Difficult"
+msgstr "Zor"
+
+msgid "Disable anti-aliasing"
+msgstr "Örtüşme önlemeyi devre dışı bırak"
+
+msgid "Drink"
+msgstr "İç"
+
+msgid "Drop"
+msgstr "Bırak"
+
+msgid "Dynamite"
+msgstr "Dinamit"
+
+msgid "E"
+msgstr "D"
+
+msgid "Easy"
+msgstr "Kolay"
+
+msgid "Eat"
+msgstr "Ye"
+
+msgid "Eggs"
+msgstr "Yumurtalar"
+
+msgid "Electrocutor"
+msgstr "Elektrikçarpar"
+
+msgid "Enable anti-aliasing"
+msgstr "Örtüşme önlemeyi etkinleştir"
+
+msgid "Ending conditions"
+msgstr "Bitirme koşulları"
+
+msgid "Enemy barrier"
+msgstr "Düşman barikatı"
+
+msgid "Enemy buildings"
+msgstr "Düşman binaları"
+
+msgid "Enemy construction"
+msgstr "Düşman binası"
+
+msgid "Enemy ground"
+msgstr "Düşman arazisi"
+
+msgid "Enemy rocket"
+msgstr "Düşman roketi"
+
+msgid "Excellent..."
+msgstr "Mükemmel."
+
+msgid "Extract iron"
+msgstr "Demir çıkar"
+
+msgid "Faster"
+msgstr "Daha hızlı"
+
+msgid "Finish"
+msgstr "Bitir"
+
+msgid "Fire"
+msgstr "Yangın"
+
+msgid "Fire out"
+msgstr "Yangın sönsün"
+
+msgid "Flag"
+msgstr "Bayrak"
+
+msgid "Flowers"
+msgstr "Çiçekler"
+
+msgid "Forest"
+msgstr "Orman"
+
+msgid "Forest under snow"
+msgstr "Kar altında orman"
+
+msgid "Fullscreen"
+msgstr "Tam ekran"
+
+msgid "Game paused"
+msgstr "Oyun durduruldu"
+
+msgid "Garden shed"
+msgstr "Bahçe kulübesi"
+
+msgid ""
+"Global game\n"
+"speed"
+msgstr ""
+"Genel oyun\n"
+"hızı"
+
+msgid "Global settings"
+msgstr "Genel ayarlar"
+
+msgid "Go"
+msgstr "Git"
+
+msgid "Grow tomatoes"
+msgstr "Domates yetiştir"
+
+msgid "Help"
+msgstr "Yardım"
+
+msgid "Help number"
+msgstr "Yardım no"
+
+msgid "Helper robot"
+msgstr "Yardımcı robot"
+
+msgid "Ice"
+msgstr "Buz"
+
+msgid "Impossible"
+msgstr "İmkansız"
+
+#, c-format
+msgid "Impossible to win if less than %d Blupi"
+msgstr "Eğer nüfus %d Blupi'den azsa kazanmak imkansız"
+
+msgid "Inadequate ground"
+msgstr "Arazi uygun edğil"
+
+msgid "Increase volume"
+msgstr "Ses seviyesini arttır"
+
+msgid "Increase window size"
+msgstr "Pencere büyüklüğünü arttır"
+
+msgid "Incubator"
+msgstr "İnkübatör"
+
+msgid "Incubator or teleporter"
+msgstr "İnkübatör veya ışınlayıcı"
+
+msgid "Inflammable ground"
+msgstr "Alev alabilen zemin"
+
+msgid "Insert CD-Rom Planet Blupi and wait a few seconds..."
+msgstr "Planet Blupi CD-Rom'unu takın ve birkaç saniye bekleyin..."
+
+msgid ""
+"Interface language\n"
+"and sounds"
+msgstr ""
+"Arayüz dili\n"
+"ve sesleri"
+
+msgid "Interrupt"
+msgstr "Oyunu yarıda kes"
+
+msgid "Iron"
+msgstr "Demir"
+
+msgid "Items"
+msgstr "Öğeler"
+
+msgid "Jeep"
+msgstr "Jip"
+
+msgid "Laboratory"
+msgstr "Laboratuvar"
+
+msgid "Last construction resolved !"
+msgstr "Son oyun çözüldü !"
+
+msgid "Leave Jeep"
+msgstr "Jipten ayrıl"
+
+msgid "Legacy"
+msgstr "Eski"
+
+msgid "Legacy mode (640x480)"
+msgstr "Eski mod (640x480)"
+
+#, c-format
+msgid "Lost if less than %d Blupi"
+msgstr "Nüfus %d Blupi'den azsa kaybedilir"
+
+msgid "Make a Jeep"
+msgstr "Bir jip yap"
+
+msgid "Make a helper robot"
+msgstr "Yardımcı bir robot yap"
+
+msgid "Make a time bomb"
+msgstr "Saatli bir bomba yap"
+
+msgid "Make armour"
+msgstr "Zırh yap"
+
+msgid "Make bunch of flowers"
+msgstr "Bir demet çiçek topla"
+
+msgid "Make bunches of flowers"
+msgstr "Demetlerce çiçek topla"
+
+msgid "Master robot"
+msgstr "Baş robot"
+
+msgid "Medical potion"
+msgstr "Tıbbi ilaç"
+
+msgid "Midi"
+msgstr "Midi"
+
+msgid "Mine"
+msgstr "Maden"
+
+msgid "Miscellaneous ground"
+msgstr "Karışık zemin"
+
+msgid "Mission number"
+msgstr "Görev no"
+
+msgid "Mission over..."
+msgstr "Görev tamamlandı."
+
+msgid "Missions"
+msgstr "Görevler"
+
+msgid ""
+"Music\n"
+"volume"
+msgstr "Müzik seviyesi"
+
+msgid "Music choice"
+msgstr "Müzik seçimi"
+
+msgid "Music number 1"
+msgstr "Müzik no 1"
+
+msgid "Music number 10"
+msgstr "Müzik no 10"
+
+msgid "Music number 2"
+msgstr "Müzik no 2"
+
+msgid "Music number 3"
+msgstr "Müzik no 3"
+
+msgid "Music number 4"
+msgstr "Müzik no 4"
+
+msgid "Music number 5"
+msgstr "Müzik no 5"
+
+msgid "Music number 6"
+msgstr "Müzik no 6"
+
+msgid "Music number 7"
+msgstr "Müzik no 7"
+
+msgid "Music number 8"
+msgstr "Müzik no 8"
+
+msgid "Music number 9"
+msgstr "Müzik no 9"
+
+msgid "N"
+msgstr "K"
+
+#, c-format
+msgid "New version available for download on www.blupi.org (v%s)"
+msgstr "Oyunun yeni bir versiyonu mevcut www.blupi.org (v%s)"
+
+msgid "Next game"
+msgstr "Sonraki oyun"
+
+msgid "Next language"
+msgstr "Sonraki dil"
+
+msgid "Next page"
+msgstr "Sonraki sayfa"
+
+msgid "No"
+msgstr "Hayır"
+
+msgid "No more enemies"
+msgstr "Düşman kalmasın"
+
+msgid "No music"
+msgstr "Müzik yok"
+
+msgid "No video"
+msgstr "Video yok"
+
+msgid "No, not that way !"
+msgstr "Hayır, olamaz !"
+
+msgid "No, wrong way ..."
+msgstr "Bu şekilde değil..."
+
+msgid "None"
+msgstr "Yok"
+
+msgid "Normal ground"
+msgstr "Normal zemin"
+
+msgid "Not available"
+msgstr "Mevcut değil"
+
+msgid "Not enough energy"
+msgstr "Yetersiz enerji"
+
+msgid "Now go on mission."
+msgstr "Şimdi göreve devam et."
+
+msgid "Occupied ground"
+msgstr "Dolu alan"
+
+msgid "Ogg"
+msgstr "Ogg"
+
+msgid "Open another game"
+msgstr "Başka bir oyun aç"
+
+msgid "Opposite bank no good"
+msgstr "Karşı kıyı uygun değil"
+
+msgid "Palisade"
+msgstr "Kazıklı çit"
+
+msgid "Paving stones"
+msgstr "Parke taşı"
+
+msgid "Planet Blupi"
+msgstr "Planet Blupi"
+
+msgid "Planet Blupi -- stop"
+msgstr "Planet Blupi -- dur"
+
+msgid "Planks"
+msgstr "Kalaslar"
+
+msgid "Planks on striped paving stones"
+msgstr "Kalaslar çizgili parke taşı üzerinde olsun"
+
+msgid "Platinium"
+msgstr "Platin"
+
+msgid "Platinium on striped paving stones"
+msgstr "Platin çizgili parke taşı üzerinde olsun"
+
+msgid "Play this game"
+msgstr "Bu oyunu oyna"
+
+msgid "Poison"
+msgstr "Zehir"
+
+msgid "Prairie"
+msgstr "Bozkır"
+
+msgid "Previous game"
+msgstr "Önceki oyun"
+
+msgid "Previous language"
+msgstr "Önceki dil"
+
+msgid "Previous page"
+msgstr "Önceki sayfa"
+
+msgid "Prospect for iron"
+msgstr "Demir ara"
+
+msgid "Protection tower"
+msgstr "Koruma kulesi"
+
+msgid "Quit"
+msgstr "Çık"
+
+msgid "Quit Planet Blupi"
+msgstr "Planet Blupi'den çık"
+
+msgid "Quit construction"
+msgstr "Oyundan çık"
+
+msgid "Quit this game"
+msgstr "Bu oyundan çık"
+
+msgid "REC"
+msgstr "REC"
+
+msgid "Reduce volume"
+msgstr "Ses seviyesini azalt"
+
+msgid "Reduce window size"
+msgstr "Pencere büyüklüğünü azalt"
+
+msgid "Repeat"
+msgstr "Tekrar et"
+
+msgid "Restart this game"
+msgstr "Bu oyunu tekrar başlat"
+
+msgid "Robot on striped paving stones"
+msgstr "Robot çizgili parke taşı üzerinde olsun"
+
+msgid "Rocks"
+msgstr "Kayalar"
+
+msgid "S"
+msgstr "G"
+
+msgid "Save"
+msgstr "Kaydet"
+
+msgid "Save this game"
+msgstr "Bu oyunu kaydet"
+
+msgid "Scenery choice"
+msgstr "Manzara seçimi"
+
+msgid ""
+"Scroll speed\n"
+"with mouse"
+msgstr ""
+"Fare kaydırma\n"
+"hızı"
+
+msgid ""
+"Select the\n"
+"window mode"
+msgstr ""
+"Pencere\n"
+"modu seç"
+
+msgid "Settings"
+msgstr "Ayarlar"
+
+msgid "Show videos"
+msgstr "Videoları göster"
+
+msgid "Sick Blupi"
+msgstr "Hasta Blupi"
+
+msgid "Skill level"
+msgstr "Beceri düzeyi"
+
+msgid "Slower"
+msgstr "Daha yavaş"
+
+msgid ""
+"Sound effect\n"
+"volume"
+msgstr ""
+"Ses efekti\n"
+"seviyesi"
+
+msgid "Special pavings"
+msgstr "Özel kaplamalar"
+
+msgid "Spider"
+msgstr "Örümcek"
+
+msgid "Starting fire"
+msgstr "Yangın başlatma"
+
+msgid "Sterile ground"
+msgstr "Verimsiz toprak"
+
+msgid "Sticky trap"
+msgstr "Yapışkan tuzak"
+
+msgid "Stones"
+msgstr "Taşlar"
+
+msgid "Stop"
+msgstr "Dur"
+
+msgid "Striped paving stones"
+msgstr "Çizgili parke taşı"
+
+msgid "Take"
+msgstr "Al"
+
+msgid "Teleporter"
+msgstr "Işınlayıcı"
+
+msgid "This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains"
+msgstr "Bu oyun Epsitec SA, CH-1400 Yverdon-les-Bains'in orijinal ürünüdür"
+
+msgid "This game uses statically linked free and open-source libraries:"
+msgstr "Bu oyun ücretsiz ve açık kaynak kodlu kütüphaneler kullanmaktadır:"
+
+msgid "Time bomb"
+msgstr "Saatli bomba"
+
+msgid "Tired Blupi"
+msgstr "Bitkin Blupi"
+
+msgid "Tomatoes"
+msgstr "Domatesler"
+
+msgid "Tomatoes on striped paving stones"
+msgstr "Domatesler çizgili parke taşı üzerinde olsun"
+
+msgid "Too close to water"
+msgstr "Suya çok yakın"
+
+msgid "Training"
+msgstr "Eğitim"
+
+msgid "Training number"
+msgstr "Eğitim no"
+
+msgid "Transform"
+msgstr "Dönüştür"
+
+msgid "Transport"
+msgstr "Ulaşım"
+
+msgid "Trapped enemy"
+msgstr "Tuzağa düşmüş düşman"
+
+msgid "Tree"
+msgstr "Ağaç"
+
+msgid "Tree trunks"
+msgstr "Ağaç gövdeleri"
+
+msgid "Use Midi music (original)"
+msgstr "Midi müzik kullan (orijinal)"
+
+msgid "Use Ogg music"
+msgstr "Ogg müzik kullan"
+
+msgid "Version"
+msgstr "Versiyon"
+
+msgid "Very good, success on all missions !"
+msgstr "Bütün görevler başarılı !"
+
+msgid "Very good."
+msgstr "Çok iyi."
+
+msgid ""
+"Video\n"
+"sequences"
+msgstr ""
+"Video\n"
+"kesitleri"
+
+msgid "Virus"
+msgstr "Virüs"
+
+msgid "W"
+msgstr "B"
+
+msgid "Wall"
+msgstr "Duvar"
+
+msgid "Wall or palisade"
+msgstr "Duvar veya çit"
+
+msgid "Water"
+msgstr "Su"
+
+msgid "We hope you have had as much fun playing the game as we had making it !"
+msgstr "Umarız ki oyunu oynamaktan, bizim oyunu yaptığımız kadar, eğlenmişsinizdir !"
+
+msgid "Weapons"
+msgstr "Silahlar"
+
+msgid "Well done !"
+msgstr "Aferin !"
+
+msgid "Windowed"
+msgstr "Pencere görünümü"
+
+msgid "Work done"
+msgstr "Yapılan iş"
+
+msgid "Workshop"
+msgstr "Atölye"
+
+msgid "Yes"
+msgstr "Evet"
+
+msgid "Yes, great ..."
+msgstr "Evet, harika."
+
+msgid "You have failed, try again..."
+msgstr "Kaybettin, tekrar dene..."
+
+msgid "You have played Planet Blupi."
+msgstr "Planet Blupi'yi oynadınız."
+
+#, c-format
+msgid "construction %d, time %d"
+msgstr "oyun %d, zaman %d"
+
+msgid "en"
+msgstr "tr"
+
+msgid "free slot"
+msgstr "boş yer"
+
+msgid "http://www.blupi.org info@blupi.org"
+msgstr "http://www.blupi.org info@blupi.org"
+
+#, c-format
+msgid "mission %d, time %d"
+msgstr "görev %d, zaman %d"
+
+#, c-format
+msgid "training %d, time %d"
+msgstr "eğitim %d, zaman %d"
diff --git a/resources/sound/he/sound002.wav b/resources/sound/he/sound002.wav
new file mode 100644
index 0000000..ca71d55
--- /dev/null
+++ b/resources/sound/he/sound002.wav
Binary files differ
diff --git a/resources/sound/he/sound003.wav b/resources/sound/he/sound003.wav
new file mode 100644
index 0000000..57de5a4
--- /dev/null
+++ b/resources/sound/he/sound003.wav
Binary files differ
diff --git a/resources/sound/he/sound004.wav b/resources/sound/he/sound004.wav
new file mode 100644
index 0000000..4a4ba64
--- /dev/null
+++ b/resources/sound/he/sound004.wav
Binary files differ
diff --git a/resources/sound/he/sound005.wav b/resources/sound/he/sound005.wav
new file mode 100644
index 0000000..b6543e0
--- /dev/null
+++ b/resources/sound/he/sound005.wav
Binary files differ
diff --git a/resources/sound/he/sound006.wav b/resources/sound/he/sound006.wav
new file mode 100644
index 0000000..31202ea
--- /dev/null
+++ b/resources/sound/he/sound006.wav
Binary files differ
diff --git a/resources/sound/he/sound007.wav b/resources/sound/he/sound007.wav
new file mode 100644
index 0000000..f4d3a38
--- /dev/null
+++ b/resources/sound/he/sound007.wav
Binary files differ
diff --git a/resources/sound/he/sound008.wav b/resources/sound/he/sound008.wav
new file mode 100644
index 0000000..357fcb2
--- /dev/null
+++ b/resources/sound/he/sound008.wav
Binary files differ
diff --git a/resources/sound/he/sound009.wav b/resources/sound/he/sound009.wav
new file mode 100644
index 0000000..cefb054
--- /dev/null
+++ b/resources/sound/he/sound009.wav
Binary files differ
diff --git a/resources/sound/he/sound010.wav b/resources/sound/he/sound010.wav
new file mode 100644
index 0000000..d3e8822
--- /dev/null
+++ b/resources/sound/he/sound010.wav
Binary files differ
diff --git a/resources/sound/he/sound014.wav b/resources/sound/he/sound014.wav
new file mode 100644
index 0000000..d5a152b
--- /dev/null
+++ b/resources/sound/he/sound014.wav
Binary files differ
diff --git a/resources/sound/he/sound017.wav b/resources/sound/he/sound017.wav
new file mode 100644
index 0000000..493f56e
--- /dev/null
+++ b/resources/sound/he/sound017.wav
Binary files differ
diff --git a/resources/sound/he/sound018.wav b/resources/sound/he/sound018.wav
new file mode 100644
index 0000000..025bba0
--- /dev/null
+++ b/resources/sound/he/sound018.wav
Binary files differ
diff --git a/resources/sound/he/sound019.wav b/resources/sound/he/sound019.wav
new file mode 100644
index 0000000..5f09c76
--- /dev/null
+++ b/resources/sound/he/sound019.wav
Binary files differ
diff --git a/resources/sound/he/sound027.wav b/resources/sound/he/sound027.wav
new file mode 100644
index 0000000..6454aa5
--- /dev/null
+++ b/resources/sound/he/sound027.wav
Binary files differ
diff --git a/resources/sound/he/sound033.wav b/resources/sound/he/sound033.wav
new file mode 100644
index 0000000..b2be5eb
--- /dev/null
+++ b/resources/sound/he/sound033.wav
Binary files differ
diff --git a/resources/sound/he/sound037.wav b/resources/sound/he/sound037.wav
new file mode 100644
index 0000000..38f5676
--- /dev/null
+++ b/resources/sound/he/sound037.wav
Binary files differ
diff --git a/resources/sound/he/sound056.wav b/resources/sound/he/sound056.wav
new file mode 100644
index 0000000..b290ff8
--- /dev/null
+++ b/resources/sound/he/sound056.wav
Binary files differ
diff --git a/resources/sound/he/sound057.wav b/resources/sound/he/sound057.wav
new file mode 100644
index 0000000..d8c2397
--- /dev/null
+++ b/resources/sound/he/sound057.wav
Binary files differ
diff --git a/resources/sound/he/sound058.wav b/resources/sound/he/sound058.wav
new file mode 100644
index 0000000..f980342
--- /dev/null
+++ b/resources/sound/he/sound058.wav
Binary files differ
diff --git a/resources/sound/he/sound059.wav b/resources/sound/he/sound059.wav
new file mode 100644
index 0000000..5b99e65
--- /dev/null
+++ b/resources/sound/he/sound059.wav
Binary files differ
diff --git a/resources/sound/he/sound060.wav b/resources/sound/he/sound060.wav
new file mode 100644
index 0000000..5e2a023
--- /dev/null
+++ b/resources/sound/he/sound060.wav
Binary files differ
diff --git a/resources/sound/he/sound061.wav b/resources/sound/he/sound061.wav
new file mode 100644
index 0000000..9f33567
--- /dev/null
+++ b/resources/sound/he/sound061.wav
Binary files differ
diff --git a/resources/sound/he/sound062.wav b/resources/sound/he/sound062.wav
new file mode 100644
index 0000000..95a617f
--- /dev/null
+++ b/resources/sound/he/sound062.wav
Binary files differ
diff --git a/resources/sound/he/sound063.wav b/resources/sound/he/sound063.wav
new file mode 100644
index 0000000..b74eef5
--- /dev/null
+++ b/resources/sound/he/sound063.wav
Binary files differ
diff --git a/resources/sound/he/sound064.wav b/resources/sound/he/sound064.wav
new file mode 100644
index 0000000..17cd655
--- /dev/null
+++ b/resources/sound/he/sound064.wav
Binary files differ
diff --git a/resources/sound/he/sound065.wav b/resources/sound/he/sound065.wav
new file mode 100644
index 0000000..3172e73
--- /dev/null
+++ b/resources/sound/he/sound065.wav
Binary files differ
diff --git a/resources/sound/he/sound066.wav b/resources/sound/he/sound066.wav
new file mode 100644
index 0000000..53cc32f
--- /dev/null
+++ b/resources/sound/he/sound066.wav
Binary files differ
diff --git a/resources/sound/he/sound067.wav b/resources/sound/he/sound067.wav
new file mode 100644
index 0000000..9048cc2
--- /dev/null
+++ b/resources/sound/he/sound067.wav
Binary files differ
diff --git a/resources/sound/he/sound068.wav b/resources/sound/he/sound068.wav
new file mode 100644
index 0000000..07837aa
--- /dev/null
+++ b/resources/sound/he/sound068.wav
Binary files differ
diff --git a/resources/sound/he/sound069.wav b/resources/sound/he/sound069.wav
new file mode 100644
index 0000000..baeaa7e
--- /dev/null
+++ b/resources/sound/he/sound069.wav
Binary files differ
diff --git a/resources/sound/he/sound070.wav b/resources/sound/he/sound070.wav
new file mode 100644
index 0000000..90a1d87
--- /dev/null
+++ b/resources/sound/he/sound070.wav
Binary files differ
diff --git a/resources/sound/he/sound071.wav b/resources/sound/he/sound071.wav
new file mode 100644
index 0000000..364fd00
--- /dev/null
+++ b/resources/sound/he/sound071.wav
Binary files differ
diff --git a/resources/sound/he/sound072.wav b/resources/sound/he/sound072.wav
new file mode 100644
index 0000000..cc3f456
--- /dev/null
+++ b/resources/sound/he/sound072.wav
Binary files differ
diff --git a/resources/sound/he/sound073.wav b/resources/sound/he/sound073.wav
new file mode 100644
index 0000000..aacb0cf
--- /dev/null
+++ b/resources/sound/he/sound073.wav
Binary files differ
diff --git a/src/blupi.cxx b/src/blupi.cxx
index 8c986b5..5dd9532 100644
--- a/src/blupi.cxx
+++ b/src/blupi.cxx
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -361,7 +361,7 @@ HandleEvent (const SDL_Event & event)
totalDim.y = 66;
iconDim.x = 64;
iconDim.y = 66 / 2;
- g_pPixmap->Cache (CHHILI, "image/hili.png", totalDim, iconDim);
+ g_pPixmap->Cache (CHHILI, "hili.png", totalDim, iconDim);
}
SDL_SetWindowTitle (g_window, gettext ("Planet Blupi"));
if (g_pSound != nullptr)
@@ -865,9 +865,9 @@ DoInit (int argc, char * argv[], bool & exit)
iconDim.x = 0;
iconDim.y = 0;
#if _INTRO
- if (!g_pPixmap->Cache (CHBACK, "image/intro1.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHBACK, "intro1.png", totalDim, iconDim))
#else
- if (!g_pPixmap->Cache (CHBACK, "image/init.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHBACK, "init.png", totalDim, iconDim))
#endif
return EXIT_FAILURE;
@@ -888,7 +888,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMCELY * 2 * 6;
iconDim.x = DIMCELX * 2;
iconDim.y = DIMCELY * 2;
- if (!g_pPixmap->Cache (CHFLOOR, "image/floor000.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHFLOOR, "floor000.png", totalDim, iconDim))
{
InitFail ("Cache floor000.png");
return EXIT_FAILURE;
@@ -898,13 +898,13 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMOBJY * 8;
iconDim.x = DIMOBJX;
iconDim.y = DIMOBJY;
- if (!g_pPixmap->Cache (CHOBJECT, "image/obj000.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHOBJECT, "obj000.png", totalDim, iconDim))
{
InitFail ("Cache obj000.png");
return EXIT_FAILURE;
}
- if (!g_pPixmap->Cache (CHOBJECTo, "image/obj-o000.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHOBJECTo, "obj-o000.png", totalDim, iconDim))
{
InitFail ("Cache obj-o000.png");
return EXIT_FAILURE;
@@ -914,7 +914,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMBLUPIY * 23;
iconDim.x = DIMBLUPIX;
iconDim.y = DIMBLUPIY;
- if (!g_pPixmap->Cache (CHBLUPI, "image/blupi.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHBLUPI, "blupi.png", totalDim, iconDim))
{
InitFail ("Cache blupi.png");
return EXIT_FAILURE;
@@ -924,7 +924,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = 66;
iconDim.x = 64;
iconDim.y = 66 / 2;
- if (!g_pPixmap->Cache (CHHILI, "image/hili.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHHILI, "hili.png", totalDim, iconDim))
{
InitFail ("Cache hili.png");
return EXIT_FAILURE;
@@ -934,7 +934,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMCELY * 2 * 5;
iconDim.x = DIMCELX * 2;
iconDim.y = DIMCELY * 2;
- if (!g_pPixmap->Cache (CHFOG, "image/fog.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHFOG, "fog.png", totalDim, iconDim))
{
InitFail ("Cache fog.png");
return EXIT_FAILURE;
@@ -944,7 +944,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMCELY * 2 * 1;
iconDim.x = DIMCELX * 2;
iconDim.y = DIMCELY * 2;
- if (!g_pPixmap->Cache (CHMASK1, "image/mask1.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHMASK1, "mask1.png", totalDim, iconDim))
{
InitFail ("Cache mask1.png");
return EXIT_FAILURE;
@@ -954,7 +954,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMCELY * 2 * 1;
iconDim.x = DIMCELX * 2;
iconDim.y = DIMCELY * 2;
- if (!g_pPixmap->Cache (CHMASK2, "image/mask2.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHMASK2, "mask2.png", totalDim, iconDim))
{
InitFail ("Cache mask2.png");
return EXIT_FAILURE;
@@ -964,7 +964,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMBUTTONY * 21;
iconDim.x = DIMBUTTONX;
iconDim.y = DIMBUTTONY;
- if (!g_pPixmap->Cache (CHBUTTON, "image/button00.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHBUTTON, "button00.png", totalDim, iconDim))
{
InitFail ("Cache button00.png");
return EXIT_FAILURE;
@@ -974,27 +974,27 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = DIMJAUGEY * 4;
iconDim.x = DIMJAUGEX;
iconDim.y = DIMJAUGEY;
- if (!g_pPixmap->Cache (CHJAUGE, "image/jauge.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHJAUGE, "jauge.png", totalDim, iconDim))
{
InitFail ("Cache jauge.png");
return EXIT_FAILURE;
}
totalDim.x = DIMTEXTX * 16;
- totalDim.y = DIMTEXTY * 9 * 3;
+ totalDim.y = DIMTEXTY * 16 * 3;
iconDim.x = DIMTEXTX;
iconDim.y = DIMTEXTY;
- if (!g_pPixmap->Cache (CHTEXT, "image/text.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHTEXT, "text.png", totalDim, iconDim))
{
InitFail ("Cache text.png");
return EXIT_FAILURE;
}
totalDim.x = DIMLITTLEX * 16;
- totalDim.y = DIMLITTLEY * 9;
+ totalDim.y = DIMLITTLEY * 16;
iconDim.x = DIMLITTLEX;
iconDim.y = DIMLITTLEY;
- if (!g_pPixmap->Cache (CHLITTLE, "image/little.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHLITTLE, "little.png", totalDim, iconDim))
{
InitFail ("Cache little.png");
return EXIT_FAILURE;
@@ -1004,7 +1004,7 @@ DoInit (int argc, char * argv[], bool & exit)
totalDim.y = 52;
iconDim.x = 426;
iconDim.y = 52;
- if (!g_pPixmap->Cache (CHBIGNUM, "image/bignum.png", totalDim, iconDim))
+ if (!g_pPixmap->Cache (CHBIGNUM, "bignum.png", totalDim, iconDim))
{
InitFail ("Cache bignum.png");
return EXIT_FAILURE;
diff --git a/src/button.cxx b/src/button.cxx
index 7a09128..fe934ed 100644
--- a/src/button.cxx
+++ b/src/button.cxx
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -55,7 +55,8 @@ CButton::~CButton () {}
bool
CButton::Create (
CPixmap * pPixmap, CSound * pSound, Point pos, Sint32 type, Sint32 * pMenu,
- Sint32 nbMenu, const char ** pToolTips, Sint32 region, Uint32 message)
+ Sint32 nbMenu, const char ** pToolTips, Sint32 region, Uint32 message,
+ bool isRightReading)
{
Point iconDim;
Sint32 i, icon;
@@ -92,6 +93,16 @@ CButton::Create (
{
icon = pMenu[i];
+ if (isRightReading)
+ {
+ if (icon == 51) // right arrow
+ icon = 50;
+ else if (icon == 50) // left arrow
+ icon = 51;
+ else if (icon == 40) // stop
+ icon = 109;
+ }
+
if (region == 1) // palmiers ?
{
if (icon == 0)
@@ -144,28 +155,27 @@ void
CButton::Draw ()
{
Sint32 i;
- Point pos;
+ Point pos = this->m_pos;
Rect rect;
if (m_bHide) // bouton caché ?
{
- rect.left = m_pos.x;
- rect.right = m_pos.x + m_dim.x;
- rect.top = m_pos.y;
- rect.bottom = m_pos.y + m_dim.y;
- m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect); // dessine le fond
+ rect.left = pos.x;
+ rect.right = pos.x + m_dim.x;
+ rect.top = pos.y;
+ rect.bottom = pos.y + m_dim.y;
+ m_pPixmap->DrawPart (-1, CHBACK, pos, rect); // dessine le fond
return;
}
if (m_bEnable) // bouton actif ?
- m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, m_mouseState, m_pos);
+ m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, m_mouseState, pos);
else
- m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, 4, m_pos);
+ m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, 4, pos);
if (m_nbMenu == 0)
return;
- pos = m_pos;
if (m_nbMenu > 0)
{
m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, m_iconMenu[m_selMenu] + 6, pos);
@@ -174,13 +184,12 @@ CButton::Draw ()
if (m_nbMenu == 1 || !m_bEnable || !m_bMouseDown)
return;
- pos = m_pos;
- pos.x += m_dim.x + 2;
+ pos.x += IsRightReading () ? -m_dim.x - 2 : m_dim.x + 2;
for (i = 0; i < m_nbMenu; i++)
{
m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, i == m_selMenu ? 1 : 0, pos);
m_pPixmap->DrawIcon (-1, CHBUTTON + m_type, m_iconMenu[i] + 6, pos);
- pos.x += m_dim.x - 1;
+ pos.x += IsRightReading () ? -m_dim.x - 1 : m_dim.x - 1;
}
}
@@ -292,24 +301,43 @@ CButton::MouseOnButton (Point pos)
return Detect (pos);
}
+bool
+CButton::IsInMenu (const Point & pos)
+{
+ Sint32 width = m_dim.x;
+
+ if (m_nbMenu > 1 && m_bMouseDown) // submenu expanded ?
+ width += 2 + (m_dim.x + (IsRightReading () ? 1 : -1)) * m_nbMenu;
+
+ if (IsRightReading () && m_nbMenu > 1 && m_bMouseDown)
+ {
+ if (pos.x > m_pos.x + m_dim.x || pos.x < m_pos.x - width + m_dim.x)
+ return false;
+ }
+ else
+ {
+ if (pos.x < m_pos.x || pos.x > m_pos.x + width)
+ return false;
+ }
+
+ if (pos.y < m_pos.y || pos.y > m_pos.y + m_dim.y)
+ return false;
+
+ return true;
+}
+
// Retourne le tooltips pour un bouton, en fonction
// de la position de la souris.
const char *
CButton::GetToolTips (Point pos)
{
- Sint32 width = m_dim.x;
Sint32 rank;
if (m_bHide || !m_bEnable)
return nullptr;
- if (m_nbMenu > 1 && m_bMouseDown) // sous-menu déroulé ?
- width += 2 + (m_dim.x - 1) * m_nbMenu;
-
- if (
- pos.x < m_pos.x || pos.x > m_pos.x + width || pos.y < m_pos.y ||
- pos.y > m_pos.y + m_dim.y)
+ if (!this->IsInMenu (pos))
return nullptr;
rank = (pos.x - (m_pos.x + 2 + 1)) / (m_dim.x - 1);
@@ -334,20 +362,10 @@ CButton::GetToolTips (Point pos)
bool
CButton::Detect (Point pos)
{
- Sint32 width = m_dim.x;
-
if (m_bHide || !m_bEnable)
return false;
- if (m_nbMenu > 1 && m_bMouseDown) // sous-menu déroulé ?
- width += 2 + (m_dim.x - 1) * m_nbMenu;
-
- if (
- pos.x < m_pos.x || pos.x > m_pos.x + width || pos.y < m_pos.y ||
- pos.y > m_pos.y + m_dim.y)
- return false;
-
- return true;
+ return this->IsInMenu (pos);
}
// Bouton de la souris pressé.
@@ -397,9 +415,12 @@ CButton::MouseMove (Point pos)
if (
m_nbMenu > 1 && m_bMouseDown &&
- pos.x > m_pos.x + m_dim.x + 2) // dans sous-menu ?
+ (IsRightReading () ? pos.x < m_pos.x
+ : pos.x > m_pos.x + m_dim.x + 2)) // in sub-menu ?
{
- m_selMenu = (pos.x - (m_pos.x + m_dim.x + 2)) / (m_dim.x - 1);
+ m_selMenu = IsRightReading ()
+ ? (m_pos.x - 2 - pos.x) / (m_dim.x + 1)
+ : (pos.x - (m_pos.x + m_dim.x + 2)) / (m_dim.x - 1);
if (m_selMenu >= m_nbMenu)
m_selMenu = m_nbMenu - 1;
}
diff --git a/src/button.h b/src/button.h
index a666f35..bc991d3 100644
--- a/src/button.h
+++ b/src/button.h
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -36,7 +36,8 @@ public:
bool Create (
CPixmap * pPixmap, CSound * pSound, Point pos, Sint32 type, Sint32 * pMenu,
- Sint32 nbMenu, const char ** pToolTips, Sint32 region, Uint32 message);
+ Sint32 nbMenu, const char ** pToolTips, Sint32 region, Uint32 message,
+ bool isRightReading);
void Draw ();
Sint32 GetState ();
@@ -58,6 +59,7 @@ public:
protected:
bool Detect (Point pos);
+ bool IsInMenu (const Point & pos);
bool MouseDown (Point pos);
bool MouseMove (Point pos);
bool MouseUp (Point pos);
diff --git a/src/decblupi.cxx b/src/decblupi.cxx
index e29513a..1475e4a 100644
--- a/src/decblupi.cxx
+++ b/src/decblupi.cxx
@@ -200,7 +200,7 @@ void
CDecor::BlupiDelete (Sint32 rank)
{
m_blupi[rank].bExist = false;
- this->m_pSound->StopSound(true, rank);
+ this->m_pSound->StopSound (true, rank);
if (
!m_bBuild && // phase de jeu ?
@@ -237,7 +237,7 @@ CDecor::BlupiKill (Sint32 exRank, Point cel, Sint32 type)
if (type == 0) // explosion ?
{
m_blupi[rank].bExist = false; // mort instantannée
- this->m_pSound->StopSound(true, rank);
+ this->m_pSound->StopSound (true, rank);
}
if (type == 1) // électro ?
@@ -2477,26 +2477,26 @@ CDecor::BlupiNextAction (Sint32 rank)
* direction and a second from the other direction. Without this check, the
* object is duplicated.
*/
- for (int i = 0; i < MAXBLUPI; ++i)
- {
- if (rank == i || !m_blupi[i].bExist)
- continue;
-
- if (
- (m_blupi[rank].goalAction == EV_ACTION_CARRY ||
+ if ((m_blupi[rank].goalAction == EV_ACTION_CARRY ||
m_blupi[rank].goalAction == EV_ACTION_EAT ||
- m_blupi[rank].goalAction == EV_ACTION_DRINK) &&
- (m_blupi[i].goalAction == EV_ACTION_CARRY2 ||
- m_blupi[i].goalAction == EV_ACTION_EAT2 ||
- m_blupi[i].goalAction == EV_ACTION_DRINK2) &&
- m_blupi[rank].goalHili.x == m_blupi[i].goalHili.x &&
- m_blupi[rank].goalHili.y == m_blupi[i].goalHili.y)
+ m_blupi[rank].goalAction == EV_ACTION_DRINK))
+ for (int i = 0; i < MAXBLUPI; ++i)
{
- BlupiInitAction (i, ACTION_STOP);
- GoalStop (i, true);
- return false;
+ if (rank == i || !m_blupi[i].bExist)
+ continue;
+
+ if (
+ (m_blupi[i].goalAction == EV_ACTION_CARRY2 ||
+ m_blupi[i].goalAction == EV_ACTION_EAT2 ||
+ m_blupi[i].goalAction == EV_ACTION_DRINK2) &&
+ m_blupi[rank].goalHili.x == m_blupi[i].goalHili.x &&
+ m_blupi[rank].goalHili.y == m_blupi[i].goalHili.y)
+ {
+ BlupiInitAction (i, ACTION_STOP);
+ GoalStop (i, true);
+ return false;
+ }
}
- }
/* Prevent Blupi to take a trap when an enemy is already captured. */
if (m_blupi[rank].perso == 0 && m_blupi[rank].action == ACTION_CARRY)
diff --git a/src/decor.cxx b/src/decor.cxx
index 42be5f3..a6ba4b6 100644
--- a/src/decor.cxx
+++ b/src/decor.cxx
@@ -248,7 +248,7 @@ CDecor::LoadImages ()
totalDim.y = DIMCELY * 2 * 6;
iconDim.x = DIMCELX * 2;
iconDim.y = DIMCELY * 2;
- snprintf (filename, sizeof (filename), "image/floor%.3d.png", m_region);
+ snprintf (filename, sizeof (filename), "floor%.3d.png", m_region);
if (!m_pPixmap->Cache (CHFLOOR, filename, totalDim, iconDim))
return false;
@@ -256,11 +256,11 @@ CDecor::LoadImages ()
totalDim.y = DIMOBJY * 8;
iconDim.x = DIMOBJX;
iconDim.y = DIMOBJY;
- snprintf (filename, sizeof (filename), "image/obj%.3d.png", m_region);
+ snprintf (filename, sizeof (filename), "obj%.3d.png", m_region);
if (!m_pPixmap->Cache (CHOBJECT, filename, totalDim, iconDim))
return false;
- snprintf (filename, sizeof (filename), "image/obj-o%.3d.png", m_region);
+ snprintf (filename, sizeof (filename), "obj-o%.3d.png", m_region);
if (!m_pPixmap->Cache (CHOBJECTo, filename, totalDim, iconDim))
return false;
@@ -1346,7 +1346,8 @@ CDecor::Build (Rect clip, Point posMouse)
tPos = pos;
tPos.x += 9;
tPos.y -= 24;
- m_pPixmap->DrawIcon (-1, CHBUTTON, 46, tPos);
+ m_pPixmap->DrawIcon (
+ -1, CHBUTTON, IsRightReading () ? 115 : 46, tPos);
}
// Dessine blupi
@@ -1538,7 +1539,7 @@ term:
const auto text = GetResHili (posMouse);
if (text)
{
- posMouse.x += 10;
+ posMouse.x += IsRightReading () ? 0 : 10;
posMouse.y += 20;
DrawText (m_pPixmap, posMouse, text);
}
@@ -1843,7 +1844,8 @@ CDecor::CelOkForAction (
GetFloor (cel, channel, icon);
if ( // mine ?
action == EV_ACTION_BUILD4 &&
- ((!g_restoreBugs && !m_decorMem[cel.x / 2][cel.y / 2].flagged) || // fixed
+ ((!g_restoreBugs &&
+ !m_decorMem[cel.x / 2][cel.y / 2].flagged) || // fixed
(g_restoreBugs && (channel != CHFLOOR || icon != 71)))) // funny bug
{
error = Errors::GROUND; // sol pas adéquat
@@ -3504,4 +3506,4 @@ void
CDecor::InvalidateGrounds ()
{
m_bGroundRedraw = true;
-} \ No newline at end of file
+}
diff --git a/src/decstat.cxx b/src/decstat.cxx
index aed44bb..1a6048d 100644
--- a/src/decstat.cxx
+++ b/src/decstat.cxx
@@ -734,13 +734,13 @@ CDecor::StatisticDraw ()
if (pStatistic->nb > 0)
{
- pos.x -= 3;
+ pos.x -= IsRightReading () ? -21 : 3;
pos.y -= 5;
m_pPixmap->DrawIcon (-1, CHBUTTON, icon, pos);
nb = pStatistic->nb;
snprintf (text, sizeof (text), "%d", nb);
- pos.x += 3 + 34;
+ pos.x += IsRightReading () ? -21 + 22 : 3 + 34;
pos.y += 5 + 7;
DrawText (m_pPixmap, pos, text);
}
@@ -775,7 +775,9 @@ CDecor::StatisticDraw ()
if (strlen (textRes))
{
nb = GetTextWidth (textRes);
- pos.x += (POSDRAWX - nb) / 2;
+ pos.x += (POSDRAWX_ - nb) / 2;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, textRes);
}
}
@@ -1011,16 +1013,22 @@ Sint32
CDecor::StatisticDetect (Point pos, bool & disable)
{
Sint32 rank;
+ Point _pos = pos;
disable = false;
+ if (IsRightReading ())
+ _pos.x = LXIMAGE () - _pos.x;
+
// Dans un bouton stop/setup/write ?
- if (pos.x >= 10 && pos.x <= 10 + 42 * 3 && pos.y >= 422 && pos.y <= 422 + 40)
+ if (
+ _pos.x >= 10 && _pos.x <= 10 + 42 * 3 && _pos.y >= 422 &&
+ _pos.y <= 422 + 40)
{
- pos.x -= 10;
- if (pos.x % 42 > 40)
+ _pos.x -= 10;
+ if (_pos.x % 42 > 40)
return -1;
- return 100 + pos.x / 42;
+ return 100 + _pos.x / 42;
}
if (
diff --git a/src/def.h b/src/def.h
index e296c53..b37fd21 100644
--- a/src/def.h
+++ b/src/def.h
@@ -23,19 +23,21 @@
#include <SDL_stdinc.h>
#include "display.h"
+#include "misc.h"
// clang-format off
#define _INTRO true // true for init screen
-#define POSDRAWX 144 // draw surface
-#define POSDRAWY 15
#define DIMDRAWX (LXIMAGE () - (LXLOGIC () - LYLOGIC ()))
#define DIMDRAWY 450
+#define POSDRAWX_ 144
+#define POSDRAWX (IsRightReading () ? LXIMAGE () - POSDRAWX_ - DIMDRAWX : POSDRAWX_) // draw surface
+#define POSDRAWY 15
-#define POSMAPX 8 // map surface
-#define POSMAPY 15
#define DIMMAPX 128
#define DIMMAPY 128
+#define POSMAPX (IsRightReading () ? LXIMAGE () - 8 - DIMMAPX : 8) // map surface
+#define POSMAPY 15
#define MAXCELX 200 // max cells for a world
#define MAXCELY 200
@@ -56,10 +58,10 @@
#define DIMJAUGEX 124 // progress size
#define DIMJAUGEY 22
-#define POSSTATX 12 // statistics
-#define POSSTATY 220
#define DIMSTATX 60
#define DIMSTATY 30
+#define POSSTATX (IsRightReading () ? LXIMAGE () - 12 - DIMSTATX * 2 : 12) // statistics
+#define POSSTATY 220
#define DIMTEXTX 16 // max char size
#define DIMTEXTY 16
diff --git a/src/event.cxx b/src/event.cxx
index 618c424..05832f3 100644
--- a/src/event.cxx
+++ b/src/event.cxx
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -103,8 +103,8 @@ static Phase table[] =
{
{
EV_PHASE_TESTCD,
- "image/init.png",
- "image/back-stars.png",
+ "init.png",
+ "back-stars.png",
CPixmap::Mode::FIX,
false,
{
@@ -116,7 +116,7 @@ static Phase table[] =
{
EV_PHASE_INTRO1,
- "image/intro1.png",
+ "intro1.png",
"",
CPixmap::Mode::FIX,
false,
@@ -129,8 +129,8 @@ static Phase table[] =
{
EV_PHASE_INIT,
- "image/init.png",
- "image/back-stars.png",
+ "init.png",
+ "back-stars.png",
CPixmap::Mode::FIX,
false,
{
@@ -178,9 +178,9 @@ static Phase table[] =
{
EV_PHASE_HISTORY0,
- "image/history0.png",
- "image/back-book.png",
- CPixmap::Mode::FIX,
+ "history0.png",
+ "back-book.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -203,9 +203,9 @@ static Phase table[] =
{
EV_PHASE_HISTORY1,
- "image/history1.png",
- "image/back-book.png",
- CPixmap::Mode::FIX,
+ "history1.png",
+ "back-book.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -228,9 +228,9 @@ static Phase table[] =
{
EV_PHASE_INFO,
- "image/info%.3d.png",
- "image/back-book.png",
- CPixmap::Mode::FIX,
+ "info%.3d.png",
+ "back-book.png",
+ CPixmap::Mode::FIX_REVERSABLE,
false,
{
{
@@ -295,9 +295,9 @@ static Phase table[] =
{
EV_PHASE_PLAY,
- "image/play.png",
+ "play.png",
"",
- CPixmap::Mode::EXPAND,
+ CPixmap::Mode::EXPAND_REVERSABLE,
false,
{
{
@@ -326,9 +326,9 @@ static Phase table[] =
{
EV_PHASE_STOP,
- "image/stop%.3d.png",
- "image/back-book.png",
- CPixmap::Mode::FIX,
+ "stop%.3d.png",
+ "back-book.png",
+ CPixmap::Mode::FIX_REVERSABLE,
false,
{
{
@@ -375,9 +375,9 @@ static Phase table[] =
{
EV_PHASE_HELP,
- "image/help.png",
- "image/back-book.png",
- CPixmap::Mode::FIX,
+ "help.png",
+ "back-book.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -418,8 +418,8 @@ static Phase table[] =
{
EV_PHASE_SETUP,
- "image/setup01.png",
- "image/back-setup.png",
+ "setup01.png",
+ "back-setup.png",
CPixmap::Mode::FIX,
false,
{
@@ -497,8 +497,8 @@ static Phase table[] =
{
EV_PHASE_SETUPp,
- "image/setup01.png",
- "image/back-setup.png",
+ "setup01.png",
+ "back-setup.png",
CPixmap::Mode::FIX,
false,
{
@@ -576,9 +576,9 @@ static Phase table[] =
{
EV_PHASE_READ,
- "image/read.png",
- "image/back-chest-r.png",
- CPixmap::Mode::FIX,
+ "read.png",
+ "back-chest-r.png",
+ CPixmap::Mode::FIX_REVERSABLE,
false,
{
{
@@ -655,9 +655,9 @@ static Phase table[] =
{
EV_PHASE_WRITE,
- "image/write.png",
- "image/back-chest-w.png",
- CPixmap::Mode::FIX,
+ "write.png",
+ "back-chest-w.png",
+ CPixmap::Mode::FIX_REVERSABLE,
false,
{
{
@@ -734,9 +734,9 @@ static Phase table[] =
{
EV_PHASE_WRITEp,
- "image/write.png",
- "image/back-chest-w.png",
- CPixmap::Mode::FIX,
+ "write.png",
+ "back-chest-w.png",
+ CPixmap::Mode::FIX_REVERSABLE,
false,
{
{
@@ -813,8 +813,8 @@ static Phase table[] =
{
EV_PHASE_LOST,
- "image/lost.png",
- "image/back-lost.png",
+ "lost.png",
+ "back-lost.png",
CPixmap::Mode::FIX,
true,
{
@@ -832,8 +832,8 @@ static Phase table[] =
{
EV_PHASE_WIN,
- "image/win.png",
- "image/back-win.png",
+ "win.png",
+ "back-win.png",
CPixmap::Mode::FIX,
true,
{
@@ -851,7 +851,7 @@ static Phase table[] =
{
EV_PHASE_LASTWIN,
- "image/last%.3d.png",
+ "last%.3d.png",
"",
CPixmap::Mode::FIX,
true,
@@ -870,9 +870,9 @@ static Phase table[] =
{
EV_PHASE_BUILD,
- "image/build.png",
+ "build.png",
"",
- CPixmap::Mode::EXPAND,
+ CPixmap::Mode::EXPAND_REVERSABLE,
true,
{
{
@@ -987,9 +987,9 @@ static Phase table[] =
{
EV_PHASE_BUTTON,
- "image/button.png",
- "image/back-build.png",
- CPixmap::Mode::FIX,
+ "button.png",
+ "back-build.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -1209,9 +1209,9 @@ static Phase table[] =
{
EV_PHASE_TERM,
- "image/term.png",
- "image/back-build.png",
- CPixmap::Mode::FIX,
+ "term.png",
+ "back-build.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -1300,9 +1300,9 @@ static Phase table[] =
{
EV_PHASE_MUSIC,
- "image/music.png",
- "image/back-build.png",
- CPixmap::Mode::FIX,
+ "music.png",
+ "back-build.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -1385,9 +1385,9 @@ static Phase table[] =
{
EV_PHASE_REGION,
- "image/region.png",
- "image/back-build.png",
- CPixmap::Mode::FIX,
+ "region.png",
+ "back-build.png",
+ CPixmap::Mode::FIX_REVERSABLE,
true,
{
{
@@ -1428,7 +1428,7 @@ static Phase table[] =
{
EV_PHASE_PLAYMOVIE,
- "image/movie.png",
+ "movie.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1441,7 +1441,7 @@ static Phase table[] =
{
EV_PHASE_WINMOVIE,
- "image/movie.png",
+ "movie.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1454,7 +1454,7 @@ static Phase table[] =
{
EV_PHASE_H0MOVIE,
- "image/movie.png",
+ "movie.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1467,7 +1467,7 @@ static Phase table[] =
{
EV_PHASE_H1MOVIE,
- "image/movie.png",
+ "movie.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1480,7 +1480,7 @@ static Phase table[] =
{
EV_PHASE_H2MOVIE,
- "image/movie.png",
+ "movie.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1493,8 +1493,8 @@ static Phase table[] =
{
EV_PHASE_BYE,
- "image/bye.png",
- "image/back-bye.png",
+ "bye.png",
+ "back-bye.png",
CPixmap::Mode::FIX,
false,
{
@@ -1506,7 +1506,7 @@ static Phase table[] =
{
EV_PHASE_INSERT,
- "image/insert.png",
+ "insert.png",
"",
CPixmap::Mode::FIX,
false,
@@ -1525,8 +1525,8 @@ static Phase table[] =
{
EV_PHASE_SETTINGS,
- "image/setup00.png",
- "image/back-setup.png",
+ "setup00.png",
+ "back-setup.png",
CPixmap::Mode::FIX,
false,
{
@@ -1642,6 +1642,7 @@ CEvent::CEvent ()
m_bHelp = false;
m_bAllMissions = false;
m_scrollSpeed = 1;
+ m_scrollSpeedPrev = -1;
m_bPause = false;
m_bShift = false;
m_shiftPhase = 0;
@@ -1684,6 +1685,9 @@ CEvent::CEvent ()
m_Languages.push_back (Language::de);
m_Languages.push_back (Language::it);
m_Languages.push_back (Language::pl);
+ m_Languages.push_back (Language::tr);
+ m_Languages.push_back (Language::pt);
+ m_Languages.push_back (Language::he);
this->m_LangStart = GetLocale ();
@@ -1697,6 +1701,12 @@ CEvent::CEvent ()
m_Lang = m_Languages.begin () + 4;
else if (this->m_LangStart == "pl")
m_Lang = m_Languages.begin () + 5;
+ else if (this->m_LangStart == "tr")
+ m_Lang = m_Languages.begin () + 6;
+ else if (this->m_LangStart == "pt")
+ m_Lang = m_Languages.begin () + 7;
+ else if (this->m_LangStart == "he")
+ m_Lang = m_Languages.begin () + 8;
else
m_Lang = m_Languages.begin ();
@@ -2019,10 +2029,20 @@ CEvent::CreateButtons (Sint32 phase)
pos.y = table[m_index].buttons[i].y;
message = table[m_index].buttons[i].message;
+ auto isRightReading =
+ ((message == EV_PHASE_INIT || message == EV_PHASE_PLAY ||
+ message == EV_SETUP_EXIT) ||
+ (phase != EV_PHASE_SETTINGS && phase != EV_PHASE_SETUP &&
+ phase != EV_PHASE_SETUPp)) &&
+ IsRightReading ();
+
+ if (isRightReading)
+ pos.x = LXIMAGE () - pos.x - DIMBUTTONX;
+
if (
phase != EV_PHASE_PLAY && phase != EV_PHASE_BUILD &&
phase != EV_PHASE_INIT)
- pos.x += LXOFFSET ();
+ pos.x = isRightReading ? pos.x - LXOFFSET () : pos.x + LXOFFSET ();
if (m_bPrivate)
{
@@ -2030,11 +2050,15 @@ CEvent::CreateButtons (Sint32 phase)
{
pos.x = 117 + LXOFFSET ();
pos.y = 115;
+ if (isRightReading)
+ pos.x = LXIMAGE () - pos.x - DIMBUTTONX;
}
if (message == EV_PHASE_SKILL2)
{
pos.x = 117 + LXOFFSET ();
pos.y = 115 + 42;
+ if (isRightReading)
+ pos.x = LXIMAGE () - pos.x - DIMBUTTONX;
}
}
@@ -2042,7 +2066,7 @@ CEvent::CreateButtons (Sint32 phase)
m_pPixmap, m_pSound, pos, table[m_index].buttons[i].type,
table[m_index].buttons[i].iconMenu + 1,
table[m_index].buttons[i].iconMenu[0], table[m_index].buttons[i].toolTips,
- m_pDecor->GetRegion (), message);
+ m_pDecor->GetRegion (), message, isRightReading);
i++;
}
@@ -2124,6 +2148,8 @@ CEvent::DrawButtons ()
rect.right = pos.x + 300;
rect.top = pos.y;
rect.bottom = pos.y + DIMLITTLEY;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text, FONTLITTLE);
}
}
@@ -2133,7 +2159,8 @@ CEvent::DrawButtons ()
snprintf (
res, sizeof (res), "%s %u.%u.%u%s", gettext ("Version"), PB_VERSION_MAJOR,
PB_VERSION_MINOR, PB_VERSION_PATCH, PB_VERSION_EXTRA);
- pos.x = LXIMAGE () - GetTextWidth (res, FONTLITTLE) - 4;
+ pos.x = IsRightReading () ? 4 + GetTextWidth (res, FONTLITTLE)
+ : LXIMAGE () - GetTextWidth (res, FONTLITTLE) - 4;
pos.y = 465;
DrawText (m_pPixmap, pos, res, FONTLITTLE);
@@ -2145,6 +2172,8 @@ CEvent::DrawButtons ()
res, sizeof (res),
gettext ("New version available for download on www.blupi.org (v%s)"),
this->m_updateVersion.c_str ());
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, res, FONTLITTLE);
}
}
@@ -2270,28 +2299,30 @@ CEvent::DrawButtons ()
}
m_menu.Draw ();
+ auto offset = IsRightReading () ? POSDRAWX + DIMDRAWX : 0;
+
// Dessine la rose des vents.
if (!m_bPause && !m_bDemoPlay)
{
- DrawTextCenter (gettext ("N"), (10 + 134) / 2, 17);
- DrawTextCenter (gettext ("S"), (10 + 134) / 2, 126);
- DrawTextCenter (gettext ("W"), 14, 70);
- DrawTextCenter (gettext ("E"), 129, 70);
+ DrawTextCenter (gettext ("N"), (10 + 134) / 2 + offset, 17);
+ DrawTextCenter (gettext ("S"), (10 + 134) / 2 + offset, 126);
+ DrawTextCenter (gettext ("W"), 14 + offset, 70);
+ DrawTextCenter (gettext ("E"), 129 + offset, 70);
}
// Dessine la pause.
if (m_bPause)
- DrawTextCenter (gettext ("Game paused"), (10 + 134) / 2, 20);
+ DrawTextCenter (gettext ("Game paused"), (10 + 134) / 2 + offset, 20);
else
{
if (m_bDemoRec) // recording demo ?
- DrawTextCenter (gettext ("REC"), (10 + 38) / 2, 20, FONTRED);
+ DrawTextCenter (gettext ("REC"), (10 + 38) / 2 + offset, 20, FONTRED);
if (m_bDemoPlay) // playing demo ?
- DrawTextCenter (gettext ("Demo"), (10 + 134) / 2, 20, FONTRED);
+ DrawTextCenter (gettext ("Demo"), (10 + 134) / 2 + offset, 20, FONTRED);
}
// Dessine la vitesse.
- pos.x = 64;
+ pos.x = IsRightReading () ? LXIMAGE () - 64 : 64;
pos.y = LYIMAGE () - 15;
rect.left = pos.x;
rect.right = pos.x + 20;
@@ -2325,10 +2356,14 @@ CEvent::DrawButtons ()
rect.bottom = POSDRAWY;
m_pPixmap->DrawPart (-1, CHBACK, pos, rect);
- pos.x = POSDRAWX + 20;
+ pos.x = POSDRAWX_ + 20;
pos.y = POSDRAWY + 4;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawTextRect (m_pPixmap, pos, m_libelle, 0, FONTLITTLE, 1);
- pos.x = POSDRAWX + DIMDRAWX / 2 + 20;
+ pos.x = POSDRAWX_ + DIMDRAWX / 2 + 20;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawTextRect (m_pPixmap, pos, m_libelle, 0, FONTLITTLE, 2);
pos.x = POSDRAWX + DIMDRAWX / 2 - DIMBUTTONX / 2;
@@ -2341,6 +2376,8 @@ CEvent::DrawButtons ()
{
m_posHelpButton.x = POSDRAWX + DIMDRAWX - DIMBUTTONX - 2;
m_posHelpButton.y = lg - DIMBUTTONY - 2;
+ if (IsRightReading ())
+ m_posHelpButton.x = POSDRAWX + 2;
m_pPixmap->DrawIcon (
-1, CHBUTTON, m_bHiliHelpButton ? 2 : 0, m_posHelpButton);
if (m_bInfoHelp)
@@ -2354,6 +2391,8 @@ CEvent::DrawButtons ()
{
pos.x = POSDRAWX + DIMDRAWX / 2 - DIMBUTTONX / 2;
pos.y = -12;
+ if (IsRightReading ())
+ m_posHelpButton.x = POSDRAWX + 2;
m_pPixmap->DrawIcon (-1, CHBUTTON, m_bHiliInfoButton ? 75 : 74, pos);
}
m_posInfoButton = pos;
@@ -2371,6 +2410,8 @@ CEvent::DrawButtons ()
pos.x = 420 + LXOFFSET ();
pos.y = 8;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, res);
for (i = 0; i < 10; i++)
@@ -2382,9 +2423,13 @@ CEvent::DrawButtons ()
lg = GetTextWidth (text);
pos.x = (420 + 460) / 2 - lg / 2 + LXOFFSET ();
pos.y = 30 + 12 + 42 * i;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text, FONTSLIM);
pos.x = 420 + 50 + LXOFFSET ();
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
if (world >= 0)
{
@@ -2413,14 +2458,18 @@ CEvent::DrawButtons ()
{
Term * pTerm = m_pDecor->GetTerminated ();
- DrawTextCenter (
- gettext ("Ending conditions"), (10 + 134) / 2 + LXOFFSET (), 20);
+ auto x = (10 + 134) / 2 + LXOFFSET ();
+ if (IsRightReading ())
+ x = LXIMAGE () - x;
+ DrawTextCenter (gettext ("Ending conditions"), x, 20);
pos.x = 170 + 42 * 2 + 4 + LXOFFSET ();
pos.y = 30 + 12 + 42 * 4;
snprintf (
text, sizeof (text), gettext ("Lost if less than %d Blupi"),
pTerm->nbMinBlupi);
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text);
pos.x = 170 + 42 * 2 + 4 + LXOFFSET ();
@@ -2428,22 +2477,37 @@ CEvent::DrawButtons ()
snprintf (
text, sizeof (text), gettext ("Impossible to win if less than %d Blupi"),
pTerm->nbMaxBlupi);
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text);
}
// Dessine les textes pour les choix des boutons.
if (m_phase == EV_PHASE_BUTTON)
- DrawTextCenter (
- gettext ("Available buttons"), (10 + 134) / 2 + LXOFFSET (), 20);
+ {
+ auto x = (10 + 134) / 2 + LXOFFSET ();
+ if (IsRightReading ())
+ x = LXIMAGE () - x;
+ DrawTextCenter (gettext ("Available buttons"), x, 20);
+ }
// Dessine les textes pour le choix des musiques.
if (m_phase == EV_PHASE_MUSIC)
- DrawTextCenter (gettext ("Music choice"), (10 + 134) / 2 + LXOFFSET (), 20);
+ {
+ auto x = (10 + 134) / 2 + LXOFFSET ();
+ if (IsRightReading ())
+ x = LXIMAGE () - x;
+ DrawTextCenter (gettext ("Music choice"), x, 20);
+ }
// Dessine les textes pour le choix de la région.
if (m_phase == EV_PHASE_REGION)
- DrawTextCenter (
- gettext ("Scenery choice"), (10 + 134) / 2 + LXOFFSET (), 20);
+ {
+ auto x = (10 + 134) / 2 + LXOFFSET ();
+ if (IsRightReading ())
+ x = LXIMAGE () - x;
+ DrawTextCenter (gettext ("Scenery choice"), x, 20);
+ }
// Ajoute "Mission numéro".
if (m_phase == EV_PHASE_INFO)
@@ -2465,6 +2529,8 @@ CEvent::DrawButtons ()
pos.x -= 100;
if (m_bPrivate)
pos.y += 14;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, res, FONTSLIM);
}
@@ -2481,6 +2547,8 @@ CEvent::DrawButtons ()
pos.x -= 100;
if (m_bPrivate)
pos.y += 14;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text, FONTRED);
}
@@ -2497,6 +2565,8 @@ CEvent::DrawButtons ()
pos.x -= 100;
if (m_bPrivate)
pos.y += 14;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text, FONTRED);
}
@@ -2513,6 +2583,7 @@ CEvent::DrawButtons ()
world = m_private;
lg = GetBignumWidth (world + 1);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (140 + 270) / 2 - lg / 2 + LXOFFSET ();
pos.y = 100;
if (m_bSchool)
@@ -2521,6 +2592,8 @@ CEvent::DrawButtons ()
pos.x -= 135;
if (m_bPrivate)
pos.y = 115;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawBignum (m_pPixmap, pos, world + 1);
}
@@ -2529,6 +2602,7 @@ CEvent::DrawButtons ()
{
if (!m_bSchool)
{
+ std::string text;
if (m_pDecor->GetSkill () == 0)
{
if (m_bPrivate)
@@ -2542,10 +2616,9 @@ CEvent::DrawButtons ()
pos.y = 230 + 13;
}
pos.x += LXOFFSET ();
- DrawText (m_pPixmap, pos, gettext ("Easy"), FONTSLIM);
+ text = gettext ("Easy");
}
-
- if (m_pDecor->GetSkill () == 1)
+ else if (m_pDecor->GetSkill () == 1)
{
if (m_bPrivate)
{
@@ -2558,8 +2631,12 @@ CEvent::DrawButtons ()
pos.y = 230 + 42 + 13;
}
pos.x += LXOFFSET ();
- DrawText (m_pPixmap, pos, gettext ("Difficult"), FONTSLIM);
+ text = gettext ("Difficult");
}
+
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
+ DrawText (m_pPixmap, pos, text.c_str (), FONTSLIM);
}
}
@@ -2583,6 +2660,8 @@ CEvent::DrawButtons ()
else
pente = 19;
pos.x += LXOFFSET ();
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawTextRect (m_pPixmap, pos, m_libelle, pente, FONTSLIM);
}
@@ -2599,6 +2678,8 @@ CEvent::DrawButtons ()
pos.x = 60 + LXOFFSET ();
pos.y = 443;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, list[GetWorld () % 5]);
}
@@ -2613,6 +2694,8 @@ CEvent::DrawButtons ()
pos.x = 60 + LXOFFSET ();
pos.y = 443;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, list[GetWorld () % 5]);
}
@@ -2630,6 +2713,8 @@ CEvent::DrawButtons ()
pos.x = 60 + LXOFFSET ();
pos.y = 443;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
DrawText (m_pPixmap, pos, text);
}
@@ -2646,18 +2731,21 @@ CEvent::DrawButtons ()
snprintf (res, sizeof (res), "x%d", m_speed);
lg = GetTextWidth (res);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (54 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, res);
snprintf (res, sizeof (res), "%d", m_pSound->GetAudioVolume ());
lg = GetTextWidth (res);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (284 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, res);
snprintf (res, sizeof (res), "%d", m_pSound->GetMidiVolume ());
lg = GetTextWidth (res);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (399 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, res);
@@ -2666,6 +2754,7 @@ CEvent::DrawButtons ()
if (m_pMovie->GetEnable () && m_bMovie)
text = gettext ("Yes");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (514 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, text);
@@ -2675,6 +2764,7 @@ CEvent::DrawButtons ()
else
snprintf (res, sizeof (res), "%d", m_scrollSpeed);
lg = GetTextWidth (res);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (169 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, res);
@@ -2710,8 +2800,15 @@ CEvent::DrawButtons ()
lang = "Italiano";
else if (locale == "pl")
lang = "Polski";
+ else if (locale == "tr")
+ lang = "Türkçe";
+ else if (locale == "pt")
+ lang = "Português";
+ else if (locale == "he")
+ lang = "עברית";
lg = GetTextWidth (lang.c_str ());
+ lg = IsRightReading () ? -lg : lg;
pos.x = (54 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, lang.c_str ());
@@ -2719,6 +2816,7 @@ CEvent::DrawButtons ()
const char * text =
g_bFullScreen ? gettext ("Fullscreen") : gettext ("Windowed");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (169 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, text);
@@ -2731,12 +2829,14 @@ CEvent::DrawButtons ()
g_zoom == 2 ? gettext ("Legacy") : gettext ("Desktop"));
lg = GetTextWidth (res);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (284 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, res);
text = (g_restoreMidi && mid) || !ogg ? gettext ("Midi") : gettext ("Ogg");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (399 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, text);
@@ -2746,6 +2846,7 @@ CEvent::DrawButtons ()
? (g_renderQuality ? gettext ("Anti-aliasing") : gettext ("Aliasing"))
: gettext ("Not available");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = (514 + 40) - lg / 2 + LXOFFSET ();
pos.y = 330 - 20;
DrawText (m_pPixmap, pos, text);
@@ -2758,6 +2859,7 @@ CEvent::DrawButtons ()
text = gettext ("You have played Planet Blupi.");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = LXIMAGE () / 2 - lg / 2;
pos.y = 20;
DrawText (m_pPixmap, pos, text);
@@ -2765,6 +2867,7 @@ CEvent::DrawButtons ()
text = gettext ("We hope you have had as much fun playing the game as we "
"had making it !");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = LXIMAGE () / 2 - lg / 2;
pos.y = 40;
DrawText (m_pPixmap, pos, text);
@@ -2790,6 +2893,8 @@ CEvent::DrawButtons ()
for (size_t i = 0; i < countof (libs); ++i)
{
pos.x = 30 + LXOFFSET ();
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x;
pos.y = 120 + i * 20;
DrawText (m_pPixmap, pos, libs[i].c_str ());
}
@@ -2797,12 +2902,14 @@ CEvent::DrawButtons ()
text = gettext ("This game is an original creation of Epsitec SA, CH-1400 "
"Yverdon-les-Bains");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = LXIMAGE () / 2 - lg / 2;
pos.y = 430;
DrawText (m_pPixmap, pos, text);
text = gettext ("http://www.blupi.org info@blupi.org");
lg = GetTextWidth (text);
+ lg = IsRightReading () ? -lg : lg;
pos.x = LXIMAGE () / 2 - lg / 2;
pos.y = 450;
DrawText (m_pPixmap, pos, text);
@@ -2969,11 +3076,15 @@ bool
CEvent::EventButtons (const SDL_Event & event, Point pos)
{
Sint32 lg;
+ Point _pos = pos;
// Cherche le tool tips à utiliser pour la souris.
m_textToolTips[0] = 0;
m_posToolTips.x = -1;
+ if (IsRightReading ())
+ _pos.x = LXIMAGE () - _pos.x;
+
if (m_phase == EV_PHASE_PLAY)
{
auto progress = [&](CJauge & prog, const char * text) -> bool {
@@ -2987,6 +3098,7 @@ CEvent::EventButtons (const SDL_Event & event, Point pos)
{
snprintf (m_textToolTips, sizeof (m_textToolTips), "%s", text);
lg = GetTextWidth (m_textToolTips);
+ lg = IsRightReading () ? -lg : lg;
test.x += (DIMJAUGEX - lg) / 2;
test.y += 4;
m_posToolTips = test;
@@ -3012,10 +3124,12 @@ CEvent::EventButtons (const SDL_Event & event, Point pos)
{
snprintf (m_textToolTips, sizeof (m_textToolTips), "%s", text);
lg = GetTextWidth (m_textToolTips);
- pos.x += 10;
+ pos.x += IsRightReading () ? 0 : 10;
pos.y += 20;
- if (pos.x > LXIMAGE () - lg)
+ if (pos.x > LXIMAGE () + (IsRightReading () ? 0 : -lg))
pos.x = LXIMAGE () - lg;
+ if (pos.x < 0)
+ pos.x = 0;
if (pos.y > LYIMAGE () - 14)
pos.y = LYIMAGE () - 14;
m_posToolTips = pos;
@@ -3277,13 +3391,13 @@ CEvent::LoadBackground ()
switch (id)
{
case 0:
- backWideName = "image/back-disco.png";
+ backWideName = "back-disco.png";
break;
case 1:
- backWideName = "image/back-stars.png";
+ backWideName = "back-stars.png";
break;
case 2:
- backWideName = "image/back-win.png";
+ backWideName = "back-win.png";
break;
}
}
@@ -4076,6 +4190,12 @@ CEvent::GetStartLanguage ()
return Language::it;
if (this->m_LangStart == "pl")
return Language::pl;
+ if (this->m_LangStart == "tr")
+ return Language::tr;
+ if (this->m_LangStart == "pt")
+ return Language::pt;
+ if (this->m_LangStart == "he")
+ return Language::he;
return Language::en;
}
@@ -4116,6 +4236,15 @@ CEvent::SetLanguage (Language lang)
case Language::pl:
slang = "pl";
break;
+ case Language::tr:
+ slang = "tr";
+ break;
+ case Language::pt:
+ slang = "pt";
+ break;
+ case Language::he:
+ slang = "he";
+ break;
}
snprintf (env, sizeof (env), "LANGUAGE=%s", slang);
@@ -5095,9 +5224,11 @@ CEvent::DemoRecStart ()
InitRandom ();
m_pDecor->SetTime (0);
- m_speed = 1;
- this->m_scrollSpeedPrev = this->m_scrollSpeed;
- this->m_scrollSpeed = 3;
+ m_speed = 1;
+
+ if (this->m_scrollSpeedPrev == -1)
+ this->m_scrollSpeedPrev = this->m_scrollSpeed;
+ this->m_scrollSpeed = 3;
m_bStartRecording = true;
}
@@ -5138,10 +5269,15 @@ CEvent::DemoRecStop ()
}
m_pDemoSDLBuffer.clear ();
- m_bDemoRec = false;
- m_demoTime = 0;
- m_bStartRecording = false;
- this->m_scrollSpeed = this->m_scrollSpeedPrev;
+ m_bDemoRec = false;
+ m_demoTime = 0;
+ m_bStartRecording = false;
+
+ if (this->m_scrollSpeedPrev >= 0)
+ {
+ this->m_scrollSpeed = this->m_scrollSpeedPrev;
+ this->m_scrollSpeedPrev = -1;
+ }
}
// Début de la reproduction d'une démo.
@@ -5221,8 +5357,9 @@ CEvent::DemoPlayStart (const std::string * demoFile)
return false;
}
- this->m_scrollSpeedPrev = m_scrollSpeed;
- this->m_scrollSpeed = 3;
+ if (this->m_scrollSpeedPrev == -1)
+ this->m_scrollSpeedPrev = this->m_scrollSpeed;
+ this->m_scrollSpeed = 3;
ChangePhase (EV_PHASE_PLAY);
InitRandom ();
@@ -5245,10 +5382,15 @@ CEvent::DemoPlayStop ()
m_pDemoSDLBuffer.clear ();
- m_bDemoPlay = false;
- m_bDemoRec = false;
- m_demoTime = 0;
- this->m_scrollSpeed = this->m_scrollSpeedPrev;
+ m_bDemoPlay = false;
+ m_bDemoRec = false;
+ m_demoTime = 0;
+
+ if (this->m_scrollSpeedPrev >= 0)
+ {
+ this->m_scrollSpeed = this->m_scrollSpeedPrev;
+ this->m_scrollSpeedPrev = -1;
+ }
ChangePhase (EV_PHASE_INIT);
}
@@ -5388,6 +5530,10 @@ CEvent::DemoStep ()
message = m_pDemoBuffer[m_demoIndex].message;
wParam = m_pDemoBuffer[m_demoIndex].wParam;
lParam = m_pDemoBuffer[m_demoIndex].lParam;
+
+ if (IsRightReading ())
+ lParam =
+ (lParam & 0xFFFF0000) | ((lParam & 0xFFFF) - POSDRAWX_ + POSDRAWX);
}
else // New SDL events format
{
@@ -5400,12 +5546,18 @@ CEvent::DemoStep ()
{
event.motion.x = m_pDemoSDLBuffer[m_demoIndex].x;
event.motion.y = m_pDemoSDLBuffer[m_demoIndex].y;
+
+ if (IsRightReading ())
+ event.motion.x -= POSDRAWX_ + POSDRAWX;
}
else if (event.type != SDL_KEYUP && event.type != SDL_KEYDOWN)
{
event.button.button = m_pDemoSDLBuffer[m_demoIndex].button;
event.button.x = m_pDemoSDLBuffer[m_demoIndex].x;
event.button.y = m_pDemoSDLBuffer[m_demoIndex].y;
+
+ if (IsRightReading ())
+ event.button.x -= POSDRAWX_ + POSDRAWX;
}
}
diff --git a/src/event.h b/src/event.h
index 63ca037..0dfd9b0 100644
--- a/src/event.h
+++ b/src/event.h
@@ -85,6 +85,9 @@ enum class Language {
de = 3,
it = 4,
pl = 5,
+ tr = 6,
+ pt = 7,
+ he = 8,
end,
};
diff --git a/src/menu.cxx b/src/menu.cxx
index 02ffb4e..af8e303 100644
--- a/src/menu.cxx
+++ b/src/menu.cxx
@@ -271,6 +271,8 @@ CMenu::Draw ()
m_pPixmap->DrawIcon (-1, CHBUTTON, state, pos);
icon = table_button_icon[m_buttons[i]];
+ if (IsRightReading () && icon == 40)
+ icon = 109;
if (m_perso == 8) // disciple ?
{
if (icon == 30)
@@ -305,13 +307,16 @@ CMenu::Draw ()
snprintf (text, sizeof (text), "%s", tr);
}
- if (m_nbCel.x > 1 && i < m_nbCel.y)
+ if (
+ (m_nbCel.x > 1 && i < m_nbCel.y) || (IsRightReading () && m_nbCel.x == 1))
{
- pos.x = m_pos.x - 4 - GetTextWidth (text); // texte à gauche
+ pos.x = m_pos.x - 4 -
+ (IsRightReading () ? 0 : GetTextWidth (text)); // texte à gauche
}
else
{
- pos.x = m_pos.x + m_dim.x + 4;
+ pos.x =
+ m_pos.x + m_dim.x + 4 + (IsRightReading () ? GetTextWidth (text) : 0);
}
DrawText (m_pPixmap, pos, text, FONTWHITE);
@@ -331,13 +336,16 @@ CMenu::Draw ()
snprintf (text, sizeof (text), "%s", tr);
}
- if (m_nbCel.x > 1 && i < m_nbCel.y)
+ if (
+ (m_nbCel.x > 1 && i < m_nbCel.y) ||
+ (IsRightReading () && m_nbCel.x == 1))
{
- pos.x = m_pos.x - 4 - GetTextWidth (text);
+ pos.x = m_pos.x - 4 - (IsRightReading () ? 0 : GetTextWidth (text));
}
else
{
- pos.x = m_pos.x + m_dim.x + 4;
+ pos.x =
+ m_pos.x + m_dim.x + 4 + (IsRightReading () ? GetTextWidth (text) : 0);
}
pos.y += DIMTEXTY;
diff --git a/src/misc.cxx b/src/misc.cxx
index 7a814a6..8c9d2e0 100644
--- a/src/misc.cxx
+++ b/src/misc.cxx
@@ -98,6 +98,17 @@ GetLocale ()
return gettext ("en");
}
+bool
+IsRightReading (const char * text)
+{
+ auto isRight = false;
+ if (text)
+ isRight = strchr (text, 0xD7) != nullptr;
+ else
+ isRight = GetLocale () == "he";
+ return isRight;
+}
+
// Retourne le nom de dossier en cours.
std::string
diff --git a/src/misc.h b/src/misc.h
index e782773..d3b7865 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -40,6 +40,7 @@ std::string GetBaseDir ();
std::string GetShareDir ();
std::string GetBinDir ();
std::string GetLocale ();
+bool IsRightReading (const char * text = nullptr);
extern void AddUserPath (std::string & pFilename);
enum Location { LOCATION_ABSOLUTE, LOCATION_BASE, LOCATION_USER };
@@ -68,4 +69,12 @@ basename (char * path)
snprintf (basename, sizeof (basename), "%s%s", fname, ext);
return basename;
}
-#endif /* _WIN32 */ \ No newline at end of file
+#endif /* _WIN32 */
+#ifdef EMSCRIPTEN
+static inline char *
+basename (char * filename)
+{
+ char * p = strrchr (filename, '/');
+ return p ? p + 1 : filename;
+}
+#endif /* EMSCRIPTEN */
diff --git a/src/pixmap.cxx b/src/pixmap.cxx
index 0fcf6d2..de797b8 100644
--- a/src/pixmap.cxx
+++ b/src/pixmap.cxx
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -124,7 +124,8 @@ CPixmap::CreateMainTexture ()
}
Sint32
-CPixmap::BltFast (Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR)
+CPixmap::BltFast (
+ Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR, SDL_RendererFlip flip)
{
Sint32 res;
@@ -159,16 +160,18 @@ CPixmap::BltFast (Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR)
if (this->mainTexture)
SDL_SetRenderTarget (g_renderer, target ? target : this->mainTexture);
- res = SDL_RenderCopy (
- g_renderer, m_SDLTextureInfo[srcCh].texture, &srcRect, &dstRect);
+ res = SDL_RenderCopyEx (
+ g_renderer, m_SDLTextureInfo[srcCh].texture, &srcRect, &dstRect, 0,
+ nullptr, flip);
if (this->mainTexture)
SDL_SetRenderTarget (g_renderer, target);
}
else
{
SDL_SetRenderTarget (g_renderer, m_SDLTextureInfo[dstCh].texture);
- res = SDL_RenderCopy (
- g_renderer, m_SDLTextureInfo[srcCh].texture, &srcRect, &dstRect);
+ res = SDL_RenderCopyEx (
+ g_renderer, m_SDLTextureInfo[srcCh].texture, &srcRect, &dstRect, 0,
+ nullptr, flip);
SDL_SetRenderTarget (g_renderer, target);
}
@@ -179,7 +182,8 @@ CPixmap::BltFast (Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR)
// Les modes sont 0=transparent, 1=opaque.
Sint32
-CPixmap::BltFast (Sint32 chDst, size_t channel, Point dst, Rect rcRect)
+CPixmap::BltFast (
+ Sint32 chDst, size_t channel, Point dst, Rect rcRect, SDL_RendererFlip flip)
{
Sint32 limit;
@@ -209,7 +213,7 @@ CPixmap::BltFast (Sint32 chDst, size_t channel, Point dst, Rect rcRect)
dstRect.top = dst.y;
dstRect.right = dstRect.left + rcRect.right - rcRect.left;
dstRect.bottom = dstRect.top + rcRect.bottom - rcRect.top;
- return this->BltFast (chDst, channel, dstRect, rcRect);
+ return this->BltFast (chDst, channel, dstRect, rcRect, flip);
}
// Effectue un appel BltFast.
@@ -325,7 +329,11 @@ CPixmap::Cache (
size_t channel, const std::string & pFilename, Point totalDim, Point iconDim,
Mode mode, std::string wideName)
{
- std::string file = GetBaseDir () + pFilename;
+ std::string absolute;
+ std::string file = GetBaseDir () + "image/" + GetLocale () + "/" + pFilename;
+ if (!FileExists (file, file, LOCATION_ABSOLUTE))
+ file = GetBaseDir () + "image/" + pFilename;
+
SDL_Surface * surface = IMG_Load (file.c_str ());
bool blupiChSet = false;
@@ -376,20 +384,28 @@ CPixmap::Cache (
SDL_SetRenderTarget (g_renderer, m_SDLTextureInfo[channel].texture);
+ SDL_RendererFlip flip =
+ (mode == FIX_REVERSABLE || mode == EXPAND_REVERSABLE) && IsRightReading ()
+ ? SDL_FLIP_HORIZONTAL
+ : SDL_FLIP_NONE;
+
switch (mode)
{
case FIX:
+ case FIX_REVERSABLE:
{
if (channel == CHBACK && (ow < LXIMAGE () || oh < LYIMAGE ()))
{
if (!wideName.empty ())
{
- std::string file = GetBaseDir () + m_SDLTextureInfo[channel].wideName;
+ std::string file =
+ GetBaseDir () + "image/" + m_SDLTextureInfo[channel].wideName;
SDL_Surface * surface = IMG_Load (file.c_str ());
SDL_Texture * texture =
SDL_CreateTextureFromSurface (g_renderer, surface);
SDL_FreeSurface (surface);
- SDL_RenderCopy (g_renderer, texture, nullptr, nullptr);
+ SDL_RenderCopyEx (
+ g_renderer, texture, nullptr, nullptr, 0, nullptr, flip);
SDL_DestroyTexture (texture);
}
@@ -398,32 +414,37 @@ CPixmap::Cache (
dst.y = 0;
dst.w = ow;
dst.h = oh;
- SDL_RenderCopy (g_renderer, texture, nullptr, &dst);
+ SDL_RenderCopyEx (g_renderer, texture, nullptr, &dst, 0, nullptr, flip);
}
else
- SDL_RenderCopy (g_renderer, texture, nullptr, nullptr);
+ SDL_RenderCopyEx (
+ g_renderer, texture, nullptr, nullptr, 0, nullptr, flip);
break;
}
case EXPAND:
+ case EXPAND_REVERSABLE:
{
+ auto isFlipped = flip == SDL_FLIP_HORIZONTAL;
+
SDL_Rect src, dst;
src.x = 0;
src.y = 0;
- src.w = POSDRAWX - 1;
+ src.w = POSDRAWX_ - 1;
src.h = LYIMAGE ();
dst = src;
- SDL_RenderCopy (g_renderer, texture, &src, &dst);
+ dst.x = isFlipped ? LXIMAGE () - src.w : src.x;
+ SDL_RenderCopyEx (g_renderer, texture, &src, &dst, 0, nullptr, flip);
src.x = ow - 16;
src.w = 16;
- dst.x = LXIMAGE () - 16;
+ dst.x = isFlipped ? 0 : LXIMAGE () - 16;
dst.w = src.w;
- SDL_RenderCopy (g_renderer, texture, &src, &dst);
- src.x = POSDRAWX - 1;
+ SDL_RenderCopyEx (g_renderer, texture, &src, &dst, 0, nullptr, flip);
+ src.x = POSDRAWX_ - 1;
src.w = ow - src.x - 16;
- dst.x = src.x;
+ dst.x = isFlipped ? 16 : src.x;
dst.w = DIMDRAWX + 1;
- SDL_RenderCopy (g_renderer, texture, &src, &dst);
+ SDL_RenderCopyEx (g_renderer, texture, &src, &dst, 0, nullptr, flip);
break;
}
}
@@ -644,12 +665,13 @@ CPixmap::DrawIconPart (
// Dessine une partie d'image n'importe o�.
bool
-CPixmap::DrawPart (Sint32 chDst, size_t channel, Point dest, Rect rect)
+CPixmap::DrawPart (
+ Sint32 chDst, size_t channel, Point dest, Rect rect, SDL_RendererFlip flip)
{
if (m_SDLTextureInfo.find (channel) == m_SDLTextureInfo.end ())
return false;
- return !BltFast (chDst, channel, dest, rect);
+ return !BltFast (chDst, channel, dest, rect, flip);
}
// Dessine une partie d'image rectangulaire.
diff --git a/src/pixmap.h b/src/pixmap.h
index 4468d9d..dd47bc9 100644
--- a/src/pixmap.h
+++ b/src/pixmap.h
@@ -55,7 +55,9 @@ class CPixmap
public:
enum Mode {
FIX = 0,
+ FIX_REVERSABLE,
EXPAND,
+ EXPAND_REVERSABLE,
};
CPixmap (CEvent * event);
@@ -82,7 +84,9 @@ public:
bool DrawIconPart (
Sint32 chDst, size_t channel, Sint32 rank, Point pos, Sint32 startY,
Sint32 endY);
- bool DrawPart (Sint32 chDst, size_t channel, Point dest, Rect rect);
+ bool DrawPart (
+ Sint32 chDst, size_t channel, Point dest, Rect rect,
+ SDL_RendererFlip flip = SDL_FLIP_NONE);
bool DrawImage (Sint32 chDst, size_t channel, Rect rect);
bool BuildIconMask (
@@ -102,8 +106,12 @@ public:
void FromGameToDisplay (Sint32 & x, Sint32 & y);
protected:
- Sint32 BltFast (Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR);
- Sint32 BltFast (Sint32 chDst, size_t channel, Point dst, Rect rcRect);
+ Sint32 BltFast (
+ Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR,
+ SDL_RendererFlip flip = SDL_FLIP_NONE);
+ Sint32 BltFast (
+ Sint32 chDst, size_t channel, Point dst, Rect rcRect,
+ SDL_RendererFlip flip = SDL_FLIP_NONE);
Sint32 BltFast (
SDL_Texture * lpSDL, size_t channel, Point dst, Rect rcRect,
SDL_BlendMode = SDL_BLENDMODE_BLEND);
diff --git a/src/progress.cxx b/src/progress.cxx
index 0b4713a..8a6b40d 100644
--- a/src/progress.cxx
+++ b/src/progress.cxx
@@ -63,32 +63,42 @@ CJauge::Draw ()
{
Sint32 part;
Rect rect;
+ Point pos = this->m_pos;
+
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x - m_dim.x;
if (m_bHide) // bouton caché ?
{
- rect.left = m_pos.x;
- rect.right = m_pos.x + m_dim.x;
- rect.top = m_pos.y;
- rect.bottom = m_pos.y + m_dim.y;
- m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect); // dessine le fond
+ rect.left = pos.x;
+ rect.right = pos.x + m_dim.x;
+ rect.top = pos.y;
+ rect.bottom = pos.y + m_dim.y;
+ m_pPixmap->DrawPart (-1, CHBACK, pos, rect); // dessine le fond
return;
}
+ SDL_RendererFlip flip = SDL_FLIP_NONE;
+ if (IsRightReading ())
+ flip = SDL_FLIP_HORIZONTAL;
+
part = (m_level * (DIMJAUGEX - 6 - 4)) / 100;
rect.left = 0;
rect.right = DIMJAUGEX;
rect.top = DIMJAUGEY * 0;
rect.bottom = DIMJAUGEY * 1;
- m_pPixmap->DrawPart (-1, CHJAUGE, m_pos, rect); // partie noire
+ m_pPixmap->DrawPart (-1, CHJAUGE, pos, rect, flip); // partie noire
if (part > 0)
{
+ if (IsRightReading ())
+ pos.x += DIMJAUGEX - part - 6;
rect.left = 0;
rect.right = 6 + part;
rect.top = DIMJAUGEY * m_type;
rect.bottom = DIMJAUGEY * (m_type + 1);
- m_pPixmap->DrawPart (-1, CHJAUGE, m_pos, rect); // partie colorée
+ m_pPixmap->DrawPart (-1, CHJAUGE, pos, rect, flip); // partie colorée
}
}
@@ -128,5 +138,8 @@ CJauge::SetHide (bool bHide)
Point
CJauge::GetPos ()
{
- return m_pos;
+ Point pos = m_pos;
+ if (IsRightReading ())
+ pos.x = LXIMAGE () - pos.x - m_dim.x;
+ return pos;
}
diff --git a/src/sound.h b/src/sound.h
index ccf3f18..93e611e 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -25,7 +25,11 @@
#include <string>
#include <vector>
+#ifdef EMSCRIPTEN
+#include <SDL2/SDL_mixer.h>
+#else /* EMSCRIPTEN */
#include <SDL_mixer.h>
+#endif /* !EMSCRIPTEN */
#include "blupi.h"
diff --git a/src/text.cxx b/src/text.cxx
index 222c165..18cbbf4 100644
--- a/src/text.cxx
+++ b/src/text.cxx
@@ -1,7 +1,7 @@
/*
* This file is part of the planetblupi source code
* Copyright (C) 1997, Daniel Roux & EPSITEC SA
- * Copyright (C) 2017-2018, Mathieu Schroeter
+ * Copyright (C) 2017-2019, Mathieu Schroeter
* http://epsitec.ch; http://www.blupi.org; http://github.com/blupi-games
*
* This program is free software: you can redistribute it and/or modify
@@ -34,56 +34,82 @@
* \param[in] c - The character (incremented if 0xC3 or 0xC4 or 0xC5 UTF-8).
* \returns the offset.
*/
-static Sint32
+static Uint8
GetOffset (const char *& c)
{
/* clang-format off */
- static const unsigned char table_accents[] = {
- /* ü à â é è ë ê ï */
- 0xBC, 0xA0, 0xA2, 0xA9, 0xA8, 0xAB, 0xAA, 0xAF, /* UTF-8 */
- /* î ô ù û ä ö ç */
- 0xAE, 0xB4, 0xB9, 0xBB, 0xA4, 0xB6, 0xA7, /* UTF-8 */
+ static const unsigned char table_c3[] = {
+ /* ü à â é è ë ê ï */
+ 0xBC, 0xA0, 0xA2, 0xA9, 0xA8, 0xAB, 0xAA, 0xAF,
+ /* î ô ù û ä ö ç ò */
+ 0xAE, 0xB4, 0xB9, 0xBB, 0xA4, 0xB6, 0xA7, 0xB2,
+ /* ì ó Ç Ö Ü õ ã */
+ 0xAC, 0xB3, 0x87, 0x96, 0x9C, 0xB5, 0xA3
};
- static const unsigned char table_extended[] = {
- /* Italian */
- /* ò ì */
- 0xB2, 0xAC, /* UTF-8 */
- /* Polish */
- /* ń ó ę ć ź ż */
- 0x84, 0xB3, 0x99, 0x87, 0xBA, 0xBC, /* UTF-8 */
- /* ą ł ś */
- 0x85, 0x82, 0x9B, /* UTF-8 */
+ static const unsigned char table_c4[] = {
+ /* ę ć ą Ğ ğ İ ı */
+ 0x99, 0x87, 0x85, 0x9E, 0x9F, 0xB0, 0xB1,
+ };
+
+ static const unsigned char table_c5[] = {
+ /* ń ź ż ł ś Ş ş */
+ 0x84, 0xBA, 0xBC, 0x82, 0x9B, 0x9E, 0x9F,
+ };
+
+ static const unsigned char table_d7[] = {
+ /*a ז ו ה ד ג ב א */
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
+ /*a מ ל ך כ י ט ח */
+ 0x97, 0x98, 0x99, 0x9B, 0x9A, 0x9C, 0x9E,
+ /*a ף פ ע ס ן נ ם */
+ 0x9D, 0xA0, 0x9F, 0xA1, 0xA2, 0xA4, 0xA3,
+ /*a ת ש ר ק ץ צ */
+ 0xA6, 0xA5, 0xA7, 0xA8, 0xA9, 0xAA,
};
/* clang-format on */
- if (static_cast<unsigned char> (*c) == 0xC3)
- c++;
- if (static_cast<unsigned char> (*c) == 0xC4)
- c++;
- if (static_cast<unsigned char> (*c) == 0xC5)
- c++;
+ int offset = 0;
+ int inc = 0;
+ size_t size = 0;
+ const unsigned char * table = nullptr;
- if (GetLocale () != "pl")
+ switch (static_cast<unsigned char> (*c))
{
- // Do not use the 'standard' accents table with Polish locale
- // This is required because we check only last byte of UTF-8 and some
- // characters overlap
- // TODO: In the future, this ugly hack should be replaced with proper UTF-8
- // parsing
- for (unsigned int i = 0; i < countof (table_accents); ++i)
- if ((unsigned char) *c == table_accents[i])
- return 15 + i;
+ case 0xC3:
+ offset = 128;
+ table = table_c3;
+ size = countof (table_c3);
+ inc = 1;
+ break;
+ case 0xC4:
+ offset = 128 + 32;
+ table = table_c4;
+ size = countof (table_c4);
+ inc = 1;
+ break;
+ case 0xC5:
+ offset = 128 + 64;
+ table = table_c5;
+ size = countof (table_c5);
+ inc = 1;
+ break;
+ case 0xD7:
+ offset = 128 + 96;
+ table = table_d7;
+ size = countof (table_d7);
+ inc = 1;
+ break;
}
- for (unsigned int i = 0; i < countof (table_extended); ++i)
- if ((unsigned char) *c == table_extended[i])
- return 127 + i;
+ for (size_t i = 0; i < size; ++i)
+ if (static_cast<unsigned char> (*(c + inc)) == table[i])
+ return offset + i;
- if (*c < 0)
+ if (*(c + inc) < 0)
return 1; // square
- return *c;
+ return *(c + inc);
}
/**
@@ -93,41 +119,54 @@ GetOffset (const char *& c)
* \param[in] font - The font used (little or normal).
* \returns the length.
*/
-Sint32
+Uint8
GetCharWidth (const char *& c, Sint32 font)
{
// clang-format off
- static const unsigned char table_width[] =
+ static const Uint8 table_width[] =
{
- 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 8,
- 9, 9, 8, 8, 8, 8, 5, 5, 8, 8, 8, 9, 8, 8, 10, 10,
+ 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10,
5, 6, 9, 13, 11, 12, 12, 6, 6, 6, 12, 12, 5, 9, 6, 9,
8, 8, 9, 9, 8, 9, 8, 8, 9, 9, 6, 6, 8, 9, 10, 11,
12, 8, 9, 9, 9, 8, 8, 8, 9, 4, 8, 9, 8, 10, 9, 9,
8, 9, 8, 9, 10, 8, 9, 11, 9, 8, 10, 7, 10, 7, 13, 13,
9, 9, 8, 8, 8, 8, 6, 8, 8, 4, 6, 8, 4, 12, 8, 8,
- 8, 8, 7, 6, 7, 8, 8, 10, 8, 8, 7, 6, 6, 6, 10, 8,
- 5, 8, 8, 8, 8, 8, 7, 9, 6, 7
+ 8, 8, 7, 6, 7, 8, 8, 10, 8, 8, 7, 6, 6, 6, 10, 0,
+ 8, 9, 9, 8, 8, 8, 8, 5, 5, 8, 8, 8, 9, 8, 8, 8,
+ 5, 8, 9, 9, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 9, 8, 8, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 7, 6, 7, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 8, 8, 9, 5, 7, 9, 10, 6, 8, 8, 9, 10, 9, 6,
+ 7, 9, 9, 8, 9, 9, 10, 9, 8, 12, 10, 0, 0, 0, 0, 0,
};
- static const unsigned char table_width_little[] =
+ static const Uint8 table_width_little[] =
{
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 7,
- 6, 6, 6, 6, 6, 6, 3, 3, 6, 6, 6, 6, 6, 6, 5, 5,
- 3, 3, 5, 8, 5, 11, 9, 3, 4, 4, 6, 6, 3, 4, 3, 6,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 6, 7, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 3, 2, 5, 8, 5, 11, 9, 2, 4, 4, 6, 6, 2, 4, 2, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 7, 6, 7, 6,
9, 8, 6, 7, 7, 5, 5, 8, 7, 2, 4, 7, 5, 10, 7, 8,
6, 8, 7, 6, 6, 6, 8, 12, 7, 6, 6, 3, 5, 3, 6, 8,
4, 6, 6, 6, 6, 6, 4, 6, 6, 2, 3, 5, 2, 10, 6, 6,
- 6, 6, 3, 5, 3, 6, 6, 8, 6, 6, 5, 4, 6, 4, 7, 6,
- 3, 6, 6, 6, 5, 5, 5, 7, 4, 5
+ 6, 6, 3, 5, 3, 6, 6, 8, 6, 6, 5, 4, 6, 4, 7, 0,
+ 7, 6, 6, 6, 6, 6, 6, 3, 3, 6, 6, 6, 6, 6, 6, 6,
+ 3, 6, 7, 8, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 5, 7, 8, 6, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 5, 5, 4, 5, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 5, 6, 7, 2, 4, 7, 7, 3, 5, 7, 6, 7, 7, 4,
+ 3, 7, 7, 7, 8, 7, 6, 7, 7, 9, 8, 0, 0, 0, 0, 0,
};
// clang-format on
if (font == FONTLITTLE)
return table_width_little[GetOffset (c)];
- else
- return table_width[GetOffset (c)] - 1;
+ return table_width[GetOffset (c)] - 1;
}
/**
@@ -137,50 +176,92 @@ GetCharWidth (const char *& c, Sint32 font)
* \param[in] pos - The coordinates for the text.
* \param[in] pText - The text.
* \param[in] font - The font style (little or normal).
+ * \param[in] slope - Text slope.
*/
void
-DrawText (CPixmap * pPixmap, Point pos, const char * pText, Sint32 font)
+DrawText (
+ CPixmap * pPixmap, Point pos, const char * pText, Sint32 font, Sint32 slope)
{
- Sint32 rank;
-
- while (*pText != '\0')
+ Sint32 rank;
+ bool isLatin = false;
+ int numberSize = 0;
+ const char * it = nullptr;
+ int skip = 0;
+ Sint32 start = pos.y;
+ Sint32 rel = 0;
+
+ auto useD7 = strchr (pText, 0xD7) != nullptr;
+ auto isRightReading = useD7 && IsRightReading ();
+ auto length = strlen (pText);
+
+ if (length >= 1 && !useD7 && IsRightReading ())
+ pos.x -= GetTextWidth (pText, font);
+
+ while (*pText != '\0' || skip)
{
+ if (isRightReading && numberSize == 0)
+ {
+ const auto test = [](const char * text) -> bool {
+ return *text > ' ' && *text <= '~';
+ };
+ it = pText;
+ isLatin = test (pText);
+ if (isLatin)
+ {
+ while (test (pText))
+ ++pText;
+
+ numberSize = pText - it;
+ skip = numberSize - 1;
+ }
+ }
+
+ if (numberSize)
+ {
+ pText = it + numberSize - 1;
+ numberSize--;
+ }
+
rank = GetOffset (pText);
+ if (isRightReading)
+ {
+ if (rank == '(')
+ rank = ')';
+ else if (rank == ')')
+ rank = '(';
+ }
+
+ auto inc = rank > 127;
+ auto lg = GetCharWidth (pText, font);
+
+ if (isRightReading)
+ pos.x += -lg;
+
+ rel += lg;
+ if (slope)
+ pos.y = start + rel / slope;
+
if (font != FONTLITTLE)
{
- rank += (128 + 16) * font;
+ rank += 256 * font;
pPixmap->DrawIcon (-1, CHTEXT, rank, pos);
}
else
pPixmap->DrawIcon (-1, CHLITTLE, rank, pos);
- pos.x += GetCharWidth (pText, font);
- pText++;
- }
-}
-
-// Affiche un texte penché.
+ if (!isRightReading)
+ pos.x += lg;
-void
-DrawTextPente (
- CPixmap * pPixmap, Point pos, const char * pText, Sint32 pente, Sint32 font)
-{
- Sint32 rank, lg, rel, start;
-
- start = pos.y;
- rel = 0;
- while (*pText != 0)
- {
- rank = GetOffset (pText);
- rank += (128 + 16) * font;
- pPixmap->DrawIcon (-1, CHTEXT, rank, pos);
+ if (!numberSize && skip > 0)
+ {
+ pText += skip;
+ skip = 0;
+ }
- lg = GetCharWidth (pText, font);
+ if (inc)
+ pText++;
pText++;
- rel += lg;
- pos.x += lg;
- pos.y = start + rel / pente;
}
}
@@ -227,10 +308,7 @@ DrawTextRect (
continue;
}
- if (pente == 0)
- DrawText (pPixmap, pos, pDest, font);
- else
- DrawTextPente (pPixmap, pos, pDest, pente, font);
+ DrawText (pPixmap, pos, pDest, font, pente);
if (pDest[0] == 0) // ligne vide ?
{
@@ -253,6 +331,7 @@ DrawTextCenter (CPixmap * pPixmap, Point pos, const char * pText, Sint32 font)
char * pDest;
Sint32 itl;
Point start;
+ auto isRightReading = IsRightReading ();
if (font == FONTLITTLE)
itl = DIMLITTLEY;
@@ -270,8 +349,10 @@ DrawTextCenter (CPixmap * pPixmap, Point pos, const char * pText, Sint32 font)
if (*pText == '\n')
pText++; // saute '\n'
- pDest = text;
- start.x = pos.x - GetTextWidth (pDest) / 2;
+ pDest = text;
+ start.x =
+ pos.x +
+ (isRightReading ? GetTextWidth (pDest) : -GetTextWidth (pDest)) / 2;
start.y = pos.y;
DrawText (pPixmap, start, pDest, font);
@@ -347,7 +428,13 @@ GetTextWidth (const char * pText, Sint32 font)
while (*pText != 0)
{
+ auto rank = GetOffset (pText);
+ auto inc = rank > 127;
+
width += GetCharWidth (pText, font);
+
+ if (inc)
+ pText++;
pText++;
}
diff --git a/src/text.h b/src/text.h
index 199de55..f29cca3 100644
--- a/src/text.h
+++ b/src/text.h
@@ -27,12 +27,9 @@
#define FONTLITTLE 10
// clang-format on
-void
-DrawText (CPixmap * pPixmap, Point pos, const char * pText, Sint32 font = 0);
-
-void DrawTextPente (
- CPixmap * pPixmap, Point pos, const char * pText, Sint32 pente,
- Sint32 font = 0);
+void DrawText (
+ CPixmap * pPixmap, Point pos, const char * pText, Sint32 font = 0,
+ Sint32 slope = 0);
void DrawTextRect (
CPixmap * pPixmap, Point pos, char * pText, Sint32 pente, Sint32 font = 0,