Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
90 KB
Referenced Files
None
Subscribers
None
diff --git a/data/levelpacks/tutorial/locale/zh_CN.po b/data/levelpacks/tutorial/locale/zh_CN.po
index 47f4476..2f6c38b 100644
--- a/data/levelpacks/tutorial/locale/zh_CN.po
+++ b/data/levelpacks/tutorial/locale/zh_CN.po
@@ -1,513 +1,513 @@
# Simplified Chinese translation for Me and My Shadow
# Copyright (C) 2012 Me and My Shadow
# This file is distributed under the same license (GNU GPLv3) as the meandmyshadow package.
# acme_pjz <acme_pjz@hotmail.com>, 2012
#
msgid ""
msgstr ""
"Project-Id-Version: Me and my shadow\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-01 17:56+0300\n"
-"PO-Revision-Date: 2012-06-04 18:31+0800\n"
+"PO-Revision-Date: 2012-10-01 21:14+0800\n"
"Last-Translator: acme_pjz <acme_pjz@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: CHINA\n"
"X-Poedit-SourceCharset: utf-8\n"
#: tutorial/tut12.map:17
msgid "Now you'll need to help your shadow cross.\n"
msgstr "现在你要帮助你的阴影过来。\n"
#: tutorial/tut07.map:33
msgid ""
"If your shadow dies you'll have to restart.\n"
"Restart the game by pressing the 'R' key."
msgstr ""
"如果你的阴影死掉了,你最好重新开始。\n"
"按'R'键可以重新开始。"
#: tutorial/tut18.map:14
msgid ""
"This trigger will deactivate the moving block.\n"
"Try to stop it at the right moment.\n"
"You can only do this once, so if it fails you'll\n"
"have to reset the level with the 'R' key."
msgstr ""
"这个机关可以让移动砖块停止运动。\n"
"试着让它在合适的地方停止运动。\n"
"你只有一次机会做这事情,\n"
"一旦你失败了,按'R'键重新开始游戏吧。"
#: tutorial/tut20.map:1
msgid "Portal mayhem"
msgstr "混乱的传送门"
#: tutorial/tut21.map:49
msgid ""
"If your shadow falls down here you will have to restart.\n"
"Press 'R' to restart the level."
msgstr ""
"如果你的阴影掉了下来,你不得不重新开始。\n"
"按'R'键可以重新开始。"
#: tutorial/tut02.map:18
msgid ""
"You can jump using the up key.\n"
"Try jumping over these blocks."
msgstr ""
"你可以按上键来进行跳跃。\n"
"试着跳过这些凸起的砖块。"
#: tutorial/tut23.map:1
msgid "Collecting Keys"
msgstr "收集钥匙"
#: tutorial/tut10.map:46
msgid "You've chosen the right way."
msgstr "恭喜你选择了正确的道路。"
#: tutorial/tut22.map:1
msgid "Shadow swap"
msgstr "阴影的交换"
#: tutorial/tut20.map:187
msgid ""
"A dead end, you'd better go back and choose\n"
"the other portal."
msgstr ""
"这是一条死路,你最好回去\n"
"再选择另一个传送点。"
#: tutorial/tut03.map:13
msgid ""
"See those gaps over there?\n"
"Reach the finish without falling."
msgstr ""
"看到这些缺口了么?\n"
"去终点的时候,小心不要掉到里面去了。"
#: tutorial/tut05.map:1
msgid "Shadow"
msgstr "初识阴影"
#: tutorial/tut10.map:19
msgid ""
"You can save your progress in a level with\n"
"checkpoints. You can restore them at any\n"
"time using the F3 button."
msgstr ""
"在玩一关的时候,\n"
"你可以在记录点处保存你的进度。\n"
"你可以在任意时候按F3键读取进度。"
#: tutorial/tut01.map:18
msgid ""
"Welcome to Me and My Shadow.\n"
"You can use the arrow keys to walk to the exit.\n"
"\n"
"Good luck!"
msgstr ""
"欢迎来到Me and My Shadow。\n"
"用方向键走到终点吧。\n"
"\n"
"祝你好运!"
#: tutorial/tut07.map:1
msgid "Shadow challenge"
msgstr "阴影挑战"
#: tutorial/tut22.map:22
msgid ""
"You need your shadow to reach the exit.\n"
"Make use of the swapper to get him down (or \n"
"to get yourself down)."
msgstr ""
"你需要你的阴影才能到达终点。\n"
"利用交换点来使它下来\n"
"(或者说使你自己下来)。"
#: tutorial/tut02.map:1
msgid "First jumps"
msgstr "初次跳跃"
#: tutorial/tut20.map:16
msgid ""
"Portals point to another portal or to nothing.\n"
"Try to reach the exit in this portal mayhem."
msgstr ""
"传送点通向另一个传送点,或者什么地方都到不了。\n"
"试着在这传送点的迷阵中走到终点。"
#: tutorial/tut08.map:21
msgid ""
"You and your shadow need to work together.\n"
"Move your shadow towards the wall and jump\n"
"on him so that you can jump over the wall."
msgstr ""
"你和你的阴影必须通力合作。\n"
"把你的阴影移动到墙下面,\n"
"然后跳到它上面,这样你才能跳过墙。"
#: tutorial/tut11.map:17
msgid ""
"Until now the levels were static.\n"
"There are however moving blocks."
msgstr ""
"到目前为止,所有的关卡都还是静态的。\n"
"但是游戏里还有移动的砖块。"
#: tutorial/tut10.map:32
msgid "Save your progress here."
msgstr "在这里保存你的进度。"
#: tutorial/tut24.map:18
msgid ""
"That's all there is.\n"
"Now it's time to put your skills to the test.\n"
"Enter the exit to go to the last level.\n"
"Good luck!"
msgstr ""
"这是教学关卡的全部内容。\n"
"现在到了测试你所学习到的技巧的时候了。\n"
"走进终点,去到最后一关。\n"
"祝你好运!"
#: tutorial/tut10.map:54
msgid ""
"This is the wrong way.\n"
"Go back to the previous checkpoint by pressing F3."
msgstr ""
"这是条错路。\n"
"按F3键回到上一个记录点吧。"
#: tutorial/tut16.map:1
msgid "The switch"
msgstr "开关"
#: tutorial/tut25.map:13
msgid "The very best of luck!"
-msgstr "非常好运!"
+msgstr "祝你好运!"
#: tutorial/tut20.map:156
msgid "Now choose one of the two."
msgstr "现在在这两个之中选一个。"
#: tutorial/tut15.map:20
msgid ""
"This gap is impossible to jump over.\n"
"Step on the button next of you."
msgstr ""
"这缺口太宽了,没法跳过去。\n"
"站在你前面的按钮上试试。"
#: tutorial/tut25.map:46
msgid ""
"TIP:\n"
"Try to get your shadow in front of the shadow\n"
"wall. If he falls down you'd better restart."
msgstr ""
"提示:\n"
"试着把你的阴影走到阴影砖块的墙前面。\n"
"如果它掉了下来,你还是重新开始吧。"
#: tutorial/tut13.map:18
msgid "Watch out for the moving spikes."
msgstr "小心移动的刺。"
#: tutorial/tut25.map:318
msgid "You have made it!"
msgstr "你终于做到了!"
#: tutorial/tut17.map:1
msgid "Toggle trigger"
msgstr "触发机关"
#: tutorial/tut15.map:1
msgid "Triggering"
msgstr "初识机关"
#: tutorial/tut13.map:1
msgid "Moving spikes"
msgstr "移动的刺"
#: tutorial/tut06.map:23
msgid ""
"NOTE:\n"
"Although you can't jump on those blocks\n"
"you can record the jumps for your shadow."
msgstr ""
"提示:\n"
"虽然你不能跳上这些砖块,\n"
"但是你可以记录你的跳跃动作给你的阴影。"
#: tutorial/tut18.map:1
msgid "Stop trigger"
msgstr "停下机关"
#: tutorial/tut01.map:1
msgid "Walk in the park"
msgstr "公园漫步"
#: tutorial/tut09.map:14
msgid ""
"Those blocks are fragile.\n"
"If you step on them too often they'll break."
msgstr ""
"这些砖块是易碎的。\n"
"如果你踩它们太多的话,它们会碎掉。"
#: tutorial/tut19.map:1
msgid "First portals"
msgstr "初识传送门"
#: tutorial/tut25.map:1
msgid "Final"
msgstr "期末测验"
#: tutorial/tut04.map:1
msgid "First spikes"
msgstr "初识带刺砖块"
#: tutorial/tut05.map:32
msgid ""
"TIP:\n"
"Think what moves your shadow has to make.\n"
"Then let your character record those moves.\n"
"You can break it down into smaller recordings."
msgstr ""
"提示:想想你的阴影需要完成什么动作。\n"
"然后你自己做这些动作,并记录下来。\n"
"你可以把较长的动作分成多次较短的动作。"
#: tutorial/tut12.map:1
msgid "Moving shadow blocks"
msgstr "移动阴影砖块"
#: tutorial/tut14.map:1
msgid "Conveyor madness"
msgstr "疯狂的传送带"
#: tutorial/tut06.map:1
msgid "Shadow walk"
msgstr "阴影漫步"
#: tutorial/tut21.map:8
msgid ""
"Now it's time for something completely\n"
"different: swappoints. When you or your\n"
"shadow activate them you'll swap places."
msgstr ""
"现在我们将看到全新的东西:\n"
"交换点。当你或你的阴影激活交换点的时候,\n"
"你们会交换位置。"
#: tutorial/tut06.map:27
msgid ""
"Only your shadow can stand on those shadow\n"
"blocks. Try to get him up there."
msgstr ""
"只有你的阴影能站在这些阴影砖块上。\n"
"试着让它上去。"
#: tutorial/tut17.map:14
msgid ""
"You've only seen triggers that activate other\n"
"blocks, but they can also deactivate or toggle\n"
"them."
msgstr ""
"到现在为止,你只看到了能激活其它砖块的开关。\n"
"不过开关也能停下移动砖块,\n"
"或者切换它们的移动状态。"
#: tutorial/tut14.map:68
msgid ""
"When standing on conveyor belts you'll\n"
"move without walking."
msgstr ""
"当站在传送带上的时候,\n"
"即使你自己不走动,也会被移动。"
#: tutorial/tut22.map:33
msgid ""
"TIP:\n"
"When your shadow is trapped stand on the\n"
"right side of the shadow blocks. Now record \n"
"the down key and let your shadow mimic."
msgstr ""
"提示:\n"
"当你的阴影被困住的时候,\n"
"请站在阴影砖块的右边。\n"
"然后记录下键,让你的阴影模仿。"
#: tutorial/tut08.map:1
msgid "Teamwork"
msgstr "团队合作"
#: tutorial/tut14.map:71
msgid ""
"Let the shadow finish the level by walking to\n"
"the finish. But don't stand still because your\n"
"shadow will move all the way back."
msgstr ""
"让你的阴影走到终点已完成本关。\n"
"不过不要站着不动,\n"
"因为这样你的阴影会移动回来。"
#: tutorial/tut24.map:1
msgid "Warning"
msgstr "警告"
#: tutorial/tut23.map:18
msgid ""
"One thing you need to know before you're ready are keys.\n"
"Sometimes there are keys spread around the level.\n"
"The exit is locked until you get all the keys."
msgstr ""
"在你准备好之前,你还要知道有关钥匙的事情。\n"
"有时候关卡中会散落一些钥匙。\n"
"除非你集齐了所有的钥匙,否则终点是被锁住的。"
#: tutorial/tut03.map:34
msgid "Good job!"
msgstr "干得不错!"
#: tutorial/tut16.map:14
msgid ""
"There's another type of trigger: the switch.\n"
"Use the switch to activate the elevator so that you\n"
"can reach the exit."
msgstr ""
"这里有另一种类型的机关:开关。\n"
"走过去打开开关,以激活升降梯,\n"
"这样你就可以到达终点。"
#: tutorial/tut09.map:1
msgid "Fragile"
msgstr "易碎砖块"
#: tutorial/tut25.map:459
msgid "Where could your shadow be?"
msgstr "你的阴影能在什么地方呢?"
#: tutorial/tut19.map:42
msgid ""
"NOTE:\n"
"You can go back by entering this portal.\n"
"It is however a bit different, you don't have to\n"
"press the down key, it will activate when you walk in it."
msgstr ""
"说明:\n"
"进入这个传送门,你可以回去。\n"
"不过这次有一些不一样,\n"
"你不需要按键,只需要走进去就会自动传送。"
#: tutorial/tut03.map:1
msgid "Jumping around"
msgstr "四处跳跃"
#: tutorial/tut10.map:1
msgid "Checkpoints"
msgstr "记录点"
#: tutorial/tut07.map:19
msgid ""
"Spikes are not only deadly for you,\n"
"but also for your shadow."
msgstr ""
"带刺砖块不仅对你是致命的,\n"
"而且对你的阴影也是。"
#: tutorial/tut21.map:1
msgid "Swappoints"
msgstr "交换点"
#: tutorial/tut04.map:19
msgid ""
"Spikes are deadly.\n"
"Don't touch them!"
msgstr ""
"带刺砖块是致命的。\n"
"不要碰它们!"
#: tutorial/levels.lst:2
msgid "Step by step introduction"
msgstr "一步步地介绍游戏玩法"
#: tutorial/tut11.map:1
msgid "Moving blocks"
msgstr "移动砖块"
#: tutorial/tut19.map:39
msgid ""
"Now it's time to check out the portals.\n"
"To get to the exit you'll have to take the portal.\n"
"Walk to it and press the down arrow to\n"
"activate."
msgstr ""
"现在我们来看看传送点。\n"
"要去终点,你要穿过传送门。\n"
"走到传送门上面,\n"
"按下键进入传送门。"
#: tutorial/tut05.map:29
msgid ""
"You can't reach the exit, but your shadow can.\n"
"Press space to record your moves.\n"
"Press space once again to let your shadow\n"
"mimic your recording."
msgstr ""
"你自己不能去到终点,但是你的阴影可以。\n"
"按空格键开始记录你的移动。\n"
"再按一次空格键,\n"
"你的阴影就会模仿你刚才记录的动作。"
#: tutorial/levels.lst:1
msgid "You have finished the tutorial!"
msgstr "恭喜你完成教学关卡!"
#~ msgid ""
#~ "TIP:\n"
#~ "Try to get your shadow here as well.\n"
#~ "If you stand on him you can jump further."
#~ msgstr ""
#~ "提示:\n"
#~ "最好能把你的阴影也送过来。\n"
#~ "你站在它的上面可以跳得更远。"
#~ msgid ""
#~ "This looks like a normal row of blocks.\n"
#~ "But watch what happens when you push the\n"
#~ "button in front of you."
#~ msgstr ""
#~ "这看起来很像一排普通的砖块。\n"
#~ "不过你可以看看当你按下前面的开关的时候\n"
#~ "会发生什么事情。"
#~ msgid ""
#~ "There are always two portals in a level.\n"
#~ "Unless they are broken, but this doesn't mean\n"
#~ "you can always go back the way you came."
#~ msgstr ""
#~ "游戏里总是有两种传送门。\n"
#~ "有一种是坏掉的,另一种没有坏掉。\n"
#~ "但这并不意味着你总是能回到你来的地方。"
#~ msgid "Now try to go through the portal again."
#~ msgstr "现在试试再次穿过传送门。"
#~ msgid "One-way portal"
#~ msgstr "单向传送门"
#~ msgid ""
#~ "TIP:\n"
#~ "Let your shadow walk over the shadow bridge.\n"
#~ "Then activate the swappoint."
#~ msgstr ""
#~ "提示:\n"
#~ "让你的阴影走过阴影砖块组成的桥。\n"
#~ "然后激活交换点。"
diff --git a/data/locale/zh_CN.po b/data/locale/zh_CN.po
index 9bb1e85..2dc65b9 100644
--- a/data/locale/zh_CN.po
+++ b/data/locale/zh_CN.po
@@ -1,1333 +1,1470 @@
# Simplified Chinese translation for Me and My Shadow
# Copyright (C) 2012 Me and My Shadow
# This file is distributed under the same license (GNU GPLv3) as the meandmyshadow package.
# acme_pjz <acme_pjz@hotmail.com>, 2012
#
msgid ""
msgstr ""
"Project-Id-Version: Me and my shadow\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-19 16:33+0800\n"
-"PO-Revision-Date: 2012-08-19 16:57+0800\n"
+"POT-Creation-Date: 2012-12-02 23:28+0800\n"
+"PO-Revision-Date: 2012-12-02 23:35+0800\n"
"Last-Translator: acme_pjz <acme_pjz@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: CHINA\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-KeywordsList: _;__\n"
"X-Poedit-SearchPath-0: F:\\Projects\\meandmyshadow\\src\n"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:46
+#: ../src/Addons.cpp:46
+#: ../src/TitleMenu.cpp:52
msgid "Addons"
msgstr "附加组件"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:64
+#: ../src/Addons.cpp:65
msgid "Unable to initialize addon menu:"
msgstr "不能初始化附加组件菜单:"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:72
-#: F:\Projects\meandmyshadow\src/Addons.cpp:121
+#: ../src/Addons.cpp:73
+#: ../src/Addons.cpp:122
+#: ../src/LevelEditSelect.cpp:74
+#: ../src/LevelSelect.cpp:201
+#: ../src/StatisticsScreen.cpp:323
+#: ../src/TitleMenu.cpp:813
msgid "Back"
msgstr "后退"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:103
+#: ../src/Addons.cpp:104
msgid "Levels"
msgstr "关卡列表"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:104
+#: ../src/Addons.cpp:105
msgid "Level Packs"
msgstr "关卡包"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:105
+#: ../src/Addons.cpp:106
msgid "Themes"
msgstr "主题"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:125
-#: F:\Projects\meandmyshadow\src/Addons.cpp:606
+#: ../src/Addons.cpp:126
+#: ../src/Addons.cpp:607
msgid "Install"
msgstr "安装"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:129
+#: ../src/Addons.cpp:130
msgid "Update"
msgstr "升级"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:140
+#: ../src/Addons.cpp:141
msgid "ERROR: unable to download addons file!"
-msgstr "错误:无法下载附加组件!"
+msgstr "错误: 无法下载附加组件!"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:152
+#: ../src/Addons.cpp:153
msgid "ERROR: unable to load addon_list file!"
-msgstr "错误:无法加载文件addon_list!"
+msgstr "错误: 无法加载文件addon_list!"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:163
+#: ../src/Addons.cpp:164
msgid "ERROR: Invalid file format of addons file!"
-msgstr "错误:文件addons的格式无效!"
+msgstr "错误: 文件addons的格式无效!"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:184
+#: ../src/Addons.cpp:185
msgid "ERROR: Unable to create the installed_addons file."
-msgstr "错误:无法创建文件installed_addons。"
+msgstr "错误: 无法创建文件installed_addons。"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:196
+#: ../src/Addons.cpp:197
msgid "ERROR: Invalid file format of the installed_addons!"
-msgstr "错误:文件installed_addons的格式无效!"
-
-#: F:\Projects\meandmyshadow\src/Addons.cpp:411
-#: F:\Projects\meandmyshadow\src/Addons.cpp:428
-#: F:\Projects\meandmyshadow\src/Addons.cpp:445
-#: F:\Projects\meandmyshadow\src/Addons.cpp:472
-#: F:\Projects\meandmyshadow\src/Addons.cpp:489
-#: F:\Projects\meandmyshadow\src/Addons.cpp:503
+msgstr "错误: 文件installed_addons的格式无效!"
+
+#: ../src/Addons.cpp:412
+#: ../src/Addons.cpp:429
+#: ../src/Addons.cpp:446
+#: ../src/Addons.cpp:473
+#: ../src/Addons.cpp:490
+#: ../src/Addons.cpp:504
msgid "ERROR: Unable to download addon!"
-msgstr "错误:无法下载附加组件"
-
-#: F:\Projects\meandmyshadow\src/Addons.cpp:411
-#: F:\Projects\meandmyshadow\src/Addons.cpp:428
-#: F:\Projects\meandmyshadow\src/Addons.cpp:445
-#: F:\Projects\meandmyshadow\src/Addons.cpp:472
-#: F:\Projects\meandmyshadow\src/Addons.cpp:489
-#: F:\Projects\meandmyshadow\src/Addons.cpp:503
+msgstr "错误: 无法下载附加组件"
+
+#: ../src/Addons.cpp:412
+#: ../src/Addons.cpp:429
+#: ../src/Addons.cpp:446
+#: ../src/Addons.cpp:473
+#: ../src/Addons.cpp:490
+#: ../src/Addons.cpp:504
msgid "ERROR:"
-msgstr "错误:"
+msgstr "错误:"
-#: F:\Projects\meandmyshadow\src/Addons.cpp:601
+#: ../src/Addons.cpp:602
msgid "Uninstall"
msgstr "卸载"
-#: F:\Projects\meandmyshadow\src/Block.cpp:547
+#: ../src/Block.cpp:582
+#: ../src/LevelEditor.cpp:2302
msgid "On"
msgstr "开启"
-#: F:\Projects\meandmyshadow\src/Block.cpp:548
+#: ../src/Block.cpp:583
+#: ../src/LevelEditor.cpp:2303
msgid "Off"
msgstr "关闭"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:605
-#: F:\Projects\meandmyshadow\src/Functions.cpp:606
-#: F:\Projects\meandmyshadow\src/Functions.cpp:607
-#: F:\Projects\meandmyshadow\src/Functions.cpp:623
+#. / 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:615
+#: ../src/Functions.cpp:616
+#: ../src/Functions.cpp:617
+#: ../src/Functions.cpp:633
msgid "knewave"
msgstr "DroidSansFallback"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:611
+#. / 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:621
msgid "Blokletters-Viltstift"
msgstr "DroidSansFallback"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:684
+#: ../src/Functions.cpp:733
msgid "Loading..."
msgstr "正在读取..."
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1215
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1242
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1580
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:233
+#: ../src/Functions.cpp:1286
+#: ../src/Functions.cpp:1313
+#: ../src/Functions.cpp:1651
+#: ../src/InputManager.cpp:233
+#: ../src/LevelEditor.cpp:1495
+#: ../src/LevelEditor.cpp:2097
+#: ../src/LevelEditor.cpp:2139
+#: ../src/LevelEditor.cpp:2187
+#: ../src/LevelEditor.cpp:2252
+#: ../src/LevelEditor.cpp:2341
+#: ../src/LevelEditor.cpp:2385
+#: ../src/LevelEditSelect.cpp:232
+#: ../src/LevelEditSelect.cpp:264
+#: ../src/LevelEditSelect.cpp:300
msgid "OK"
msgstr "确定"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1216
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1228
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1238
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1584
+#: ../src/Functions.cpp:1287
+#: ../src/Functions.cpp:1299
+#: ../src/Functions.cpp:1309
+#: ../src/Functions.cpp:1655
+#: ../src/LevelEditor.cpp:1499
+#: ../src/LevelEditor.cpp:2101
+#: ../src/LevelEditor.cpp:2143
+#: ../src/LevelEditor.cpp:2191
+#: ../src/LevelEditor.cpp:2256
+#: ../src/LevelEditor.cpp:2345
+#: ../src/LevelEditor.cpp:2389
+#: ../src/LevelEditSelect.cpp:236
+#: ../src/LevelEditSelect.cpp:268
+#: ../src/LevelEditSelect.cpp:304
+#: ../src/TitleMenu.cpp:496
msgid "Cancel"
msgstr "取消"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1220
+#: ../src/Functions.cpp:1291
msgid "Abort"
msgstr "终止"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1221
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1237
+#: ../src/Functions.cpp:1292
+#: ../src/Functions.cpp:1308
msgid "Retry"
msgstr "重试"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1222
+#: ../src/Functions.cpp:1293
msgid "Ignore"
msgstr "忽略"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1226
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1232
+#: ../src/Functions.cpp:1297
+#: ../src/Functions.cpp:1303
msgid "Yes"
msgstr "是"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1227
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1233
+#: ../src/Functions.cpp:1298
+#: ../src/Functions.cpp:1304
msgid "No"
msgstr "否"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1351
+#. / TRANSLATORS: Filename is coming before this text
+#: ../src/Functions.cpp:1422
#, c-format
msgid ""
"%s already exists.\n"
"Do you want to overwrite it?"
msgstr ""
"%s 已经存在。\n"
"你是否想要覆盖它?"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1351
+#: ../src/Functions.cpp:1422
msgid "Overwrite Prompt"
msgstr "文件覆盖提示"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1372
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1390
+#: ../src/Functions.cpp:1443
+#: ../src/Functions.cpp:1461
#, c-format
msgid "Can't open file %s."
msgstr "不能打开文件 %s。"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1372
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1390
+#: ../src/Functions.cpp:1443
+#: ../src/Functions.cpp:1461
msgid "Error"
msgstr "错误"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1521
+#: ../src/Functions.cpp:1592
msgid "Save File"
msgstr "保存文件"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1521
+#: ../src/Functions.cpp:1592
msgid "Load File"
msgstr "打开文件"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1525
+#: ../src/Functions.cpp:1596
msgid "Search In"
msgstr "查找范围"
-#: F:\Projects\meandmyshadow\src/Functions.cpp:1535
+#: ../src/Functions.cpp:1606
msgid "File Name"
msgstr "文件名"
-#: F:\Projects\meandmyshadow\src/Game.cpp:246
-#: F:\Projects\meandmyshadow\src/Game.cpp:915
+#. / 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:262
+#: ../src/Game.cpp:931
#, c-format
msgid "Level %d %s"
msgstr "第 %d 关 %s"
-#: F:\Projects\meandmyshadow\src/Game.cpp:735
+#. / TRANSLATORS: Please do not remove %s from your translation:
+#. / - %s will be replaced with current action key
+#: ../src/Game.cpp:751
#, c-format
msgid "Press %s key to save the game."
msgstr "按 %s 键来保存游戏。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:740
+#. / TRANSLATORS: Please do not remove %s from your translation:
+#. / - %s will be replaced with current action key
+#: ../src/Game.cpp:756
#, c-format
msgid "Press %s key to swap the position of player and shadow."
msgstr "按 %s 键交换你和阴影的位置。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:745
+#. / TRANSLATORS: Please do not remove %s from your translation:
+#. / - %s will be replaced with current action key
+#: ../src/Game.cpp:761
#, c-format
msgid "Press %s key to activate the switch."
msgstr "按 %s 键来激活开关。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:750
+#. / TRANSLATORS: Please do not remove %s from your translation:
+#. / - %s will be replaced with current action key
+#: ../src/Game.cpp:766
#, c-format
msgid "Press %s key to teleport."
msgstr "按 %s 键传送。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:791
+#. / 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:807
#, c-format
msgid "Press %s to restart current level or press %s to load the game."
msgstr "按 %s 键重新开始游戏,或者按 %s 键读取进度。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:803
+#. / TRANSLATORS: Please do not remove %s from your translation:
+#. / - %s will be replaced with currently configured key to restart game
+#: ../src/Game.cpp:819
#, c-format
msgid "Press %s to restart current level."
msgstr "按 %s 键重新开始游戏。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:817
+#: ../src/Game.cpp:833
msgid "Your shadow has died."
msgstr "你的阴影死掉了。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:868
+#: ../src/Game.cpp:884
#, c-format
msgid "%d recordings"
msgstr "记录数 %d"
-#: F:\Projects\meandmyshadow\src/Game.cpp:907
+#. / TRANSLATORS: This is caption for finished level
+#: ../src/Game.cpp:923
msgid "You've finished:"
-msgstr "恭喜你完成了:"
+msgstr "恭喜你完成了:"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1093
+#. / 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:1109
#, c-format
msgid "Time: %-.2fs"
msgstr "时间: %-.2f秒"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1102
+#. / 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:1118
#, c-format
msgid "Best time: %-.2fs"
msgstr "最佳时间: %-.2f秒"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1113
+#: ../src/Game.cpp:1129
#, c-format
msgid "Target time: %-.2fs"
msgstr "目标时间: %-.2f秒"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1134
+#. / TRANSLATORS: Please do not remove %d from your translation:
+#. / - %d means the number of recordings user has made
+#: ../src/Game.cpp:1150
#, c-format
msgid "Recordings: %d"
msgstr "记录次数: %d"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1142
+#. / TRANSLATORS: Please do not remove %d from your translation:
+#. / - %d means the number of recordings user has made
+#: ../src/Game.cpp:1158
#, c-format
msgid "Best recordings: %d"
msgstr "最佳记录次数: %d"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1152
+#: ../src/Game.cpp:1168
#, c-format
msgid "Target recordings: %d"
msgstr "目标记录次数: %d"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1165
+#. / 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:1181
#, c-format
msgid "You earned the %s medal"
msgstr "你拿到了%s"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1165
+#: ../src/Game.cpp:1181
msgid "GOLD"
msgstr "金牌"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1165
+#: ../src/Game.cpp:1181
msgid "SILVER"
msgstr "银牌"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1165
+#: ../src/Game.cpp:1181
msgid "BRONZE"
msgstr "铜牌"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1180
+#. / TRANSLATORS: used as return to the level selector menu
+#: ../src/Game.cpp:1196
msgid "Menu"
msgstr "菜单"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1187
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#. / TRANSLATORS: used as restart level
+#: ../src/Game.cpp:1203
+#: ../src/InputManager.cpp:44
msgid "Restart"
msgstr "重新开始"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1194
+#. / TRANSLATORS: used as next level
+#: ../src/Game.cpp:1210
msgid "Next"
msgstr "下一关"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1249
+#: ../src/Game.cpp:1265
msgid "Game replay is done."
msgstr "游戏重放已经完成。"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1249
+#: ../src/Game.cpp:1265
msgid "Game Replay"
msgstr "游戏重放"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1420
-#: F:\Projects\meandmyshadow\src/Game.cpp:1422
+#: ../src/Game.cpp:1448
+#: ../src/Game.cpp:1450
msgid "Congratulations"
msgstr "恭喜你"
-#: F:\Projects\meandmyshadow\src/Game.cpp:1422
+#: ../src/Game.cpp:1450
msgid "You have finished the levelpack!"
msgstr "你已经完成了整个关卡包!"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Up (in menu)"
msgstr "上(在菜单中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Down (in menu)"
msgstr "下(在菜单中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Left"
msgstr "左"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Right"
msgstr "右"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Jump"
msgstr "跳跃"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Action"
msgstr "动作键"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Space (Record)"
msgstr "空格(记录键)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:43
+#: ../src/InputManager.cpp:43
msgid "Cancel recording"
msgstr "取消记录"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#: ../src/InputManager.cpp:44
msgid "Escape"
msgstr "退出"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#: ../src/InputManager.cpp:44
msgid "Tab (View shadow/Level prop.)"
msgstr "Tab (切换视角/关卡属性)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#: ../src/InputManager.cpp:44
msgid "Save game (in editor)"
msgstr "保存游戏(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#: ../src/InputManager.cpp:44
msgid "Load game"
msgstr "读取游戏"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:44
+#: ../src/InputManager.cpp:44
msgid "Swap (in editor)"
msgstr "交换玩家和阴影的位置(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:45
+#: ../src/InputManager.cpp:45
msgid "Teleport (in editor)"
msgstr "传送(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:45
+#: ../src/InputManager.cpp:45
msgid "Suicide (in editor)"
msgstr "自杀(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:45
+#: ../src/InputManager.cpp:45
msgid "Shift (in editor)"
msgstr "Shift (地图编辑器辅助按键)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:45
+#: ../src/InputManager.cpp:45
msgid "Next block type (in Editor)"
msgstr "下一个砖块类型(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:46
+#: ../src/InputManager.cpp:46
msgid "Previous block type (in editor)"
msgstr "上一个砖块类型(在地图编辑器中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:46
+#: ../src/InputManager.cpp:46
msgid "Select (in menu)"
msgstr "选择键(在菜单中)"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:204
+#: ../src/InputManager.cpp:204
+#: ../src/TitleMenu.cpp:475
msgid "Config Keys"
msgstr "设置按键"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:207
+#: ../src/InputManager.cpp:207
msgid "Select an item and press a key to config it."
-msgstr "选择一个项目,然后按键进行设置。"
+msgstr "选择一个项目, 然后按键进行设置。"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:221
+#: ../src/InputManager.cpp:221
msgid "Primary key"
msgstr "主按键"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:222
+#: ../src/InputManager.cpp:222
msgid "Alternative key"
msgstr "辅助按键"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:228
+#: ../src/InputManager.cpp:228
msgid "Unset the key"
msgstr "取消设置"
-#: F:\Projects\meandmyshadow\src/InputManager.cpp:298
+#: ../src/InputManager.cpp:299
msgid "(Not set)"
msgstr "(未设置)"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:63
+#: ../src/LevelEditor.cpp:64
msgid "Block"
msgstr "砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:63
+#: ../src/LevelEditor.cpp:64
msgid "Player Start"
msgstr "玩家起点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:63
+#: ../src/LevelEditor.cpp:64
msgid "Shadow Start"
msgstr "阴影起点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:64
+#: ../src/LevelEditor.cpp:65
msgid "Exit"
msgstr "终点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:64
+#: ../src/LevelEditor.cpp:65
msgid "Shadow Block"
msgstr "阴影砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:64
+#: ../src/LevelEditor.cpp:65
msgid "Spikes"
msgstr "带刺砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:65
+#: ../src/LevelEditor.cpp:66
msgid "Checkpoint"
msgstr "记录点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:65
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:293
+#: ../src/LevelEditor.cpp:66
+#: ../src/LevelEditSelect.cpp:295
msgid "Swap"
msgstr "交换点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:65
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2468
+#: ../src/LevelEditor.cpp:66
+#: ../src/LevelEditor.cpp:2365
msgid "Fragile"
msgstr "易碎砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:66
+#: ../src/LevelEditor.cpp:67
msgid "Moving Block"
msgstr "移动砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:66
+#: ../src/LevelEditor.cpp:67
msgid "Moving Shadow Block"
msgstr "移动阴影砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:66
+#: ../src/LevelEditor.cpp:67
msgid "Moving Spikes"
msgstr "移动的刺"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:67
+#: ../src/LevelEditor.cpp:68
msgid "Teleporter"
msgstr "传送点"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:67
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2387
+#: ../src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:2289
msgid "Button"
msgstr "按钮"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:67
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2389
+#: ../src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:2291
msgid "Switch"
msgstr "开关"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:69
msgid "Conveyor Belt"
msgstr "传送带"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:69
msgid "Shadow Conveyor Belt"
msgstr "阴影传送带"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:69
msgid "Notification Block"
msgstr "消息方块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:68
+#: ../src/LevelEditor.cpp:69
msgid "Collectable"
msgstr "可收集的物品"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:154
+#: ../src/LevelEditor.cpp:69
+msgid "Puhsable"
+msgstr "可推动砖块"
+
+#: ../src/LevelEditor.cpp:103
msgid "Toolbox"
msgstr "工具箱"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:506
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3126
+#: ../src/LevelEditor.cpp:421
+#: ../src/LevelEditor.cpp:3050
msgid "Select"
msgstr "选择"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:521
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3135
+#: ../src/LevelEditor.cpp:436
+#: ../src/LevelEditor.cpp:3059
msgid "Configure"
msgstr "设置"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:536
+#: ../src/LevelEditor.cpp:451
msgid "Link"
msgstr "链接"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:551
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3132
+#: ../src/LevelEditor.cpp:466
+#: ../src/LevelEditor.cpp:3056
msgid "Delete"
msgstr "删除"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:946
+#: ../src/LevelEditor.cpp:864
msgid "Are you sure you want to quit?"
msgstr "你确定要退出吗?"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:946
+#: ../src/LevelEditor.cpp:864
msgid "Quit prompt"
msgstr "退出提示"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1045
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1047
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1505
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1507
+#: ../src/LevelEditor.cpp:964
+#: ../src/LevelEditor.cpp:966
+#: ../src/LevelEditor.cpp:1441
+#: ../src/LevelEditor.cpp:1443
#, c-format
msgid "Level \"%s\" saved"
msgstr "关卡“%s”已保存"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1045
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1047
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1505
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1507
+#: ../src/LevelEditor.cpp:964
+#: ../src/LevelEditor.cpp:966
+#: ../src/LevelEditor.cpp:1441
+#: ../src/LevelEditor.cpp:1443
msgid "Saved"
msgstr "已保存"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1520
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3141
+#: ../src/LevelEditor.cpp:1450
+#: ../src/LevelEditor.cpp:3065
msgid "Level settings"
msgstr "关卡设置"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1524
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:205
+#: ../src/LevelEditor.cpp:1454
+#: ../src/LevelEditSelect.cpp:205
msgid "Name:"
-msgstr "名称:"
+msgstr "名称:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1530
+#: ../src/LevelEditor.cpp:1460
msgid "Theme:"
-msgstr "主题:"
+msgstr "主题:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1545
+#: ../src/LevelEditor.cpp:1475
msgid "Target time (s):"
-msgstr "目标时间(秒):"
+msgstr "目标时间(秒):"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:1556
+#: ../src/LevelEditor.cpp:1486
msgid "Target recordings:"
-msgstr "目标记录数:"
+msgstr "目标记录数:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2117
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2307
+#: ../src/LevelEditor.cpp:2043
+#: ../src/LevelEditor.cpp:2215
msgid "Defined"
msgstr "已设置"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2120
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2310
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2381
+#: ../src/LevelEditor.cpp:2046
+#: ../src/LevelEditor.cpp:2218
+#: ../src/LevelEditor.cpp:2283
msgid "None"
msgstr "无"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2127
+#: ../src/LevelEditor.cpp:2053
msgid "Moving block"
msgstr "移动砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2130
+#: ../src/LevelEditor.cpp:2056
msgid "Moving shadow block"
msgstr "移动阴影砖块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2133
+#: ../src/LevelEditor.cpp:2059
msgid "Moving spikes"
msgstr "移动的刺"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2140
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2259
+#: ../src/LevelEditor.cpp:2066
+#: ../src/LevelEditor.cpp:2173
msgid "Enabled"
msgstr "启用"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2146
+#: ../src/LevelEditor.cpp:2072
msgid "Loop"
msgstr "循环"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2152
+#: ../src/LevelEditor.cpp:2078
msgid "Path"
msgstr "路径"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2203
+#: ../src/LevelEditor.cpp:2123
msgid "Notification block"
msgstr "消息方块"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2206
+#: ../src/LevelEditor.cpp:2126
msgid "Enter message here:"
-msgstr "输入消息:"
-
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2251
-msgid "Shadow Conveyor belt"
-msgstr "阴影传送带"
+msgstr "输入消息:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2253
+#: ../src/LevelEditor.cpp:2165
msgid "Conveyor belt"
msgstr "传送带"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2265
+#: ../src/LevelEditor.cpp:2167
+msgid "Shadow Conveyor belt"
+msgstr "阴影传送带"
+
+#: ../src/LevelEditor.cpp:2179
msgid "Enter speed here:"
-msgstr "输入速度:"
+msgstr "输入速度:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2314
+#: ../src/LevelEditor.cpp:2222
msgid "Portal"
msgstr "传送门"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2317
+#: ../src/LevelEditor.cpp:2225
msgid "Activate on touch"
msgstr "接触时传送"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2323
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2417
+#: ../src/LevelEditor.cpp:2231
+#: ../src/LevelEditor.cpp:2319
msgid "Targets:"
msgstr "目标:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2378
+#: ../src/LevelEditor.cpp:2280
#, c-format
msgid "%d Defined"
msgstr "已设置 %d 个"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2394
+#: ../src/LevelEditor.cpp:2296
msgid "Behaviour:"
-msgstr "行为:"
+msgstr "行为:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2402
+#: ../src/LevelEditor.cpp:2304
msgid "Toggle"
msgstr "切换"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2471
+#: ../src/LevelEditor.cpp:2368
msgid "State:"
-msgstr "状态:"
+msgstr "状态:"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2477
+#: ../src/LevelEditor.cpp:2374
msgid "Complete"
msgstr "完整的"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2478
+#: ../src/LevelEditor.cpp:2375
msgid "One step"
msgstr "踩了一次"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2479
+#: ../src/LevelEditor.cpp:2376
msgid "Two steps"
msgstr "踩了两次"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:2480
+#: ../src/LevelEditor.cpp:2377
msgid "Gone"
msgstr "已经破碎"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3129
+#: ../src/LevelEditor.cpp:3053
msgid "Add"
msgstr "添加"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3138
-#: F:\Projects\meandmyshadow\src/LevelPlaySelect.cpp:69
+#: ../src/LevelEditor.cpp:3062
+#: ../src/LevelPlaySelect.cpp:69
+#: ../src/TitleMenu.cpp:49
msgid "Play"
msgstr "开始游戏"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3144
+#: ../src/LevelEditor.cpp:3068
msgid "Save level"
msgstr "保存关卡"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3147
+#: ../src/LevelEditor.cpp:3071
msgid "Back to menu"
msgstr "回主菜单"
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3196
-#: F:\Projects\meandmyshadow\src/LevelEditor.cpp:3202
+#: ../src/LevelEditor.cpp:3120
+#: ../src/LevelEditor.cpp:3126
#, c-format
msgid "Movespeed: %s"
msgstr "移动速度: %s"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:46
+#: ../src/LevelEditSelect.cpp:46
+#: ../src/TitleMenu.cpp:51
msgid "Map Editor"
msgstr "地图编辑器"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:83
+#: ../src/LevelEditSelect.cpp:83
msgid "New Levelpack"
msgstr "新建关卡包"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:88
+#: ../src/LevelEditSelect.cpp:88
msgid "Pack Properties"
msgstr "关卡包属性"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:93
+#: ../src/LevelEditSelect.cpp:93
msgid "Remove Pack"
msgstr "删除关卡包"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:98
+#: ../src/LevelEditSelect.cpp:98
msgid "Move Map"
msgstr "移动地图"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:106
+#: ../src/LevelEditSelect.cpp:106
msgid "Remove Map"
msgstr "删除地图"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:111
+#: ../src/LevelEditSelect.cpp:111
msgid "Edit Map"
msgstr "编辑地图"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:202
+#: ../src/LevelEditSelect.cpp:202
msgid "Properties"
msgstr "属性"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:214
+#: ../src/LevelEditSelect.cpp:214
msgid "Description:"
-msgstr "描述:"
+msgstr "描述:"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:223
+#: ../src/LevelEditSelect.cpp:223
msgid "Congratulation text:"
-msgstr "完成提示:"
+msgstr "完成提示:"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:251
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:404
+#: ../src/LevelEditSelect.cpp:252
+#: ../src/LevelEditSelect.cpp:407
msgid "Add level"
msgstr "增加关卡"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:254
+#: ../src/LevelEditSelect.cpp:255
msgid "File name:"
-msgstr "文件名:"
+msgstr "文件名:"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:278
+#: ../src/LevelEditSelect.cpp:280
msgid "Move level"
msgstr "移动关卡"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:281
+#: ../src/LevelEditSelect.cpp:283
msgid "Level: "
-msgstr "关卡:"
+msgstr "关卡: "
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:291
+#: ../src/LevelEditSelect.cpp:293
msgid "Before"
msgstr "之前"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:292
+#: ../src/LevelEditSelect.cpp:294
msgid "After"
msgstr "之后"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:467
+#: ../src/LevelEditSelect.cpp:470
msgid "Are you sure?"
msgstr "你确定吗?"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:467
+#: ../src/LevelEditSelect.cpp:470
msgid "Remove prompt"
msgstr "删除提示"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:612
+#: ../src/LevelEditSelect.cpp:615
msgid "No file name given for the new level."
msgstr "没有给新关卡指定文件名。"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:612
+#: ../src/LevelEditSelect.cpp:615
msgid "Missing file name"
msgstr "文件名未指定"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:693
+#: ../src/LevelEditSelect.cpp:696
msgid "The entered level number isn't valid!"
msgstr "输入的关卡编号无效!"
-#: F:\Projects\meandmyshadow\src/LevelEditSelect.cpp:693
+#: ../src/LevelEditSelect.cpp:696
msgid "Illegal number"
msgstr "无效编号"
-#: F:\Projects\meandmyshadow\src/LevelPlaySelect.cpp:47
+#: ../src/LevelPlaySelect.cpp:47
msgid "Select Level"
msgstr "选择关卡"
-#: F:\Projects\meandmyshadow\src/LevelPlaySelect.cpp:96
+#: ../src/LevelPlaySelect.cpp:96
msgid "Choose a level"
msgstr "选择一个关卡"
-#: F:\Projects\meandmyshadow\src/LevelPlaySelect.cpp:97
+#: ../src/LevelPlaySelect.cpp:97
msgid "Time:"
msgstr "时间:"
-#: F:\Projects\meandmyshadow\src/LevelPlaySelect.cpp:98
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:178
+#: ../src/LevelPlaySelect.cpp:98
+#: ../src/StatisticsScreen.cpp:166
msgid "Recordings:"
msgstr "记录次数:"
-#: F:\Projects\meandmyshadow\src/StatisticsManager.cpp:359
+#: ../src/StatisticsManager.cpp:381
msgid "New achievement:"
-msgstr "新成就:"
+msgstr "新成就:"
-#: F:\Projects\meandmyshadow\src/StatisticsManager.cpp:367
+#: ../src/StatisticsManager.cpp:389
#, c-format
msgid "Achieved at %s"
msgstr "完成于 %s"
-#: F:\Projects\meandmyshadow\src/StatisticsManager.cpp:373
+#: ../src/StatisticsManager.cpp:395
msgid "Unknown achievement"
msgstr "未知成就"
-#: F:\Projects\meandmyshadow\src/StatisticsManager.cpp:379
+#: ../src/StatisticsManager.cpp:401
#, c-format
msgid "Achieved %0.1f%%"
msgstr "已完成 %0.1f%%"
-#: F:\Projects\meandmyshadow\src/StatisticsManager.cpp:383
+#: ../src/StatisticsManager.cpp:405
msgid "Not achieved"
msgstr "未完成"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:135
+#: ../src/StatisticsScreen.cpp:135
+#: ../src/TitleMenu.cpp:199
msgid "Achievements and Statistics"
msgstr "成就与统计信息"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:159
+#: ../src/StatisticsScreen.cpp:147
msgid "Total"
msgstr "总计"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:168
+#: ../src/StatisticsScreen.cpp:156
msgid "Traveling distance (m)"
msgstr "旅行距离(米)"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:169
+#: ../src/StatisticsScreen.cpp:157
msgid "Jump times"
msgstr "跳跃次数"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:170
+#: ../src/StatisticsScreen.cpp:158
msgid "Die times"
msgstr "死亡次数"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:171
+#: ../src/StatisticsScreen.cpp:159
msgid "Squashed times"
msgstr "被夹次数"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:178
+#: ../src/StatisticsScreen.cpp:166
msgid "Switch pulled times:"
-msgstr "使用开关次数:"
+msgstr "使用开关次数:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:179
+#: ../src/StatisticsScreen.cpp:167
msgid "Swap times:"
-msgstr "交换次数:"
+msgstr "交换次数:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:186
+#: ../src/StatisticsScreen.cpp:168
+msgid "Save times:"
+msgstr "保存游戏次数:"
+
+#: ../src/StatisticsScreen.cpp:168
+msgid "Load times:"
+msgstr "读取游戏次数:"
+
+#: ../src/StatisticsScreen.cpp:175
msgid "Completed levels:"
-msgstr "完成关卡数:"
+msgstr "完成关卡数:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:228
+#: ../src/StatisticsScreen.cpp:217
msgid "In-game time:"
-msgstr "游戏用时:"
+msgstr "游戏用时:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:241
+#: ../src/StatisticsScreen.cpp:230
msgid "Level editing time:"
-msgstr "地图编辑用时:"
+msgstr "地图编辑用时:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:253
+#: ../src/StatisticsScreen.cpp:242
msgid "Created levels:"
-msgstr "创建的关卡:"
+msgstr "创建的关卡:"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:341
+#: ../src/StatisticsScreen.cpp:330
msgid "Achievements"
msgstr "成就"
-#: F:\Projects\meandmyshadow\src/StatisticsScreen.cpp:342
+#: ../src/StatisticsScreen.cpp:331
msgid "Statistics"
msgstr "统计信息"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:50
+#: ../src/TitleMenu.cpp:50
msgid "Options"
msgstr "选项"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:53
+#: ../src/TitleMenu.cpp:53
msgid "Quit"
msgstr "退出"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:129
+#: ../src/TitleMenu.cpp:129
msgid "Enable internet in order to install addons."
-msgstr "启用网络访问,才能下载附加组件。"
+msgstr "启用网络访问, 才能下载附加组件。"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:129
+#: ../src/TitleMenu.cpp:129
msgid "Internet disabled"
msgstr "网络已禁用"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:206
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:710
+#: ../src/TitleMenu.cpp:206
+#: ../src/TitleMenu.cpp:710
msgid "Credits"
msgstr "作者"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:237
+#: ../src/TitleMenu.cpp:237
msgid "Settings"
msgstr "选项"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:281
+#: ../src/TitleMenu.cpp:281
msgid "Music"
msgstr "音乐"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:289
+#: ../src/TitleMenu.cpp:289
msgid "Sound"
msgstr "音效"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:297
+#: ../src/TitleMenu.cpp:297
msgid "Fullscreen"
msgstr "全屏幕"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:302
+#: ../src/TitleMenu.cpp:302
msgid "Resolution"
msgstr "分辨率"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:384
+#: ../src/TitleMenu.cpp:384
msgid "Language"
msgstr "语言"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:393
+#. / TRANSLATORS: as detect user's language automatically
+#: ../src/TitleMenu.cpp:393
msgid "Auto-Detect"
msgstr "自动检测"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:421
+#: ../src/TitleMenu.cpp:421
msgid "Theme"
msgstr "主题"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:454
+#: ../src/TitleMenu.cpp:454
msgid "Level themes"
msgstr "默认主题"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:459
+#: ../src/TitleMenu.cpp:459
msgid "Internet"
msgstr "网络"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:465
+#: ../src/TitleMenu.cpp:465
msgid "Internet proxy"
msgstr "网络代理"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:482
+#. / TRANSLATORS: Used for button which clear any level progress like unlocked levels and highscores.
+#: ../src/TitleMenu.cpp:482
msgid "Clear Progress"
msgstr "清除进度"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:501
+#: ../src/TitleMenu.cpp:501
msgid "Save Changes"
msgstr "保存变更"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:611
+#: ../src/TitleMenu.cpp:611
msgid "Do you really want to reset level progress?"
msgstr "你确定要清除游戏进度吗?"
-#: F:\Projects\meandmyshadow\src/TitleMenu.cpp:611
+#: ../src/TitleMenu.cpp:611
msgid "Warning"
msgstr "警告"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:24
+#: ../src/AchievementList.h:24
msgid "Newbie"
msgstr "新手"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:24
+#: ../src/AchievementList.h:24
msgid "Congratulations, you completed one level!"
msgstr "恭喜你成功完成了一个关卡!"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:25
+#: ../src/AchievementList.h:25
msgid "Experienced player"
msgstr "有经验的玩家"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:25
+#: ../src/AchievementList.h:25
msgid "Completed 50 levels."
msgstr "完成50个关卡。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:26
+#: ../src/AchievementList.h:26
msgid "Good job!"
msgstr "干得好!"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:26
+#: ../src/AchievementList.h:26
msgid "Get your first gold medal."
msgstr "拿到你的第一个金牌。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:27
+#: ../src/AchievementList.h:27
msgid "Expert"
msgstr "专家"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:27
+#: ../src/AchievementList.h:27
msgid "Earned 50 gold medal."
msgstr "拿到50个金牌。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:29
+#: ../src/AchievementList.h:29
msgid "Graduate"
msgstr "毕业生"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:29
+#: ../src/AchievementList.h:29
msgid "Complete the tutorial level pack."
msgstr "完成教程关卡包。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:30
+#: ../src/AchievementList.h:30
msgid "Outstanding graduate"
msgstr "优秀毕业生"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:30
+#: ../src/AchievementList.h:30
msgid "Complete the tutorial level pack with all levels gold medal."
msgstr "以全部金牌的成绩完成教学关卡包。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:32
+#: ../src/AchievementList.h:32
msgid "Addicted"
msgstr "入迷"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:32
+#: ../src/AchievementList.h:32
msgid "Played Me and My Shadow for more than 2 hours."
msgstr "玩Me and My Shadow超过2小时。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:33
+#: ../src/AchievementList.h:33
msgid "Me and My Shadow loyal fan"
msgstr "Me and My Shadow忠实粉丝"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:33
+#: ../src/AchievementList.h:33
msgid "Played Me and My Shadow for more than 24 hours."
msgstr "玩Me and My Shadow超过24小时。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:35
+#: ../src/AchievementList.h:35
msgid "Constructor"
msgstr "建造师"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:35
+#: ../src/AchievementList.h:35
msgid "Use the level editor for more than 2 hours."
msgstr "使用地图编辑器超过2小时。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:36
+#: ../src/AchievementList.h:36
msgid "The creator"
msgstr "造物主"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:36
+#: ../src/AchievementList.h:36
msgid "Use the level editor for more than 24 hours."
msgstr "使用地图编辑器超过24小时。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:38
+#: ../src/AchievementList.h:38
msgid "Look, cute level!"
msgstr "看,可爱的关卡!"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:38
+#: ../src/AchievementList.h:38
msgid "Created your first level."
msgstr "创建你的第一个关卡。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:39
+#: ../src/AchievementList.h:39
msgid "The level museum"
msgstr "关卡博物馆"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:39
+#: ../src/AchievementList.h:39
msgid "Created 50 levels."
msgstr "创建了50个关卡。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:41
+#: ../src/AchievementList.h:41
msgid "Frog"
msgstr "青蛙"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:41
+#: ../src/AchievementList.h:41
msgid "Jump for 1000 times."
msgstr "跳跃了1000次。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:43
+#: ../src/AchievementList.h:43
+msgid "Wanderer"
+msgstr "漫步者"
+
+#: ../src/AchievementList.h:43
+msgid "Traveled for 100 meter."
+msgstr "走了100米。"
+
+#: ../src/AchievementList.h:44
+msgid "Runner"
+msgstr ""
+
+#: ../src/AchievementList.h:44
+msgid "Traveled for 1 kilometer."
+msgstr "走了1000米。"
+
+#: ../src/AchievementList.h:45
+msgid "Long runner"
+msgstr ""
+
+#: ../src/AchievementList.h:45
+msgid "Traveled for 10 kilometer."
+msgstr "走了10千米。"
+
+#: ../src/AchievementList.h:46
+msgid "Marathon runner"
+msgstr ""
+
+#: ../src/AchievementList.h:46
+msgid "Traveled for 42,195 meter."
+msgstr "走了42195米。"
+
+#: ../src/AchievementList.h:48
msgid "Be careful!"
msgstr "小心!"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:43
+#: ../src/AchievementList.h:48
msgid "The first death."
msgstr "第一次挂掉。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:44
+#: ../src/AchievementList.h:49
msgid "It doesn't matter..."
msgstr "没关系……"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:44
+#: ../src/AchievementList.h:49
msgid "Died for 50 times."
msgstr "挂掉50次。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:45
+#: ../src/AchievementList.h:50
msgid "Expert of trial and error"
msgstr "试错专家"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:45
+#: ../src/AchievementList.h:50
msgid "Died for 1000 times."
msgstr "挂掉1000次。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:47
+#: ../src/AchievementList.h:52
msgid "Keep an eye for moving walls!"
msgstr "小心移动的墙!"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:47
+#: ../src/AchievementList.h:52
msgid "First time being squashed."
msgstr "第一次被夹死。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:48
+#: ../src/AchievementList.h:53
msgid "Potato masher"
msgstr "马铃薯捣碎器"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:48
+#: ../src/AchievementList.h:53
msgid "Squashed for 50 times."
msgstr "被夹死50次。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:50
+#: ../src/AchievementList.h:55
msgid "Double kill"
msgstr "双重击杀"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:50
+#: ../src/AchievementList.h:55
msgid "Make both player and shadow die."
msgstr "让玩家和阴影都挂掉。"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:52
+#: ../src/AchievementList.h:57
+msgid "Recorder"
+msgstr "记录员"
+
+#: ../src/AchievementList.h:57
+msgid "Record for 100 times."
+msgstr "记录了100次。"
+
+#: ../src/AchievementList.h:58
+msgid "Shadowmaster"
+msgstr "影子大师"
+
+#: ../src/AchievementList.h:58
+msgid "Record for 1000 times."
+msgstr "记录了1000次。"
+
+#: ../src/AchievementList.h:61
+msgid "Horizontal confusion"
+msgstr "横向混乱"
+
+#: ../src/AchievementList.h:61
+msgid "Press left and right button simultaneously."
+msgstr "同时按下左和右方向键。"
+
+#: ../src/AchievementList.h:63
msgid "Programmer"
msgstr "程序员"
-#: F:\Projects\meandmyshadow\src/AchievementList.h:52
+#: ../src/AchievementList.h:63
msgid "Played the development version of Me and My Shadow."
msgstr "玩过Me and My Shadow的开发版本。"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "backspace"
msgstr "backspace"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "tab"
msgstr "tab"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "clear"
msgstr "clear"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "return"
msgstr "回车"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "pause"
msgstr "pause"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "escape"
msgstr "escape"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "space"
msgstr "空格"
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "delete"
msgstr "delete"
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "enter"
msgstr "enter"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:1
+#: ../src/dummy.h:1
msgid "equals"
msgstr "equals"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "up"
msgstr "上"
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "down"
msgstr "下"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "right"
msgstr "右"
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "left"
msgstr "左"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "insert"
msgstr "insert"
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "home"
msgstr "home"
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "end"
msgstr "end"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "page up"
msgstr "page up"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "page down"
msgstr "page down"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "numlock"
msgstr "numlock"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:2
+#: ../src/dummy.h:2
msgid "caps lock"
msgstr "caps lock"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "scroll lock"
msgstr "scroll lock"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "right shift"
msgstr "右 shift"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "left shift"
msgstr "左 shift"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "right ctrl"
msgstr "右 ctrl"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "left ctrl"
msgstr "左 ctrl"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "right alt"
msgstr "右 alt"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:3
+#: ../src/dummy.h:3
msgid "left alt"
msgstr "左 alt"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "right meta"
msgstr "右 meta"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "left meta"
msgstr "左 meta"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "left super"
msgstr "左 super"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "right super"
msgstr "右 super"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "alt gr"
msgstr "alt gr"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "compose"
msgstr "compose"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "help"
msgstr "help"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:4
+#: ../src/dummy.h:4
msgid "print screen"
msgstr "print screen"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "sys req"
msgstr "sys req"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "break"
msgstr "break"
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "menu"
msgstr "menu"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "power"
msgstr "power"
# TRANSLATORS: name of a key
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "euro"
msgstr "euro"
-#: F:\Projects\meandmyshadow\src/dummy.h:5
+#: ../src/dummy.h:5
msgid "undo"
msgstr "undo"
#~ msgid ""
#~ "You don't have any achievements now. Play the game and try to earn some!"
#~ msgstr "你目前没有获得任何成就。试着通过玩游戏获取一些!"
-
-#, fuzzy
-#~ msgid "Record times:"
-#~ msgstr "记录次数:"
diff --git a/src/AchievementList.h b/src/AchievementList.h
index 7efbc10..4c68970 100644
--- a/src/AchievementList.h
+++ b/src/AchievementList.h
@@ -1,67 +1,67 @@
/*
* Copyright (C) 2012 Me and My Shadow
*
* This file is part of Me and My Shadow.
*
* Me and My Shadow is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Me and My Shadow is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Me and My Shadow. If not, see <http://www.gnu.org/licenses/>.
*/
// Note: This is an internal file for all avaliable achievements.
// Don't include it in other files!
AchievementInfo achievementList[]={
{"newbie",__("Newbie"),"themes/Cloudscape/player.png",{0,0,23,40},__("Congratulations, you completed one level!"),ACHIEVEMT_TITLE},
{"experienced",__("Experienced player"),"themes/Cloudscape/player.png",{0,0,23,40},__("Completed 50 levels."),ACHIEVEMT_PROGRESS},
{"goodjob",__("Good job!"),"gfx/medals.png",{60,0,30,30},__("Get your first gold medal."),ACHIEVEMT_ALL},
{"expert",__("Expert"),"gfx/medals.png",{60,0,30,30},__("Earned 50 gold medal."),ACHIEVEMT_PROGRESS},
{"tutorial",__("Graduate"),"gfx/medals.png",{60,0,30,30},__("Complete the tutorial level pack."),ACHIEVEMT_PROGRESS},
{"tutorialGold",__("Outstanding graduate"),"gfx/medals.png",{60,0,30,30},__("Complete the tutorial level pack with all levels gold medal."),ACHIEVEMT_PROGRESS},
{"addicted",__("Addicted"),"themes/Cloudscape/player.png",{0,0,23,40},__("Played Me and My Shadow for more than 2 hours.")},
{"loyalFan",__("Me and My Shadow loyal fan"),"themes/Cloudscape/player.png",{0,0,23,40},__("Played Me and My Shadow for more than 24 hours.")},
{"constructor",__("Constructor"),"gfx/gui.png",{112,16,16,16},__("Use the level editor for more than 2 hours.")},
{"constructor2",__("The creator"),"gfx/gui.png",{112,16,16,16},__("Use the level editor for more than 24 hours.")},
{"create1",__("Look, cute level!"),"gfx/gui.png",{112,16,16,16},__("Created your first level."),ACHIEVEMT_ALL},
{"create50",__("The level museum"),"gfx/gui.png",{112,16,16,16},__("Created 50 levels."),ACHIEVEMT_PROGRESS},
{"frog",__("Frog"),"themes/Cloudscape/player.png",{0,0,23,40},__("Jump for 1000 times."),ACHIEVEMT_PROGRESS},
{"travel100",__("Wanderer"),"themes/Cloudscape/player.png",{0,0,23,40},__("Traveled for 100 meter."),ACHIEVEMT_PROGRESS},
{"travel1k",__("Runner"),"themes/Cloudscape/player.png",{0,0,23,40},__("Traveled for 1 kilometer."),ACHIEVEMT_PROGRESS},
{"travel10k",__("Long runner"),"themes/Cloudscape/player.png",{0,0,23,40},__("Traveled for 10 kilometer."),ACHIEVEMT_PROGRESS},
{"travel42k",__("Marathon runner"),"themes/Cloudscape/player.png",{0,0,23,40},__("Traveled for 42,195 meter."),ACHIEVEMT_PROGRESS},
{"die1",__("Be careful!"),"themes/Cloudscape/deathright.png",{0,14,23,40},__("The first death."),ACHIEVEMT_ALL},
{"die50",__("It doesn't matter..."),"themes/Cloudscape/deathright.png",{0,14,23,40},__("Died for 50 times.")},
{"die1000",__("Expert of trial and error"),"themes/Cloudscape/deathright.png",{0,14,23,40},__("Died for 1000 times.")},
{"squash1",__("Keep an eye for moving walls!"),"themes/Cloudscape/deathright.png",{0,14,23,40},__("First time being squashed.")},
{"suqash50",__("Potato masher"),"themes/Cloudscape/deathright.png",{0,14,23,40},__("Squashed for 50 times.")},
{"doubleKill",__("Double kill"),"themes/Cloudscape/deathright.png",{0,14,23,40},__("Make both player and shadow die.")},
- {"record100",__("Recorder"),"themes/Cloudscape/player.png",{0,0,23,40},__("Record for 100 times."),ACHIEVEMT_TITLE},
- {"record1k",__("Shadowmaster"),"themes/Cloudscape/shadow.png",{0,0,23,40},__("Record for 1000 times."),ACHIEVEMT_TITLE},
+ {"record100",__("Recorder"),"themes/Cloudscape/player.png",{0,0,23,40},__("Record for 100 times."),ACHIEVEMT_PROGRESS},
+ {"record1k",__("Shadowmaster"),"themes/Cloudscape/shadow.png",{0,0,23,40},__("Record for 1000 times."),ACHIEVEMT_PROGRESS},
//ripped from Achievements Unlocked
{"horizontal",__("Horizontal confusion"),"gfx/emotions.png",{0,0,23,40},__("Press left and right button simultaneously.")},
{"programmer",__("Programmer"),"gfx/gui.png",{112,16,16,16},__("Played the development version of Me and My Shadow."),ACHIEVEMT_TITLE},
//end of achievements
{}
};
diff --git a/src/StatisticsManager.cpp b/src/StatisticsManager.cpp
index 4a2f369..d896ec2 100644
--- a/src/StatisticsManager.cpp
+++ b/src/StatisticsManager.cpp
@@ -1,745 +1,751 @@
/*
* Copyright (C) 2012 Me and My Shadow
*
* This file is part of Me and My Shadow.
*
* Me and My Shadow is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Me and My Shadow is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Me and My Shadow. If not, see <http://www.gnu.org/licenses/>.
*/
#include "StatisticsManager.h"
#include "FileManager.h"
#include "TreeStorageNode.h"
#include "POASerializer.h"
#include "Functions.h"
#include "LevelPackManager.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include "libs/tinyformat/tinyformat.h"
using namespace std;
StatisticsManager statsMgr;
static const int achievementDisplayTime=100;
static const int achievementIntervalTime=120;
#include "AchievementList.h"
static map<string,AchievementInfo*> avaliableAchievements;
//================================================================
StatisticsManager::StatisticsManager(){
bmDropShadow=NULL;
bmQuestionMark=NULL;
bmAchievement=NULL;
startTime=time(NULL);
tutorialLevels=0;
clear();
}
StatisticsManager::~StatisticsManager(){
if(bmAchievement){
SDL_FreeSurface(bmAchievement);
bmAchievement=NULL;
}
}
void StatisticsManager::clear(){
playerTravelingDistance=shadowTravelingDistance=0.0f;
playerJumps=shadowJumps
=playerDies=shadowDies
=playerSquashed=shadowSquashed
=completedLevels=silverLevels=goldLevels
=recordTimes=switchTimes=swapTimes=saveTimes=loadTimes
=playTime=levelEditTime
=createdLevels=tutorialCompleted=tutorialGold=0;
achievements.clear();
queuedAchievements.clear();
achievementTime=0;
currentAchievement=0;
if(bmAchievement){
SDL_FreeSurface(bmAchievement);
bmAchievement=NULL;
}
}
#define LOAD_STATS(var,func) { \
vector<string> &v=node.attributes[ #var ]; \
if(!v.empty() && !v[0].empty()) \
var=func(v[0].c_str()); \
}
void StatisticsManager::loadFile(const std::string& fileName){
clear();
ifstream file(fileName.c_str());
if(!file) return;
TreeStorageNode node;
POASerializer serializer;
if(!serializer.readNode(file,&node,true)) return;
//load statistics
LOAD_STATS(playerTravelingDistance,atof);
LOAD_STATS(shadowTravelingDistance,atof);
LOAD_STATS(playerJumps,atoi);
LOAD_STATS(shadowJumps,atoi);
LOAD_STATS(playerDies,atoi);
LOAD_STATS(shadowDies,atoi);
LOAD_STATS(playerSquashed,atoi);
LOAD_STATS(shadowSquashed,atoi);
LOAD_STATS(recordTimes,atoi);
LOAD_STATS(switchTimes,atoi);
LOAD_STATS(swapTimes,atoi);
LOAD_STATS(saveTimes,atoi);
LOAD_STATS(loadTimes,atoi);
LOAD_STATS(playTime,atoi);
LOAD_STATS(levelEditTime,atoi);
LOAD_STATS(createdLevels,atoi);
//load achievements.
//format is: name;time,name;time,...
{
vector<string> &v=node.attributes["achievements"];
for(unsigned int i=0;i<v.size();i++){
string s=v[i];
time_t t=0;
string::size_type lps=s.find(';');
if(lps!=string::npos){
string s1=s.substr(lps+1);
s=s.substr(0,lps);
long long n;
sscanf(s1.c_str(),
#ifdef WIN32
"%I64d",
#else
"%Ld",
#endif
&n);
t=(time_t)n;
}
map<string,AchievementInfo*>::iterator it=avaliableAchievements.find(s);
if(it!=avaliableAchievements.end()){
OwnedAchievement ach={t,it->second};
achievements[it->first]=ach;
}
}
}
}
//Call when level edit is start
void StatisticsManager::startLevelEdit(){
levelEditStartTime=time(NULL);
}
//Call when level edit is end
void StatisticsManager::endLevelEdit(){
levelEditTime+=time(NULL)-levelEditStartTime;
}
//update in-game time
void StatisticsManager::updatePlayTime(){
time_t endTime=time(NULL);
playTime+=endTime-startTime;
startTime=endTime;
}
#define SAVE_STATS(var,pattern) { \
sprintf(s,pattern,var); \
node.attributes[ #var ].push_back(s); \
}
void StatisticsManager::saveFile(const std::string& fileName){
char s[64];
//update in-game time
updatePlayTime();
ofstream file(fileName.c_str());
if(!file) return;
TreeStorageNode node;
//save statistics
SAVE_STATS(playerTravelingDistance,"%.2f");
SAVE_STATS(shadowTravelingDistance,"%.2f");
SAVE_STATS(playerJumps,"%d");
SAVE_STATS(shadowJumps,"%d");
SAVE_STATS(playerDies,"%d");
SAVE_STATS(shadowDies,"%d");
SAVE_STATS(playerSquashed,"%d");
SAVE_STATS(shadowSquashed,"%d");
SAVE_STATS(recordTimes,"%d");
SAVE_STATS(switchTimes,"%d");
SAVE_STATS(swapTimes,"%d");
SAVE_STATS(saveTimes,"%d");
SAVE_STATS(loadTimes,"%d");
SAVE_STATS(playTime,"%d");
SAVE_STATS(levelEditTime,"%d");
SAVE_STATS(createdLevels,"%d");
//save achievements.
//format is: name;time,name;time,...
{
vector<string>& v=node.attributes["achievements"];
for(map<string,OwnedAchievement>::iterator it=achievements.begin();it!=achievements.end();++it){
stringstream strm;
char s[32];
long long n=it->second.achievedTime;
sprintf(s,
#ifdef WIN32
"%I64d",
#else
"%Ld",
#endif
n);
strm<<it->first<<";"<<s;
v.push_back(strm.str());
}
}
POASerializer serializer;
serializer.writeNode(&node,file,true,true);
}
void StatisticsManager::loadPicture(){
//Load drop shadow picture
bmDropShadow=loadImage(getDataPath()+"gfx/dropshadow.png");
bmQuestionMark=loadImage(getDataPath()+"gfx/menu/questionmark.png");
}
void StatisticsManager::registerAchievements(){
if(!avaliableAchievements.empty()) return;
for(int i=0;achievementList[i].id!=NULL;i++){
avaliableAchievements[achievementList[i].id]=&achievementList[i];
if(achievementList[i].imageFile!=NULL){
achievementList[i].imageSurface=loadImage(getDataPath()+achievementList[i].imageFile);
}
}
}
void StatisticsManager::render(){
if(achievementTime==0 && bmAchievement==NULL && currentAchievement<(int)queuedAchievements.size()){
//create surface
bmAchievement=createAchievementSurface(queuedAchievements[currentAchievement++]);
drawGUIBox(0,0,bmAchievement->w,bmAchievement->h,bmAchievement,0xFFFFFF00);
//check if queue is empty
if(currentAchievement>=(int)queuedAchievements.size()){
queuedAchievements.clear();
currentAchievement=0;
}
//play a sound
if(getSettings()->getBoolValue("sound")){
Mix_PlayChannel(-1,achievementSound,0);
}
}
//check if we need to display achievements
if(bmAchievement){
achievementTime++;
if(achievementTime<=0){
return;
}else if(achievementTime<=5){
drawAchievement(achievementTime);
}else if(achievementTime<=achievementDisplayTime-5){
drawAchievement(5);
}else if(achievementTime<achievementDisplayTime){
drawAchievement(achievementDisplayTime-achievementTime);
}else if(achievementTime>=achievementIntervalTime){
if(bmAchievement){
SDL_FreeSurface(bmAchievement);
bmAchievement=NULL;
}
achievementTime=0;
}
}
}
void StatisticsManager::newAchievement(const std::string& id,bool save){
//check avaliable achievements
map<string,AchievementInfo*>::iterator it=avaliableAchievements.find(id);
if(it==avaliableAchievements.end()) return;
//check if already have this achievement
if(save){
map<string,OwnedAchievement>::iterator it2=achievements.find(id);
if(it2!=achievements.end()) return;
OwnedAchievement ach={time(NULL),it->second};
achievements[id]=ach;
}
//add it to queue
queuedAchievements.push_back(it->second);
}
float StatisticsManager::getAchievementProgress(AchievementInfo* info){
if(!strcmp(info->id,"experienced")){
return float(completedLevels)/50.0f*100.0f;
}
if(!strcmp(info->id,"expert")){
return float(goldLevels)/50.0f*100.0f;
}
if(!strcmp(info->id,"tutorial")){
if(tutorialLevels>0)
return float(tutorialCompleted)/float(tutorialLevels)*100.0f;
else
return 0.0f;
}
if(!strcmp(info->id,"tutorialGold")){
if(tutorialLevels>0)
return float(tutorialGold)/float(tutorialLevels)*100.0f;
else
return 0.0f;
}
if(!strcmp(info->id,"create50")){
return float(createdLevels)/50.0f*100.0f;
}
if(!strcmp(info->id,"frog")){
return float(playerJumps+shadowJumps)/1000.0f*100.0f;
}
if(!strcmp(info->id,"die50")){
return float(playerDies+shadowDies)/50.0f*100.0f;
}
if(!strcmp(info->id,"die1000")){
return float(playerDies+shadowDies)/1000.0f*100.0f;
}
if(!strcmp(info->id,"suqash50")){
return float(playerSquashed+shadowSquashed)/50.0f*100.0f;
}
if(!strcmp(info->id,"travel100")){
return (playerTravelingDistance+shadowTravelingDistance)/100.0f*100.0f;
}
if(!strcmp(info->id,"travel1k")){
return (playerTravelingDistance+shadowTravelingDistance)/1000.0f*100.0f;
}
if(!strcmp(info->id,"travel10k")){
return (playerTravelingDistance+shadowTravelingDistance)/10000.0f*100.0f;
}
if(!strcmp(info->id,"travel42k")){
return (playerTravelingDistance+shadowTravelingDistance)/42195.0f*100.0f;
}
+ if(!strcmp(info->id,"record100")){
+ return float(recordTimes)/100.0f*100.0f;
+ }
+ if(!strcmp(info->id,"record1k")){
+ return float(recordTimes)/1000.0f*100.0f;
+ }
//not found
return 0.0f;
}
SDL_Surface* StatisticsManager::createAchievementSurface(AchievementInfo* info,SDL_Surface* surface,SDL_Rect* rect,bool showTip,const time_t *achievedTime){
if(info==NULL || info->id==NULL) return NULL;
//prepare text
SDL_Surface *title0=NULL,*title1=NULL;
vector<SDL_Surface*> descSurfaces;
SDL_Color fg={0,0,0};
int fontHeight=TTF_FontLineSkip(fontText);
bool showDescription=false;
bool showImage=false;
float achievementProgress=0.0f;
if(showTip){
title0=TTF_RenderUTF8_Blended(fontText,_("New achievement:"),fg);
title1=TTF_RenderUTF8_Blended(fontGUISmall,_(info->name),fg);
showDescription=showImage=true;
}else if(achievedTime){
char s[128];
strftime(s,sizeof(s),"%c",localtime(achievedTime));
stringstream strm;
tinyformat::format(strm,_("Achieved at %s"),s);
title1=TTF_RenderUTF8_Blended(fontText,strm.str().c_str(),fg);
title0=TTF_RenderUTF8_Blended(fontGUISmall,_(info->name),fg);
showDescription=showImage=true;
}else if(info->displayStyle==ACHIEVEMT_HIDDEN){
title0=TTF_RenderUTF8_Blended(fontGUISmall,_("Unknown achievement"),fg);
}else{
if(info->displayStyle==ACHIEVEMT_PROGRESS){
achievementProgress=getAchievementProgress(info);
stringstream strm;
tinyformat::format(strm,_("Achieved %0.1f%%"),achievementProgress);
title1=TTF_RenderUTF8_Blended(fontText,strm.str().c_str(),fg);
}else{
title1=TTF_RenderUTF8_Blended(fontText,_("Not achieved"),fg);
}
title0=TTF_RenderUTF8_Blended(fontGUISmall,_(info->name),fg);
showDescription= info->displayStyle==ACHIEVEMT_ALL || info->displayStyle==ACHIEVEMT_PROGRESS;
showImage=true;
}
if(info->description!=NULL && showDescription){
string description=_(info->description);
string::size_type lps=0,lpe;
for(;;){
lpe=description.find('\n',lps);
if(lpe==string::npos){
descSurfaces.push_back(TTF_RenderUTF8_Blended(fontText,(description.substr(lps)+' ').c_str(),fg));
break;
}else{
descSurfaces.push_back(TTF_RenderUTF8_Blended(fontText,(description.substr(lps,lpe-lps)+' ').c_str(),fg));
lps=lpe+1;
}
}
}
//calculate the size
int w=0,h=0,w1=8,h1=0;
if(title0!=NULL){
if(title0->w>w) w=title0->w;
h1+=title0->h;
}
if(title1!=NULL){
if(title1->w>w) w=title1->w;
h1+=title1->h;
/*//calc progress bar size
if(!showTip && !achievedTime && info->displayStyle==ACHIEVEMT_PROGRESS){
h1+=4;
}*/
}
if(showImage){
if(info->imageSurface!=NULL){
w1+=info->r.w+8;
w+=info->r.w+8;
if(info->r.h>h1) h1=info->r.h;
}
}else{
w1+=bmQuestionMark->w+8;
w+=bmQuestionMark->w+8;
if(bmQuestionMark->h>h1) h1=bmQuestionMark->h;
}
h=h1+8;
for(unsigned int i=0;i<descSurfaces.size();i++){
if(descSurfaces[i]!=NULL){
if(descSurfaces[i]->w>w) w=descSurfaces[i]->w;
}
}
h+=descSurfaces.size()*fontHeight;
w+=16;
h+=16;
//check if size is specified
int left=0,top=0;
if(rect!=NULL){
if(surface!=NULL){
left=rect->x;
top=rect->y;
}
if(rect->w>0) w=rect->w;
else rect->w=w;
rect->h=h;
}
//create surface if necessary
if(surface==NULL){
surface=SDL_CreateRGBSurface(SDL_HWSURFACE,w,h,
screen->format->BitsPerPixel,screen->format->Rmask,screen->format->Gmask,screen->format->Bmask,0);
}
//draw background
SDL_Rect r={left,top,w,h};
if(showTip || achievedTime){
SDL_FillRect(surface,&r,SDL_MapRGB(surface->format,255,255,255));
}else{
SDL_FillRect(surface,&r,SDL_MapRGB(surface->format,192,192,192));
}
//draw picture
if(showImage){
if(info->imageSurface!=NULL){
SDL_Rect r={left+8,top+8+(h1-info->r.h)/2,0,0};
SDL_BlitSurface(info->imageSurface,&info->r,surface,&r);
}
}else{
SDL_Rect r={left+8,top+8+(h1-bmQuestionMark->h)/2,0,0};
SDL_BlitSurface(bmQuestionMark,NULL,surface,&r);
}
//draw text
h=8;
if(title0!=NULL){
SDL_Rect r={left+w1,top+h,0,0};
SDL_BlitSurface(title0,NULL,surface,&r);
h+=title0->h;
}
if(title1!=NULL){
SDL_Rect r={left+w1,top+h,0,0};
//draw progress bar
if(!showTip && !achievedTime && info->displayStyle==ACHIEVEMT_PROGRESS){
SDL_Rect r1={r.x,r.y,w-8-r.x,title1->h};
SDL_FillRect(surface,&r1,SDL_MapRGB(surface->format,96,96,96));
r1.x++;
r1.y++;
r1.w-=2;
r1.h-=2;
SDL_FillRect(surface,&r1,SDL_MapRGB(surface->format,216,216,216));
r1.w=int(achievementProgress/100.0f*float(r1.w));
SDL_FillRect(surface,&r1,SDL_MapRGB(surface->format,144,144,144));
//???
r.x+=2;
r.y+=2;
}
SDL_BlitSurface(title1,NULL,surface,&r);
}
h=h1+16;
for(unsigned int i=0;i<descSurfaces.size();i++){
if(descSurfaces[i]!=NULL){
SDL_Rect r={left+8,top+h+i*fontHeight,0,0};
SDL_BlitSurface(descSurfaces[i],NULL,surface,&r);
}
}
//clean up
if(title0) SDL_FreeSurface(title0);
if(title1) SDL_FreeSurface(title1);
for(unsigned int i=0;i<descSurfaces.size();i++){
if(descSurfaces[i]!=NULL){
SDL_FreeSurface(descSurfaces[i]);
}
}
//over
return surface;
}
void StatisticsManager::drawAchievement(int alpha){
if(bmAchievement==NULL) return;
if(alpha<=0) return;
if(alpha>5) alpha=5;
SDL_Rect r={screen->w-32-bmAchievement->w,32,
bmAchievement->w,bmAchievement->h};
//draw the surface
SDL_SetAlpha(bmAchievement,SDL_SRCALPHA,alpha*40);
SDL_BlitSurface(bmAchievement,NULL,screen,&r);
//draw drop shadow - corner
{
int w1=r.w/2,w2=r.w-w1,h1=r.h/2,h2=r.h-h1;
if(w1>16) w1=16;
if(w2>16) w2=16;
if(h1>16) h1=16;
if(h2>16) h2=16;
int x=(5-alpha)*64;
//top-left
SDL_Rect r1={x,0,w1+16,h1+16},r2={r.x-16,r.y-16,0,0};
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
//top-right
r1.x=x+48-w2;r1.w=w2+16;r2.x=r.x+r.w-w2;
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
//bottom-right
r1.y=48-h2;r1.h=h2+16;r2.y=r.y+r.h-h2;
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
//bottom-left
r1.x=x;r1.w=w1+16;r2.x=r.x-16;
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
}
//draw drop shadow - border
int i=r.w-32;
while(i>0){
int ii=i>128?128:i;
//top
SDL_Rect r1={0,256-alpha*16,ii,16},r2={r.x+r.w-16-i,r.y-16,0,0};
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
//bottom
r1.x=128;r2.y=r.y+r.h;
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
i-=ii;
}
i=r.h-32;
while(i>0){
int ii=i>128?128:i;
//top
SDL_Rect r1={512-alpha*16,0,16,ii},r2={r.x-16,r.y+r.h-16-i,0,0};
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
//bottom
r1.y=128;r2.x=r.x+r.w;
SDL_BlitSurface(bmDropShadow,&r1,screen,&r2);
i-=ii;
}
}
void StatisticsManager::reloadCompletedLevelsAndAchievements(){
completedLevels=silverLevels=goldLevels=0;
LevelPackManager *lpm=getLevelPackManager();
vector<string> v=lpm->enumLevelPacks();
bool tutorial=false,tutorialIsGold=false;
for(unsigned int i=0;i<v.size();i++){
string& s=v[i];
LevelPack *levels=lpm->getLevelPack(s);
levels->loadProgress(getUserPath(USER_DATA)+"progress/"+s+".progress");
bool b=false;
if(s=="tutorial"){
tutorialLevels=levels->getLevelCount();
tutorialCompleted=tutorialGold=0;
b=tutorial=tutorialIsGold=true;
}
for(int n=0,m=levels->getLevelCount();n<m;n++){
LevelPack::Level *lv=levels->getLevel(n);
int medal=lv->won;
if(medal){
if(lv->targetTime<0 || lv->time<=lv->targetTime)
medal++;
if(lv->targetRecordings<0 || lv->recordings<=lv->targetRecordings)
medal++;
completedLevels++;
if(b) tutorialCompleted++;
if(medal==2) silverLevels++;
if(medal==3){
goldLevels++;
if(b) tutorialGold++;
}
if(medal!=3 && b) tutorialIsGold=false;
}else if(b){
tutorial=tutorialIsGold=false;
}
}
}
//upadte achievements
updateLevelAchievements();
updateTutorialAchievementsInternal((tutorial?1:0)|(tutorialIsGold?2:0));
}
void StatisticsManager::reloadOtherAchievements(){
int i;
if(playTime>=7200) newAchievement("addicted");
if(playTime>=86400) newAchievement("loyalFan");
if(levelEditTime>=7200) newAchievement("constructor");
if(levelEditTime>=86400) newAchievement("constructor2");
if(createdLevels>=1) newAchievement("create1");
if(createdLevels>=50) newAchievement("create50");
i=playerJumps+shadowJumps;
if(i>=1000) newAchievement("frog");
i=playerDies+shadowDies;
if(i>=1) newAchievement("die1");
if(i>=50) newAchievement("die50");
if(i>=1000) newAchievement("die1000");
i=playerSquashed+shadowSquashed;
if(i>=1) newAchievement("squash1");
if(i>=50) newAchievement("squash50");
float d=playerTravelingDistance+shadowTravelingDistance;
if(d>=100.0f) newAchievement("travel100");
if(d>=1000.0f) newAchievement("travel1k");
if(d>=10000.0f) newAchievement("travel10k");
if(d>=42195.0f) newAchievement("travel42k");
if(recordTimes>=100) newAchievement("record100");
if(recordTimes>=1000) newAchievement("record1k");
if(version.find("Development")!=string::npos) newAchievement("programmer");
}
//Update level specified achievements.
//Make sure the completed level count is correct.
void StatisticsManager::updateLevelAchievements(){
if(completedLevels>=1) newAchievement("newbie");
if(goldLevels>=1) newAchievement("goodjob");
if(completedLevels>=50) newAchievement("experienced");
if(goldLevels>=50) newAchievement("expert");
}
//Update tutorial specified achievements.
//Make sure the level progress of tutorial is correct.
void StatisticsManager::updateTutorialAchievements(){
//find tutorial level pack
LevelPackManager *lpm=getLevelPackManager();
LevelPack *levels=lpm->getLevelPack("tutorial");
if(levels==NULL) return;
bool tutorial=true,tutorialIsGold=true;
tutorialLevels=levels->getLevelCount();
tutorialCompleted=tutorialGold=0;
for(int n=0,m=levels->getLevelCount();n<m;n++){
LevelPack::Level *lv=levels->getLevel(n);
int medal=lv->won;
if(medal){
if(lv->targetTime<0 || lv->time<=lv->targetTime)
medal++;
if(lv->targetRecordings<0 || lv->recordings<=lv->targetRecordings)
medal++;
tutorialCompleted++;
if(medal!=3) tutorialIsGold=false;
else tutorialGold++;
}else{
tutorial=tutorialIsGold=false;
break;
}
}
//upadte achievements
updateTutorialAchievementsInternal((tutorial?1:0)|(tutorialIsGold?2:0));
}
//internal function
//flags: a bit-field value indicates which achievements we have.
void StatisticsManager::updateTutorialAchievementsInternal(int flags){
if(flags&1) newAchievement("tutorial");
if(flags&2) newAchievement("tutorialGold");
}

File Metadata

Mime Type
text/x-diff
Expires
Fri, May 15, 1:54 PM (8 h, 41 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
63934
Default Alt Text
(90 KB)

Event Timeline