Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
132 KB
Referenced Files
None
Subscribers
None
diff --git a/data/locale/messages.pot b/data/locale/messages.pot
index c76dd37..6dc9491 100644
--- a/data/locale/messages.pot
+++ b/data/locale/messages.pot
@@ -1,2038 +1,2038 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the meandmyshadow package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: meandmyshadow 0.5svn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-08-26 22:32+0800\n"
+"POT-Creation-Date: 2018-08-29 19:12+0800\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"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: ../src/AchievementList.cpp:43
msgid "Newbie"
msgstr ""
#: ../src/AchievementList.cpp:43
msgid "Complete a level."
msgstr ""
#: ../src/AchievementList.cpp:44
msgid "Experienced player"
msgstr ""
#: ../src/AchievementList.cpp:44
msgid "Complete 50 levels."
msgstr ""
#: ../src/AchievementList.cpp:45
msgid "Good job!"
msgstr ""
#: ../src/AchievementList.cpp:45
msgid "Receive a gold medal."
msgstr ""
#: ../src/AchievementList.cpp:46
msgid "Expert"
msgstr ""
#: ../src/AchievementList.cpp:46
msgid "Earn 50 gold medal."
msgstr ""
#: ../src/AchievementList.cpp:48
msgid "Graduate"
msgstr ""
#: ../src/AchievementList.cpp:48
msgid "Complete the tutorial level pack."
msgstr ""
#: ../src/AchievementList.cpp:49
msgid "Outstanding graduate"
msgstr ""
#: ../src/AchievementList.cpp:49
msgid "Complete the tutorial level pack with gold for all levels."
msgstr ""
#: ../src/AchievementList.cpp:51
msgid "Hooked"
msgstr ""
#: ../src/AchievementList.cpp:51
msgid "Play Me and My Shadow for more than 2 hours."
msgstr ""
#: ../src/AchievementList.cpp:52
msgid "Loyal fan of Me and My Shadow"
msgstr ""
#: ../src/AchievementList.cpp:52
msgid "Play Me and My Shadow for more than 24 hours."
msgstr ""
#: ../src/AchievementList.cpp:54
msgid "Constructor"
msgstr ""
#: ../src/AchievementList.cpp:54
msgid "Use the level editor for more than 2 hours."
msgstr ""
#: ../src/AchievementList.cpp:55
msgid "The creator"
msgstr ""
#: ../src/AchievementList.cpp:55
msgid "Use the level editor for more than 24 hours."
msgstr ""
#: ../src/AchievementList.cpp:57
msgid "Look, cute level!"
msgstr ""
#: ../src/AchievementList.cpp:57
msgid "Create a level for the first time."
msgstr ""
#: ../src/AchievementList.cpp:58
msgid "The level museum"
msgstr ""
#: ../src/AchievementList.cpp:58
msgid "Create 50 levels."
msgstr ""
#: ../src/AchievementList.cpp:60
msgid "Hello, World!"
msgstr ""
#: ../src/AchievementList.cpp:60
msgid "Write a script for the first time."
msgstr ""
#: ../src/AchievementList.cpp:62
msgid "Frog"
msgstr ""
#: ../src/AchievementList.cpp:62
msgid "Jump 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:64
msgid "Wanderer"
msgstr ""
#: ../src/AchievementList.cpp:64
msgid "Travel 100 meters."
msgstr ""
#: ../src/AchievementList.cpp:65
msgid "Runner"
msgstr ""
#: ../src/AchievementList.cpp:65
msgid "Travel 1 kilometer."
msgstr ""
#: ../src/AchievementList.cpp:66
msgid "Long distance runner"
msgstr ""
#: ../src/AchievementList.cpp:66
msgid "Travel 10 kilometers."
msgstr ""
#: ../src/AchievementList.cpp:67
msgid "Marathon runner"
msgstr ""
#: ../src/AchievementList.cpp:67
msgid "Travel 42,195 meters."
msgstr ""
#: ../src/AchievementList.cpp:69
msgid "Be careful!"
msgstr ""
#: ../src/AchievementList.cpp:69
msgid "Die for the first time."
msgstr ""
#: ../src/AchievementList.cpp:70
msgid "It doesn't matter..."
msgstr ""
#: ../src/AchievementList.cpp:70
msgid "Die 50 times."
msgstr ""
#: ../src/AchievementList.cpp:71
msgid "Expert of trial and error"
msgstr ""
#: ../src/AchievementList.cpp:71
msgid "Die 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:73
msgid "Keep an eye for moving blocks!"
msgstr ""
#: ../src/AchievementList.cpp:73
msgid "Get squashed for the first time."
msgstr ""
#: ../src/AchievementList.cpp:74
msgid "Potato masher"
msgstr ""
#: ../src/AchievementList.cpp:74
msgid "Get squashed 50 times."
msgstr ""
#: ../src/AchievementList.cpp:76
msgid "Double kill"
msgstr ""
#: ../src/AchievementList.cpp:76
msgid "Get both the player and the shadow dead."
msgstr ""
#: ../src/AchievementList.cpp:78
msgid "Bad luck"
msgstr ""
#: ../src/AchievementList.cpp:78
msgid "Die 5 times in under 5 seconds."
msgstr ""
#: ../src/AchievementList.cpp:79
msgid "This level is too dangerous"
msgstr ""
#: ../src/AchievementList.cpp:79
msgid "Die 10 times in under 5 seconds."
msgstr ""
#: ../src/AchievementList.cpp:81
msgid "You forgot your friend"
msgstr ""
#: ../src/AchievementList.cpp:81
msgid "Finish the level with the player or the shadow dead."
msgstr ""
#: ../src/AchievementList.cpp:82
msgid "Just in time"
msgstr ""
#: ../src/AchievementList.cpp:82
msgid "Reach the exit with the player and the shadow simultaneously."
msgstr ""
#: ../src/AchievementList.cpp:84
msgid "Recorder"
msgstr ""
#: ../src/AchievementList.cpp:84
msgid "Record 100 times."
msgstr ""
#: ../src/AchievementList.cpp:85
msgid "Shadowmaster"
msgstr ""
#: ../src/AchievementList.cpp:85
msgid "Record 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:87
msgid "Switch puller"
msgstr ""
#: ../src/AchievementList.cpp:87
msgid "Pull the switch 100 times."
msgstr ""
#: ../src/AchievementList.cpp:88
msgid "The switch is broken!"
msgstr ""
#: ../src/AchievementList.cpp:88
msgid "Pull the switch 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:90
msgid "Swapper"
msgstr ""
#: ../src/AchievementList.cpp:90
msgid "Swap 100 times."
msgstr ""
#: ../src/AchievementList.cpp:91
msgid "Player to shadow to player to shadow..."
msgstr ""
#: ../src/AchievementList.cpp:91
msgid "Swap 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:93
msgid "Play it save"
msgstr ""
#: ../src/AchievementList.cpp:93
msgid "Save 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:94
msgid "This game is too hard"
msgstr ""
#: ../src/AchievementList.cpp:94
msgid "Load the game 1000 times."
msgstr ""
#: ../src/AchievementList.cpp:96
msgid "No, thanks"
msgstr ""
#: ../src/AchievementList.cpp:96
msgid "Complete a level with checkpoint, but without saving."
msgstr ""
#: ../src/AchievementList.cpp:98
msgid "Panic save"
msgstr ""
#: ../src/AchievementList.cpp:98
msgid "Save twice in 1 second."
msgstr ""
#: ../src/AchievementList.cpp:99
msgid "Panic load"
msgstr ""
#: ../src/AchievementList.cpp:99
msgid "Load twice in 1 second."
msgstr ""
#: ../src/AchievementList.cpp:101
msgid "Bad saving position"
msgstr ""
#: ../src/AchievementList.cpp:101
msgid "Load the game and die within 1 second."
msgstr ""
#: ../src/AchievementList.cpp:102
msgid "This level is too hard"
msgstr ""
#: ../src/AchievementList.cpp:102
msgid "Load the same save and die 100 times."
msgstr ""
#: ../src/AchievementList.cpp:104
msgid "Quick swap"
msgstr ""
#: ../src/AchievementList.cpp:104
msgid "Swap twice in under a second."
msgstr ""
#: ../src/AchievementList.cpp:107
msgid "Horizontal confusion"
msgstr ""
#: ../src/AchievementList.cpp:107
msgid "Press left and right simultaneously."
msgstr ""
#: ../src/AchievementList.cpp:109
msgid "Cheater"
msgstr ""
#: ../src/AchievementList.cpp:109
msgid "Cheat in game."
msgstr ""
#: ../src/AchievementList.cpp:111
msgid "Programmer"
msgstr ""
#: ../src/AchievementList.cpp:111
msgid "Play the development version of Me and My Shadow."
msgstr ""
#: ../src/Addons.cpp:44
msgid "Levels"
msgstr ""
#: ../src/Addons.cpp:44
msgid "Single level which usually contain demanding puzzles"
msgstr ""
#: ../src/Addons.cpp:45
msgid "Levelpacks"
msgstr ""
#: ../src/Addons.cpp:45
msgid "Collection of levels with the same author or style"
msgstr ""
#: ../src/Addons.cpp:46
msgid "Themes"
msgstr ""
#: ../src/Addons.cpp:46
msgid "Give every block and background a new look and feel"
msgstr ""
#: ../src/Addons.cpp:55 ../src/TitleMenu.cpp:46
msgid "Addons"
msgstr ""
#: ../src/Addons.cpp:87
msgid "Unable to initialize addon menu:"
msgstr ""
#: ../src/Addons.cpp:95 ../src/Addons.cpp:158 ../src/Addons.cpp:662
#: ../src/Addons.cpp:690 ../src/CreditsMenu.cpp:89 ../src/LevelSelect.cpp:168
#: ../src/StatisticsScreen.cpp:159
msgid "Back"
msgstr ""
#: ../src/Addons.cpp:169
msgid "ERROR: unable to download addons file!"
msgstr ""
# TRANSLATORS: addon_list is the name of a file and should not be translated.
#: ../src/Addons.cpp:182
msgid "ERROR: unable to load addon_list file!"
msgstr ""
#: ../src/Addons.cpp:193
msgid "ERROR: Invalid file format of addons file!"
msgstr ""
#: ../src/Addons.cpp:205
msgid "ERROR: Addon list version is unsupported!"
msgstr ""
# TRANSLATORS: installed_addons is the name of a file and should not be translated.
#: ../src/Addons.cpp:226
msgid "ERROR: Unable to create the installed_addons file."
msgstr ""
#: ../src/Addons.cpp:238
msgid "ERROR: Invalid file format of the installed_addons!"
msgstr ""
# TRANSLATORS: indicates the author of an addon.
#: ../src/Addons.cpp:389 ../src/Addons.cpp:621
#, c-format
msgid "by %s"
msgstr ""
#: ../src/Addons.cpp:397
msgid "Installed"
msgstr ""
#: ../src/Addons.cpp:402
msgid "Updatable"
msgstr ""
#: ../src/Addons.cpp:412
msgid "Not installed"
msgstr ""
#: ../src/Addons.cpp:625
#, c-format
msgid "Version: %d\n"
msgstr ""
#: ../src/Addons.cpp:627
#, c-format
msgid "Installed version: %d\n"
msgstr ""
#: ../src/Addons.cpp:630
#, c-format
msgid "License: %s\n"
msgstr ""
#: ../src/Addons.cpp:633
#, c-format
msgid "Website: %s\n"
msgstr ""
#: ../src/Addons.cpp:637
msgid "(No descriptions provided)"
msgstr ""
#: ../src/Addons.cpp:657 ../src/Addons.cpp:684
msgid "Remove"
msgstr ""
#: ../src/Addons.cpp:673
msgid "Update"
msgstr ""
#: ../src/Addons.cpp:679
msgid "Install"
msgstr ""
#: ../src/Addons.cpp:774
#, c-format
msgid "This addon can't be removed because it's needed by %s."
msgstr ""
#: ../src/Addons.cpp:774 ../src/Addons.cpp:1051
msgid "Dependency"
msgstr ""
#: ../src/Addons.cpp:803
#, c-format
msgid "WARNING: File '%s' appears to have been removed already."
msgstr ""
#: ../src/Addons.cpp:803 ../src/Addons.cpp:810 ../src/Addons.cpp:818
#: ../src/Addons.cpp:825 ../src/Addons.cpp:834 ../src/Addons.cpp:840
#: ../src/Addons.cpp:859 ../src/Addons.cpp:866 ../src/Addons.cpp:893
#: ../src/Addons.cpp:900 ../src/Addons.cpp:907 ../src/Addons.cpp:918
#: ../src/Addons.cpp:947 ../src/Addons.cpp:952 ../src/Addons.cpp:962
#: ../src/Addons.cpp:968 ../src/Addons.cpp:981 ../src/Addons.cpp:986
#: ../src/Addons.cpp:1008 ../src/Addons.cpp:1014 ../src/Addons.cpp:1044
msgid "Addon error"
msgstr ""
#: ../src/Addons.cpp:810
#, c-format
msgid "ERROR: Unable to remove file '%s'!"
msgstr ""
#: ../src/Addons.cpp:818
#, c-format
msgid "WARNING: Directory '%s' appears to have been removed already."
msgstr ""
#: ../src/Addons.cpp:825
#, c-format
msgid "ERROR: Unable to remove directory '%s'!"
msgstr ""
#: ../src/Addons.cpp:834
#, c-format
msgid "WARNING: Level '%s' appears to have been removed already."
msgstr ""
#: ../src/Addons.cpp:840
#, c-format
msgid "ERROR: Unable to remove level '%s'!"
msgstr ""
#: ../src/Addons.cpp:859
#, c-format
msgid "WARNING: Levelpack directory '%s' appears to have been removed already."
msgstr ""
#: ../src/Addons.cpp:866
#, c-format
msgid "ERROR: Unable to remove levelpack directory '%s'!"
msgstr ""
#: ../src/Addons.cpp:893
#, c-format
msgid "ERROR: Unable to download addon file %s."
msgstr ""
#: ../src/Addons.cpp:900
#, c-format
msgid "ERROR: Unable to extract addon file %s."
msgstr ""
#: ../src/Addons.cpp:907
msgid "ERROR: Addon is missing metadata!"
msgstr ""
#: ../src/Addons.cpp:918
msgid "ERROR: Invalid file format for metadata file!"
msgstr ""
#: ../src/Addons.cpp:947
#, c-format
msgid "WARNING: File '%s' already exists, addon may be broken or not working!"
msgstr ""
#: ../src/Addons.cpp:952
#, c-format
msgid ""
"WARNING: Unable to copy file '%s' to '%s', addon may be broken or not "
"working!"
msgstr ""
#: ../src/Addons.cpp:962
#, c-format
msgid ""
"WARNING: Destination directory '%s' already exists, addon may be broken or "
"not working!"
msgstr ""
#: ../src/Addons.cpp:968 ../src/Addons.cpp:1014
#, c-format
msgid ""
"WARNING: Unable to move directory '%s' to '%s', addon may be broken or not "
"working!"
msgstr ""
#: ../src/Addons.cpp:981
#, c-format
msgid "WARNING: Level '%s' already exists, addon may be broken or not working!"
msgstr ""
#: ../src/Addons.cpp:986
#, c-format
msgid ""
"WARNING: Unable to copy level '%s' to '%s', addon may be broken or not "
"working!"
msgstr ""
#: ../src/Addons.cpp:1008
#, c-format
msgid ""
"WARNING: Levelpack directory '%s' already exists, addon may be broken or not "
"working!"
msgstr ""
#: ../src/Addons.cpp:1044
#, c-format
msgid "ERROR: Addon requires another addon (%s) which can't be found!"
msgstr ""
#: ../src/Addons.cpp:1051
#, c-format
msgid "The addon %s is needed and will be installed now."
msgstr ""
#: ../src/Block.cpp:822 ../src/LevelEditor.cpp:265
msgid "On"
msgstr ""
#: ../src/Block.cpp:823 ../src/LevelEditor.cpp:266
msgid "Off"
msgstr ""
#: ../src/CommandManager.cpp:41
#, c-format
msgid "Undo %s"
msgstr ""
#: ../src/CommandManager.cpp:43
msgid "Can't undo"
msgstr ""
#: ../src/CommandManager.cpp:49
#, c-format
msgid "Redo %s"
msgstr ""
#: ../src/CommandManager.cpp:51
msgid "Can't redo"
msgstr ""
#: ../src/Commands.cpp:189
msgid "Resize level"
msgstr ""
#: ../src/Commands.cpp:805
msgid "Modify level property"
msgstr ""
#: ../src/Commands.cpp:915
#, c-format
msgid "Add scenery layer %s"
msgstr ""
#: ../src/Commands.cpp:915
#, c-format
msgid "Delete scenery layer %s"
msgstr ""
#: ../src/Commands.cpp:944
#, c-format
msgid "Modify the property of scenery layer %s"
msgstr ""
#: ../src/Commands.cpp:1032
#, c-format
-msgid "Move %d objects from layer %s to layer %s"
+msgid "Move %d object from layer %s to layer %s"
msgid_plural "Move %d objects from layer %s to layer %s"
msgstr[0] ""
msgstr[1] ""
#: ../src/CreditsMenu.cpp:35 ../src/TitleMenu.cpp:53
msgid "Credits"
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:566 ../src/Functions.cpp:567 ../src/Functions.cpp:568
-#: ../src/Functions.cpp:585
+#: ../src/Functions.cpp:569 ../src/Functions.cpp:570 ../src/Functions.cpp:571
+#: ../src/Functions.cpp:588
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:572
+#: ../src/Functions.cpp:575
msgid "Blokletters-Viltstift"
msgstr ""
-#: ../src/Functions.cpp:671
+#: ../src/Functions.cpp:674
msgid "Loading..."
msgstr ""
-#: ../src/Functions.cpp:1241 ../src/Functions.cpp:1268
+#: ../src/Functions.cpp:1244 ../src/Functions.cpp:1271
#: ../src/LevelEditor.cpp:559 ../src/LevelEditor.cpp:693
#: ../src/LevelEditor.cpp:758 ../src/LevelEditor.cpp:821
#: ../src/LevelEditor.cpp:908 ../src/LevelEditor.cpp:1033
#: ../src/LevelEditor.cpp:1083 ../src/LevelEditor.cpp:1180
-#: ../src/LevelEditor.cpp:1244 ../src/LevelEditor.cpp:2901
+#: ../src/LevelEditor.cpp:1244 ../src/LevelEditor.cpp:2902
#: ../src/LevelEditSelect.cpp:243 ../src/LevelEditSelect.cpp:275
#: ../src/LevelEditSelect.cpp:315
msgid "OK"
msgstr ""
-#: ../src/Functions.cpp:1242 ../src/Functions.cpp:1254
-#: ../src/Functions.cpp:1264 ../src/LevelEditor.cpp:565
+#: ../src/Functions.cpp:1245 ../src/Functions.cpp:1257
+#: ../src/Functions.cpp:1267 ../src/LevelEditor.cpp:565
#: ../src/LevelEditor.cpp:699 ../src/LevelEditor.cpp:764
#: ../src/LevelEditor.cpp:827 ../src/LevelEditor.cpp:914
#: ../src/LevelEditor.cpp:1039 ../src/LevelEditor.cpp:1089
#: ../src/LevelEditor.cpp:1186 ../src/LevelEditor.cpp:1250
-#: ../src/LevelEditor.cpp:2907 ../src/LevelEditSelect.cpp:247
+#: ../src/LevelEditor.cpp:2908 ../src/LevelEditSelect.cpp:247
#: ../src/LevelEditSelect.cpp:279 ../src/LevelEditSelect.cpp:319
#: ../src/OptionsMenu.cpp:289
msgid "Cancel"
msgstr ""
-#: ../src/Functions.cpp:1246
+#: ../src/Functions.cpp:1249
msgid "Abort"
msgstr ""
-#: ../src/Functions.cpp:1247 ../src/Functions.cpp:1263
+#: ../src/Functions.cpp:1250 ../src/Functions.cpp:1266
msgid "Retry"
msgstr ""
-#: ../src/Functions.cpp:1248
+#: ../src/Functions.cpp:1251
msgid "Ignore"
msgstr ""
-#: ../src/Functions.cpp:1252 ../src/Functions.cpp:1258
+#: ../src/Functions.cpp:1255 ../src/Functions.cpp:1261
msgid "Yes"
msgstr ""
-#: ../src/Functions.cpp:1253 ../src/Functions.cpp:1259
+#: ../src/Functions.cpp:1256 ../src/Functions.cpp:1262
msgid "No"
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:281 ../src/Game.cpp:1237
+#: ../src/Game.cpp:280 ../src/Game.cpp:1236
#, 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:916
+#: ../src/Game.cpp:915
#, 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:921
+#: ../src/Game.cpp:920
#, 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:926
+#: ../src/Game.cpp:925
#, 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:931
+#: ../src/Game.cpp:930
#, 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:973
+#: ../src/Game.cpp:972
#, 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:984
+#: ../src/Game.cpp:983
#, c-format
msgid "Press %s to restart current level."
msgstr ""
-#: ../src/Game.cpp:997
+#: ../src/Game.cpp:996
msgid "Your shadow has died."
msgstr ""
-#: ../src/Game.cpp:1053
+#: ../src/Game.cpp:1052
#, c-format
msgid "%d recording"
msgid_plural "%d recordings"
msgstr[0] ""
msgstr[1] ""
-#: ../src/Game.cpp:1225
+#: ../src/Game.cpp:1224
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:1292
+#: ../src/Game.cpp:1291
#, 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:1301
+#: ../src/Game.cpp:1300
#, c-format
msgid "Best time: %-.2fs"
msgstr ""
-#: ../src/Game.cpp:1312
+#: ../src/Game.cpp:1311
#, 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:1333
+#: ../src/Game.cpp:1332
#, 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:1341
+#: ../src/Game.cpp:1340
#, c-format
msgid "Best recordings: %d"
msgstr ""
-#: ../src/Game.cpp:1351
+#: ../src/Game.cpp:1350
#, 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:1364
+#: ../src/Game.cpp:1363
#, c-format
msgid "You earned the %s medal"
msgstr ""
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "GOLD"
msgstr ""
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "SILVER"
msgstr ""
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "BRONZE"
msgstr ""
# TRANSLATORS: used as return to the level selector menu
-#: ../src/Game.cpp:1391
+#: ../src/Game.cpp:1390
msgid "Menu"
msgstr ""
# TRANSLATORS: used as restart level
-#: ../src/Game.cpp:1398 ../src/InputManager.cpp:47
+#: ../src/Game.cpp:1397 ../src/InputManager.cpp:47
msgid "Restart"
msgstr ""
# TRANSLATORS: used as next level
-#: ../src/Game.cpp:1405
+#: ../src/Game.cpp:1404
msgid "Next"
msgstr ""
-#: ../src/Game.cpp:1431
+#: ../src/Game.cpp:1430
msgid "Game replay is done."
msgstr ""
-#: ../src/Game.cpp:1431
+#: ../src/Game.cpp:1430
msgid "Game Replay"
msgstr ""
-#: ../src/Game.cpp:1768 ../src/Game.cpp:1770
+#: ../src/Game.cpp:1767 ../src/Game.cpp:1769
msgid "Congratulations"
msgstr ""
-#: ../src/Game.cpp:1770
+#: ../src/Game.cpp:1769
msgid "You have finished the levelpack!"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Up (in menu)"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Down (in menu)"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Left"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Right"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Jump"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Action"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Space (Record)"
msgstr ""
#: ../src/InputManager.cpp:46
msgid "Cancel recording"
msgstr ""
#: ../src/InputManager.cpp:47
msgid "Escape"
msgstr ""
#: ../src/InputManager.cpp:47
msgid "Tab (View shadow/Level prop.)"
msgstr ""
#: ../src/InputManager.cpp:47
msgid "Save game (in editor)"
msgstr ""
#: ../src/InputManager.cpp:47
msgid "Load game"
msgstr ""
#: ../src/InputManager.cpp:47
msgid "Swap (in editor)"
msgstr ""
#: ../src/InputManager.cpp:48
msgid "Teleport (in editor)"
msgstr ""
#: ../src/InputManager.cpp:48
msgid "Suicide (in editor)"
msgstr ""
#: ../src/InputManager.cpp:48
msgid "Shift (in editor)"
msgstr ""
#: ../src/InputManager.cpp:48
msgid "Next block type (in Editor)"
msgstr ""
#: ../src/InputManager.cpp:49
msgid "Previous block type (in editor)"
msgstr ""
#: ../src/InputManager.cpp:49
msgid "Select (in menu)"
msgstr ""
# TRANSLAOTRS: This is used when the name of the key code is not found.
#: ../src/InputManager.cpp:156
#, c-format
msgid "(Key %d)"
msgstr ""
#: ../src/InputManager.cpp:163
#, c-format
msgid "Joystick axis %d %s"
msgstr ""
#: ../src/InputManager.cpp:166
#, c-format
msgid "Joystick button %d"
msgstr ""
#: ../src/InputManager.cpp:171
#, c-format
msgid "Joystick hat %d left"
msgstr ""
#: ../src/InputManager.cpp:174
#, c-format
msgid "Joystick hat %d right"
msgstr ""
#: ../src/InputManager.cpp:177
#, c-format
msgid "Joystick hat %d up"
msgstr ""
#: ../src/InputManager.cpp:180
#, c-format
msgid "Joystick hat %d down"
msgstr ""
# TRANSLAOTRS: This is used when the JOYSTICK_HAT value is invalid.
#: ../src/InputManager.cpp:185
#, c-format
msgid "Joystick hat %d %d"
msgstr ""
#: ../src/InputManager.cpp:202
msgid "OR"
msgstr ""
#: ../src/InputManager.cpp:416
msgid "Select an item and press a key to change it."
msgstr ""
#: ../src/InputManager.cpp:419
msgid "Press backspace to clear the selected item."
msgstr ""
#: ../src/LevelEditor.cpp:56
msgid "Block"
msgstr ""
#: ../src/LevelEditor.cpp:56
msgid "Player Start"
msgstr ""
#: ../src/LevelEditor.cpp:56
msgid "Shadow Start"
msgstr ""
#: ../src/LevelEditor.cpp:57
msgid "Exit"
msgstr ""
#: ../src/LevelEditor.cpp:57
msgid "Shadow Block"
msgstr ""
#: ../src/LevelEditor.cpp:57
msgid "Spikes"
msgstr ""
#: ../src/LevelEditor.cpp:58
msgid "Checkpoint"
msgstr ""
#: ../src/LevelEditor.cpp:58 ../src/LevelEditSelect.cpp:310
msgid "Swap"
msgstr ""
#: ../src/LevelEditor.cpp:58
msgid "Fragile"
msgstr ""
#: ../src/LevelEditor.cpp:59
msgid "Moving Block"
msgstr ""
#: ../src/LevelEditor.cpp:59
msgid "Moving Shadow Block"
msgstr ""
#: ../src/LevelEditor.cpp:59
msgid "Moving Spikes"
msgstr ""
#: ../src/LevelEditor.cpp:60
msgid "Teleporter"
msgstr ""
#: ../src/LevelEditor.cpp:60
msgid "Button"
msgstr ""
#: ../src/LevelEditor.cpp:60
msgid "Switch"
msgstr ""
#: ../src/LevelEditor.cpp:61
msgid "Conveyor Belt"
msgstr ""
#: ../src/LevelEditor.cpp:61
msgid "Shadow Conveyor Belt"
msgstr ""
#: ../src/LevelEditor.cpp:61
msgid "Notification Block"
msgstr ""
#: ../src/LevelEditor.cpp:61
msgid "Collectable"
msgstr ""
#: ../src/LevelEditor.cpp:61
msgid "Pushable"
msgstr ""
#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:310
msgid "Select"
msgstr ""
#: ../src/LevelEditor.cpp:65
msgid "Add"
msgstr ""
#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:311
msgid "Delete"
msgstr ""
#: ../src/LevelEditor.cpp:65 ../src/LevelPlaySelect.cpp:66
#: ../src/TitleMenu.cpp:43
msgid "Play"
msgstr ""
-#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:2830
+#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:2831
msgid "Level settings"
msgstr ""
#: ../src/LevelEditor.cpp:65
msgid "Save level"
msgstr ""
#: ../src/LevelEditor.cpp:65
msgid "Back to menu"
msgstr ""
#: ../src/LevelEditor.cpp:65
msgid "Configure"
msgstr ""
#: ../src/LevelEditor.cpp:84
#, c-format
msgid "%s (Scenery)"
msgstr ""
#: ../src/LevelEditor.cpp:267
msgid "Toggle"
msgstr ""
#: ../src/LevelEditor.cpp:270
msgid "Complete"
msgstr ""
#: ../src/LevelEditor.cpp:271
msgid "One step"
msgstr ""
#: ../src/LevelEditor.cpp:272
msgid "Two steps"
msgstr ""
#: ../src/LevelEditor.cpp:273
msgid "Gone"
msgstr ""
#: ../src/LevelEditor.cpp:291
msgid "Negative infinity"
msgstr ""
#: ../src/LevelEditor.cpp:293
msgid "Zero"
msgstr ""
#: ../src/LevelEditor.cpp:295
msgid "Level size"
msgstr ""
#: ../src/LevelEditor.cpp:297
msgid "Positive infinity"
msgstr ""
#: ../src/LevelEditor.cpp:299
msgid "Default"
msgstr ""
#: ../src/LevelEditor.cpp:308
msgid "Deselect"
msgstr ""
#: ../src/LevelEditor.cpp:318 ../src/LevelEditor.cpp:1136
#, c-format
msgid "Horizontal repeat start: %s"
msgstr ""
#: ../src/LevelEditor.cpp:320 ../src/LevelEditor.cpp:1137
#, c-format
msgid "Horizontal repeat end: %s"
msgstr ""
#: ../src/LevelEditor.cpp:322 ../src/LevelEditor.cpp:1138
#, c-format
msgid "Vertical repeat start: %s"
msgstr ""
#: ../src/LevelEditor.cpp:324 ../src/LevelEditor.cpp:1139
#, c-format
msgid "Vertical repeat end: %s"
msgstr ""
#: ../src/LevelEditor.cpp:329 ../src/LevelEditor.cpp:1150
msgid "Custom scenery"
msgstr ""
#: ../src/LevelEditor.cpp:335 ../src/LevelEditor.cpp:600
#: ../src/LevelEditor.cpp:602
msgid "Visible"
msgstr ""
#: ../src/LevelEditor.cpp:344
msgid "Link"
msgstr ""
#: ../src/LevelEditor.cpp:345
msgid "Remove Links"
msgstr ""
#: ../src/LevelEditor.cpp:349 ../src/LevelEditor.cpp:624
#: ../src/LevelEditor.cpp:626
msgid "Automatic"
msgstr ""
#: ../src/LevelEditor.cpp:359 ../src/LevelEditor.cpp:649
#, c-format
msgid "Behavior: %s"
msgstr ""
#: ../src/LevelEditor.cpp:362
msgid "Path"
msgstr ""
#: ../src/LevelEditor.cpp:363
msgid "Remove Path"
msgstr ""
#: ../src/LevelEditor.cpp:365 ../src/LevelEditor.cpp:371
#: ../src/LevelEditor.cpp:587 ../src/LevelEditor.cpp:589
msgid "Activated"
msgstr ""
#: ../src/LevelEditor.cpp:366 ../src/LevelEditor.cpp:612
#: ../src/LevelEditor.cpp:614
msgid "Looping"
msgstr ""
-#: ../src/LevelEditor.cpp:372 ../src/LevelEditor.cpp:3504
+#: ../src/LevelEditor.cpp:372 ../src/LevelEditor.cpp:3505
msgid "Speed"
msgstr ""
#: ../src/LevelEditor.cpp:378 ../src/LevelEditor.cpp:668
#, c-format
msgid "State: %s"
msgstr ""
-#: ../src/LevelEditor.cpp:382 ../src/LevelEditor.cpp:3489
+#: ../src/LevelEditor.cpp:382 ../src/LevelEditor.cpp:3490
msgid "Message"
msgstr ""
#: ../src/LevelEditor.cpp:384 ../src/LevelEditor.cpp:1202
-#: ../src/LevelEditor.cpp:3803
+#: ../src/LevelEditor.cpp:3804
msgid "Appearance"
msgstr ""
#: ../src/LevelEditor.cpp:389 ../src/LevelEditor.cpp:431
#: ../src/LevelEditor.cpp:715
msgid "Scripting"
msgstr ""
#: ../src/LevelEditor.cpp:402 ../src/LevelEditor.cpp:867
#: ../src/LevelEditor.cpp:885
#, c-format
msgid "Background layer: %s"
msgstr ""
#: ../src/LevelEditor.cpp:409 ../src/LevelEditor.cpp:866
#: ../src/LevelEditor.cpp:884
msgid "Blocks layer"
msgstr ""
#: ../src/LevelEditor.cpp:417 ../src/LevelEditor.cpp:867
#: ../src/LevelEditor.cpp:885
#, c-format
msgid "Foreground layer: %s"
msgstr ""
#: ../src/LevelEditor.cpp:423
msgid "Add new layer"
msgstr ""
#: ../src/LevelEditor.cpp:424
msgid "Delete selected layer"
msgstr ""
#: ../src/LevelEditor.cpp:425
msgid "Configure selected layer"
msgstr ""
#: ../src/LevelEditor.cpp:426
msgid "Move selected object to layer"
msgstr ""
#: ../src/LevelEditor.cpp:430 ../src/OptionsMenu.cpp:55
msgid "Settings"
msgstr ""
#: ../src/LevelEditor.cpp:463
msgid ""
"NOTE: the layers are sorted by name alphabetically.\n"
"The layer is background layer if its name is < 'f'\n"
"by dictionary order, otherwise it's foreground layer."
msgstr ""
#: ../src/LevelEditor.cpp:539
msgid "Notification block"
msgstr ""
#: ../src/LevelEditor.cpp:545
msgid "Enter message here:"
msgstr ""
#: ../src/LevelEditor.cpp:646
msgid "Behavior"
msgstr ""
#: ../src/LevelEditor.cpp:665
msgid "State"
msgstr ""
#: ../src/LevelEditor.cpp:673
msgid "Conveyor belt speed"
msgstr ""
#: ../src/LevelEditor.cpp:679
msgid "Enter speed here:"
msgstr ""
#: ../src/LevelEditor.cpp:690
msgid "NOTE: 1 Speed = 0.08 block/s"
msgstr ""
#: ../src/LevelEditor.cpp:721
msgid "Id:"
msgstr ""
#: ../src/LevelEditor.cpp:787
msgid "Level Scripting"
msgstr ""
#: ../src/LevelEditor.cpp:892
msgid "Add layer"
msgstr ""
#: ../src/LevelEditor.cpp:898
msgid "Enter the layer name:"
msgstr ""
#: ../src/LevelEditor.cpp:943
#, c-format
msgid "Are you sure you want to delete layer '%s'?"
msgstr ""
#: ../src/LevelEditor.cpp:944
msgid "Delete layer"
msgstr ""
#: ../src/LevelEditor.cpp:968
msgid "Layer settings"
msgstr ""
#: ../src/LevelEditor.cpp:974
msgid "Layer name:"
msgstr ""
#: ../src/LevelEditor.cpp:989
msgid "Layer moving speed (1 speed = 0.8 block/s):"
msgstr ""
#: ../src/LevelEditor.cpp:1010
msgid "Speed of following camera:"
msgstr ""
#: ../src/LevelEditor.cpp:1062
msgid "Move to layer"
msgstr ""
#: ../src/LevelEditor.cpp:1068
msgid "Enter the layer name (create new layer if necessary):"
msgstr ""
#: ../src/LevelEditor.cpp:1132
msgid "Repeat mode"
msgstr ""
#: ../src/LevelEditor.cpp:1156
msgid "Custom scenery:"
msgstr ""
#: ../src/LevelEditor.cpp:1219
msgid "(Use the default appearance for this block)"
msgstr ""
#: ../src/LevelEditor.cpp:1464 ../src/LevelEditor.cpp:1704
-#: ../src/LevelEditor.cpp:1717 ../src/LevelEditor.cpp:1752
-#: ../src/LevelEditor.cpp:4378
+#: ../src/LevelEditor.cpp:1717 ../src/LevelEditor.cpp:1753
+#: ../src/LevelEditor.cpp:4379
msgid "Custom scenery block"
msgstr ""
#: ../src/LevelEditor.cpp:1672
msgid "Toolbox"
msgstr ""
#: ../src/LevelEditor.cpp:1704
#, c-format
msgid "Resize %s"
msgstr ""
#: ../src/LevelEditor.cpp:1704
#, c-format
msgid "Move %s"
msgstr ""
#: ../src/LevelEditor.cpp:1709
#, c-format
msgid "Move %d object"
msgid_plural "Move %d objects"
msgstr[0] ""
msgstr[1] ""
#: ../src/LevelEditor.cpp:1717
#, c-format
msgid "Add %s"
msgstr ""
#: ../src/LevelEditor.cpp:1717
#, c-format
msgid "Remove %s"
msgstr ""
#: ../src/LevelEditor.cpp:1722
#, c-format
msgid "Add %d object"
msgid_plural "Add %d objects"
msgstr[0] ""
msgstr[1] ""
-#: ../src/LevelEditor.cpp:1722
+#: ../src/LevelEditor.cpp:1723
#, c-format
msgid "Remove %d object"
msgid_plural "Remove %d objects"
msgstr[0] ""
msgstr[1] ""
-#: ../src/LevelEditor.cpp:1728
+#: ../src/LevelEditor.cpp:1729
#, c-format
msgid "Add path to %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1728
+#: ../src/LevelEditor.cpp:1729
#, c-format
msgid "Remove a path point from %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1733
+#: ../src/LevelEditor.cpp:1734
#, c-format
msgid "Remove all paths from %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1738
+#: ../src/LevelEditor.cpp:1739
#, c-format
msgid "Add link from %s to %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1743
+#: ../src/LevelEditor.cpp:1744
#, c-format
msgid "Remove all links from %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1749
+#: ../src/LevelEditor.cpp:1750
msgid "Modify the %2 property of %1"
msgstr ""
-#: ../src/LevelEditor.cpp:1797
+#: ../src/LevelEditor.cpp:1798
#, c-format
msgid "Edit the script of %s"
msgstr ""
-#: ../src/LevelEditor.cpp:1799
+#: ../src/LevelEditor.cpp:1800
msgid "Edit the script of level"
msgstr ""
-#: ../src/LevelEditor.cpp:2124 ../src/LevelEditor.cpp:2204
+#: ../src/LevelEditor.cpp:2125 ../src/LevelEditor.cpp:2205
msgid "The level has unsaved changes."
msgstr ""
-#: ../src/LevelEditor.cpp:2128 ../src/LevelEditor.cpp:2206
+#: ../src/LevelEditor.cpp:2129 ../src/LevelEditor.cpp:2207
msgid "Are you sure you want to quit?"
msgstr ""
-#: ../src/LevelEditor.cpp:2128 ../src/LevelEditor.cpp:2206
+#: ../src/LevelEditor.cpp:2129 ../src/LevelEditor.cpp:2207
msgid "Quit prompt"
msgstr ""
-#: ../src/LevelEditor.cpp:2775 ../src/LevelEditor.cpp:2777
+#: ../src/LevelEditor.cpp:2776 ../src/LevelEditor.cpp:2778
#, c-format
msgid "Level \"%s\" saved"
msgstr ""
-#: ../src/LevelEditor.cpp:2775 ../src/LevelEditor.cpp:2777
+#: ../src/LevelEditor.cpp:2776 ../src/LevelEditor.cpp:2778
msgid "Saved"
msgstr ""
-#: ../src/LevelEditor.cpp:2837 ../src/LevelEditSelect.cpp:207
+#: ../src/LevelEditor.cpp:2838 ../src/LevelEditSelect.cpp:207
msgid "Name:"
msgstr ""
-#: ../src/LevelEditor.cpp:2844
+#: ../src/LevelEditor.cpp:2845
msgid "Theme:"
msgstr ""
-#: ../src/LevelEditor.cpp:2851
+#: ../src/LevelEditor.cpp:2852
msgid "Examples: %DATA%/themes/classic"
msgstr ""
-#: ../src/LevelEditor.cpp:2853
+#: ../src/LevelEditor.cpp:2854
msgid "or %USER%/themes/Orange"
msgstr ""
-#: ../src/LevelEditor.cpp:2856
+#: ../src/LevelEditor.cpp:2857
msgid "Music:"
msgstr ""
-#: ../src/LevelEditor.cpp:2865
+#: ../src/LevelEditor.cpp:2866
msgid "Target time (s):"
msgstr ""
-#: ../src/LevelEditor.cpp:2881
+#: ../src/LevelEditor.cpp:2882
msgid "Target recordings:"
msgstr ""
-#: ../src/LevelEditor.cpp:2897
+#: ../src/LevelEditor.cpp:2898
msgid "Restart level editor is required"
msgstr ""
-#: ../src/LevelEditor.cpp:3657 ../src/LevelEditor.cpp:3696
-#: ../src/LevelEditor.cpp:3717
+#: ../src/LevelEditor.cpp:3658 ../src/LevelEditor.cpp:3697
+#: ../src/LevelEditor.cpp:3718
msgid "Please enter a layer name."
msgstr ""
-#: ../src/LevelEditor.cpp:3657 ../src/LevelEditor.cpp:3661
-#: ../src/LevelEditor.cpp:3696 ../src/LevelEditor.cpp:3700
-#: ../src/LevelEditor.cpp:3717 ../src/LevelEditor.cpp:3721
+#: ../src/LevelEditor.cpp:3658 ../src/LevelEditor.cpp:3662
+#: ../src/LevelEditor.cpp:3697 ../src/LevelEditor.cpp:3701
+#: ../src/LevelEditor.cpp:3718 ../src/LevelEditor.cpp:3722
#: ../src/LevelEditSelect.cpp:727
msgid "Error"
msgstr ""
-#: ../src/LevelEditor.cpp:3661 ../src/LevelEditor.cpp:3700
+#: ../src/LevelEditor.cpp:3662 ../src/LevelEditor.cpp:3701
#, c-format
msgid "The layer '%s' already exists."
msgstr ""
-#: ../src/LevelEditor.cpp:3721
+#: ../src/LevelEditor.cpp:3722
msgid "Source and destination layers are the same."
msgstr ""
-#: ../src/LevelEditor.cpp:3738
+#: ../src/LevelEditor.cpp:3739
msgid "Scenery"
msgstr ""
-#: ../src/LevelEditor.cpp:4168 ../src/LevelEditor.cpp:4196
+#: ../src/LevelEditor.cpp:4169 ../src/LevelEditor.cpp:4197
#, c-format
msgid "Speed: %d = %0.2f block/s"
msgstr ""
-#: ../src/LevelEditor.cpp:4181
+#: ../src/LevelEditor.cpp:4182
msgid "Stop at this point"
msgstr ""
-#: ../src/LevelEditor.cpp:4186
+#: ../src/LevelEditor.cpp:4187
#, c-format
msgid "Pause: %d = %0.3fs"
msgstr ""
#: ../src/LevelEditSelect.cpp:41 ../src/TitleMenu.cpp:45
msgid "Map Editor"
msgstr ""
#: ../src/LevelEditSelect.cpp:66
msgid "New Levelpack"
msgstr ""
#: ../src/LevelEditSelect.cpp:71
msgid "Pack Properties"
msgstr ""
#: ../src/LevelEditSelect.cpp:76
msgid "Remove Pack"
msgstr ""
#: ../src/LevelEditSelect.cpp:81
msgid "Move Map"
msgstr ""
#: ../src/LevelEditSelect.cpp:89
msgid "Remove Map"
msgstr ""
#: ../src/LevelEditSelect.cpp:94
msgid "Edit Map"
msgstr ""
#: ../src/LevelEditSelect.cpp:204
msgid "Properties"
msgstr ""
#: ../src/LevelEditSelect.cpp:216
msgid "Description:"
msgstr ""
#: ../src/LevelEditSelect.cpp:225
msgid "Congratulation text:"
msgstr ""
#: ../src/LevelEditSelect.cpp:234
msgid "Music list:"
msgstr ""
#: ../src/LevelEditSelect.cpp:263 ../src/LevelEditSelect.cpp:481
msgid "Add level"
msgstr ""
#: ../src/LevelEditSelect.cpp:266
msgid "File name:"
msgstr ""
#: ../src/LevelEditSelect.cpp:291
msgid "Move level"
msgstr ""
#: ../src/LevelEditSelect.cpp:294
msgid "Level: "
msgstr ""
#: ../src/LevelEditSelect.cpp:308
msgid "Before"
msgstr ""
#: ../src/LevelEditSelect.cpp:309
msgid "After"
msgstr ""
#: ../src/LevelEditSelect.cpp:540
#, c-format
msgid "Are you sure remove the level pack '%s'?"
msgstr ""
#: ../src/LevelEditSelect.cpp:540 ../src/LevelEditSelect.cpp:568
msgid "Remove prompt"
msgstr ""
#: ../src/LevelEditSelect.cpp:568
#, c-format
msgid "Are you sure remove the map '%s'?"
msgstr ""
#: ../src/LevelEditSelect.cpp:689
msgid "No file name given for the new level."
msgstr ""
#: ../src/LevelEditSelect.cpp:689
msgid "Missing file name"
msgstr ""
#: ../src/LevelEditSelect.cpp:727
#, c-format
msgid "The file %s already exists."
msgstr ""
#: ../src/LevelEditSelect.cpp:780
msgid "The entered level number isn't valid!"
msgstr ""
#: ../src/LevelEditSelect.cpp:780
msgid "Illegal number"
msgstr ""
#: ../src/LevelInfoRender.cpp:19
msgid "Choose a level"
msgstr ""
#: ../src/LevelInfoRender.cpp:20
msgid "Time:"
msgstr ""
#: ../src/LevelInfoRender.cpp:21 ../src/StatisticsScreen.cpp:259
msgid "Recordings:"
msgstr ""
#: ../src/LevelPlaySelect.cpp:41
msgid "Select Level"
msgstr ""
# TRANSLATORS: Used for button which clear any level progress like unlocked levels and highscores.
#: ../src/OptionsMenu.cpp:66
msgid "Clear Progress"
msgstr ""
#: ../src/OptionsMenu.cpp:109
msgid "General"
msgstr ""
#: ../src/OptionsMenu.cpp:110
msgid "Controls"
msgstr ""
#: ../src/OptionsMenu.cpp:121
msgid "Music"
msgstr ""
#: ../src/OptionsMenu.cpp:129
msgid "Sound"
msgstr ""
#: ../src/OptionsMenu.cpp:137
msgid "Resolution"
msgstr ""
#: ../src/OptionsMenu.cpp:177
msgid "Language"
msgstr ""
# TRANSLATORS: as detect user's language automatically
#: ../src/OptionsMenu.cpp:185
msgid "Auto-Detect"
msgstr ""
#: ../src/OptionsMenu.cpp:209
msgid "Theme"
msgstr ""
#: ../src/OptionsMenu.cpp:247
msgid "Internet proxy"
msgstr ""
#: ../src/OptionsMenu.cpp:256
msgid "Fullscreen"
msgstr ""
#: ../src/OptionsMenu.cpp:261
msgid "Quick record"
msgstr ""
#: ../src/OptionsMenu.cpp:266
msgid "Internet"
msgstr ""
#: ../src/OptionsMenu.cpp:271
msgid "Fade transition"
msgstr ""
#: ../src/OptionsMenu.cpp:294
msgid "Save Changes"
msgstr ""
#: ../src/OptionsMenu.cpp:513
msgid "Do you really want to reset level progress?"
msgstr ""
#: ../src/OptionsMenu.cpp:513
msgid "Warning"
msgstr ""
#: ../src/StatisticsManager.cpp:386
msgid "New achievement:"
msgstr ""
#: ../src/StatisticsManager.cpp:394
#, c-format
msgid "Achieved on %s"
msgstr ""
#: ../src/StatisticsManager.cpp:400
msgid "Unknown achievement"
msgstr ""
#: ../src/StatisticsManager.cpp:406
#, c-format
msgid "Achieved %1.0f%%"
msgstr ""
#: ../src/StatisticsManager.cpp:410
msgid "Not achieved"
msgstr ""
#: ../src/StatisticsScreen.cpp:57 ../src/TitleMenu.cpp:55
msgid "Achievements and Statistics"
msgstr ""
#: ../src/StatisticsScreen.cpp:166
msgid "Achievements"
msgstr ""
#: ../src/StatisticsScreen.cpp:167
msgid "Statistics"
msgstr ""
#: ../src/StatisticsScreen.cpp:234
msgid "Total"
msgstr ""
#: ../src/StatisticsScreen.cpp:246
msgid "Traveling distance (m)"
msgstr ""
#: ../src/StatisticsScreen.cpp:247
msgid "Jump times"
msgstr ""
#: ../src/StatisticsScreen.cpp:248
msgid "Die times"
msgstr ""
#: ../src/StatisticsScreen.cpp:249
msgid "Squashed times"
msgstr ""
#: ../src/StatisticsScreen.cpp:260
msgid "Switch pulled times:"
msgstr ""
#: ../src/StatisticsScreen.cpp:261
msgid "Swap times:"
msgstr ""
#: ../src/StatisticsScreen.cpp:262
msgid "Save times:"
msgstr ""
#: ../src/StatisticsScreen.cpp:263
msgid "Load times:"
msgstr ""
#: ../src/StatisticsScreen.cpp:268
msgid "Completed levels:"
msgstr ""
#: ../src/StatisticsScreen.cpp:306
msgid "In-game time:"
msgstr ""
#: ../src/StatisticsScreen.cpp:308
msgid "Level editing time:"
msgstr ""
#: ../src/StatisticsScreen.cpp:310
msgid "Created levels:"
msgstr ""
#: ../src/TitleMenu.cpp:44
msgid "Options"
msgstr ""
#: ../src/TitleMenu.cpp:47
msgid "Quit"
msgstr ""
#: ../src/TitleMenu.cpp:131
msgid "Enable internet in order to install addons."
msgstr ""
#: ../src/TitleMenu.cpp:131
msgid "Internet disabled"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Return"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Escape"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Backspace"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Tab"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Space"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "CapsLock"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PrintScreen"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "ScrollLock"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Pause"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Insert"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Home"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PageUp"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Delete"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "End"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PageDown"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Down"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Up"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Numlock"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "SysReq"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Ctrl"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Shift"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Alt"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left GUI"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Ctrl"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Shift"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Alt"
msgstr ""
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right GUI"
msgstr ""
diff --git a/data/locale/zh_CN.po b/data/locale/zh_CN.po
index 20926e2..3d52396 100644
--- a/data/locale/zh_CN.po
+++ b/data/locale/zh_CN.po
@@ -1,2353 +1,2353 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the meandmyshadow package.
# user <acme_pjz@hotmail.com>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: meandmyshadow 0.5svn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-08-26 22:32+0800\n"
-"PO-Revision-Date: 2018-08-29 19:01+0800\n"
+"POT-Creation-Date: 2018-08-29 19:12+0800\n"
+"PO-Revision-Date: 2018-08-29 19:13+0800\n"
"Last-Translator: acme_pjz <acme_pjz@hotmail.com>\n"
"Language-Team: Jz Pan\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.1.1\n"
#: ../src/AchievementList.cpp:43
msgid "Newbie"
msgstr "新手"
#: ../src/AchievementList.cpp:43
msgid "Complete a level."
msgstr "完成一个关卡。"
#: ../src/AchievementList.cpp:44
msgid "Experienced player"
msgstr "有经验的玩家"
#: ../src/AchievementList.cpp:44
msgid "Complete 50 levels."
msgstr "完成 50 个关卡。"
#: ../src/AchievementList.cpp:45
msgid "Good job!"
msgstr "干得好!"
#: ../src/AchievementList.cpp:45
msgid "Receive a gold medal."
msgstr "获得一个金牌。"
#: ../src/AchievementList.cpp:46
msgid "Expert"
msgstr "专家"
#: ../src/AchievementList.cpp:46
msgid "Earn 50 gold medal."
msgstr "获得 50 个金牌。"
#: ../src/AchievementList.cpp:48
msgid "Graduate"
msgstr "毕业生"
#: ../src/AchievementList.cpp:48
msgid "Complete the tutorial level pack."
msgstr "完成教程关卡包。"
#: ../src/AchievementList.cpp:49
msgid "Outstanding graduate"
msgstr "优秀毕业生"
#: ../src/AchievementList.cpp:49
msgid "Complete the tutorial level pack with gold for all levels."
msgstr "以全部金牌的成绩完成教学关卡包。"
#: ../src/AchievementList.cpp:51
msgid "Hooked"
msgstr "入迷"
#: ../src/AchievementList.cpp:51
msgid "Play Me and My Shadow for more than 2 hours."
msgstr "玩 Me and My Shadow 超过 2 小时。"
#: ../src/AchievementList.cpp:52
msgid "Loyal fan of Me and My Shadow"
msgstr "Me and My Shadow 忠实粉丝"
#: ../src/AchievementList.cpp:52
msgid "Play Me and My Shadow for more than 24 hours."
msgstr "玩 Me and My Shadow 超过 24 小时。"
#: ../src/AchievementList.cpp:54
msgid "Constructor"
msgstr "建造师"
#: ../src/AchievementList.cpp:54
msgid "Use the level editor for more than 2 hours."
msgstr "使用地图编辑器超过 2 小时。"
#: ../src/AchievementList.cpp:55
msgid "The creator"
msgstr "造物主"
#: ../src/AchievementList.cpp:55
msgid "Use the level editor for more than 24 hours."
msgstr "使用地图编辑器超过 24 小时。"
#: ../src/AchievementList.cpp:57
msgid "Look, cute level!"
msgstr "看,可爱的关卡!"
#: ../src/AchievementList.cpp:57
msgid "Create a level for the first time."
msgstr "第一次创建关卡。"
#: ../src/AchievementList.cpp:58
msgid "The level museum"
msgstr "关卡博物馆"
#: ../src/AchievementList.cpp:58
msgid "Create 50 levels."
msgstr "创建 50 个关卡。"
#: ../src/AchievementList.cpp:60
msgid "Hello, World!"
msgstr "你好,世界!"
#: ../src/AchievementList.cpp:60
msgid "Write a script for the first time."
msgstr "第一次写脚本。"
#: ../src/AchievementList.cpp:62
msgid "Frog"
msgstr "青蛙"
#: ../src/AchievementList.cpp:62
msgid "Jump 1000 times."
msgstr "跳跃 1000 次。"
#: ../src/AchievementList.cpp:64
msgid "Wanderer"
msgstr "漫步者"
#: ../src/AchievementList.cpp:64
msgid "Travel 100 meters."
msgstr "旅行 100 米。"
#: ../src/AchievementList.cpp:65
msgid "Runner"
msgstr "跑步者"
#: ../src/AchievementList.cpp:65
msgid "Travel 1 kilometer."
msgstr "旅行 1 千米。"
#: ../src/AchievementList.cpp:66
msgid "Long distance runner"
msgstr "长跑者"
#: ../src/AchievementList.cpp:66
msgid "Travel 10 kilometers."
msgstr "旅行 10 千米。"
#: ../src/AchievementList.cpp:67
msgid "Marathon runner"
msgstr "马拉松运动员"
#: ../src/AchievementList.cpp:67
msgid "Travel 42,195 meters."
msgstr "旅行 42,195 米。"
#: ../src/AchievementList.cpp:69
msgid "Be careful!"
msgstr "小心!"
#: ../src/AchievementList.cpp:69
msgid "Die for the first time."
msgstr "第一次死掉。"
#: ../src/AchievementList.cpp:70
msgid "It doesn't matter..."
msgstr "没关系……"
#: ../src/AchievementList.cpp:70
msgid "Die 50 times."
msgstr "死掉 50 次。"
#: ../src/AchievementList.cpp:71
msgid "Expert of trial and error"
msgstr "试错专家"
#: ../src/AchievementList.cpp:71
msgid "Die 1000 times."
msgstr "死掉 1000 次。"
#: ../src/AchievementList.cpp:73
msgid "Keep an eye for moving blocks!"
msgstr "小心移动方块!"
#: ../src/AchievementList.cpp:73
msgid "Get squashed for the first time."
msgstr "第一次被夹死。"
#: ../src/AchievementList.cpp:74
msgid "Potato masher"
msgstr "马铃薯捣碎器"
#: ../src/AchievementList.cpp:74
msgid "Get squashed 50 times."
msgstr "被夹死 50 次。"
#: ../src/AchievementList.cpp:76
msgid "Double kill"
msgstr "双重击杀"
#: ../src/AchievementList.cpp:76
msgid "Get both the player and the shadow dead."
msgstr "让玩家和阴影都死掉。"
#: ../src/AchievementList.cpp:78
msgid "Bad luck"
msgstr "运气不好"
#: ../src/AchievementList.cpp:78
msgid "Die 5 times in under 5 seconds."
msgstr "在 5 秒之内死掉 5 次。"
#: ../src/AchievementList.cpp:79
msgid "This level is too dangerous"
msgstr "这关太危险了"
#: ../src/AchievementList.cpp:79
msgid "Die 10 times in under 5 seconds."
msgstr "在 5 秒之内死掉 10 次。"
#: ../src/AchievementList.cpp:81
msgid "You forgot your friend"
msgstr "你忘了你的伙伴"
#: ../src/AchievementList.cpp:81
msgid "Finish the level with the player or the shadow dead."
msgstr "在玩家或者阴影死掉的情况下完成关卡。"
#: ../src/AchievementList.cpp:82
msgid "Just in time"
msgstr "准时到达"
#: ../src/AchievementList.cpp:82
msgid "Reach the exit with the player and the shadow simultaneously."
msgstr "玩家和阴影同时到达终点。"
#: ../src/AchievementList.cpp:84
msgid "Recorder"
msgstr "记录员"
#: ../src/AchievementList.cpp:84
msgid "Record 100 times."
msgstr "记录 100 次。"
#: ../src/AchievementList.cpp:85
msgid "Shadowmaster"
msgstr "影子大师"
#: ../src/AchievementList.cpp:85
msgid "Record 1000 times."
msgstr "记录 1000 次。"
#: ../src/AchievementList.cpp:87
msgid "Switch puller"
msgstr "拨弄开关"
#: ../src/AchievementList.cpp:87
msgid "Pull the switch 100 times."
msgstr "使用开关 100 次。"
#: ../src/AchievementList.cpp:88
msgid "The switch is broken!"
msgstr "开关坏掉了!"
#: ../src/AchievementList.cpp:88
msgid "Pull the switch 1000 times."
msgstr "使用开关 1000 次。"
#: ../src/AchievementList.cpp:90
msgid "Swapper"
msgstr "交换者"
#: ../src/AchievementList.cpp:90
msgid "Swap 100 times."
msgstr "交换 100 次。"
#: ../src/AchievementList.cpp:91
msgid "Player to shadow to player to shadow..."
msgstr "玩家到阴影再到玩家再到阴影…"
#: ../src/AchievementList.cpp:91
msgid "Swap 1000 times."
msgstr "交换 1000 次。"
#: ../src/AchievementList.cpp:93
msgid "Play it save"
msgstr "安全游戏"
#: ../src/AchievementList.cpp:93
msgid "Save 1000 times."
msgstr "保存进度 1000 次。"
#: ../src/AchievementList.cpp:94
msgid "This game is too hard"
msgstr "这游戏太难了"
#: ../src/AchievementList.cpp:94
msgid "Load the game 1000 times."
msgstr "读取进度 1000 次。"
#: ../src/AchievementList.cpp:96
msgid "No, thanks"
msgstr "不用,谢谢"
#: ../src/AchievementList.cpp:96
msgid "Complete a level with checkpoint, but without saving."
msgstr "完成一个有记录点的关卡,但是没有使用保存进度功能。"
#: ../src/AchievementList.cpp:98
msgid "Panic save"
msgstr "慌张地保存"
#: ../src/AchievementList.cpp:98
msgid "Save twice in 1 second."
msgstr "在 1 秒之内保存两次。"
#: ../src/AchievementList.cpp:99
msgid "Panic load"
msgstr "慌张地读取"
#: ../src/AchievementList.cpp:99
msgid "Load twice in 1 second."
msgstr "在 1 秒之内读取两次。"
#: ../src/AchievementList.cpp:101
msgid "Bad saving position"
msgstr "糟糕的存盘位置"
#: ../src/AchievementList.cpp:101
msgid "Load the game and die within 1 second."
msgstr "读取进度并在 1 秒之内死掉。"
#: ../src/AchievementList.cpp:102
msgid "This level is too hard"
msgstr "这一关太难了"
#: ../src/AchievementList.cpp:102
msgid "Load the same save and die 100 times."
msgstr "读取一个相同进度并死掉 100 次。"
#: ../src/AchievementList.cpp:104
msgid "Quick swap"
msgstr "快速交换"
#: ../src/AchievementList.cpp:104
msgid "Swap twice in under a second."
msgstr "在一秒之内交换两次。"
#: ../src/AchievementList.cpp:107
msgid "Horizontal confusion"
msgstr "横向混乱"
#: ../src/AchievementList.cpp:107
msgid "Press left and right simultaneously."
msgstr "同时按下左和右方向键。"
#: ../src/AchievementList.cpp:109
msgid "Cheater"
msgstr "作弊者"
#: ../src/AchievementList.cpp:109
msgid "Cheat in game."
msgstr "在游戏中作弊。"
#: ../src/AchievementList.cpp:111
msgid "Programmer"
msgstr "程序员"
#: ../src/AchievementList.cpp:111
msgid "Play the development version of Me and My Shadow."
msgstr "玩 Me and My Shadow 的开发版本。"
#: ../src/Addons.cpp:44
msgid "Levels"
msgstr "关卡"
#: ../src/Addons.cpp:44
msgid "Single level which usually contain demanding puzzles"
msgstr "单个关卡,里面通常包含高难谜题"
#: ../src/Addons.cpp:45
msgid "Levelpacks"
msgstr "关卡包"
#: ../src/Addons.cpp:45
msgid "Collection of levels with the same author or style"
msgstr "相同作者或风格的关卡构成的集合"
#: ../src/Addons.cpp:46
msgid "Themes"
msgstr "主题"
#: ../src/Addons.cpp:46
msgid "Give every block and background a new look and feel"
msgstr "为每个方块和背景赋予新的外观"
#: ../src/Addons.cpp:55 ../src/TitleMenu.cpp:46
msgid "Addons"
msgstr "附加组件"
#: ../src/Addons.cpp:87
msgid "Unable to initialize addon menu:"
msgstr "不能初始化附加组件菜单:"
#: ../src/Addons.cpp:95 ../src/Addons.cpp:158 ../src/Addons.cpp:662
#: ../src/Addons.cpp:690 ../src/CreditsMenu.cpp:89 ../src/LevelSelect.cpp:168
#: ../src/StatisticsScreen.cpp:159
msgid "Back"
msgstr "后退"
#: ../src/Addons.cpp:169
msgid "ERROR: unable to download addons file!"
msgstr "错误: 无法下载附加组件!"
# TRANSLATORS: addon_list is the name of a file and should not be translated.
#: ../src/Addons.cpp:182
msgid "ERROR: unable to load addon_list file!"
msgstr "错误: 无法加载文件 addon_list!"
#: ../src/Addons.cpp:193
msgid "ERROR: Invalid file format of addons file!"
msgstr "错误: 文件 addons 的格式无效!"
#: ../src/Addons.cpp:205
msgid "ERROR: Addon list version is unsupported!"
msgstr "错误: 附加组件列表的版本是不支持的!"
# TRANSLATORS: installed_addons is the name of a file and should not be translated.
# TRANSLATORS: installed_addons is the name of a file and should not be
# translated.
#: ../src/Addons.cpp:226
msgid "ERROR: Unable to create the installed_addons file."
msgstr "错误: 无法创建文件 installed_addons。"
#: ../src/Addons.cpp:238
msgid "ERROR: Invalid file format of the installed_addons!"
msgstr "错误: 文件 installed_addons 的格式无效!"
# TRANSLATORS: indicates the author of an addon.
#: ../src/Addons.cpp:389 ../src/Addons.cpp:621
#, c-format
msgid "by %s"
msgstr "作者 %s"
#: ../src/Addons.cpp:397
msgid "Installed"
msgstr "已安装"
#: ../src/Addons.cpp:402
msgid "Updatable"
msgstr "可更新"
#: ../src/Addons.cpp:412
msgid "Not installed"
msgstr "未安装"
#: ../src/Addons.cpp:625
#, c-format
msgid "Version: %d\n"
msgstr "版本: %d\n"
#: ../src/Addons.cpp:627
#, c-format
msgid "Installed version: %d\n"
msgstr "已安装的版本: %d\n"
#: ../src/Addons.cpp:630
#, c-format
msgid "License: %s\n"
msgstr "授权: %s\n"
#: ../src/Addons.cpp:633
#, c-format
msgid "Website: %s\n"
msgstr "网址: %s\n"
#: ../src/Addons.cpp:637
msgid "(No descriptions provided)"
msgstr "(没有提供说明)"
#: ../src/Addons.cpp:657 ../src/Addons.cpp:684
msgid "Remove"
msgstr "移除"
#: ../src/Addons.cpp:673
msgid "Update"
msgstr "更新"
#: ../src/Addons.cpp:679
msgid "Install"
msgstr "安装"
#: ../src/Addons.cpp:774
#, c-format
msgid "This addon can't be removed because it's needed by %s."
msgstr "此附加组件无法移除,因为它被 %s 所依赖。"
#: ../src/Addons.cpp:774 ../src/Addons.cpp:1051
msgid "Dependency"
msgstr "依赖项"
#: ../src/Addons.cpp:803
#, c-format
msgid "WARNING: File '%s' appears to have been removed already."
msgstr "警告:文件 '%s' 似乎已经被移除。"
#: ../src/Addons.cpp:803 ../src/Addons.cpp:810 ../src/Addons.cpp:818
#: ../src/Addons.cpp:825 ../src/Addons.cpp:834 ../src/Addons.cpp:840
#: ../src/Addons.cpp:859 ../src/Addons.cpp:866 ../src/Addons.cpp:893
#: ../src/Addons.cpp:900 ../src/Addons.cpp:907 ../src/Addons.cpp:918
#: ../src/Addons.cpp:947 ../src/Addons.cpp:952 ../src/Addons.cpp:962
#: ../src/Addons.cpp:968 ../src/Addons.cpp:981 ../src/Addons.cpp:986
#: ../src/Addons.cpp:1008 ../src/Addons.cpp:1014 ../src/Addons.cpp:1044
msgid "Addon error"
msgstr "附加组件错误"
#: ../src/Addons.cpp:810
#, c-format
msgid "ERROR: Unable to remove file '%s'!"
msgstr "错误:无法移除文件 '%s'!"
#: ../src/Addons.cpp:818
#, c-format
msgid "WARNING: Directory '%s' appears to have been removed already."
msgstr "警告:文件夹 '%s' 似乎已经被移除。"
#: ../src/Addons.cpp:825
#, c-format
msgid "ERROR: Unable to remove directory '%s'!"
msgstr "错误:无法移除文件夹 '%s'!"
#: ../src/Addons.cpp:834
#, c-format
msgid "WARNING: Level '%s' appears to have been removed already."
msgstr "警告:关卡 '%s' 似乎已经被移除。"
#: ../src/Addons.cpp:840
#, c-format
msgid "ERROR: Unable to remove level '%s'!"
msgstr "错误:无法移除关卡 '%s'!"
#: ../src/Addons.cpp:859
#, c-format
msgid "WARNING: Levelpack directory '%s' appears to have been removed already."
msgstr "警告:关卡包文件夹 '%s' 似乎已经被移除。"
#: ../src/Addons.cpp:866
#, c-format
msgid "ERROR: Unable to remove levelpack directory '%s'!"
msgstr "错误:无法移除关卡包文件夹 '%s'!"
#: ../src/Addons.cpp:893
#, c-format
msgid "ERROR: Unable to download addon file %s."
msgstr "错误:无法下载附加组件 %s。"
#: ../src/Addons.cpp:900
#, c-format
msgid "ERROR: Unable to extract addon file %s."
msgstr "错误:无法解压附加组件 %s。"
#: ../src/Addons.cpp:907
msgid "ERROR: Addon is missing metadata!"
msgstr "错误:附加组件缺少 metadata 文件!"
#: ../src/Addons.cpp:918
msgid "ERROR: Invalid file format for metadata file!"
msgstr "错误:附加组件 metadata 文件的格式无效!"
#: ../src/Addons.cpp:947
#, c-format
msgid "WARNING: File '%s' already exists, addon may be broken or not working!"
msgstr "警告:文件 '%s' 已经存在,附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:952
#, c-format
msgid ""
"WARNING: Unable to copy file '%s' to '%s', addon may be broken or not "
"working!"
msgstr "警告:无法复制文件 '%s' 到 '%s',附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:962
#, c-format
msgid ""
"WARNING: Destination directory '%s' already exists, addon may be broken or "
"not working!"
msgstr "警告:目标文件夹 '%s' 已经存在,附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:968 ../src/Addons.cpp:1014
#, c-format
msgid ""
"WARNING: Unable to move directory '%s' to '%s', addon may be broken or not "
"working!"
msgstr "警告:无法移动文件夹 '%s' 到 '%s',附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:981
#, c-format
msgid "WARNING: Level '%s' already exists, addon may be broken or not working!"
msgstr "警告:关卡 '%s' 已经存在,附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:986
#, c-format
msgid ""
"WARNING: Unable to copy level '%s' to '%s', addon may be broken or not "
"working!"
msgstr "警告:无法复制关卡 '%s' 到 '%s',附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:1008
#, c-format
msgid ""
"WARNING: Levelpack directory '%s' already exists, addon may be broken or not "
"working!"
msgstr "警告:关卡包文件夹 '%s' 已经存在,附加组件可能损坏或无法使用!"
#: ../src/Addons.cpp:1044
#, c-format
msgid "ERROR: Addon requires another addon (%s) which can't be found!"
msgstr "错误:附加组件依赖另一个附加组件 (%s) 但是无法找到!"
#: ../src/Addons.cpp:1051
#, c-format
msgid "The addon %s is needed and will be installed now."
msgstr "附加组件 %s 是依赖项,将会被安装。"
#: ../src/Block.cpp:822 ../src/LevelEditor.cpp:265
msgid "On"
msgstr "开启"
#: ../src/Block.cpp:823 ../src/LevelEditor.cpp:266
msgid "Off"
msgstr "关闭"
#: ../src/CommandManager.cpp:41
#, c-format
msgid "Undo %s"
msgstr "撤消 %s"
#: ../src/CommandManager.cpp:43
msgid "Can't undo"
msgstr "不能撤消"
#: ../src/CommandManager.cpp:49
#, c-format
msgid "Redo %s"
msgstr "重做 %s"
#: ../src/CommandManager.cpp:51
msgid "Can't redo"
msgstr "不能重做"
#: ../src/Commands.cpp:189
msgid "Resize level"
msgstr "改变关卡大小"
#: ../src/Commands.cpp:805
msgid "Modify level property"
msgstr "修改关卡属性"
#: ../src/Commands.cpp:915
#, c-format
msgid "Add scenery layer %s"
msgstr "添加风景图层 %s"
#: ../src/Commands.cpp:915
#, c-format
msgid "Delete scenery layer %s"
msgstr "删除风景图层 %s"
#: ../src/Commands.cpp:944
#, c-format
msgid "Modify the property of scenery layer %s"
msgstr "修改风景图层 %s 的属性"
#: ../src/Commands.cpp:1032
#, c-format
-msgid "Move %d objects from layer %s to layer %s"
+msgid "Move %d object from layer %s to layer %s"
msgid_plural "Move %d objects from layer %s to layer %s"
msgstr[0] "将 %d 个对象从图层 %s 移动到图层 %s"
#: ../src/CreditsMenu.cpp:35 ../src/TitleMenu.cpp:53
msgid "Credits"
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:566 ../src/Functions.cpp:567 ../src/Functions.cpp:568
-#: ../src/Functions.cpp:585
+#: ../src/Functions.cpp:569 ../src/Functions.cpp:570 ../src/Functions.cpp:571
+#: ../src/Functions.cpp:588
msgid "knewave"
msgstr "DroidSansFallback"
# 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
# - Use "Blokletters-Viltstift" for languages using Latin and Latin-derived
# alphabets
-#: ../src/Functions.cpp:572
+#: ../src/Functions.cpp:575
msgid "Blokletters-Viltstift"
msgstr "DroidSansFallback"
-#: ../src/Functions.cpp:671
+#: ../src/Functions.cpp:674
msgid "Loading..."
msgstr "正在读取..."
-#: ../src/Functions.cpp:1241 ../src/Functions.cpp:1268
+#: ../src/Functions.cpp:1244 ../src/Functions.cpp:1271
#: ../src/LevelEditor.cpp:559 ../src/LevelEditor.cpp:693
#: ../src/LevelEditor.cpp:758 ../src/LevelEditor.cpp:821
#: ../src/LevelEditor.cpp:908 ../src/LevelEditor.cpp:1033
#: ../src/LevelEditor.cpp:1083 ../src/LevelEditor.cpp:1180
-#: ../src/LevelEditor.cpp:1244 ../src/LevelEditor.cpp:2901
+#: ../src/LevelEditor.cpp:1244 ../src/LevelEditor.cpp:2902
#: ../src/LevelEditSelect.cpp:243 ../src/LevelEditSelect.cpp:275
#: ../src/LevelEditSelect.cpp:315
msgid "OK"
msgstr "确定"
-#: ../src/Functions.cpp:1242 ../src/Functions.cpp:1254
-#: ../src/Functions.cpp:1264 ../src/LevelEditor.cpp:565
+#: ../src/Functions.cpp:1245 ../src/Functions.cpp:1257
+#: ../src/Functions.cpp:1267 ../src/LevelEditor.cpp:565
#: ../src/LevelEditor.cpp:699 ../src/LevelEditor.cpp:764
#: ../src/LevelEditor.cpp:827 ../src/LevelEditor.cpp:914
#: ../src/LevelEditor.cpp:1039 ../src/LevelEditor.cpp:1089
#: ../src/LevelEditor.cpp:1186 ../src/LevelEditor.cpp:1250
-#: ../src/LevelEditor.cpp:2907 ../src/LevelEditSelect.cpp:247
+#: ../src/LevelEditor.cpp:2908 ../src/LevelEditSelect.cpp:247
#: ../src/LevelEditSelect.cpp:279 ../src/LevelEditSelect.cpp:319
#: ../src/OptionsMenu.cpp:289
msgid "Cancel"
msgstr "取消"
-#: ../src/Functions.cpp:1246
+#: ../src/Functions.cpp:1249
msgid "Abort"
msgstr "终止"
-#: ../src/Functions.cpp:1247 ../src/Functions.cpp:1263
+#: ../src/Functions.cpp:1250 ../src/Functions.cpp:1266
msgid "Retry"
msgstr "重试"
-#: ../src/Functions.cpp:1248
+#: ../src/Functions.cpp:1251
msgid "Ignore"
msgstr "忽略"
-#: ../src/Functions.cpp:1252 ../src/Functions.cpp:1258
+#: ../src/Functions.cpp:1255 ../src/Functions.cpp:1261
msgid "Yes"
msgstr "是"
-#: ../src/Functions.cpp:1253 ../src/Functions.cpp:1259
+#: ../src/Functions.cpp:1256 ../src/Functions.cpp:1262
msgid "No"
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:281 ../src/Game.cpp:1237
+#: ../src/Game.cpp:280 ../src/Game.cpp:1236
#, c-format
msgid "Level %d %s"
msgstr "第 %d 关 %s"
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:916
+#: ../src/Game.cpp:915
#, c-format
msgid "Press %s key to save the game."
msgstr "按 %s 键来保存游戏。"
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:921
+#: ../src/Game.cpp:920
#, c-format
msgid "Press %s key to swap the position of player and shadow."
msgstr "按 %s 键交换你和阴影的位置。"
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:926
+#: ../src/Game.cpp:925
#, c-format
msgid "Press %s key to activate the switch."
msgstr "按 %s 键来激活开关。"
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with current action key
-#: ../src/Game.cpp:931
+#: ../src/Game.cpp:930
#, c-format
msgid "Press %s key to teleport."
msgstr "按 %s 键传送。"
# 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:973
+#: ../src/Game.cpp:972
#, c-format
msgid "Press %s to restart current level or press %s to load the game."
msgstr "按 %s 键重新开始游戏,或者按 %s 键读取进度。"
# TRANSLATORS: Please do not remove %s from your translation:
# - %s will be replaced with currently configured key to restart game
-#: ../src/Game.cpp:984
+#: ../src/Game.cpp:983
#, c-format
msgid "Press %s to restart current level."
msgstr "按 %s 键重新开始游戏。"
-#: ../src/Game.cpp:997
+#: ../src/Game.cpp:996
msgid "Your shadow has died."
msgstr "你的阴影死掉了。"
-#: ../src/Game.cpp:1053
+#: ../src/Game.cpp:1052
#, c-format
msgid "%d recording"
msgid_plural "%d recordings"
msgstr[0] "记录数 %d"
-#: ../src/Game.cpp:1225
+#: ../src/Game.cpp:1224
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:1292
+#: ../src/Game.cpp:1291
#, c-format
msgid "Time: %-.2fs"
msgstr "时间: %-.2f秒"
# 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:1301
+#: ../src/Game.cpp:1300
#, c-format
msgid "Best time: %-.2fs"
msgstr "最佳时间: %-.2f秒"
-#: ../src/Game.cpp:1312
+#: ../src/Game.cpp:1311
#, c-format
msgid "Target time: %-.2fs"
msgstr "目标时间: %-.2f秒"
# TRANSLATORS: Please do not remove %d from your translation:
# - %d means the number of recordings user has made
-#: ../src/Game.cpp:1333
+#: ../src/Game.cpp:1332
#, c-format
msgid "Recordings: %d"
msgstr "记录次数: %d"
# TRANSLATORS: Please do not remove %d from your translation:
# - %d means the number of recordings user has made
-#: ../src/Game.cpp:1341
+#: ../src/Game.cpp:1340
#, c-format
msgid "Best recordings: %d"
msgstr "最佳记录次数: %d"
-#: ../src/Game.cpp:1351
+#: ../src/Game.cpp:1350
#, c-format
msgid "Target recordings: %d"
msgstr "目标记录次数: %d"
# 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:1364
+#: ../src/Game.cpp:1363
#, c-format
msgid "You earned the %s medal"
msgstr "你拿到了%s"
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "GOLD"
msgstr "金牌"
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "SILVER"
msgstr "银牌"
-#: ../src/Game.cpp:1364
+#: ../src/Game.cpp:1363
msgid "BRONZE"
msgstr "铜牌"
# TRANSLATORS: used as return to the level selector menu
-#: ../src/Game.cpp:1391
+#: ../src/Game.cpp:1390
msgid "Menu"
msgstr "菜单"
# TRANSLATORS: used as restart level
-#: ../src/Game.cpp:1398 ../src/InputManager.cpp:47
+#: ../src/Game.cpp:1397 ../src/InputManager.cpp:47
msgid "Restart"
msgstr "重新开始"
# TRANSLATORS: used as next level
-#: ../src/Game.cpp:1405
+#: ../src/Game.cpp:1404
msgid "Next"
msgstr "下一关"
-#: ../src/Game.cpp:1431
+#: ../src/Game.cpp:1430
msgid "Game replay is done."
msgstr "游戏重放已经完成。"
-#: ../src/Game.cpp:1431
+#: ../src/Game.cpp:1430
msgid "Game Replay"
msgstr "游戏重放"
-#: ../src/Game.cpp:1768 ../src/Game.cpp:1770
+#: ../src/Game.cpp:1767 ../src/Game.cpp:1769
msgid "Congratulations"
msgstr "恭喜你"
-#: ../src/Game.cpp:1770
+#: ../src/Game.cpp:1769
msgid "You have finished the levelpack!"
msgstr "你已经完成了整个关卡包!"
#: ../src/InputManager.cpp:46
msgid "Up (in menu)"
msgstr "上(在菜单中)"
#: ../src/InputManager.cpp:46
msgid "Down (in menu)"
msgstr "下(在菜单中)"
# TRANSLATORS: name of a key
#: ../src/InputManager.cpp:46
msgid "Left"
msgstr "左"
# TRANSLATORS: name of a key
#: ../src/InputManager.cpp:46
msgid "Right"
msgstr "右"
#: ../src/InputManager.cpp:46
msgid "Jump"
msgstr "跳跃"
#: ../src/InputManager.cpp:46
msgid "Action"
msgstr "动作键"
#: ../src/InputManager.cpp:46
msgid "Space (Record)"
msgstr "空格(记录键)"
#: ../src/InputManager.cpp:46
msgid "Cancel recording"
msgstr "取消记录"
# TRANSLATORS: name of a key
#: ../src/InputManager.cpp:47
msgid "Escape"
msgstr "退出"
#: ../src/InputManager.cpp:47
msgid "Tab (View shadow/Level prop.)"
msgstr "Tab (切换视角/关卡属性)"
#: ../src/InputManager.cpp:47
msgid "Save game (in editor)"
msgstr "保存游戏(在地图编辑器中)"
#: ../src/InputManager.cpp:47
msgid "Load game"
msgstr "读取游戏"
#: ../src/InputManager.cpp:47
msgid "Swap (in editor)"
msgstr "交换玩家和阴影的位置(在地图编辑器中)"
#: ../src/InputManager.cpp:48
msgid "Teleport (in editor)"
msgstr "传送(在地图编辑器中)"
#: ../src/InputManager.cpp:48
msgid "Suicide (in editor)"
msgstr "自杀(在地图编辑器中)"
#: ../src/InputManager.cpp:48
msgid "Shift (in editor)"
msgstr "Shift (地图编辑器辅助按键)"
#: ../src/InputManager.cpp:48
msgid "Next block type (in Editor)"
msgstr "下一个砖块类型(在地图编辑器中)"
#: ../src/InputManager.cpp:49
msgid "Previous block type (in editor)"
msgstr "上一个砖块类型(在地图编辑器中)"
#: ../src/InputManager.cpp:49
msgid "Select (in menu)"
msgstr "选择键(在菜单中)"
# TRANSLAOTRS: This is used when the name of the key code is not found.
#: ../src/InputManager.cpp:156
#, c-format
msgid "(Key %d)"
msgstr "(按键 %d)"
#: ../src/InputManager.cpp:163
#, c-format
msgid "Joystick axis %d %s"
msgstr "手柄摇杆 %d %s"
#: ../src/InputManager.cpp:166
#, c-format
msgid "Joystick button %d"
msgstr "手柄按钮 %d"
#: ../src/InputManager.cpp:171
#, c-format
msgid "Joystick hat %d left"
msgstr "手柄帽 %d 向左"
#: ../src/InputManager.cpp:174
#, c-format
msgid "Joystick hat %d right"
msgstr "手柄帽 %d 向右"
#: ../src/InputManager.cpp:177
#, c-format
msgid "Joystick hat %d up"
msgstr "手柄帽 %d 向上"
#: ../src/InputManager.cpp:180
#, c-format
msgid "Joystick hat %d down"
msgstr "手柄帽 %d 向下"
# TRANSLAOTRS: This is used when the JOYSTICK_HAT value is invalid.
#: ../src/InputManager.cpp:185
#, c-format
msgid "Joystick hat %d %d"
msgstr "手柄帽 %d %d"
#: ../src/InputManager.cpp:202
msgid "OR"
msgstr "或"
#: ../src/InputManager.cpp:416
msgid "Select an item and press a key to change it."
msgstr "选择一个条目并按下按键来修改它。"
#: ../src/InputManager.cpp:419
msgid "Press backspace to clear the selected item."
msgstr "按 backspace 键清除选中的条目。"
#: ../src/LevelEditor.cpp:56
msgid "Block"
msgstr "砖块"
#: ../src/LevelEditor.cpp:56
msgid "Player Start"
msgstr "玩家起点"
#: ../src/LevelEditor.cpp:56
msgid "Shadow Start"
msgstr "阴影起点"
#: ../src/LevelEditor.cpp:57
msgid "Exit"
msgstr "终点"
#: ../src/LevelEditor.cpp:57
msgid "Shadow Block"
msgstr "阴影砖块"
#: ../src/LevelEditor.cpp:57
msgid "Spikes"
msgstr "带刺砖块"
#: ../src/LevelEditor.cpp:58
msgid "Checkpoint"
msgstr "记录点"
#: ../src/LevelEditor.cpp:58 ../src/LevelEditSelect.cpp:310
msgid "Swap"
msgstr "交换点"
#: ../src/LevelEditor.cpp:58
msgid "Fragile"
msgstr "易碎砖块"
#: ../src/LevelEditor.cpp:59
msgid "Moving Block"
msgstr "移动砖块"
#: ../src/LevelEditor.cpp:59
msgid "Moving Shadow Block"
msgstr "移动阴影砖块"
#: ../src/LevelEditor.cpp:59
msgid "Moving Spikes"
msgstr "移动的刺"
#: ../src/LevelEditor.cpp:60
msgid "Teleporter"
msgstr "传送点"
#: ../src/LevelEditor.cpp:60
msgid "Button"
msgstr "按钮"
#: ../src/LevelEditor.cpp:60
msgid "Switch"
msgstr "开关"
#: ../src/LevelEditor.cpp:61
msgid "Conveyor Belt"
msgstr "传送带"
#: ../src/LevelEditor.cpp:61
msgid "Shadow Conveyor Belt"
msgstr "阴影传送带"
#: ../src/LevelEditor.cpp:61
msgid "Notification Block"
msgstr "消息方块"
#: ../src/LevelEditor.cpp:61
msgid "Collectable"
msgstr "可收集的物品"
#: ../src/LevelEditor.cpp:61
msgid "Pushable"
msgstr "可推动方块"
#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:310
msgid "Select"
msgstr "选择"
#: ../src/LevelEditor.cpp:65
msgid "Add"
msgstr "添加"
# TRANSLATORS: name of a key
#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:311
msgid "Delete"
msgstr "删除"
#: ../src/LevelEditor.cpp:65 ../src/LevelPlaySelect.cpp:66
#: ../src/TitleMenu.cpp:43
msgid "Play"
msgstr "开始游戏"
-#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:2830
+#: ../src/LevelEditor.cpp:65 ../src/LevelEditor.cpp:2831
msgid "Level settings"
msgstr "关卡设置"
#: ../src/LevelEditor.cpp:65
msgid "Save level"
msgstr "保存关卡"
#: ../src/LevelEditor.cpp:65
msgid "Back to menu"
msgstr "回主菜单"
#: ../src/LevelEditor.cpp:65
msgid "Configure"
msgstr "设置"
#: ../src/LevelEditor.cpp:84
#, c-format
msgid "%s (Scenery)"
msgstr "%s (风景)"
#: ../src/LevelEditor.cpp:267
msgid "Toggle"
msgstr "切换"
#: ../src/LevelEditor.cpp:270
msgid "Complete"
msgstr "完整的"
#: ../src/LevelEditor.cpp:271
msgid "One step"
msgstr "踩了一次"
#: ../src/LevelEditor.cpp:272
msgid "Two steps"
msgstr "踩了两次"
#: ../src/LevelEditor.cpp:273
msgid "Gone"
msgstr "已经破碎"
#: ../src/LevelEditor.cpp:291
msgid "Negative infinity"
msgstr "负无穷"
#: ../src/LevelEditor.cpp:293
msgid "Zero"
msgstr "零"
#: ../src/LevelEditor.cpp:295
msgid "Level size"
msgstr "关卡大小"
#: ../src/LevelEditor.cpp:297
msgid "Positive infinity"
msgstr "正无穷"
#: ../src/LevelEditor.cpp:299
msgid "Default"
msgstr "默认"
#: ../src/LevelEditor.cpp:308
msgid "Deselect"
msgstr "取消选择"
#: ../src/LevelEditor.cpp:318 ../src/LevelEditor.cpp:1136
#, c-format
msgid "Horizontal repeat start: %s"
msgstr "水平重复起点: %s"
#: ../src/LevelEditor.cpp:320 ../src/LevelEditor.cpp:1137
#, c-format
msgid "Horizontal repeat end: %s"
msgstr "水平重复终点: %s"
#: ../src/LevelEditor.cpp:322 ../src/LevelEditor.cpp:1138
#, c-format
msgid "Vertical repeat start: %s"
msgstr "垂直重复起点: %s"
#: ../src/LevelEditor.cpp:324 ../src/LevelEditor.cpp:1139
#, c-format
msgid "Vertical repeat end: %s"
msgstr "垂直重复终点: %s"
#: ../src/LevelEditor.cpp:329 ../src/LevelEditor.cpp:1150
msgid "Custom scenery"
msgstr "自定义风景"
#: ../src/LevelEditor.cpp:335 ../src/LevelEditor.cpp:600
#: ../src/LevelEditor.cpp:602
msgid "Visible"
msgstr "可见"
#: ../src/LevelEditor.cpp:344
msgid "Link"
msgstr "链接"
#: ../src/LevelEditor.cpp:345
msgid "Remove Links"
msgstr "移除链接"
#: ../src/LevelEditor.cpp:349 ../src/LevelEditor.cpp:624
#: ../src/LevelEditor.cpp:626
msgid "Automatic"
msgstr "自动"
#: ../src/LevelEditor.cpp:359 ../src/LevelEditor.cpp:649
#, c-format
msgid "Behavior: %s"
msgstr "行为: %s"
#: ../src/LevelEditor.cpp:362
msgid "Path"
msgstr "路径"
#: ../src/LevelEditor.cpp:363
msgid "Remove Path"
msgstr "移除路径"
#: ../src/LevelEditor.cpp:365 ../src/LevelEditor.cpp:371
#: ../src/LevelEditor.cpp:587 ../src/LevelEditor.cpp:589
msgid "Activated"
msgstr "激活"
#: ../src/LevelEditor.cpp:366 ../src/LevelEditor.cpp:612
#: ../src/LevelEditor.cpp:614
msgid "Looping"
msgstr "循环"
-#: ../src/LevelEditor.cpp:372 ../src/LevelEditor.cpp:3504
+#: ../src/LevelEditor.cpp:372 ../src/LevelEditor.cpp:3505
msgid "Speed"
msgstr "速度"
#: ../src/LevelEditor.cpp:378 ../src/LevelEditor.cpp:668
#, c-format
msgid "State: %s"
msgstr "状态: %s"
-#: ../src/LevelEditor.cpp:382 ../src/LevelEditor.cpp:3489
+#: ../src/LevelEditor.cpp:382 ../src/LevelEditor.cpp:3490
msgid "Message"
msgstr "消息"
#: ../src/LevelEditor.cpp:384 ../src/LevelEditor.cpp:1202
-#: ../src/LevelEditor.cpp:3803
+#: ../src/LevelEditor.cpp:3804
msgid "Appearance"
msgstr "外观"
#: ../src/LevelEditor.cpp:389 ../src/LevelEditor.cpp:431
#: ../src/LevelEditor.cpp:715
msgid "Scripting"
msgstr "脚本"
#: ../src/LevelEditor.cpp:402 ../src/LevelEditor.cpp:867
#: ../src/LevelEditor.cpp:885
#, c-format
msgid "Background layer: %s"
msgstr "背景图层: %s"
#: ../src/LevelEditor.cpp:409 ../src/LevelEditor.cpp:866
#: ../src/LevelEditor.cpp:884
msgid "Blocks layer"
msgstr "方块图层"
#: ../src/LevelEditor.cpp:417 ../src/LevelEditor.cpp:867
#: ../src/LevelEditor.cpp:885
#, c-format
msgid "Foreground layer: %s"
msgstr "前景图层: %s"
#: ../src/LevelEditor.cpp:423
msgid "Add new layer"
msgstr "添加图层"
#: ../src/LevelEditor.cpp:424
msgid "Delete selected layer"
msgstr "删除选中图层"
#: ../src/LevelEditor.cpp:425
msgid "Configure selected layer"
msgstr "设置选中图层"
#: ../src/LevelEditor.cpp:426
msgid "Move selected object to layer"
msgstr "移动选中对象到图层"
#: ../src/LevelEditor.cpp:430 ../src/OptionsMenu.cpp:55
msgid "Settings"
msgstr "选项"
#: ../src/LevelEditor.cpp:463
msgid ""
"NOTE: the layers are sorted by name alphabetically.\n"
"The layer is background layer if its name is < 'f'\n"
"by dictionary order, otherwise it's foreground layer."
msgstr ""
"说明: 图层按照名字以字母顺序排列。\n"
"如果图层的名字按字典顺序 < 'f'\n"
"则它是背景图层,否则它是前景图层。"
#: ../src/LevelEditor.cpp:539
msgid "Notification block"
msgstr "消息方块"
#: ../src/LevelEditor.cpp:545
msgid "Enter message here:"
msgstr "输入消息:"
#: ../src/LevelEditor.cpp:646
msgid "Behavior"
msgstr "行为"
#: ../src/LevelEditor.cpp:665
msgid "State"
msgstr "状态"
#: ../src/LevelEditor.cpp:673
msgid "Conveyor belt speed"
msgstr "传送带速度"
#: ../src/LevelEditor.cpp:679
msgid "Enter speed here:"
msgstr "输入速度:"
#: ../src/LevelEditor.cpp:690
msgid "NOTE: 1 Speed = 0.08 block/s"
msgstr "说明: 速度 1 = 0.08 格/秒"
#: ../src/LevelEditor.cpp:721
msgid "Id:"
msgstr "Id:"
#: ../src/LevelEditor.cpp:787
msgid "Level Scripting"
msgstr "关卡脚本"
#: ../src/LevelEditor.cpp:892
msgid "Add layer"
msgstr "添加图层"
#: ../src/LevelEditor.cpp:898
msgid "Enter the layer name:"
msgstr "输入图层名称:"
#: ../src/LevelEditor.cpp:943
#, c-format
msgid "Are you sure you want to delete layer '%s'?"
msgstr "你确定要删除图层 '%s' 吗?"
#: ../src/LevelEditor.cpp:944
msgid "Delete layer"
msgstr "删除图层"
#: ../src/LevelEditor.cpp:968
msgid "Layer settings"
msgstr "图层设置"
#: ../src/LevelEditor.cpp:974
msgid "Layer name:"
msgstr "图层名:"
#: ../src/LevelEditor.cpp:989
msgid "Layer moving speed (1 speed = 0.8 block/s):"
msgstr "图层移动速度 (速度 1 = 0.8 格/秒):"
#: ../src/LevelEditor.cpp:1010
msgid "Speed of following camera:"
msgstr "摄像机跟随速度:"
#: ../src/LevelEditor.cpp:1062
msgid "Move to layer"
msgstr "移动到图层"
#: ../src/LevelEditor.cpp:1068
msgid "Enter the layer name (create new layer if necessary):"
msgstr "输入图层名称 (必要时创建新图层):"
#: ../src/LevelEditor.cpp:1132
msgid "Repeat mode"
msgstr "重复模式"
#: ../src/LevelEditor.cpp:1156
msgid "Custom scenery:"
msgstr "自定义风景:"
#: ../src/LevelEditor.cpp:1219
msgid "(Use the default appearance for this block)"
msgstr "(使用此方块的默认外观)"
#: ../src/LevelEditor.cpp:1464 ../src/LevelEditor.cpp:1704
-#: ../src/LevelEditor.cpp:1717 ../src/LevelEditor.cpp:1752
-#: ../src/LevelEditor.cpp:4378
+#: ../src/LevelEditor.cpp:1717 ../src/LevelEditor.cpp:1753
+#: ../src/LevelEditor.cpp:4379
msgid "Custom scenery block"
msgstr "自定义风景方块"
#: ../src/LevelEditor.cpp:1672
msgid "Toolbox"
msgstr "工具箱"
#: ../src/LevelEditor.cpp:1704
#, c-format
msgid "Resize %s"
msgstr "改变 %s 的大小"
#: ../src/LevelEditor.cpp:1704
#, c-format
msgid "Move %s"
msgstr "移动 %s"
#: ../src/LevelEditor.cpp:1709
#, c-format
msgid "Move %d object"
msgid_plural "Move %d objects"
msgstr[0] "移动 %d 个对象"
#: ../src/LevelEditor.cpp:1717
#, c-format
msgid "Add %s"
msgstr "添加 %s"
#: ../src/LevelEditor.cpp:1717
#, c-format
msgid "Remove %s"
msgstr "移除 %s"
#: ../src/LevelEditor.cpp:1722
#, c-format
msgid "Add %d object"
msgid_plural "Add %d objects"
msgstr[0] "添加 %d 个对象"
-#: ../src/LevelEditor.cpp:1722
+#: ../src/LevelEditor.cpp:1723
#, c-format
msgid "Remove %d object"
msgid_plural "Remove %d objects"
msgstr[0] "移除 %d 个对象"
-#: ../src/LevelEditor.cpp:1728
+#: ../src/LevelEditor.cpp:1729
#, c-format
msgid "Add path to %s"
msgstr "添加路径到 %s"
-#: ../src/LevelEditor.cpp:1728
+#: ../src/LevelEditor.cpp:1729
#, c-format
msgid "Remove a path point from %s"
msgstr "移除 %s 的一个路径点"
-#: ../src/LevelEditor.cpp:1733
+#: ../src/LevelEditor.cpp:1734
#, c-format
msgid "Remove all paths from %s"
msgstr "移除 %s 的所有路径"
-#: ../src/LevelEditor.cpp:1738
+#: ../src/LevelEditor.cpp:1739
#, c-format
msgid "Add link from %s to %s"
msgstr "添加从 %s 到 %s 的链接"
-#: ../src/LevelEditor.cpp:1743
+#: ../src/LevelEditor.cpp:1744
#, c-format
msgid "Remove all links from %s"
msgstr "移除 %s 的所有链接"
-#: ../src/LevelEditor.cpp:1749
+#: ../src/LevelEditor.cpp:1750
msgid "Modify the %2 property of %1"
msgstr "修改 %1 的 %2 属性"
-#: ../src/LevelEditor.cpp:1797
+#: ../src/LevelEditor.cpp:1798
#, c-format
msgid "Edit the script of %s"
msgstr "编辑 %s 的脚本"
-#: ../src/LevelEditor.cpp:1799
+#: ../src/LevelEditor.cpp:1800
msgid "Edit the script of level"
msgstr "编辑关卡脚本"
-#: ../src/LevelEditor.cpp:2124 ../src/LevelEditor.cpp:2204
+#: ../src/LevelEditor.cpp:2125 ../src/LevelEditor.cpp:2205
msgid "The level has unsaved changes."
msgstr "关卡有未保存的变更。"
-#: ../src/LevelEditor.cpp:2128 ../src/LevelEditor.cpp:2206
+#: ../src/LevelEditor.cpp:2129 ../src/LevelEditor.cpp:2207
msgid "Are you sure you want to quit?"
msgstr "你确定要退出吗?"
-#: ../src/LevelEditor.cpp:2128 ../src/LevelEditor.cpp:2206
+#: ../src/LevelEditor.cpp:2129 ../src/LevelEditor.cpp:2207
msgid "Quit prompt"
msgstr "退出提示"
-#: ../src/LevelEditor.cpp:2775 ../src/LevelEditor.cpp:2777
+#: ../src/LevelEditor.cpp:2776 ../src/LevelEditor.cpp:2778
#, c-format
msgid "Level \"%s\" saved"
msgstr "关卡“%s”已保存"
-#: ../src/LevelEditor.cpp:2775 ../src/LevelEditor.cpp:2777
+#: ../src/LevelEditor.cpp:2776 ../src/LevelEditor.cpp:2778
msgid "Saved"
msgstr "已保存"
-#: ../src/LevelEditor.cpp:2837 ../src/LevelEditSelect.cpp:207
+#: ../src/LevelEditor.cpp:2838 ../src/LevelEditSelect.cpp:207
msgid "Name:"
msgstr "名称:"
-#: ../src/LevelEditor.cpp:2844
+#: ../src/LevelEditor.cpp:2845
msgid "Theme:"
msgstr "主题:"
-#: ../src/LevelEditor.cpp:2851
+#: ../src/LevelEditor.cpp:2852
msgid "Examples: %DATA%/themes/classic"
msgstr "例子: %DATA%/themes/classic"
-#: ../src/LevelEditor.cpp:2853
+#: ../src/LevelEditor.cpp:2854
msgid "or %USER%/themes/Orange"
msgstr "或者 %USER%/themes/Orange"
-#: ../src/LevelEditor.cpp:2856
+#: ../src/LevelEditor.cpp:2857
msgid "Music:"
msgstr "音乐:"
-#: ../src/LevelEditor.cpp:2865
+#: ../src/LevelEditor.cpp:2866
msgid "Target time (s):"
msgstr "目标时间(秒):"
-#: ../src/LevelEditor.cpp:2881
+#: ../src/LevelEditor.cpp:2882
msgid "Target recordings:"
msgstr "目标记录数:"
-#: ../src/LevelEditor.cpp:2897
+#: ../src/LevelEditor.cpp:2898
msgid "Restart level editor is required"
msgstr "需要重新启动地图编辑器"
-#: ../src/LevelEditor.cpp:3657 ../src/LevelEditor.cpp:3696
-#: ../src/LevelEditor.cpp:3717
+#: ../src/LevelEditor.cpp:3658 ../src/LevelEditor.cpp:3697
+#: ../src/LevelEditor.cpp:3718
msgid "Please enter a layer name."
msgstr "请输入图层名称。"
-#: ../src/LevelEditor.cpp:3657 ../src/LevelEditor.cpp:3661
-#: ../src/LevelEditor.cpp:3696 ../src/LevelEditor.cpp:3700
-#: ../src/LevelEditor.cpp:3717 ../src/LevelEditor.cpp:3721
+#: ../src/LevelEditor.cpp:3658 ../src/LevelEditor.cpp:3662
+#: ../src/LevelEditor.cpp:3697 ../src/LevelEditor.cpp:3701
+#: ../src/LevelEditor.cpp:3718 ../src/LevelEditor.cpp:3722
#: ../src/LevelEditSelect.cpp:727
msgid "Error"
msgstr "错误"
-#: ../src/LevelEditor.cpp:3661 ../src/LevelEditor.cpp:3700
+#: ../src/LevelEditor.cpp:3662 ../src/LevelEditor.cpp:3701
#, c-format
msgid "The layer '%s' already exists."
msgstr "图层 '%s' 已经存在。"
-#: ../src/LevelEditor.cpp:3721
+#: ../src/LevelEditor.cpp:3722
msgid "Source and destination layers are the same."
msgstr "源和目标图层相同。"
-#: ../src/LevelEditor.cpp:3738
+#: ../src/LevelEditor.cpp:3739
msgid "Scenery"
msgstr "风景"
-#: ../src/LevelEditor.cpp:4168 ../src/LevelEditor.cpp:4196
+#: ../src/LevelEditor.cpp:4169 ../src/LevelEditor.cpp:4197
#, c-format
msgid "Speed: %d = %0.2f block/s"
msgstr "速度: %d = %0.2f 格/秒"
-#: ../src/LevelEditor.cpp:4181
+#: ../src/LevelEditor.cpp:4182
msgid "Stop at this point"
msgstr "在此点停止"
-#: ../src/LevelEditor.cpp:4186
+#: ../src/LevelEditor.cpp:4187
#, c-format
msgid "Pause: %d = %0.3fs"
msgstr "暂停: %d = %0.3f 秒"
#: ../src/LevelEditSelect.cpp:41 ../src/TitleMenu.cpp:45
msgid "Map Editor"
msgstr "地图编辑器"
#: ../src/LevelEditSelect.cpp:66
msgid "New Levelpack"
msgstr "新建关卡包"
#: ../src/LevelEditSelect.cpp:71
msgid "Pack Properties"
msgstr "关卡包属性"
#: ../src/LevelEditSelect.cpp:76
msgid "Remove Pack"
msgstr "删除关卡包"
#: ../src/LevelEditSelect.cpp:81
msgid "Move Map"
msgstr "移动地图"
#: ../src/LevelEditSelect.cpp:89
msgid "Remove Map"
msgstr "删除地图"
#: ../src/LevelEditSelect.cpp:94
msgid "Edit Map"
msgstr "编辑地图"
#: ../src/LevelEditSelect.cpp:204
msgid "Properties"
msgstr "属性"
#: ../src/LevelEditSelect.cpp:216
msgid "Description:"
msgstr "描述:"
#: ../src/LevelEditSelect.cpp:225
msgid "Congratulation text:"
msgstr "完成提示:"
#: ../src/LevelEditSelect.cpp:234
msgid "Music list:"
msgstr "音乐列表:"
#: ../src/LevelEditSelect.cpp:263 ../src/LevelEditSelect.cpp:481
msgid "Add level"
msgstr "增加关卡"
#: ../src/LevelEditSelect.cpp:266
msgid "File name:"
msgstr "文件名:"
#: ../src/LevelEditSelect.cpp:291
msgid "Move level"
msgstr "移动关卡"
#: ../src/LevelEditSelect.cpp:294
msgid "Level: "
msgstr "关卡: "
#: ../src/LevelEditSelect.cpp:308
msgid "Before"
msgstr "之前"
#: ../src/LevelEditSelect.cpp:309
msgid "After"
msgstr "之后"
#: ../src/LevelEditSelect.cpp:540
#, c-format
msgid "Are you sure remove the level pack '%s'?"
msgstr "你确定要删除关卡包 '%s' 吗?"
#: ../src/LevelEditSelect.cpp:540 ../src/LevelEditSelect.cpp:568
msgid "Remove prompt"
msgstr "删除提示"
#: ../src/LevelEditSelect.cpp:568
#, c-format
msgid "Are you sure remove the map '%s'?"
msgstr "你确定要删除关卡 '%s' 吗?"
#: ../src/LevelEditSelect.cpp:689
msgid "No file name given for the new level."
msgstr "没有给新关卡指定文件名。"
#: ../src/LevelEditSelect.cpp:689
msgid "Missing file name"
msgstr "文件名未指定"
#: ../src/LevelEditSelect.cpp:727
#, c-format
msgid "The file %s already exists."
msgstr "文件 %s 已经存在。"
#: ../src/LevelEditSelect.cpp:780
msgid "The entered level number isn't valid!"
msgstr "输入的关卡编号无效!"
#: ../src/LevelEditSelect.cpp:780
msgid "Illegal number"
msgstr "无效编号"
#: ../src/LevelInfoRender.cpp:19
msgid "Choose a level"
msgstr "选择一个关卡"
#: ../src/LevelInfoRender.cpp:20
msgid "Time:"
msgstr "时间:"
#: ../src/LevelInfoRender.cpp:21 ../src/StatisticsScreen.cpp:259
msgid "Recordings:"
msgstr "记录次数:"
#: ../src/LevelPlaySelect.cpp:41
msgid "Select Level"
msgstr "选择关卡"
# TRANSLATORS: Used for button which clear any level progress like unlocked levels and highscores.
# TRANSLATORS: Used for button which clear any level progress like unlocked
# levels and highscores.
#: ../src/OptionsMenu.cpp:66
msgid "Clear Progress"
msgstr "清除进度"
#: ../src/OptionsMenu.cpp:109
msgid "General"
msgstr "通用"
#: ../src/OptionsMenu.cpp:110
msgid "Controls"
msgstr "控制"
#: ../src/OptionsMenu.cpp:121
msgid "Music"
msgstr "音乐"
#: ../src/OptionsMenu.cpp:129
msgid "Sound"
msgstr "音效"
#: ../src/OptionsMenu.cpp:137
msgid "Resolution"
msgstr "分辨率"
#: ../src/OptionsMenu.cpp:177
msgid "Language"
msgstr "语言"
# TRANSLATORS: as detect user's language automatically
#: ../src/OptionsMenu.cpp:185
msgid "Auto-Detect"
msgstr "自动检测"
#: ../src/OptionsMenu.cpp:209
msgid "Theme"
msgstr "主题"
#: ../src/OptionsMenu.cpp:247
msgid "Internet proxy"
msgstr "网络代理"
#: ../src/OptionsMenu.cpp:256
msgid "Fullscreen"
msgstr "全屏幕"
#: ../src/OptionsMenu.cpp:261
msgid "Quick record"
msgstr "快速记录"
#: ../src/OptionsMenu.cpp:266
msgid "Internet"
msgstr "网络"
#: ../src/OptionsMenu.cpp:271
msgid "Fade transition"
msgstr "淡出过渡"
#: ../src/OptionsMenu.cpp:294
msgid "Save Changes"
msgstr "保存变更"
#: ../src/OptionsMenu.cpp:513
msgid "Do you really want to reset level progress?"
msgstr "你确定要清除游戏进度吗?"
#: ../src/OptionsMenu.cpp:513
msgid "Warning"
msgstr "警告"
#: ../src/StatisticsManager.cpp:386
msgid "New achievement:"
msgstr "新成就:"
#: ../src/StatisticsManager.cpp:394
#, c-format
msgid "Achieved on %s"
msgstr "在 %s 达成成就"
#: ../src/StatisticsManager.cpp:400
msgid "Unknown achievement"
msgstr "未知成就"
#: ../src/StatisticsManager.cpp:406
#, c-format
msgid "Achieved %1.0f%%"
msgstr "已达成 %1.0f%%"
#: ../src/StatisticsManager.cpp:410
msgid "Not achieved"
msgstr "未达成"
#: ../src/StatisticsScreen.cpp:57 ../src/TitleMenu.cpp:55
msgid "Achievements and Statistics"
msgstr "成就与统计信息"
#: ../src/StatisticsScreen.cpp:166
msgid "Achievements"
msgstr "成就"
#: ../src/StatisticsScreen.cpp:167
msgid "Statistics"
msgstr "统计信息"
#: ../src/StatisticsScreen.cpp:234
msgid "Total"
msgstr "总计"
#: ../src/StatisticsScreen.cpp:246
msgid "Traveling distance (m)"
msgstr "旅行距离(米)"
#: ../src/StatisticsScreen.cpp:247
msgid "Jump times"
msgstr "跳跃次数"
#: ../src/StatisticsScreen.cpp:248
msgid "Die times"
msgstr "死亡次数"
#: ../src/StatisticsScreen.cpp:249
msgid "Squashed times"
msgstr "被夹次数"
#: ../src/StatisticsScreen.cpp:260
msgid "Switch pulled times:"
msgstr "使用开关次数:"
#: ../src/StatisticsScreen.cpp:261
msgid "Swap times:"
msgstr "交换次数:"
#: ../src/StatisticsScreen.cpp:262
msgid "Save times:"
msgstr "保存游戏次数:"
#: ../src/StatisticsScreen.cpp:263
msgid "Load times:"
msgstr "读取游戏次数:"
#: ../src/StatisticsScreen.cpp:268
msgid "Completed levels:"
msgstr "完成关卡数:"
#: ../src/StatisticsScreen.cpp:306
msgid "In-game time:"
msgstr "游戏用时:"
#: ../src/StatisticsScreen.cpp:308
msgid "Level editing time:"
msgstr "地图编辑用时:"
#: ../src/StatisticsScreen.cpp:310
msgid "Created levels:"
msgstr "创建的关卡:"
#: ../src/TitleMenu.cpp:44
msgid "Options"
msgstr "选项"
#: ../src/TitleMenu.cpp:47
msgid "Quit"
msgstr "退出"
#: ../src/TitleMenu.cpp:131
msgid "Enable internet in order to install addons."
msgstr "启用网络访问才能下载附加组件。"
#: ../src/TitleMenu.cpp:131
msgid "Internet disabled"
msgstr "网络已禁用"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Return"
msgstr "回车"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Escape"
msgstr "Escape"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Backspace"
msgstr "退格"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Tab"
msgstr "Tab"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Space"
msgstr "空格"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "CapsLock"
msgstr "CapsLock"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PrintScreen"
msgstr "PrintScreen"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "ScrollLock"
msgstr "ScrollLock"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Pause"
msgstr "Pause"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Insert"
msgstr "Insert"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Home"
msgstr "Home"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PageUp"
msgstr "PageUp"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Delete"
msgstr "Delete"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "End"
msgstr "End"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "PageDown"
msgstr "PageDown"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right"
msgstr "右"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left"
msgstr "左"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Down"
msgstr "下"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Up"
msgstr "上"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Numlock"
msgstr "Numlock"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "SysReq"
msgstr "SysReq"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Ctrl"
msgstr "左 Ctrl"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Shift"
msgstr "左 Shift"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left Alt"
msgstr "左 Alt"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Left GUI"
msgstr "左 GUI"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Ctrl"
msgstr "右 Ctrl"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Shift"
msgstr "右 Shift"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right Alt"
msgstr "右 Alt"
# TRANSLATORS: name of a key
msgctxt "keys"
msgid "Right GUI"
msgstr "右 GUI"
# TRANSLATORS: Filename is coming before this text
#~ msgid ""
#~ "%s already exists.\n"
#~ "Do you want to overwrite it?"
#~ msgstr ""
#~ "%s 已经存在。\n"
#~ "你是否想要覆盖它?"
#~ msgid "Overwrite Prompt"
#~ msgstr "文件覆盖提示"
#~ msgid "Can't open file %s."
#~ msgstr "不能打开文件 %s。"
#~ msgid "Save File"
#~ msgstr "保存文件"
#~ msgid "Load File"
#~ msgstr "打开文件"
#~ msgid "Search In"
#~ msgstr "在此搜索"
#~ msgid "File Name"
#~ msgstr "文件名"
#~ msgid "Stop"
#~ msgstr "停止"
#~ msgid "Rename scenery layer %s to %s"
#~ msgstr "将风景图层 %s 重命名为 %s"
#~ msgid "Rename layer"
#~ msgstr "重命名图层"
#~ msgid "Enter the new name for layer '%s':"
#~ msgstr "输入图层 '%s' 的新名称:"
# TRANSLATORS: name of a key
#~ msgid "Return"
#~ msgstr "回车"
# TRANSLATORS: name of a key
#~ msgid "Backspace"
#~ msgstr "退格"
# TRANSLATORS: name of a key
#~ msgid "Tab"
#~ msgstr "Tab"
# TRANSLATORS: name of a key
#~ msgid "Space"
#~ msgstr "空格"
# TRANSLATORS: name of a key
#~ msgid "CapsLock"
#~ msgstr "CapsLock"
# TRANSLATORS: name of a key
#~ msgid "PrintScreen"
#~ msgstr "PrintScreen"
# TRANSLATORS: name of a key
#~ msgid "ScrollLock"
#~ msgstr "ScrollLock"
# TRANSLATORS: name of a key
#~ msgid "Pause"
#~ msgstr "Pause"
# TRANSLATORS: name of a key
#~ msgid "Insert"
#~ msgstr "Insert"
# TRANSLATORS: name of a key
#~ msgid "Home"
#~ msgstr "Home"
# TRANSLATORS: name of a key
#~ msgid "PageUp"
#~ msgstr "PageUp"
# TRANSLATORS: name of a key
#~ msgid "End"
#~ msgstr "End"
# TRANSLATORS: name of a key
#~ msgid "PageDown"
#~ msgstr "PageDown"
# TRANSLATORS: name of a key
#~ msgid "Down"
#~ msgstr "下"
# TRANSLATORS: name of a key
#~ msgid "Up"
#~ msgstr "上"
# TRANSLATORS: name of a key
#~ msgid "Numlock"
#~ msgstr "Numlock"
# TRANSLATORS: name of a key
#~ msgid "SysReq"
#~ msgstr "SysReq"
# TRANSLATORS: name of a key
#~ msgid "Left Ctrl"
#~ msgstr "左 Ctrl"
# TRANSLATORS: name of a key
#~ msgid "Left Shift"
#~ msgstr "左 Shift"
# TRANSLATORS: name of a key
#~ msgid "Left Alt"
#~ msgstr "左 Alt"
# TRANSLATORS: name of a key
#~ msgid "Left GUI"
#~ msgstr "左 GUI"
# TRANSLATORS: name of a key
#~ msgid "Right Ctrl"
#~ msgstr "右 Ctrl"
# TRANSLATORS: name of a key
#~ msgid "Right Shift"
#~ msgstr "右 Shift"
# TRANSLATORS: name of a key
#~ msgid "Right Alt"
#~ msgstr "右 Alt"
# TRANSLATORS: name of a key
#~ msgid "Right GUI"
#~ msgstr "右 GUI"
# TRANSLATORS: name of a key
#~ msgid "backspace"
#~ msgstr "backspace"
# TRANSLATORS: name of a key
#~ msgid "tab"
#~ msgstr "tab"
# TRANSLATORS: name of a key
#~ msgid "clear"
#~ msgstr "clear"
# TRANSLATORS: name of a key
#~ msgid "return"
#~ msgstr "回车"
# TRANSLATORS: name of a key
#~ msgid "pause"
#~ msgstr "pause"
# TRANSLATORS: name of a key
#~ msgid "escape"
#~ msgstr "escape"
# TRANSLATORS: name of a key
#~ msgid "space"
#~ msgstr "空格"
# TRANSLATORS: name of a key
#~ msgid "delete"
#~ msgstr "delete"
# TRANSLATORS: name of a key
#~ msgid "enter"
#~ msgstr "enter"
# TRANSLATORS: name of a key
#~ msgid "equals"
#~ msgstr "equals"
# 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 "insert"
# TRANSLATORS: name of a key
#~ msgid "home"
#~ msgstr "home"
# TRANSLATORS: name of a key
#~ msgid "end"
#~ msgstr "end"
# TRANSLATORS: name of a key
#~ msgid "page up"
#~ msgstr "page up"
# TRANSLATORS: name of a key
#~ msgid "page down"
#~ msgstr "page down"
# TRANSLATORS: name of a key
#~ msgid "numlock"
#~ msgstr "numlock"
# TRANSLATORS: name of a key
#~ msgid "caps lock"
#~ msgstr "caps lock"
# TRANSLATORS: name of a key
#~ msgid "scroll lock"
#~ msgstr "scroll lock"
# TRANSLATORS: name of a key
#~ msgid "right shift"
#~ msgstr "右 shift"
# TRANSLATORS: name of a key
#~ msgid "left shift"
#~ msgstr "左 shift"
# TRANSLATORS: name of a key
#~ msgid "right ctrl"
#~ msgstr "右 ctrl"
# TRANSLATORS: name of a key
#~ msgid "left ctrl"
#~ msgstr "左 ctrl"
# TRANSLATORS: name of a key
#~ msgid "right alt"
#~ msgstr "右 alt"
# TRANSLATORS: name of a key
#~ msgid "left alt"
#~ msgstr "左 alt"
# TRANSLATORS: name of a key
#~ msgid "right meta"
#~ msgstr "右 meta"
# TRANSLATORS: name of a key
#~ msgid "left meta"
#~ msgstr "左 meta"
# TRANSLATORS: name of a key
#~ msgid "left super"
#~ msgstr "左 super"
# TRANSLATORS: name of a key
#~ msgid "right super"
#~ msgstr "右 super"
# TRANSLATORS: name of a key
#~ msgid "alt gr"
#~ msgstr "alt gr"
# TRANSLATORS: name of a key
#~ msgid "compose"
#~ msgstr "compose"
# TRANSLATORS: name of a key
#~ msgid "help"
#~ msgstr "help"
# TRANSLATORS: name of a key
#~ msgid "print screen"
#~ msgstr "print screen"
# TRANSLATORS: name of a key
#~ msgid "sys req"
#~ msgstr "sys req"
# TRANSLATORS: name of a key
#~ msgid "break"
#~ msgstr "break"
# TRANSLATORS: name of a key
#~ msgid "menu"
#~ msgstr "menu"
# TRANSLATORS: name of a key
#~ msgid "power"
#~ msgstr "power"
# TRANSLATORS: name of a key
#~ msgid "euro"
#~ msgstr "euro"
# TRANSLATORS: name of a key
#~ msgid "undo"
#~ msgstr "undo"
#~ msgid "Level themes"
#~ msgstr "关卡主题"
diff --git a/src/Commands.cpp b/src/Commands.cpp
index 61049fd..5eeae81 100644
--- a/src/Commands.cpp
+++ b/src/Commands.cpp
@@ -1,1059 +1,1059 @@
/*
* Copyright (C) 2018 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/>.
*/
// An undo/redo system based on <http://www.codeproject.com/Articles/2500/A-Basic-Undo-Redo-Framework-For-C>.
// Originally written by squarecross <https://forum.freegamedev.net/viewtopic.php?f=48&t=5432>.
#include "Commands.h"
#include "GameObjects.h"
#include "Block.h"
#include "LevelEditor.h"
#include "Globals.h"
#include "Functions.h"
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <stdio.h>
#include "libs/tinyformat/tinyformat.h"
Command::~Command() {
}
//////////////////////////////MoveGameObjectCommand///////////////////////////////////
MoveGameObjectCommand::MoveGameObjectCommand(LevelEditor* levelEditor, GameObject* gameObject, int x, int y, int w, int h)
: editor(levelEditor), objects(1, gameObject)
, resizeCommand(NULL)
{
SDL_Rect r = gameObject->getBox();
r.x = x;
r.y = y;
if (w >= 0) r.w = w;
if (h >= 0) r.h = h;
newPosition.push_back(r);
init();
}
MoveGameObjectCommand::MoveGameObjectCommand(LevelEditor* levelEditor, std::vector<GameObject*>& gameObjects, int dx, int dy)
: editor(levelEditor), objects(gameObjects)
, resizeCommand(NULL)
{
for (auto obj : objects) {
SDL_Rect r = obj->getBox();
r.x += dx;
r.y += dy;
newPosition.push_back(r);
}
init();
}
void MoveGameObjectCommand::init() {
//Initialize old position.
for (auto obj : objects) {
SDL_Rect r = obj->getBox();
oldPosition.push_back(r);
}
// Create resize command if necessary.
resizeCommand = ResizeLevelCommand::createAndShiftIfNecessary(editor, newPosition);
}
MoveGameObjectCommand::~MoveGameObjectCommand(){
if (resizeCommand) delete resizeCommand;
}
void MoveGameObjectCommand::execute(){
// First resize the level if necessary.
if (resizeCommand) resizeCommand->execute();
// Set the obj at its new position.
for (int i = 0; i < (int)objects.size(); i++) {
const SDL_Rect &r = newPosition[i];
GameObject *obj = objects[i];
obj->setBaseLocation(r.x, r.y);
obj->setBaseSize(r.w, r.h);
}
}
void MoveGameObjectCommand::unexecute() {
// First undo the resize if necessary.
if (resizeCommand) resizeCommand->unexecute();
// Set the obj at its old position.
for (int i = 0; i < (int)objects.size(); i++) {
const SDL_Rect &r = oldPosition[i];
GameObject *obj = objects[i];
obj->setBaseLocation(r.x, r.y);
obj->setBaseSize(r.w, r.h);
}
}
ResizeLevelCommand::ResizeLevelCommand(LevelEditor* levelEditor, int newWidth, int newHeight, int diffx, int diffy)
: editor(levelEditor), newLevelWidth(newWidth), newLevelHeight(newHeight), diffx(diffx), diffy(diffy)
{
oldLevelWidth = LEVEL_WIDTH;
oldLevelHeight = LEVEL_HEIGHT;
}
ResizeLevelCommand::~ResizeLevelCommand() {
}
void ResizeLevelCommand::execute() {
resizeLevel(editor, newLevelWidth, newLevelHeight, diffx, diffy);
}
void ResizeLevelCommand::unexecute() {
resizeLevel(editor, oldLevelWidth, oldLevelHeight, -diffx, -diffy);
}
void ResizeLevelCommand::resizeLevel(LevelEditor* levelEditor, int newWidth, int newHeight, int diffx, int diffy) {
LEVEL_WIDTH = newWidth;
LEVEL_HEIGHT = newHeight;
if (diffx != 0 || diffy != 0) {
camera.x += diffx;
camera.y += diffy;
for (unsigned int o = 0; o < levelEditor->levelObjects.size(); o++){
SDL_Rect r = levelEditor->levelObjects[o]->getBox();
levelEditor->levelObjects[o]->setBaseLocation(r.x + diffx, r.y + diffy);
}
for (auto it = levelEditor->sceneryLayers.begin(); it != levelEditor->sceneryLayers.end(); ++it) {
for (auto o : it->second->objects){
SDL_Rect r = o->getBox();
o->setBaseLocation(r.x + diffx, r.y + diffy);
}
}
}
}
ResizeLevelCommand* ResizeLevelCommand::createAndShiftIfNecessary(LevelEditor* levelEditor, std::vector<SDL_Rect>& position) {
// Calculate new level size, shift, etc.
int newLevelWidth = LEVEL_WIDTH;
int newLevelHeight = LEVEL_HEIGHT;
int diffx = 0, diffy = 0;
for (int i = 0; i < (int)position.size(); i++) {
const SDL_Rect &r = position[i];
if (r.x + r.w > newLevelWidth) {
newLevelWidth = r.x + r.w;
}
if (r.y + r.h > newLevelHeight) {
newLevelHeight = r.y + r.h;
}
if (r.x + diffx < 0) diffx = -r.x;
if (r.y + diffy < 0) diffy = -r.y;
}
newLevelWidth += diffx;
newLevelHeight += diffy;
if (newLevelWidth != LEVEL_WIDTH || newLevelHeight != LEVEL_HEIGHT || diffx || diffy) {
if (diffx || diffy) {
for (int i = 0; i < (int)position.size(); i++) {
SDL_Rect &r = position[i];
r.x += diffx;
r.y += diffy;
}
}
return new ResizeLevelCommand(levelEditor, newLevelWidth, newLevelHeight, diffx, diffy);
} else {
return NULL;
}
}
std::string ResizeLevelCommand::describe() {
return _("Resize level");
}
//////////////////////////////AddRemoveGameObjectCommand///////////////////////////////////
AddRemoveGameObjectCommand::AddRemoveGameObjectCommand(LevelEditor* levelEditor, GameObject* gameObject, bool isAdd_)
: editor(levelEditor), objects(1, gameObject), isAdd(isAdd_), ownObject(isAdd_)
, resizeCommand(NULL), removeStartCommand(NULL), oldTriggers(NULL)
{
init();
}
AddRemoveGameObjectCommand::AddRemoveGameObjectCommand(LevelEditor* levelEditor, std::vector<GameObject*>& gameObjects, bool isAdd_)
: editor(levelEditor), objects(gameObjects), isAdd(isAdd_), ownObject(isAdd_)
, resizeCommand(NULL), removeStartCommand(NULL), oldTriggers(NULL)
{
init();
}
void AddRemoveGameObjectCommand::init() {
if (isAdd) {
theLayer = editor->selectedLayer;
// adjust the object position if necessary
std::vector<SDL_Rect> position;
for (auto obj : objects) {
position.push_back(obj->getBox());
}
resizeCommand = ResizeLevelCommand::createAndShiftIfNecessary(editor, position);
if (resizeCommand) {
for (int i = 0; i < (int)objects.size(); i++) {
const SDL_Rect &r = position[i];
objects[i]->setBaseLocation(r.x, r.y);
}
}
// remove the existing player/shadow start if necessary
std::vector<bool> typesToBeRemoved((int)TYPE_MAX, false);
bool removeSomething = false;
for (auto obj : objects) {
if (obj->type == TYPE_START_PLAYER || obj->type == TYPE_START_SHADOW) {
typesToBeRemoved[obj->type] = true;
removeSomething = true;
}
}
if (removeSomething) {
std::vector<GameObject*> objectsToBeRemoved;
for (auto obj : editor->levelObjects) {
if (typesToBeRemoved[obj->type]) objectsToBeRemoved.push_back(obj);
}
if (!objectsToBeRemoved.empty()) {
removeStartCommand = new AddRemoveGameObjectCommand(editor, objectsToBeRemoved, false);
}
}
}
}
void AddRemoveGameObjectCommand::backupTriggers() {
if (oldTriggers == NULL) oldTriggers = new LevelEditor::Triggers(editor->triggers);
}
AddRemoveGameObjectCommand::~AddRemoveGameObjectCommand(){
//Remove the objects if we own them.
if (ownObject) {
for (auto obj : objects) {
delete obj;
}
}
//Delete internal commands.
if (resizeCommand) delete resizeCommand;
if (removeStartCommand) delete removeStartCommand;
//Delete old triggers
if (oldTriggers) delete oldTriggers;
}
void AddRemoveGameObjectCommand::addGameObject(){
// some sanity check
assert(ownObject);
// Remove old start position if necessary.
if (removeStartCommand) removeStartCommand->execute();
// Resize the level if necessary.
if (resizeCommand) resizeCommand->execute();
// Add each object to level
for (int index = 0; index < (int)objects.size(); index++) {
GameObject *obj = objects[index];
//Increase totalCollectables everytime we add a new collectable
if (obj->type == TYPE_COLLECTABLE) {
editor->totalCollectables++;
}
Block* block = dynamic_cast<Block*>(obj);
Scenery* scenery = dynamic_cast<Scenery*>(obj);
//Add it to the levelObjects.
if (theLayer.empty()) {
assert(block != NULL);
editor->levelObjects.push_back(block);
} else {
assert(scenery != NULL);
auto it = editor->sceneryLayers.find(theLayer);
assert(it != editor->sceneryLayers.end());
it->second->objects.push_back(scenery);
}
//GameObject type specific stuff.
switch (obj->type){
case TYPE_BUTTON:
case TYPE_SWITCH:
case TYPE_PORTAL:
{
//If block doesn't have an id (new object).
if (block->getEditorProperty("id").empty()) {
//Give it it's own id.
char s[64];
sprintf(s, "%u", editor->currentId);
editor->currentId++;
block->setEditorProperty("id", s);
}
break;
}
case TYPE_MOVING_BLOCK:
case TYPE_MOVING_SHADOW_BLOCK:
case TYPE_MOVING_SPIKES:
{
//Add the object to the moving blocks.
vector<MovingPosition> positions;
editor->movingBlocks[block] = positions;
//Get the moving position.
const vector<SDL_Rect> &movingPos = block->movingPos;
//Add the object to the movingBlocks vector.
editor->movingBlocks[block].clear();
for (int i = 0, m = movingPos.size(); i < m; i++) {
MovingPosition position(movingPos[i].x, movingPos[i].y, movingPos[i].w);
editor->movingBlocks[block].push_back(position);
}
//If block doesn't have an id.
if (block->getEditorProperty("id").empty()) {
//Give it it's own id.
char s[64];
sprintf(s, "%u", editor->currentId);
editor->currentId++;
block->setEditorProperty("id", s);
}
break;
}
default:
break;
}
}
// now we doesn't own the object anymore.
ownObject = false;
}
void AddRemoveGameObjectCommand::removeGameObject(){
// some sanity check
assert(!ownObject);
//Make sure we don't access the removed object through
//moving/linking.
editor->movingBlock = nullptr;
editor->linkingTrigger = nullptr;
editor->moving = false;
editor->linking = false;
// Remove objects
for (int index = 0; index < (int)objects.size(); index++) {
GameObject *obj = objects[index];
std::vector<GameObject*>::iterator it;
std::map<Block*, vector<GameObject*> >::iterator mapIt;
//Decrease totalCollectables everytime we remove a collectable
if (obj->type == TYPE_COLLECTABLE){
editor->totalCollectables--;
}
//Check if the object is in the selection.
it = find(editor->selection.begin(), editor->selection.end(), obj);
if (it != editor->selection.end()){
//It is so we delete it.
editor->selection.erase(it);
}
Block *theBlock = dynamic_cast<Block*>(obj);
Scenery *theScenery = dynamic_cast<Scenery*>(obj);
//Check if the object is in the triggers.
if (theBlock) {
mapIt = editor->triggers.find(theBlock);
if (mapIt != editor->triggers.end()){
//Back up triggers if it's remove mode.
if (!isAdd) backupTriggers();
//Remove the object from triggers.
editor->triggers.erase(mapIt);
}
}
//Boolean if it could be a target.
if (obj->type == TYPE_MOVING_BLOCK || obj->type == TYPE_MOVING_SHADOW_BLOCK || obj->type == TYPE_MOVING_SPIKES
|| obj->type == TYPE_CONVEYOR_BELT || obj->type == TYPE_SHADOW_CONVEYOR_BELT || obj->type == TYPE_PORTAL)
{
for (mapIt = editor->triggers.begin(); mapIt != editor->triggers.end(); ++mapIt){
//Now loop the target vector.
for (int o = mapIt->second.size() - 1; o >= 0; o--){
//Check if the obj is in the target vector.
if (mapIt->second[o] == obj){
//Back up triggers if it's remove mode.
if (!isAdd) backupTriggers();
//Remove the object from triggers.
mapIt->second.erase(mapIt->second.begin() + o);
}
}
}
}
//Check if the object is in the movingObjects.
if (theBlock) {
std::map<Block*, vector<MovingPosition> >::iterator movIt;
movIt = editor->movingBlocks.find(theBlock);
if (movIt != editor->movingBlocks.end()){
//It is so we remove it.
editor->movingBlocks.erase(movIt);
}
}
//Check if the block isn't being configured with a window one way or another.
for (;;) {
std::map<GUIObject*, GameObject*>::iterator confIt;
for (confIt = editor->objectWindows.begin(); confIt != editor->objectWindows.end(); ++confIt){
if (confIt->second == obj) break;
}
if (confIt == editor->objectWindows.end()) break;
editor->destroyWindow(confIt->first);
}
//Now we remove the object from the levelObjects and/or scenery.
if (theBlock){
std::vector<Block*>::iterator it;
it = find(editor->levelObjects.begin(), editor->levelObjects.end(), theBlock);
if (it != editor->levelObjects.end()){
editor->levelObjects.erase(it);
theLayer.clear(); // record the layer of this object
}
} else if (theScenery) {
for (auto it = editor->sceneryLayers.begin(); it != editor->sceneryLayers.end(); ++it){
auto it2 = find(it->second->objects.begin(), it->second->objects.end(), theScenery);
if (it2 != it->second->objects.end()) {
it->second->objects.erase(it2);
theLayer = it->first; // record the layer of this object
break;
}
}
}
}
// Resize the level if necessary.
if (resizeCommand) resizeCommand->unexecute();
// Restore old start position if necessary.
if (removeStartCommand) removeStartCommand->unexecute();
// now we own this object
ownObject = true;
//Set dirty of selection popup
editor->selectionDirty();
}
void AddRemoveGameObjectCommand::execute(){
if (isAdd) {
addGameObject();
} else {
removeGameObject();
}
}
void AddRemoveGameObjectCommand::unexecute(){
if (isAdd) {
removeGameObject();
} else {
addGameObject();
}
// Restore old triggers if necessary
if (oldTriggers) editor->triggers = *oldTriggers;
}
//////////////////////////////AddRemovePathCommand///////////////////////////////////
AddRemovePathCommand::AddRemovePathCommand(LevelEditor* levelEditor, Block* movingBlock, MovingPosition movingPosition, bool isAdd_)
:editor(levelEditor), target(movingBlock), movePos(movingPosition), isAdd(isAdd_)
{
if (!isAdd) {
if (target->movingPos.empty()) {
assert(!"movingBlock->movingPos is empty!");
} else {
const SDL_Rect& r = target->movingPos.back();
movePos.x = r.x;
movePos.y = r.y;
movePos.time = r.w;
}
}
}
AddRemovePathCommand::~AddRemovePathCommand(){
}
void AddRemovePathCommand::execute(){
if (isAdd) addPath();
else removePath();
}
void AddRemovePathCommand::unexecute(){
if (isAdd) removePath();
else addPath();
}
void AddRemovePathCommand::addPath() {
//Add movePos to the path.
editor->movingBlocks[target].push_back(movePos);
//Write the path to the moving block.
setEditorData();
}
void AddRemovePathCommand::removePath() {
//Remove the last point in the path.
editor->movingBlocks[target].pop_back();
//Write the path to the moving block.
setEditorData();
}
void AddRemovePathCommand::setEditorData() {
target->movingPos.clear();
for (const MovingPosition& p : editor->movingBlocks[target]) {
SDL_Rect r = { p.x, p.y, p.time };
target->movingPos.push_back(r);
}
}
//////////////////////////////RemovePathCommand///////////////////////////////////
RemovePathCommand::RemovePathCommand(LevelEditor* levelEditor, Block* targetBlock)
:editor(levelEditor), target(targetBlock){
}
RemovePathCommand::~RemovePathCommand(){
}
void RemovePathCommand::execute(){
//Set the number of movingPositions to 0.
target->setEditorProperty("MovingPosCount","0");
std::map<Block*,vector<MovingPosition> >::iterator it;
//Check if target is in movingBlocks.
it = editor->movingBlocks.find(target);
if(it!=editor->movingBlocks.end()){
//Store the movingPositions for unexecute.
movePositions = it->second;
//Clear all its movingPositions
it->second.clear();
}
}
void RemovePathCommand::unexecute(){
std::map<Block*,vector<MovingPosition> >::iterator it;
//Find target in movingBlocks
it = editor->movingBlocks.find(target);
if(it!=editor->movingBlocks.end()){
//Restore its movingPositions
it->second = movePositions;
//Write the path to the moving block.
std::map<std::string,std::string> editorData;
char s[64], s0[64];
sprintf(s,"%d",int(editor->movingBlocks[target].size()));
editorData["MovingPosCount"]=s;
//Loop through the positions.
for(unsigned int o=0; o<editor->movingBlocks[target].size(); o++) {
sprintf(s0+1,"%u",o);
sprintf(s,"%d",editor->movingBlocks[target][o].x);
s0[0]='x';
editorData[s0]=s;
sprintf(s,"%d",editor->movingBlocks[target][o].y);
s0[0]='y';
editorData[s0]=s;
sprintf(s,"%d",editor->movingBlocks[target][o].time);
s0[0]='t';
editorData[s0]=s;
}
target->setEditorData(editorData);
}
}
//////////////////////////////AddLinkCommand///////////////////////////////////
AddLinkCommand::AddLinkCommand(LevelEditor* levelEditor, Block* linkingTrigger, GameObject* clickedObject)
:editor(levelEditor), target(linkingTrigger), clickedObj(clickedObject),oldPortalLink(NULL), destination(""), id(""), oldTrigger(NULL){
}
AddLinkCommand::~AddLinkCommand(){
}
void AddLinkCommand::execute(){
//Check if the target can handle multiple or only one link.
switch(target->type) {
case TYPE_PORTAL: {
//Store the last portal link.
if(!editor->triggers[target].empty()){
oldPortalLink = editor->triggers[target].back();
}
//Portals can only link to one so remove all existing links.
editor->triggers[target].clear();
editor->triggers[target].push_back(clickedObj);
break;
}
default: {
//The others can handle multiple links.
editor->triggers[target].push_back(clickedObj);
break;
}
}
//Check if it's a portal.
if(target->type==TYPE_PORTAL) {
//Store the previous destination.
destination = target->getEditorProperty("destination");
//Portals need to get the id of the other instead of give it's own id.
char s[64];
sprintf(s,"%d",atoi(clickedObj->getEditorProperty("id").c_str()));
target->setEditorProperty("destination",s);
} else{
//Store the previous id.
id = clickedObj->getEditorProperty("id");
if(!id.empty()) {
//Another block might already be set as trigger for the clickedObj.
for(auto block : editor->levelObjects) {
std::string otherId = block->getEditorProperty("id");
if(id.compare(otherId) == 0) {
//IDs match, so either one of the trigger itself or one of its (other) targets.
std::vector<GameObject*>::iterator it;
//Find the clickedObj in the block's triggers.
it = std::find(editor->triggers[block].begin(), editor->triggers[block].end(), clickedObj);
if(it != editor->triggers[block].end()){
oldTrigger = block;
editor->triggers[block].erase(it);
break;
}
}
}
}
//Give the clickedObject the same id as the trigger.
char s[64];
sprintf(s,"%d",atoi(target->getEditorProperty("id").c_str()));
clickedObj->setEditorProperty("id",s);
}
}
void AddLinkCommand::unexecute(){
//Check if the target can handle multiple or only one link.
switch(target->type) {
case TYPE_PORTAL: {
//Portals can only link to one so remove all existing links.
editor->triggers[target].clear();
//Put the previous portal link back.
if(oldPortalLink != NULL)
editor->triggers[target].push_back(oldPortalLink);
break;
}
default:{
std::vector<GameObject*>::iterator it;
//Find the clickedObj in the target's triggers.
it = std::find(editor->triggers[target].begin(), editor->triggers[target].end(), clickedObj);
if(it != editor->triggers[target].end()){
//Remove it.
editor->triggers[target].erase(it);
}
//Restore old trigger if applicable
if(oldTrigger != NULL){
editor->triggers[oldTrigger].push_back(clickedObj);
}
break;
}
}
//Check if it's a portal.
if(target->type==TYPE_PORTAL) {
//Restore previous destination.
target->setEditorProperty("destination",destination);
} else{
//Restore clickedObj's previous id.
clickedObj->setEditorProperty("id",id);
}
}
//////////////////////////////RemoveLinkCommand///////////////////////////////////
RemoveLinkCommand::RemoveLinkCommand(LevelEditor* levelEditor, Block* targetBlock)
: editor(levelEditor), target(targetBlock), destination(""), id(""){
}
RemoveLinkCommand::~RemoveLinkCommand(){
}
void RemoveLinkCommand::execute(){
std::map<Block*,vector<GameObject*> >::iterator it;
//Find target in triggers.
it = editor->triggers.find(target);
if(it!=editor->triggers.end()) {
//Copy the objects the target was linked to.
links = it->second;
//Remove the links.
it->second.clear();
}
//In case of a portal remove its destination field.
if(target->type==TYPE_PORTAL) {
//Copy its previous destination.
destination = target->getEditorProperty("destination");
//Erase its destination.
target->setEditorProperty("destination","");
} else{
//Copy its previous id.
id = target->getEditorProperty("id");
//Give the trigger a new id to prevent activating unlinked targets.
char s[64];
sprintf(s,"%u",editor->currentId);
editor->currentId++;
target->setEditorProperty("id",s);
}
}
void RemoveLinkCommand::unexecute(){
std::map<Block*,vector<GameObject*> >::iterator it;
//Find target in triggers.
it = editor->triggers.find(target);
if(it!=editor->triggers.end()) {
//Restore objects it was linked to.
it->second = links;
}
if(target->type== TYPE_PORTAL){
//Restore old destination.
target->setEditorProperty("destination", destination);
} else{
//Restore old id.
target->setEditorProperty("id", id);
}
}
SetEditorPropertyCommand::SetEditorPropertyCommand(LevelEditor* levelEditor, ImageManager& imageManager, SDL_Renderer& renderer, GameObject* targetBlock,
const std::string& propertyName, const std::string& propertyValue, const std::string& propertyDescription)
: editor(levelEditor), imageManager(imageManager), renderer(renderer)
, target(targetBlock), prop(propertyName), newValue(propertyValue), desc(propertyDescription)
{
oldValue = target->getEditorProperty(prop);
}
SetEditorPropertyCommand::~SetEditorPropertyCommand() {
}
void SetEditorPropertyCommand::execute() {
target->setEditorProperty(prop, newValue);
updateCustomScenery();
}
void SetEditorPropertyCommand::unexecute() {
target->setEditorProperty(prop, oldValue);
updateCustomScenery();
}
void SetEditorPropertyCommand::updateCustomScenery() {
Scenery *scenery = dynamic_cast<Scenery*>(target);
if (target && prop == "customScenery") {
scenery->updateCustomScenery(imageManager, renderer);
}
}
SetLevelPropertyCommand::~SetLevelPropertyCommand() {
}
void SetLevelPropertyCommand::execute() {
setLevelProperty(newProperty);
}
void SetLevelPropertyCommand::unexecute() {
setLevelProperty(oldProperty);
}
std::string SetLevelPropertyCommand::describe() {
return _("Modify level property");
}
SetScriptCommand::SetScriptCommand(LevelEditor* levelEditor, Block* targetBlock, const std::map<int, std::string>& script, const std::string& id)
: editor(levelEditor), target(targetBlock), newScript(script), id(id)
{
if (target) {
oldScript = target->scripts;
oldId = target->id;
} else {
oldScript = editor->scripts;
}
}
SetScriptCommand::~SetScriptCommand() {
}
void SetScriptCommand::execute() {
setScript(newScript, id);
}
void SetScriptCommand::unexecute() {
setScript(oldScript, oldId);
}
void SetScriptCommand::setScript(const std::map<int, std::string>& script, const std::string& id) {
if (target) {
target->scripts = script;
//Set the new id for the target block.
//TODO: Check for trigger links etc...
target->id = id;
} else {
editor->scripts = script;
}
}
AddRemoveLayerCommand::AddRemoveLayerCommand(LevelEditor* levelEditor, const std::string& layerName, bool isAdd_)
: editor(levelEditor), layer(NULL), theLayer(layerName), isAdd(isAdd_), ownObject(isAdd_)
{
if (isAdd) {
layer = new SceneryLayer;
} else {
auto it = editor->sceneryLayers.find(theLayer);
if (it != editor->sceneryLayers.end()) {
layer = it->second;
}
}
}
void AddRemoveLayerCommand::execute() {
if (isAdd) {
addLayer();
} else {
removeLayer();
}
}
void AddRemoveLayerCommand::unexecute() {
if (isAdd) {
removeLayer();
} else {
addLayer();
}
}
void AddRemoveLayerCommand::addLayer() {
assert(ownObject && layer);
assert(editor->sceneryLayers.find(theLayer) == editor->sceneryLayers.end());
// add this layer
editor->sceneryLayers[theLayer] = layer;
// show and select the newly created layer
editor->layerVisibility[theLayer] = true;
editor->selectedLayer = theLayer;
// deselect all
editor->deselectAll();
// change the ownership
ownObject = false;
}
void AddRemoveLayerCommand::removeLayer() {
assert(!ownObject);
assert(editor->sceneryLayers.find(theLayer) != editor->sceneryLayers.end());
assert(editor->sceneryLayers.find(theLayer)->second == layer);
// deselect all
editor->deselectAll();
// select the Blocks layer
editor->selectedLayer.clear();
// remove this layer
editor->layerVisibility.erase(theLayer);
editor->sceneryLayers.erase(theLayer);
// change the ownership
ownObject = true;
}
AddRemoveLayerCommand::~AddRemoveLayerCommand() {
if (ownObject) {
delete layer;
}
}
std::string AddRemoveLayerCommand::describe() {
return tfm::format(isAdd ? _("Add scenery layer %s") : _("Delete scenery layer %s"), theLayer);
}
SetLayerPropertyCommand::SetLayerPropertyCommand(LevelEditor* levelEditor, const std::string& oldName, const LayerProperty& newProperty)
: editor(levelEditor), newProperty(newProperty)
{
auto it = editor->sceneryLayers.find(oldName);
assert(it != editor->sceneryLayers.end() && it->second);
oldProperty.name = oldName;
oldProperty.speedX = it->second->speedX;
oldProperty.speedY = it->second->speedY;
oldProperty.cameraX = it->second->cameraX;
oldProperty.cameraY = it->second->cameraY;
}
void SetLayerPropertyCommand::execute() {
setLayerProperty(oldProperty.name, newProperty);
}
void SetLayerPropertyCommand::unexecute() {
setLayerProperty(newProperty.name, oldProperty);
}
SetLayerPropertyCommand::~SetLayerPropertyCommand() {
}
std::string SetLayerPropertyCommand::describe() {
return tfm::format(_("Modify the property of scenery layer %s"), oldProperty.name);
}
void SetLayerPropertyCommand::setLayerProperty(const std::string& oldName, const LayerProperty& newProperty) {
SceneryLayer *tmp = NULL;
// Find the existing layer
{
auto it = editor->sceneryLayers.find(oldName);
assert(it != editor->sceneryLayers.end() && it->second);
tmp = it->second;
}
// Check if we need to rename scenery layer
if (oldName != newProperty.name) {
assert(editor->sceneryLayers.find(newProperty.name) == editor->sceneryLayers.end());
// remove the old layer
editor->sceneryLayers.erase(oldName);
// then save the temp variable to the new layer
editor->sceneryLayers[newProperty.name] = tmp;
// show and select the newly created layer
editor->layerVisibility[newProperty.name] = editor->layerVisibility[oldName];
editor->layerVisibility.erase(oldName);
editor->selectedLayer = newProperty.name;
}
// Now we update the properties of the layer
tmp->speedX = newProperty.speedX;
tmp->speedY = newProperty.speedY;
tmp->cameraX = newProperty.cameraX;
tmp->cameraY = newProperty.cameraY;
}
MoveToLayerCommand::MoveToLayerCommand(LevelEditor* levelEditor, std::vector<GameObject*>& gameObjects, const std::string& oldName, const std::string& newName)
: editor(levelEditor), oldName(oldName), newName(newName), createNewLayer(NULL)
{
if (editor->sceneryLayers.find(newName) == editor->sceneryLayers.end()) {
createNewLayer = new AddRemoveLayerCommand(levelEditor, newName, true);
}
for (auto obj : gameObjects) {
Scenery *scenery = dynamic_cast<Scenery*>(obj);
if (scenery) objects.push_back(scenery);
}
}
void MoveToLayerCommand::execute() {
if (createNewLayer) {
createNewLayer->execute();
}
removeGameObject();
addGameObject(newName);
// show and select the new layer
editor->layerVisibility[newName] = true;
editor->selectedLayer = newName;
// deselect all
editor->deselectAll();
}
void MoveToLayerCommand::unexecute() {
removeGameObject();
addGameObject(oldName);
if (createNewLayer) {
createNewLayer->unexecute();
}
// show and select the old layer
editor->layerVisibility[oldName] = true;
editor->selectedLayer = oldName;
// deselect all
editor->deselectAll();
}
MoveToLayerCommand::~MoveToLayerCommand() {
if (createNewLayer) {
delete createNewLayer;
}
}
std::string MoveToLayerCommand::describe() {
const size_t number_of_objects = objects.size();
- return tfm::format(ngettext("Move %d objects from layer %s to layer %s", "Move %d objects from layer %s to layer %s", number_of_objects).c_str(),
+ return tfm::format(ngettext("Move %d object from layer %s to layer %s", "Move %d objects from layer %s to layer %s", number_of_objects).c_str(),
number_of_objects, oldName, newName);
}
void MoveToLayerCommand::removeGameObject() {
// Remove objects
for (int index = 0; index < (int)objects.size(); index++) {
Scenery *scenery = objects[index];
//Now we remove the object from scenery.
for (auto it = editor->sceneryLayers.begin(); it != editor->sceneryLayers.end(); ++it){
auto it2 = find(it->second->objects.begin(), it->second->objects.end(), scenery);
if (it2 != it->second->objects.end()) {
it->second->objects.erase(it2);
break;
}
}
}
}
void MoveToLayerCommand::addGameObject(const std::string& layer) {
// Add objects
const auto& target = editor->sceneryLayers[layer];
for (int index = 0; index < (int)objects.size(); index++) {
target->objects.push_back(objects[index]);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 16, 8:16 PM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
63532
Default Alt Text
(132 KB)

Event Timeline