Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F134645
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
54 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/data/locale/messages.pot b/data/locale/messages.pot
index 8b622fc..9b48786 100644
--- a/data/locale/messages.pot
+++ b/data/locale/messages.pot
@@ -1,1042 +1,1463 @@
# 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.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: meandmyshadow 0.4\n"
+"Project-Id-Version: meandmyshadow 0.5svn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-22 14:10+0300\n"
+"POT-Creation-Date: 2013-02-22 15:23+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"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../src/Addons.cpp:41 ../src/TitleMenu.cpp:51
+#: ../src/Addons.cpp:46 ../src/TitleMenu.cpp:52
msgid "Addons"
msgstr ""
-#: ../src/Addons.cpp:59
+#: ../src/Addons.cpp:65
msgid "Unable to initialize addon menu:"
msgstr ""
-#: ../src/Addons.cpp:67 ../src/Addons.cpp:116 ../src/LevelEditSelect.cpp:71
-#: ../src/LevelSelect.cpp:187 ../src/TitleMenu.cpp:779
+#: ../src/Addons.cpp:73 ../src/Addons.cpp:122 ../src/LevelEditSelect.cpp:74
+#: ../src/LevelSelect.cpp:201 ../src/StatisticsScreen.cpp:323
+#: ../src/TitleMenu.cpp:812
msgid "Back"
msgstr ""
-#: ../src/Addons.cpp:98
+#: ../src/Addons.cpp:104
msgid "Levels"
msgstr ""
-#: ../src/Addons.cpp:99
+#: ../src/Addons.cpp:105
msgid "Level Packs"
msgstr ""
-#: ../src/Addons.cpp:100
+#: ../src/Addons.cpp:106
msgid "Themes"
msgstr ""
-#: ../src/Addons.cpp:120 ../src/Addons.cpp:601
+#: ../src/Addons.cpp:126 ../src/Addons.cpp:614
msgid "Install"
msgstr ""
-#: ../src/Addons.cpp:124
+#: ../src/Addons.cpp:130
msgid "Update"
msgstr ""
-#: ../src/Addons.cpp:135
+#: ../src/Addons.cpp:141
msgid "ERROR: unable to download addons file!"
msgstr ""
-#: ../src/Addons.cpp:147
+#: ../src/Addons.cpp:153
msgid "ERROR: unable to load addon_list file!"
msgstr ""
-#: ../src/Addons.cpp:158
+#: ../src/Addons.cpp:164
msgid "ERROR: Invalid file format of addons file!"
msgstr ""
-#: ../src/Addons.cpp:179
+#: ../src/Addons.cpp:185
msgid "ERROR: Unable to create the installed_addons file."
msgstr ""
-#: ../src/Addons.cpp:191
+#: ../src/Addons.cpp:197
msgid "ERROR: Invalid file format of the installed_addons!"
msgstr ""
-#: ../src/Addons.cpp:406 ../src/Addons.cpp:423 ../src/Addons.cpp:440
-#: ../src/Addons.cpp:467 ../src/Addons.cpp:484 ../src/Addons.cpp:498
+#: ../src/Addons.cpp:419 ../src/Addons.cpp:436 ../src/Addons.cpp:453
+#: ../src/Addons.cpp:480 ../src/Addons.cpp:497 ../src/Addons.cpp:511
msgid "ERROR: Unable to download addon!"
msgstr ""
-#: ../src/Addons.cpp:406 ../src/Addons.cpp:423 ../src/Addons.cpp:440
-#: ../src/Addons.cpp:467 ../src/Addons.cpp:484 ../src/Addons.cpp:498
+#: ../src/Addons.cpp:419 ../src/Addons.cpp:436 ../src/Addons.cpp:453
+#: ../src/Addons.cpp:480 ../src/Addons.cpp:497 ../src/Addons.cpp:511
msgid "ERROR:"
msgstr ""
-#: ../src/Addons.cpp:596
+#: ../src/Addons.cpp:609
msgid "Uninstall"
msgstr ""
-#: ../src/Block.cpp:547 ../src/LevelEditor.cpp:1855
+#: ../src/Block.cpp:606 ../src/LevelEditor.cpp:172
msgid "On"
msgstr ""
-#: ../src/Block.cpp:548 ../src/LevelEditor.cpp:1856
+#: ../src/Block.cpp:607 ../src/LevelEditor.cpp:173
msgid "Off"
msgstr ""
# TRANSLATORS: Font used in GUI:
# - Use "knewave" for languages using Latin and Latin-derived alphabets
# - "DroidSansFallback" can be used for non-Latin writing systems
-#: ../src/Functions.cpp:596 ../src/Functions.cpp:597 ../src/Functions.cpp:598
+#: ../src/Functions.cpp:634 ../src/Functions.cpp:635 ../src/Functions.cpp:636
+#: ../src/Functions.cpp:652
msgid "knewave"
msgstr ""
# TRANSLATORS: Font used for normal text:
# - Use "Blokletters-Viltstift" for languages using Latin and Latin-derived alphabets
# - "DroidSansFallback" can be used for non-Latin writing systems
-#: ../src/Functions.cpp:602
+#: ../src/Functions.cpp:640
msgid "Blokletters-Viltstift"
msgstr ""
-#: ../src/Functions.cpp:1139 ../src/Functions.cpp:1166
-#: ../src/Functions.cpp:1504 ../src/InputManager.cpp:233
-#: ../src/LevelEditor.cpp:1020 ../src/LevelEditor.cpp:1626
-#: ../src/LevelEditor.cpp:1674 ../src/LevelEditor.cpp:1728
-#: ../src/LevelEditor.cpp:1799 ../src/LevelEditor.cpp:1894
-#: ../src/LevelEditor.cpp:1943 ../src/LevelEditSelect.cpp:229
-#: ../src/LevelEditSelect.cpp:260 ../src/LevelEditSelect.cpp:295
+#: ../src/Functions.cpp:754
+msgid "Loading..."
+msgstr ""
+
+#: ../src/Functions.cpp:1330 ../src/Functions.cpp:1357
+#: ../src/Functions.cpp:1695 ../src/InputManager.cpp:233
+#: ../src/LevelEditor.cpp:353 ../src/LevelEditor.cpp:458
+#: ../src/LevelEditor.cpp:514 ../src/LevelEditor.cpp:1777
+#: ../src/LevelEditSelect.cpp:232 ../src/LevelEditSelect.cpp:264
+#: ../src/LevelEditSelect.cpp:300
msgid "OK"
msgstr ""
-#: ../src/Functions.cpp:1140 ../src/Functions.cpp:1152
-#: ../src/Functions.cpp:1162 ../src/Functions.cpp:1508
-#: ../src/LevelEditor.cpp:1024 ../src/LevelEditor.cpp:1630
-#: ../src/LevelEditor.cpp:1678 ../src/LevelEditor.cpp:1732
-#: ../src/LevelEditor.cpp:1803 ../src/LevelEditor.cpp:1898
-#: ../src/LevelEditor.cpp:1947 ../src/LevelEditSelect.cpp:233
-#: ../src/LevelEditSelect.cpp:264 ../src/LevelEditSelect.cpp:299
-#: ../src/TitleMenu.cpp:465
+#: ../src/Functions.cpp:1331 ../src/Functions.cpp:1343
+#: ../src/Functions.cpp:1353 ../src/Functions.cpp:1699
+#: ../src/LevelEditor.cpp:357 ../src/LevelEditor.cpp:462
+#: ../src/LevelEditor.cpp:518 ../src/LevelEditor.cpp:1781
+#: ../src/LevelEditSelect.cpp:236 ../src/LevelEditSelect.cpp:268
+#: ../src/LevelEditSelect.cpp:304 ../src/TitleMenu.cpp:493
msgid "Cancel"
msgstr ""
-#: ../src/Functions.cpp:1144
+#: ../src/Functions.cpp:1335
msgid "Abort"
msgstr ""
-#: ../src/Functions.cpp:1145 ../src/Functions.cpp:1161
+#: ../src/Functions.cpp:1336 ../src/Functions.cpp:1352
msgid "Retry"
msgstr ""
-#: ../src/Functions.cpp:1146
+#: ../src/Functions.cpp:1337
msgid "Ignore"
msgstr ""
-#: ../src/Functions.cpp:1150 ../src/Functions.cpp:1156
+#: ../src/Functions.cpp:1341 ../src/Functions.cpp:1347
msgid "Yes"
msgstr ""
-#: ../src/Functions.cpp:1151 ../src/Functions.cpp:1157
+#: ../src/Functions.cpp:1342 ../src/Functions.cpp:1348
msgid "No"
msgstr ""
# TRANSLATORS: Filename is coming before this text
-#: ../src/Functions.cpp:1275
+#: ../src/Functions.cpp:1466
#, c-format
msgid ""
"%s already exists.\n"
"Do you want to overwrite it?"
msgstr ""
-#: ../src/Functions.cpp:1275
+#: ../src/Functions.cpp:1466
msgid "Overwrite Prompt"
msgstr ""
-#: ../src/Functions.cpp:1296 ../src/Functions.cpp:1314
+#: ../src/Functions.cpp:1487 ../src/Functions.cpp:1505
#, c-format
msgid "Can't open file %s."
msgstr ""
-#: ../src/Functions.cpp:1296 ../src/Functions.cpp:1314
+#: ../src/Functions.cpp:1487 ../src/Functions.cpp:1505
msgid "Error"
msgstr ""
-#: ../src/Functions.cpp:1445
+#: ../src/Functions.cpp:1636
msgid "Save File"
msgstr ""
-#: ../src/Functions.cpp:1445
+#: ../src/Functions.cpp:1636
msgid "Load File"
msgstr ""
-#: ../src/Functions.cpp:1449
+#: ../src/Functions.cpp:1640
msgid "Search In"
msgstr ""
-#: ../src/Functions.cpp:1459
+#: ../src/Functions.cpp:1650
msgid "File Name"
msgstr ""
# TRANSLATORS: Please do not remove %s or %d from your translation:
# - %d means the level number in a levelpack
# - %s means the name of current level
-#: ../src/Game.cpp:250 ../src/Game.cpp:856
+#: ../src/Game.cpp:266 ../src/Game.cpp:951
#, c-format
msgid "Level %d %s"
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:674
+#: ../src/Game.cpp:771
#, c-format
msgid "Press %s key to save the game."
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:679
+#: ../src/Game.cpp:776
#, c-format
msgid "Press %s key to swap the position of player and shadow."
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:684
+#: ../src/Game.cpp:781
#, c-format
msgid "Press %s key to activate the switch."
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:689
+#: ../src/Game.cpp:786
#, c-format
msgid "Press %s key to teleport."
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - first %s means currently configured key to restart game
# - Second %s means configured key to load from last save
-#: ../src/Game.cpp:730
+#: ../src/Game.cpp:827
#, c-format
msgid "Press %s to restart current level or press %s to load the game."
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with currently configured key to restart game
-#: ../src/Game.cpp:742
+#: ../src/Game.cpp:839
#, c-format
msgid "Press %s to restart current level."
msgstr ""
-#: ../src/Game.cpp:756
+#: ../src/Game.cpp:853
msgid "Your shadow has died."
msgstr ""
-#: ../src/Game.cpp:808
+#: ../src/Game.cpp:904
#, c-format
msgid "%d recordings"
msgstr ""
# TRANSLATORS: This is caption for finished level
-#: ../src/Game.cpp:848
+#: ../src/Game.cpp:943
msgid "You've finished:"
msgstr ""
# TRANSLATORS: Please do not remove %-.2f from your translation:
# - %-.2f means time in seconds
# - s is shortened form of a second. Try to keep it so.
-#: ../src/Game.cpp:1033
+#: ../src/Game.cpp:1129
#, c-format
msgid "Time: %-.2fs"
msgstr ""
# TRANSLATORS: Please do not remove %-.2f from your translation:
# - %-.2f means time in seconds
# - s is shortened form of a second. Try to keep it so.
-#: ../src/Game.cpp:1042
+#: ../src/Game.cpp:1138
#, c-format
msgid "Best time: %-.2fs"
msgstr ""
-#: ../src/Game.cpp:1053
+#: ../src/Game.cpp:1149
#, c-format
msgid "Target time: %-.2fs"
msgstr ""
# TRANSLATORS: Please do not remove %d from your translation:
# - %d means the number of recordings user has made
-#: ../src/Game.cpp:1074
+#: ../src/Game.cpp:1170
#, c-format
msgid "Recordings: %d"
msgstr ""
# TRANSLATORS: Please do not remove %d from your translation:
# - %d means the number of recordings user has made
-#: ../src/Game.cpp:1082
+#: ../src/Game.cpp:1178
#, c-format
msgid "Best recordings: %d"
msgstr ""
-#: ../src/Game.cpp:1092
+#: ../src/Game.cpp:1188
#, c-format
msgid "Target recordings: %d"
msgstr ""
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with name of a prize medal (gold, silver or bronze)
-#: ../src/Game.cpp:1105
+#: ../src/Game.cpp:1201
#, c-format
msgid "You earned the %s medal"
msgstr ""
-#: ../src/Game.cpp:1105
+#: ../src/Game.cpp:1201
msgid "GOLD"
msgstr ""
-#: ../src/Game.cpp:1105
+#: ../src/Game.cpp:1201
msgid "SILVER"
msgstr ""
-#: ../src/Game.cpp:1105
+#: ../src/Game.cpp:1201
msgid "BRONZE"
msgstr ""
# TRANSLATORS: used as return to the level selector menu
-#: ../src/Game.cpp:1120
+#: ../src/Game.cpp:1216
msgid "Menu"
msgstr ""
# TRANSLATORS: used as restart level
-#: ../src/Game.cpp:1127 ../src/InputManager.cpp:44
+#: ../src/Game.cpp:1223 ../src/InputManager.cpp:44
msgid "Restart"
msgstr ""
# TRANSLATORS: used as next level
-#: ../src/Game.cpp:1134
+#: ../src/Game.cpp:1230
msgid "Next"
msgstr ""
-#: ../src/Game.cpp:1189
+#: ../src/Game.cpp:1288
msgid "Game replay is done."
msgstr ""
-#: ../src/Game.cpp:1189
+#: ../src/Game.cpp:1288
msgid "Game Replay"
msgstr ""
-#: ../src/Game.cpp:1360 ../src/Game.cpp:1362
+#: ../src/Game.cpp:1512 ../src/Game.cpp:1514
msgid "Congratulations"
msgstr ""
-#: ../src/Game.cpp:1362
+#: ../src/Game.cpp:1514
msgid "You have finished the levelpack!"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Up (in menu)"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Down (in menu)"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Left"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Right"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Jump"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Action"
msgstr ""
#: ../src/InputManager.cpp:43
msgid "Space (Record)"
msgstr ""
+#: ../src/InputManager.cpp:43
+msgid "Cancel recording"
+msgstr ""
+
#: ../src/InputManager.cpp:44
msgid "Escape"
msgstr ""
#: ../src/InputManager.cpp:44
msgid "Tab (View shadow/Level prop.)"
msgstr ""
#: ../src/InputManager.cpp:44
msgid "Save game (in editor)"
msgstr ""
#: ../src/InputManager.cpp:44
msgid "Load game"
msgstr ""
#: ../src/InputManager.cpp:44
msgid "Swap (in editor)"
msgstr ""
#: ../src/InputManager.cpp:45
msgid "Teleport (in editor)"
msgstr ""
#: ../src/InputManager.cpp:45
msgid "Suicide (in editor)"
msgstr ""
#: ../src/InputManager.cpp:45
msgid "Shift (in editor)"
msgstr ""
#: ../src/InputManager.cpp:45
msgid "Next block type (in Editor)"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Previous block type (in editor)"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Select (in menu)"
msgstr ""
-#: ../src/InputManager.cpp:204 ../src/TitleMenu.cpp:444
+#: ../src/InputManager.cpp:204 ../src/TitleMenu.cpp:472
msgid "Config Keys"
msgstr ""
#: ../src/InputManager.cpp:207
msgid "Select an item and press a key to config it."
msgstr ""
#: ../src/InputManager.cpp:221
msgid "Primary key"
msgstr ""
#: ../src/InputManager.cpp:222
msgid "Alternative key"
msgstr ""
#: ../src/InputManager.cpp:228
msgid "Unset the key"
msgstr ""
-#: ../src/InputManager.cpp:298
+#: ../src/InputManager.cpp:299
msgid "(Not set)"
msgstr ""
-#: ../src/LevelEditor.cpp:123
-msgid "Toolbox"
-msgstr ""
-
-#: ../src/LevelEditor.cpp:182
+#: ../src/LevelEditor.cpp:64
msgid "Block"
msgstr ""
-#: ../src/LevelEditor.cpp:182
+#: ../src/LevelEditor.cpp:64
msgid "Player Start"
msgstr ""
-#: ../src/LevelEditor.cpp:182
+#: ../src/LevelEditor.cpp:64
msgid "Shadow Start"
msgstr ""
-#: ../src/LevelEditor.cpp:183
+#: ../src/LevelEditor.cpp:65
msgid "Exit"
msgstr ""
-#: ../src/LevelEditor.cpp:183
+#: ../src/LevelEditor.cpp:65
msgid "Shadow Block"
msgstr ""
-#: ../src/LevelEditor.cpp:183
+#: ../src/LevelEditor.cpp:65
msgid "Spikes"
msgstr ""
-#: ../src/LevelEditor.cpp:184
+#: ../src/LevelEditor.cpp:66
msgid "Checkpoint"
msgstr ""
-#: ../src/LevelEditor.cpp:184 ../src/LevelEditSelect.cpp:290
+#: ../src/LevelEditor.cpp:66 ../src/LevelEditSelect.cpp:295
msgid "Swap"
msgstr ""
-#: ../src/LevelEditor.cpp:184 ../src/LevelEditor.cpp:1923
+#: ../src/LevelEditor.cpp:66
msgid "Fragile"
msgstr ""
-#: ../src/LevelEditor.cpp:185
+#: ../src/LevelEditor.cpp:67
msgid "Moving Block"
msgstr ""
-#: ../src/LevelEditor.cpp:185
+#: ../src/LevelEditor.cpp:67
msgid "Moving Shadow Block"
msgstr ""
-#: ../src/LevelEditor.cpp:185
+#: ../src/LevelEditor.cpp:67
msgid "Moving Spikes"
msgstr ""
-#: ../src/LevelEditor.cpp:186
+#: ../src/LevelEditor.cpp:68
msgid "Teleporter"
msgstr ""
-#: ../src/LevelEditor.cpp:186 ../src/LevelEditor.cpp:1842
+#: ../src/LevelEditor.cpp:68
msgid "Button"
msgstr ""
-#: ../src/LevelEditor.cpp:186 ../src/LevelEditor.cpp:1844
+#: ../src/LevelEditor.cpp:68
msgid "Switch"
msgstr ""
-#: ../src/LevelEditor.cpp:187
+#: ../src/LevelEditor.cpp:69
msgid "Conveyor Belt"
msgstr ""
-#: ../src/LevelEditor.cpp:187
+#: ../src/LevelEditor.cpp:69
msgid "Shadow Conveyor Belt"
msgstr ""
-#: ../src/LevelEditor.cpp:187
+#: ../src/LevelEditor.cpp:69
msgid "Notification Block"
msgstr ""
-#: ../src/LevelEditor.cpp:187
+#: ../src/LevelEditor.cpp:69
msgid "Collectable"
msgstr ""
-#: ../src/LevelEditor.cpp:531
-msgid "Are you sure you want to quit?"
-msgstr ""
-
-#: ../src/LevelEditor.cpp:531
-msgid "Quit prompt"
+#: ../src/LevelEditor.cpp:69
+msgid "Puhsable"
msgstr ""
-#: ../src/LevelEditor.cpp:960 ../src/LevelEditor.cpp:962
-#: ../src/LevelEditor.cpp:2545 ../src/LevelEditor.cpp:2547
-#, c-format
-msgid "Level \"%s\" saved"
+#: ../src/LevelEditor.cpp:174
+msgid "Toggle"
msgstr ""
-#: ../src/LevelEditor.cpp:960 ../src/LevelEditor.cpp:962
-#: ../src/LevelEditor.cpp:2545 ../src/LevelEditor.cpp:2547
-msgid "Saved"
+#: ../src/LevelEditor.cpp:177
+msgid "Complete"
msgstr ""
-#: ../src/LevelEditor.cpp:975 ../src/LevelEditor.cpp:2668
-msgid "Level settings"
+#: ../src/LevelEditor.cpp:178
+msgid "One step"
msgstr ""
-#: ../src/LevelEditor.cpp:979 ../src/LevelEditSelect.cpp:202
-msgid "Name:"
+#: ../src/LevelEditor.cpp:179
+msgid "Two steps"
msgstr ""
-#: ../src/LevelEditor.cpp:985
-msgid "Theme:"
+#: ../src/LevelEditor.cpp:180
+msgid "Gone"
msgstr ""
-#: ../src/LevelEditor.cpp:1000
-msgid "Target time (s):"
+#: ../src/LevelEditor.cpp:190
+msgid "Move"
msgstr ""
-#: ../src/LevelEditor.cpp:1011
-msgid "Target recordings:"
+#: ../src/LevelEditor.cpp:191 ../src/LevelEditor.cpp:744
+#: ../src/LevelEditor.cpp:2843
+msgid "Delete"
msgstr ""
-#: ../src/LevelEditor.cpp:1572 ../src/LevelEditor.cpp:1762
-msgid "Defined"
+#: ../src/LevelEditor.cpp:196
+msgid "Link"
msgstr ""
-#: ../src/LevelEditor.cpp:1575 ../src/LevelEditor.cpp:1765
-#: ../src/LevelEditor.cpp:1836
-msgid "None"
+#: ../src/LevelEditor.cpp:197
+msgid "Remove Links"
msgstr ""
-#: ../src/LevelEditor.cpp:1582
-msgid "Moving block"
+#: ../src/LevelEditor.cpp:201 ../src/LevelEditor.cpp:400
+msgid "Automatic"
msgstr ""
-#: ../src/LevelEditor.cpp:1585
-msgid "Moving shadow block"
+#: ../src/LevelEditor.cpp:214
+msgid "Path"
msgstr ""
-#: ../src/LevelEditor.cpp:1588
-msgid "Moving spikes"
+#: ../src/LevelEditor.cpp:215
+msgid "Remove Path"
msgstr ""
-#: ../src/LevelEditor.cpp:1595 ../src/LevelEditor.cpp:1714
+#: ../src/LevelEditor.cpp:218 ../src/LevelEditor.cpp:224
+#: ../src/LevelEditor.cpp:378
msgid "Enabled"
msgstr ""
-#: ../src/LevelEditor.cpp:1601
-msgid "Loop"
+#: ../src/LevelEditor.cpp:219 ../src/LevelEditor.cpp:389
+msgid "Looping"
msgstr ""
-#: ../src/LevelEditor.cpp:1607
-msgid "Path"
+#: ../src/LevelEditor.cpp:225
+msgid "Speed"
msgstr ""
-#: ../src/LevelEditor.cpp:1658
-msgid "Notification block"
+#: ../src/LevelEditor.cpp:235
+msgid "Message"
msgstr ""
-#: ../src/LevelEditor.cpp:1661
-msgid "Enter message here:"
+#: ../src/LevelEditor.cpp:237 ../src/LevelEditor.cpp:476
+msgid "Scripting"
msgstr ""
-#: ../src/LevelEditor.cpp:1706
-msgid "Shadow Conveyor belt"
+#: ../src/LevelEditor.cpp:335
+msgid "Notification block"
msgstr ""
-#: ../src/LevelEditor.cpp:1708
-msgid "Conveyor belt"
+#: ../src/LevelEditor.cpp:340
+msgid "Enter message here:"
msgstr ""
-#: ../src/LevelEditor.cpp:1720
-msgid "Enter speed here:"
+#: ../src/LevelEditor.cpp:445
+msgid "Conveyor belt speed"
msgstr ""
-#: ../src/LevelEditor.cpp:1769
-msgid "Portal"
+#: ../src/LevelEditor.cpp:450
+msgid "Enter speed here:"
msgstr ""
-#: ../src/LevelEditor.cpp:1772
-msgid "Activate on touch"
+#: ../src/LevelEditor.cpp:481
+msgid "Id:"
msgstr ""
-#: ../src/LevelEditor.cpp:1778 ../src/LevelEditor.cpp:1872
-msgid "Targets:"
+#: ../src/LevelEditor.cpp:729 ../src/LevelEditor.cpp:2837
+msgid "Select"
msgstr ""
-#: ../src/LevelEditor.cpp:1833
-#, c-format
-msgid "%d Defined"
+#: ../src/LevelEditor.cpp:759
+msgid "Configure"
msgstr ""
-#: ../src/LevelEditor.cpp:1849
-msgid "Behaviour:"
+#: ../src/LevelEditor.cpp:1159
+msgid "Are you sure you want to quit?"
msgstr ""
-#: ../src/LevelEditor.cpp:1857
-msgid "Toggle"
+#: ../src/LevelEditor.cpp:1159
+msgid "Quit prompt"
msgstr ""
-#: ../src/LevelEditor.cpp:1926
-msgid "State:"
+#: ../src/LevelEditor.cpp:1266 ../src/LevelEditor.cpp:1268
+#: ../src/LevelEditor.cpp:1727 ../src/LevelEditor.cpp:1729
+#, c-format
+msgid "Level \"%s\" saved"
msgstr ""
-#: ../src/LevelEditor.cpp:1932
-msgid "Complete"
+#: ../src/LevelEditor.cpp:1266 ../src/LevelEditor.cpp:1268
+#: ../src/LevelEditor.cpp:1727 ../src/LevelEditor.cpp:1729
+msgid "Saved"
msgstr ""
-#: ../src/LevelEditor.cpp:1933
-msgid "One step"
+#: ../src/LevelEditor.cpp:1736 ../src/LevelEditor.cpp:2849
+msgid "Level settings"
msgstr ""
-#: ../src/LevelEditor.cpp:1934
-msgid "Two steps"
+#: ../src/LevelEditor.cpp:1742 ../src/LevelEditSelect.cpp:205
+msgid "Name:"
msgstr ""
-#: ../src/LevelEditor.cpp:1935
-msgid "Gone"
+#: ../src/LevelEditor.cpp:1748
+msgid "Theme:"
msgstr ""
-#: ../src/LevelEditor.cpp:2653
-msgid "Select"
+#: ../src/LevelEditor.cpp:1756
+msgid "Target time (s):"
msgstr ""
-#: ../src/LevelEditor.cpp:2656
-msgid "Add"
+#: ../src/LevelEditor.cpp:1765
+msgid "Target recordings:"
msgstr ""
-#: ../src/LevelEditor.cpp:2659
-msgid "Delete"
+#: ../src/LevelEditor.cpp:2804 ../src/LevelEditor.cpp:2810
+#, c-format
+msgid "Movespeed: %s"
msgstr ""
-#: ../src/LevelEditor.cpp:2662
-msgid "Configure"
+#: ../src/LevelEditor.cpp:2840
+msgid "Add"
msgstr ""
-#: ../src/LevelEditor.cpp:2665 ../src/LevelPlaySelect.cpp:66
-#: ../src/TitleMenu.cpp:48
+#: ../src/LevelEditor.cpp:2846 ../src/LevelPlaySelect.cpp:69
+#: ../src/TitleMenu.cpp:49
msgid "Play"
msgstr ""
-#: ../src/LevelEditor.cpp:2671
+#: ../src/LevelEditor.cpp:2852
msgid "Save level"
msgstr ""
-#: ../src/LevelEditor.cpp:2674
+#: ../src/LevelEditor.cpp:2855
msgid "Back to menu"
msgstr ""
-#: ../src/LevelEditor.cpp:2712 ../src/LevelEditor.cpp:2718
-#, c-format
-msgid "Movespeed: %s"
-msgstr ""
-
-#: ../src/LevelEditSelect.cpp:43 ../src/TitleMenu.cpp:50
+#: ../src/LevelEditSelect.cpp:46 ../src/TitleMenu.cpp:51
msgid "Map Editor"
msgstr ""
-#: ../src/LevelEditSelect.cpp:80
+#: ../src/LevelEditSelect.cpp:83
msgid "New Levelpack"
msgstr ""
-#: ../src/LevelEditSelect.cpp:85
+#: ../src/LevelEditSelect.cpp:88
msgid "Pack Properties"
msgstr ""
-#: ../src/LevelEditSelect.cpp:90
+#: ../src/LevelEditSelect.cpp:93
msgid "Remove Pack"
msgstr ""
-#: ../src/LevelEditSelect.cpp:95
+#: ../src/LevelEditSelect.cpp:98
msgid "Move Map"
msgstr ""
-#: ../src/LevelEditSelect.cpp:103
+#: ../src/LevelEditSelect.cpp:106
msgid "Remove Map"
msgstr ""
-#: ../src/LevelEditSelect.cpp:108
+#: ../src/LevelEditSelect.cpp:111
msgid "Edit Map"
msgstr ""
-#: ../src/LevelEditSelect.cpp:199
+#: ../src/LevelEditSelect.cpp:202
msgid "Properties"
msgstr ""
-#: ../src/LevelEditSelect.cpp:211
+#: ../src/LevelEditSelect.cpp:214
msgid "Description:"
msgstr ""
-#: ../src/LevelEditSelect.cpp:220
+#: ../src/LevelEditSelect.cpp:223
msgid "Congratulation text:"
msgstr ""
-#: ../src/LevelEditSelect.cpp:248 ../src/LevelEditSelect.cpp:401
+#: ../src/LevelEditSelect.cpp:252 ../src/LevelEditSelect.cpp:407
msgid "Add level"
msgstr ""
-#: ../src/LevelEditSelect.cpp:251
+#: ../src/LevelEditSelect.cpp:255
msgid "File name:"
msgstr ""
-#: ../src/LevelEditSelect.cpp:275
+#: ../src/LevelEditSelect.cpp:280
msgid "Move level"
msgstr ""
-#: ../src/LevelEditSelect.cpp:278
+#: ../src/LevelEditSelect.cpp:283
msgid "Level: "
msgstr ""
-#: ../src/LevelEditSelect.cpp:288
+#: ../src/LevelEditSelect.cpp:293
msgid "Before"
msgstr ""
-#: ../src/LevelEditSelect.cpp:289
+#: ../src/LevelEditSelect.cpp:294
msgid "After"
msgstr ""
-#: ../src/LevelEditSelect.cpp:464
+#: ../src/LevelEditSelect.cpp:470
msgid "Are you sure?"
msgstr ""
-#: ../src/LevelEditSelect.cpp:464
+#: ../src/LevelEditSelect.cpp:470
msgid "Remove prompt"
msgstr ""
-#: ../src/LevelEditSelect.cpp:609
+#: ../src/LevelEditSelect.cpp:615
msgid "No file name given for the new level."
msgstr ""
-#: ../src/LevelEditSelect.cpp:609
+#: ../src/LevelEditSelect.cpp:615
msgid "Missing file name"
msgstr ""
-#: ../src/LevelEditSelect.cpp:686
+#: ../src/LevelEditSelect.cpp:672
+msgid "ERROR: Unable to add level to Levels levelpack"
+msgstr ""
+
+#: ../src/LevelEditSelect.cpp:706
msgid "The entered level number isn't valid!"
msgstr ""
-#: ../src/LevelEditSelect.cpp:686
+#: ../src/LevelEditSelect.cpp:706
msgid "Illegal number"
msgstr ""
-#: ../src/LevelPlaySelect.cpp:44
+#: ../src/LevelPlaySelect.cpp:47
msgid "Select Level"
msgstr ""
-#: ../src/LevelPlaySelect.cpp:93
+#: ../src/LevelPlaySelect.cpp:96
msgid "Choose a level"
msgstr ""
-#: ../src/LevelPlaySelect.cpp:94
+#: ../src/LevelPlaySelect.cpp:97
msgid "Time:"
msgstr ""
-#: ../src/LevelPlaySelect.cpp:95
+#: ../src/LevelPlaySelect.cpp:98 ../src/StatisticsScreen.cpp:166
msgid "Recordings:"
msgstr ""
-#: ../src/TitleMenu.cpp:49
+#: ../src/StatisticsManager.cpp:393
+msgid "New achievement:"
+msgstr ""
+
+#: ../src/StatisticsManager.cpp:401
+#, c-format
+msgid "Achieved at %s"
+msgstr ""
+
+#: ../src/StatisticsManager.cpp:407
+msgid "Unknown achievement"
+msgstr ""
+
+#: ../src/StatisticsManager.cpp:413
+#, c-format
+msgid "Achieved %0.1f%%"
+msgstr ""
+
+#: ../src/StatisticsManager.cpp:417
+msgid "Not achieved"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:135 ../src/TitleMenu.cpp:203
+msgid "Achievements and Statistics"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:147
+msgid "Total"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:156
+msgid "Traveling distance (m)"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:157
+msgid "Jump times"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:158
+msgid "Die times"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:159
+msgid "Squashed times"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:166
+msgid "Switch pulled times:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:167
+msgid "Swap times:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:168
+msgid "Save times:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:168
+msgid "Load times:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:175
+msgid "Completed levels:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:217
+msgid "In-game time:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:230
+msgid "Level editing time:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:242
+msgid "Created levels:"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:330
+msgid "Achievements"
+msgstr ""
+
+#: ../src/StatisticsScreen.cpp:331
+msgid "Statistics"
+msgstr ""
+
+#: ../src/TitleMenu.cpp:50
msgid "Options"
msgstr ""
-#: ../src/TitleMenu.cpp:52
+#: ../src/TitleMenu.cpp:53
msgid "Quit"
msgstr ""
-#: ../src/TitleMenu.cpp:120
+#: ../src/TitleMenu.cpp:129
msgid "Enable internet in order to install addons."
msgstr ""
-#: ../src/TitleMenu.cpp:120
+#: ../src/TitleMenu.cpp:129
msgid "Internet disabled"
msgstr ""
-#: ../src/TitleMenu.cpp:202
+#: ../src/TitleMenu.cpp:201 ../src/TitleMenu.cpp:709
+msgid "Credits"
+msgstr ""
+
+#: ../src/TitleMenu.cpp:234
msgid "Settings"
msgstr ""
-#: ../src/TitleMenu.cpp:250
+#: ../src/TitleMenu.cpp:278
msgid "Music"
msgstr ""
-#: ../src/TitleMenu.cpp:258
+#: ../src/TitleMenu.cpp:286
msgid "Sound"
msgstr ""
-#: ../src/TitleMenu.cpp:266
+#: ../src/TitleMenu.cpp:294
msgid "Fullscreen"
msgstr ""
-#: ../src/TitleMenu.cpp:271
+#: ../src/TitleMenu.cpp:299
msgid "Resolution"
msgstr ""
-#: ../src/TitleMenu.cpp:353
+#: ../src/TitleMenu.cpp:381
msgid "Language"
msgstr ""
# TRANSLATORS: as detect user's language automatically
-#: ../src/TitleMenu.cpp:362
+#: ../src/TitleMenu.cpp:390
msgid "Auto-Detect"
msgstr ""
-#: ../src/TitleMenu.cpp:390
+#: ../src/TitleMenu.cpp:418
msgid "Theme"
msgstr ""
-#: ../src/TitleMenu.cpp:423
+#: ../src/TitleMenu.cpp:451
msgid "Level themes"
msgstr ""
-#: ../src/TitleMenu.cpp:428
+#: ../src/TitleMenu.cpp:456
msgid "Internet"
msgstr ""
-#: ../src/TitleMenu.cpp:434
+#: ../src/TitleMenu.cpp:462
msgid "Internet proxy"
msgstr ""
# TRANSLATORS: Used for button which clear any level progress like unlocked levels and highscores.
-#: ../src/TitleMenu.cpp:451
+#: ../src/TitleMenu.cpp:479
msgid "Clear Progress"
msgstr ""
-#: ../src/TitleMenu.cpp:470
+#: ../src/TitleMenu.cpp:498
msgid "Save Changes"
msgstr ""
-#: ../src/TitleMenu.cpp:579
+#: ../src/TitleMenu.cpp:610
msgid "Do you really want to reset level progress?"
msgstr ""
-#: ../src/TitleMenu.cpp:579
+#: ../src/TitleMenu.cpp:610
msgid "Warning"
msgstr ""
-#: ../src/TitleMenu.cpp:676
-msgid "Credits"
+#: ../src/AchievementList.h:38
+msgid "Newbie"
+msgstr ""
+
+#: ../src/AchievementList.h:38
+msgid "Complete a level."
+msgstr ""
+
+#: ../src/AchievementList.h:39
+msgid "Experienced player"
+msgstr ""
+
+#: ../src/AchievementList.h:39
+msgid "Complete 50 levels."
+msgstr ""
+
+#: ../src/AchievementList.h:40
+msgid "Good job!"
+msgstr ""
+
+#: ../src/AchievementList.h:40
+msgid "Receive a gold medal."
+msgstr ""
+
+#: ../src/AchievementList.h:41
+msgid "Expert"
+msgstr ""
+
+#: ../src/AchievementList.h:41
+msgid "Earn 50 gold medal."
+msgstr ""
+
+#: ../src/AchievementList.h:43
+msgid "Graduate"
+msgstr ""
+
+#: ../src/AchievementList.h:43
+msgid "Complete the tutorial level pack."
+msgstr ""
+
+#: ../src/AchievementList.h:44
+msgid "Outstanding graduate"
+msgstr ""
+
+#: ../src/AchievementList.h:44
+msgid "Complete the tutorial level pack with gold for all levels."
+msgstr ""
+
+#: ../src/AchievementList.h:46
+msgid "Hooked"
+msgstr ""
+
+#: ../src/AchievementList.h:46
+msgid "Play Me and My Shadow for more than 2 hours."
+msgstr ""
+
+#: ../src/AchievementList.h:47
+msgid "Loyal fan of Me and My Shadow"
+msgstr ""
+
+#: ../src/AchievementList.h:47
+msgid "Play Me and My Shadow for more than 24 hours."
+msgstr ""
+
+#: ../src/AchievementList.h:49
+msgid "Constructor"
+msgstr ""
+
+#: ../src/AchievementList.h:49
+msgid "Use the level editor for more than 2 hours."
+msgstr ""
+
+#: ../src/AchievementList.h:50
+msgid "The creator"
+msgstr ""
+
+#: ../src/AchievementList.h:50
+msgid "Use the level editor for more than 24 hours."
+msgstr ""
+
+#: ../src/AchievementList.h:52
+msgid "Look, cute level!"
+msgstr ""
+
+#: ../src/AchievementList.h:52
+msgid "Create a level for the first time."
+msgstr ""
+
+#: ../src/AchievementList.h:53
+msgid "The level museum"
+msgstr ""
+
+#: ../src/AchievementList.h:53
+msgid "Create 50 levels."
+msgstr ""
+
+#: ../src/AchievementList.h:55
+msgid "Frog"
+msgstr ""
+
+#: ../src/AchievementList.h:55
+msgid "Jump 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:57
+msgid "Wanderer"
+msgstr ""
+
+#: ../src/AchievementList.h:57
+msgid "Travel 100 meters."
+msgstr ""
+
+#: ../src/AchievementList.h:58
+msgid "Runner"
+msgstr ""
+
+#: ../src/AchievementList.h:58
+msgid "Travel 1 kilometer."
+msgstr ""
+
+#: ../src/AchievementList.h:59
+msgid "Long distance runner"
+msgstr ""
+
+#: ../src/AchievementList.h:59
+msgid "Travel 10 kilometers."
+msgstr ""
+
+#: ../src/AchievementList.h:60
+msgid "Marathon runner"
+msgstr ""
+
+#: ../src/AchievementList.h:60
+msgid "Travel 42,195 meters."
+msgstr ""
+
+#: ../src/AchievementList.h:62
+msgid "Be careful!"
+msgstr ""
+
+#: ../src/AchievementList.h:62
+msgid "Die for the first time."
+msgstr ""
+
+#: ../src/AchievementList.h:63
+msgid "It doesn't matter..."
+msgstr ""
+
+#: ../src/AchievementList.h:63
+msgid "Die 50 times."
+msgstr ""
+
+#: ../src/AchievementList.h:64
+msgid "Expert of trial and error"
+msgstr ""
+
+#: ../src/AchievementList.h:64
+msgid "Die 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:66
+msgid "Keep an eye for moving blocks!"
+msgstr ""
+
+#: ../src/AchievementList.h:66
+msgid "Get squashed for the first time."
+msgstr ""
+
+#: ../src/AchievementList.h:67
+msgid "Potato masher"
+msgstr ""
+
+#: ../src/AchievementList.h:67
+msgid "Get squashed 50 times."
+msgstr ""
+
+#: ../src/AchievementList.h:69
+msgid "Double kill"
+msgstr ""
+
+#: ../src/AchievementList.h:69
+msgid "Get both the player and the shadow dead."
+msgstr ""
+
+#: ../src/AchievementList.h:71
+msgid "Bad luck"
+msgstr ""
+
+#: ../src/AchievementList.h:71
+msgid "Die 5 times in under 5 seconds."
+msgstr ""
+
+#: ../src/AchievementList.h:72
+msgid "This level is too dangerous"
+msgstr ""
+
+#: ../src/AchievementList.h:72
+msgid "Die 10 times in under 5 seconds."
+msgstr ""
+
+#: ../src/AchievementList.h:74
+msgid "You forgot your friend"
+msgstr ""
+
+#: ../src/AchievementList.h:74
+msgid "Finish the level with the player or the shadow dead."
+msgstr ""
+
+#: ../src/AchievementList.h:75
+msgid "Just in time"
+msgstr ""
+
+#: ../src/AchievementList.h:75
+msgid "Reach the exit with the player and the shadow simultaneously."
+msgstr ""
+
+#: ../src/AchievementList.h:77
+msgid "Recorder"
+msgstr ""
+
+#: ../src/AchievementList.h:77
+msgid "Record 100 times."
+msgstr ""
+
+#: ../src/AchievementList.h:78
+msgid "Shadowmaster"
+msgstr ""
+
+#: ../src/AchievementList.h:78
+msgid "Record 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:80
+msgid "Switch puller"
+msgstr ""
+
+#: ../src/AchievementList.h:80
+msgid "Pull the switch 100 times."
+msgstr ""
+
+#: ../src/AchievementList.h:81
+msgid "The switch is broken!"
+msgstr ""
+
+#: ../src/AchievementList.h:81
+msgid "Pull the switch 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:83
+msgid "Swapper"
+msgstr ""
+
+#: ../src/AchievementList.h:83
+msgid "Swap 100 times."
+msgstr ""
+
+#: ../src/AchievementList.h:84
+msgid "Player to shadow to player to shadow..."
+msgstr ""
+
+#: ../src/AchievementList.h:84
+msgid "Swap 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:86
+msgid "Play it save"
+msgstr ""
+
+#: ../src/AchievementList.h:86
+msgid "Save 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:87
+msgid "This game is too hard"
+msgstr ""
+
+#: ../src/AchievementList.h:87
+msgid "Load the game 1000 times."
+msgstr ""
+
+#: ../src/AchievementList.h:89
+msgid "Panic save"
+msgstr ""
+
+#: ../src/AchievementList.h:89
+msgid "Save twice in 1 second."
+msgstr ""
+
+#: ../src/AchievementList.h:90
+msgid "Panic load"
+msgstr ""
+
+#: ../src/AchievementList.h:90
+msgid "Load twice in 1 second."
+msgstr ""
+
+#: ../src/AchievementList.h:92
+msgid "Bad saving position"
+msgstr ""
+
+#: ../src/AchievementList.h:92
+msgid "Load the game and die within 1 second."
+msgstr ""
+
+#: ../src/AchievementList.h:93
+msgid "This level is too hard"
+msgstr ""
+
+#: ../src/AchievementList.h:93
+msgid "Load the same save and die 100 times."
+msgstr ""
+
+#: ../src/AchievementList.h:95
+msgid "Quick swap"
+msgstr ""
+
+#: ../src/AchievementList.h:95
+msgid "Swap twice in under a second."
+msgstr ""
+
+#: ../src/AchievementList.h:98
+msgid "Horizontal confusion"
+msgstr ""
+
+#: ../src/AchievementList.h:98
+msgid "Press left and right simultaneously."
+msgstr ""
+
+#: ../src/AchievementList.h:100
+msgid "Programmer"
+msgstr ""
+
+#: ../src/AchievementList.h:100
+msgid "Play the development version of Me and My Shadow."
msgstr ""
# TRANSLATORS: name of a key
msgid "backspace"
msgstr ""
# TRANSLATORS: name of a key
msgid "tab"
msgstr ""
# TRANSLATORS: name of a key
msgid "clear"
msgstr ""
# TRANSLATORS: name of a key
msgid "return"
msgstr ""
# TRANSLATORS: name of a key
msgid "pause"
msgstr ""
# TRANSLATORS: name of a key
msgid "escape"
msgstr ""
# TRANSLATORS: name of a key
msgid "space"
msgstr ""
# TRANSLATORS: name of a key
msgid "delete"
msgstr ""
# TRANSLATORS: name of a key
msgid "enter"
msgstr ""
# TRANSLATORS: name of a key
msgid "equals"
msgstr ""
# TRANSLATORS: name of a key
msgid "up"
msgstr ""
# TRANSLATORS: name of a key
msgid "down"
msgstr ""
# TRANSLATORS: name of a key
msgid "right"
msgstr ""
# TRANSLATORS: name of a key
msgid "left"
msgstr ""
# TRANSLATORS: name of a key
msgid "insert"
msgstr ""
# TRANSLATORS: name of a key
msgid "home"
msgstr ""
# TRANSLATORS: name of a key
msgid "end"
msgstr ""
# TRANSLATORS: name of a key
msgid "page up"
msgstr ""
# TRANSLATORS: name of a key
msgid "page down"
msgstr ""
# TRANSLATORS: name of a key
msgid "numlock"
msgstr ""
# TRANSLATORS: name of a key
msgid "caps lock"
msgstr ""
# TRANSLATORS: name of a key
msgid "scroll lock"
msgstr ""
# TRANSLATORS: name of a key
msgid "right shift"
msgstr ""
# TRANSLATORS: name of a key
msgid "left shift"
msgstr ""
# TRANSLATORS: name of a key
msgid "right ctrl"
msgstr ""
# TRANSLATORS: name of a key
msgid "left ctrl"
msgstr ""
# TRANSLATORS: name of a key
msgid "right alt"
msgstr ""
# TRANSLATORS: name of a key
msgid "left alt"
msgstr ""
# TRANSLATORS: name of a key
msgid "right meta"
msgstr ""
# TRANSLATORS: name of a key
msgid "left meta"
msgstr ""
# TRANSLATORS: name of a key
msgid "left super"
msgstr ""
# TRANSLATORS: name of a key
msgid "right super"
msgstr ""
# TRANSLATORS: name of a key
msgid "alt gr"
msgstr ""
# TRANSLATORS: name of a key
msgid "compose"
msgstr ""
# TRANSLATORS: name of a key
msgid "help"
msgstr ""
# TRANSLATORS: name of a key
msgid "print screen"
msgstr ""
# TRANSLATORS: name of a key
msgid "sys req"
msgstr ""
# TRANSLATORS: name of a key
msgid "break"
msgstr ""
# TRANSLATORS: name of a key
msgid "menu"
msgstr ""
# TRANSLATORS: name of a key
msgid "power"
msgstr ""
# TRANSLATORS: name of a key
msgid "euro"
msgstr ""
# TRANSLATORS: name of a key
msgid "undo"
msgstr ""
diff --git a/src/ScriptAPI.cpp b/src/ScriptAPI.cpp
index dee042a..f2a30ed 100644
--- a/src/ScriptAPI.cpp
+++ b/src/ScriptAPI.cpp
@@ -1,494 +1,494 @@
/*
* Copyright (C) 2012 Me and My Shadow
*
* This file is part of Me and My Shadow.
*
* Me and My Shadow is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Me and My Shadow is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Me and My Shadow. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScriptAPI.h"
#include "ScriptExecutor.h"
#include "Functions.h"
#include "Objects.h"
#include "Game.h"
#include <iostream>
using namespace std;
int test(lua_State* state){
cout<<"Hello world"<<endl;
return 0;
}
//Register the libraries.
void registerFunctions(ScriptExecutor* executor){
//
}
///////////////////////////BLOCK SPECIFIC///////////////////////////
int getBlockById(lua_State* state){
//Get the number of args, this MUST be one.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getBlockById, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getBlockById, expected 1.");
lua_error(state);
}
//Make sure the given argument is an id (string).
if(!lua_isstring(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getBlockById."));
+ lua_pushstring(state,"Invalid type for argument 1 of getBlockById.");
lua_error(state);
}
//Check if the currentState is the game state.
Game* game=dynamic_cast<Game*>(currentState);
if(game==NULL) return 0;
//Get the actual game object.
string id=lua_tostring(state,1);
std::vector<Block*>& levelObjects=game->levelObjects;
Block* object=NULL;
for(unsigned int i=0;i<levelObjects.size();i++){
if(levelObjects[i]->getEditorProperty("id")==id){
object=levelObjects[i];
break;
}
}
if(object==NULL){
//Unable to find the requested object.
//Return nothing, will result in a nil in the script.
return 0;
}
//Create the userdatum.
object->createUserData(state,"block");
//We return one object, the userdatum.
return 1;
}
int getBlocksById(lua_State* state){
//Get the number of args, this MUST be one.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getBlocksById, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getBlocksById, expected 1.");
lua_error(state);
}
//Make sure the given argument is an id (string).
if(!lua_isstring(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getBlocksById."));
+ lua_pushstring(state,"Invalid type for argument 1 of getBlocksById.");
lua_error(state);
}
//Check if the currentState is the game state.
Game* game=dynamic_cast<Game*>(currentState);
if(game==NULL) return 0;
//Get the actual game object.
string id=lua_tostring(state,1);
std::vector<Block*>& levelObjects=game->levelObjects;
std::vector<Block*> result;
for(unsigned int i=0;i<levelObjects.size();i++){
if(levelObjects[i]->getEditorProperty("id")==id){
result.push_back(levelObjects[i]);
}
}
//Create the table that will hold the result.
lua_createtable(state,result.size(),0);
//Loop through the results.
for(unsigned int i=0;i<result.size();i++){
//Create the userdatum.
result[i]->createUserData(state,"block");
//And set the table.
lua_rawseti(state,-2,i+1);
}
//We return one object, the userdatum.
return 1;
}
int getBlockLocation(lua_State* state){
//Make sure there's only one argument and that argument is an userdatum.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getBlockLocation, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getBlockLocation, expected 1.");
lua_error(state);
}
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getBlockLocation."));
+ lua_pushstring(state,"Invalid type for argument 1 of getBlockLocation.");
lua_error(state);
}
Block* object = Block::getObjectFromUserData(state,1);
if(object==NULL) return 0;
//Get the object.
lua_pushnumber(state,object->getBox().x);
lua_pushnumber(state,object->getBox().y);
return 2;
}
int setBlockLocation(lua_State* state){
//Check the number of arguments.
int args=lua_gettop(state);
//Make sure the number of arguments is correct.
if(args!=3){
- lua_pushstring(state,_("Incorrect number of arguments for setBlockLocation, expected 3."));
+ lua_pushstring(state,"Incorrect number of arguments for setBlockLocation, expected 3.");
lua_error(state);
}
//Check if the arguments are of the right type.
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of setBlockLocation."));
+ lua_pushstring(state,"Invalid type for argument 1 of setBlockLocation.");
lua_error(state);
}
if(!lua_isnumber(state,2)){
- lua_pushstring(state,_("Invalid type for argument 2 of setBlockLocation."));
+ lua_pushstring(state,"Invalid type for argument 2 of setBlockLocation.");
lua_error(state);
}
if(!lua_isnumber(state,3)){
- lua_pushstring(state,_("Invalid type for argument 3 of setBlockLocation."));
+ lua_pushstring(state,"Invalid type for argument 3 of setBlockLocation.");
lua_error(state);
}
//Now get the pointer to the object.
Block* object = Block::getObjectFromUserData(state,1);
if(object==NULL) return 0;
int x=lua_tonumber(state,2);
int y=lua_tonumber(state,3);
object->setLocation(x,y);
return 0;
}
int getBlockType(lua_State* state){
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getBlockType, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getBlockType, expected 1.");
lua_error(state);
}
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getBlockType."));
+ lua_pushstring(state,"Invalid type for argument 1 of getBlockType.");
lua_error(state);
}
Block* object = Block::getObjectFromUserData(state,1);
if(object==NULL || object->type<0 || object->type>=TYPE_MAX) return 0;
lua_pushstring(state,Game::blockName[object->type]);
return 1;
}
int changeBlockThemeState(lua_State* state){
int args=lua_gettop(state);
if(args!=2){
- lua_pushstring(state,_("Incorrect number of arguments for changeBlockThemeState, expected 2."));
+ lua_pushstring(state,"Incorrect number of arguments for changeBlockThemeState, expected 2.");
lua_error(state);
}
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of changeBlockThemeState."));
+ lua_pushstring(state,"Invalid type for argument 1 of changeBlockThemeState.");
lua_error(state);
}
if(!lua_isstring(state,2)){
- lua_pushstring(state,_("Invalid type for argument 2 of changeBlockThemeState."));
+ lua_pushstring(state,"Invalid type for argument 2 of changeBlockThemeState.");
lua_error(state);
}
Block* object = Block::getObjectFromUserData(state,1);
object->appearance.changeState(lua_tostring(state,2));
return 0;
}
//Array with the methods for the block library.
static const struct luaL_Reg blocklib_m[]={
{"getBlockById",getBlockById},
{"getBlocksById",getBlocksById},
{"getLocation",getBlockLocation},
{"setLocation",setBlockLocation},
{"getType",getBlockType},
{"changeThemeState",changeBlockThemeState},
{NULL,NULL}
};
int luaopen_block(lua_State* state){
luaL_newlib(state,blocklib_m);
//Create the metatable for the block userdata.
luaL_newmetatable(state,"block");
lua_pushstring(state,"__index");
lua_pushvalue(state,-2);
lua_settable(state,-3);
Block::registerMetatableFunctions(state,-3);
//Register the functions and methods.
luaL_setfuncs(state,blocklib_m,0);
return 1;
}
//////////////////////////PLAYER SPECIFIC///////////////////////////
struct PlayerUserDatum{
char sig1,sig2,sig3,sig4;
};
Player* getPlayerFromUserData(lua_State* state,int idx){
PlayerUserDatum* ud=(PlayerUserDatum*)lua_touserdata(state,1);
//Make sure the user datum isn't null.
if(!ud) return NULL;
//Get the game state.
Game* game=dynamic_cast<Game*>(currentState);
if(game==NULL) return NULL;
Player* player=NULL;
//Check the signature to see if it's the player or the shadow.
if(ud->sig1=='P' && ud->sig2=='L' && ud->sig3=='Y' && ud->sig4=='R')
player=&game->player;
else if(ud->sig1=='S' && ud->sig2=='H' && ud->sig3=='D' && ud->sig4=='W')
player=&game->shadow;
return player;
}
int getPlayerLocation(lua_State* state){
//Make sure there's only one argument and that argument is an userdatum.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getPlayerLocation, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getPlayerLocation, expected 1.");
lua_error(state);
}
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getPlayerLocation."));
+ lua_pushstring(state,"Invalid type for argument 1 of getPlayerLocation.");
lua_error(state);
}
Player* player=getPlayerFromUserData(state,1);
if(player==NULL) return 0;
//Get the object.
lua_pushnumber(state,player->getBox().x);
lua_pushnumber(state,player->getBox().y);
return 2;
}
int setPlayerLocation(lua_State* state){
//Make sure there are three arguments, userdatum and two integers.
int args=lua_gettop(state);
if(args!=3){
- lua_pushstring(state,_("Incorrect number of arguments for setPlayerLocation, expected 3."));
+ lua_pushstring(state,"Incorrect number of arguments for setPlayerLocation, expected 3.");
lua_error(state);
}
//Check if the arguments are of the right type.
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of setPlayerLocation."));
+ lua_pushstring(state,"Invalid type for argument 1 of setPlayerLocation.");
lua_error(state);
}
if(!lua_isnumber(state,2)){
- lua_pushstring(state,_("Invalid type for argument 2 of setPlayerLocation."));
+ lua_pushstring(state,"Invalid type for argument 2 of setPlayerLocation.");
lua_error(state);
}
if(!lua_isnumber(state,3)){
- lua_pushstring(state,_("Invalid type for argument 3 of setPlayerLocation."));
+ lua_pushstring(state,"Invalid type for argument 3 of setPlayerLocation.");
lua_error(state);
}
//Get the player.
Player* player=getPlayerFromUserData(state,1);
if(player==NULL) return 0;
//Get the new location.
int x=lua_tonumber(state,2);
int y=lua_tonumber(state,3);
player->setLocation(x,y);
return 0;
}
int setPlayerJump(lua_State* state){
//Make sure there are three arguments, userdatum and one integers.
int args=lua_gettop(state);
if(args!=1 && args!=2){
- lua_pushstring(state,_("Incorrect number of arguments for setPlayerJump, expected 1 or 2."));
+ lua_pushstring(state,"Incorrect number of arguments for setPlayerJump, expected 1 or 2.");
lua_error(state);
}
//Check if the arguments are of the right type.
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of setPlayerJump."));
+ lua_pushstring(state,"Invalid type for argument 1 of setPlayerJump.");
lua_error(state);
}
if(args==2 && !lua_isnumber(state,2)){
- lua_pushstring(state,_("Invalid type for argument 2 of setPlayerJump."));
+ lua_pushstring(state,"Invalid type for argument 2 of setPlayerJump.");
lua_error(state);
}
//Get the player.
Player* player=getPlayerFromUserData(state,1);
if(player==NULL) return 0;
//Get the new location.
if(args==2){
int yVel=lua_tonumber(state,2);
player->jump(yVel);
}else{
//Use default jump strength.
player->jump();
}
return 0;
}
int isPlayerShadow(lua_State* state){
//Make sure there's only one argument and that argument is an userdatum.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for isPlayerShadow, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for isPlayerShadow, expected 1.");
lua_error(state);
}
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of isPlayerShadow."));
+ lua_pushstring(state,"Invalid type for argument 1 of isPlayerShadow.");
lua_error(state);
}
Player* player=getPlayerFromUserData(state,1);
if(player==NULL) return 0;
lua_pushboolean(state,player->isShadow());
return 1;
}
int getPlayerCurrentStand(lua_State* state){
//Get the number of args, this MUST be one.
int args=lua_gettop(state);
if(args!=1){
- lua_pushstring(state,_("Incorrect number of arguments for getPlayerCurrentStand, expected 1."));
+ lua_pushstring(state,"Incorrect number of arguments for getPlayerCurrentStand, expected 1.");
lua_error(state);
}
//Make sure the given argument is a player userdatum.
if(!lua_isuserdata(state,1)){
- lua_pushstring(state,_("Invalid type for argument 1 of getPlayerCurrentStand."));
+ lua_pushstring(state,"Invalid type for argument 1 of getPlayerCurrentStand.");
lua_error(state);
}
Player* player=getPlayerFromUserData(state,1);
if(player==NULL) return 0;
//Get the actual game object.
Block* object=player->getObjCurrentStand();
if(object==NULL){
return 0;
}
//Create the userdatum.
object->createUserData(state,"block");
//We return one object, the userdatum.
return 1;
}
//Array with the methods for the player and shadow library.
static const struct luaL_Reg playerlib_m[]={
{"getLocation",getPlayerLocation},
{"setLocation",setPlayerLocation},
{"jump",setPlayerJump},
{"isShadow",isPlayerShadow},
{"getCurrentStand",getPlayerCurrentStand},
{NULL,NULL}
};
int luaopen_player(lua_State* state){
luaL_newlib(state,playerlib_m);
//Create the metatable for the player userdata.
luaL_newmetatable(state,"player");
lua_pushstring(state,"__index");
lua_pushvalue(state,-2);
lua_settable(state,-3);
//Now create two default player user data, one for the player and one for the shadow.
PlayerUserDatum* ud=(PlayerUserDatum*)lua_newuserdata(state,sizeof(PlayerUserDatum));
ud->sig1='P';ud->sig2='L';ud->sig3='Y';ud->sig4='R';
luaL_getmetatable(state,"player");
lua_setmetatable(state,-2);
lua_setglobal(state,"player");
ud=(PlayerUserDatum*)lua_newuserdata(state,sizeof(PlayerUserDatum));
ud->sig1='S';ud->sig2='H';ud->sig3='D';ud->sig4='W';
luaL_getmetatable(state,"player");
lua_setmetatable(state,-2);
lua_setglobal(state,"shadow");
//Register the functions and methods.
luaL_setfuncs(state,playerlib_m,0);
return 1;
}
//////////////////////////LEVEL SPECIFIC///////////////////////////
int getLevelSize(lua_State* state){
//NOTE: this function accepts 0 arguments, but we ignore the argument count.
//Returns level size.
lua_pushinteger(state,LEVEL_WIDTH);
lua_pushinteger(state,LEVEL_HEIGHT);
return 2;
}
int getLevelWidth(lua_State* state){
//NOTE: this function accepts 0 arguments, but we ignore the argument count.
//Returns level size.
lua_pushinteger(state,LEVEL_WIDTH);
return 1;
}
int getLevelHeight(lua_State* state){
//NOTE: this function accepts 0 arguments, but we ignore the argument count.
//Returns level size.
lua_pushinteger(state,LEVEL_HEIGHT);
return 1;
}
int getLevelName(lua_State* state){
//NOTE: this function accepts 0 arguments, but we ignore the argument count.
//Check if the currentState is the game state.
Game* game=dynamic_cast<Game*>(currentState);
if(game==NULL) return 0;
//Returns level name.
lua_pushstring(state,game->getLevelName().c_str());
return 1;
}
//Array with the methods for the level library.
static const struct luaL_Reg levellib_m[]={
{"getSize",getLevelSize},
{"getWidth",getLevelWidth},
{"getHeight",getLevelHeight},
{"getName",getLevelName},
{NULL,NULL}
};
int luaopen_level(lua_State* state){
luaL_newlib(state,levellib_m);
//Register the functions and methods.
luaL_setfuncs(state,levellib_m,0);
return 1;
}
diff --git a/tools/messages.pot.sh b/tools/messages.pot.sh
index b960d66..0bbffb9 100644
--- a/tools/messages.pot.sh
+++ b/tools/messages.pot.sh
@@ -1,42 +1,43 @@
#!/bin/bash
# Copyright (C) 2012 Me and My Shadow
#
# This file is part of Me and My Shadow.
#
# Me and My Shadow is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Me and My Shadow is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Me and My Shadow. If not, see <http://www.gnu.org/licenses/>.
#variables
output="../data/locale/messages.pot"
-version="0.4"
+version="0.5svn"
#automatically get all string from source code
-xgettext -o ${output} -c" /" -k_ -k__ --package-name=meandmyshadow --package-version=${version} ../src/*.cpp
+# NOTE: One exception is the achievementlist.
+xgettext -o ${output} -c" /" -k_ -k__ --package-name=meandmyshadow --package-version=${version} ../src/*.cpp ../src/AchievementList.h
#little hack to get tranlator comments work
sed -i 's/#. \/ /# /g' ${output}
echo >> ${output}
#make SDL key names translatable
keys=("backspace" "tab" "clear" "return" "pause" "escape" "space" "delete" "enter" "equals"
"up" "down" "right" "left" "insert" "home" "end" "page up" "page down" "numlock" "caps lock"
"scroll lock" "right shift" "left shift" "right ctrl" "left ctrl" "right alt" "left alt"
"right meta" "left meta" "left super" "right super" "alt gr" "compose" "help" "print screen"
"sys req" "break" "menu" "power" "euro" "undo")
for i in ${!keys[*]}; do
echo "# TRANSLATORS: name of a key" >> ${output}
echo "msgid \"${keys[$i]}\"" >> ${output}
echo "msgstr \"\"" >> ${output}
echo >> ${output}
done
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Jun 17, 10:44 PM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
72671
Default Alt Text
(54 KB)
Attached To
Mode
R79 meandmyshadow
Attached
Detach File
Event Timeline