aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--devtools/create_titanic/script_preresponses.cpp312
-rw-r--r--engines/sci/detection.cpp4
-rw-r--r--engines/sci/engine/file.cpp221
-rw-r--r--engines/sci/engine/file.h82
-rw-r--r--engines/sci/engine/guest_additions.cpp173
-rw-r--r--engines/sci/engine/guest_additions.h17
-rw-r--r--engines/sci/engine/kernel_tables.h4
-rw-r--r--engines/sci/engine/kfile.cpp254
-rw-r--r--engines/sci/engine/kgraphics.cpp2
-rw-r--r--engines/sci/engine/klists.cpp12
-rw-r--r--engines/sci/engine/savegame.cpp62
-rw-r--r--engines/sci/engine/savegame.h6
-rw-r--r--engines/sci/engine/script.cpp32
-rw-r--r--engines/sci/engine/script.h2
-rw-r--r--engines/sci/engine/script_patches.cpp88
-rw-r--r--engines/sci/engine/segment.h28
-rw-r--r--engines/sci/engine/selector.cpp3
-rw-r--r--engines/sci/engine/selector.h3
-rw-r--r--engines/sci/engine/vm.h1
-rw-r--r--engines/titanic/game/cdrom_tray.cpp4
-rw-r--r--engines/titanic/game/computer.cpp17
-rw-r--r--engines/titanic/game/nose_holder.cpp3
-rw-r--r--engines/titanic/game/sauce_dispensor.cpp5
-rw-r--r--engines/titanic/game/search_point.cpp3
-rw-r--r--engines/titanic/game/seasonal_adjustment.cpp3
-rw-r--r--engines/titanic/game/sgt/sgt_state_room.cpp3
-rw-r--r--engines/titanic/game/sgt/toilet.cpp5
-rw-r--r--engines/titanic/game/sgt/washstand.cpp5
-rw-r--r--engines/titanic/game/speech_dispensor.cpp5
-rw-r--r--engines/titanic/game/sub_glass.cpp5
-rw-r--r--engines/titanic/game/television.cpp5
-rw-r--r--engines/titanic/game/throw_tv_down_well.cpp9
-rw-r--r--engines/titanic/game/up_lighter.cpp3
-rw-r--r--engines/titanic/game/useless_lever.cpp5
-rw-r--r--engines/titanic/module.mk8
-rw-r--r--engines/titanic/moves/restricted_move.cpp6
-rw-r--r--engines/titanic/npcs/succubus.cpp15
-rw-r--r--engines/titanic/npcs/titania.cpp5
-rw-r--r--engines/titanic/sound/titania_speech.cpp21
-rw-r--r--engines/titanic/true_talk/barbot_script.cpp205
-rw-r--r--engines/titanic/true_talk/bellbot_script.cpp489
-rw-r--r--engines/titanic/true_talk/deskbot_script.cpp14
-rw-r--r--engines/titanic/true_talk/doorbot_script.cpp268
-rw-r--r--engines/titanic/true_talk/german/barbot_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/barbot_script.h41
-rw-r--r--engines/titanic/true_talk/german/bellbot_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/bellbot_script.h41
-rw-r--r--engines/titanic/true_talk/german/deskbot_script.cpp78
-rw-r--r--engines/titanic/true_talk/german/deskbot_script.h51
-rw-r--r--engines/titanic/true_talk/german/doorbot_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/doorbot_script.h41
-rw-r--r--engines/titanic/true_talk/german/liftbot_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/liftbot_script.h41
-rw-r--r--engines/titanic/true_talk/german/maitred_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/maitred_script.h41
-rw-r--r--engines/titanic/true_talk/german/parrot_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/parrot_script.h41
-rw-r--r--engines/titanic/true_talk/german/succubus_script.cpp29
-rw-r--r--engines/titanic/true_talk/german/succubus_script.h41
-rw-r--r--engines/titanic/true_talk/liftbot_script.cpp100
-rw-r--r--engines/titanic/true_talk/maitred_script.cpp40
-rw-r--r--engines/titanic/true_talk/succubus_script.cpp24
-rw-r--r--engines/titanic/true_talk/tt_scripts.cpp35
-rw-r--r--image/png.cpp12
-rw-r--r--po/be_BY.po25
-rw-r--r--po/ca_ES.po25
-rw-r--r--po/cs_CZ.po25
-rw-r--r--po/da_DK.po25
-rw-r--r--po/de_DE.po25
-rw-r--r--po/el.po25
-rw-r--r--po/es_ES.po25
-rw-r--r--po/eu.po25
-rw-r--r--po/fi_FI.po25
-rw-r--r--po/fr_FR.po25
-rw-r--r--po/gl_ES.po25
-rw-r--r--po/hu_HU.po25
-rw-r--r--po/it_IT.po25
-rw-r--r--po/nb_NO.po25
-rw-r--r--po/nl_NL.po25
-rw-r--r--po/nn_NO.po25
-rw-r--r--po/pl_PL.po25
-rw-r--r--po/pt_BR.po25
-rw-r--r--po/pt_PT.po25
-rw-r--r--po/ru_RU.po25
-rw-r--r--po/scummvm.pot25
-rw-r--r--po/sv_SE.po25
-rw-r--r--po/uk_UA.po25
-rw-r--r--po/zh-Latn_CN.po25
88 files changed, 2041 insertions, 1806 deletions
diff --git a/devtools/create_titanic/script_preresponses.cpp b/devtools/create_titanic/script_preresponses.cpp
index a12210a53c..cb5beba90d 100644
--- a/devtools/create_titanic/script_preresponses.cpp
+++ b/devtools/create_titanic/script_preresponses.cpp
@@ -32,109 +32,213 @@
#include "file.h"
#include "script_preresponses.h"
-static const PreResponse BARBOT_PRERESPONSES[] = {
- { 0x0000CA02, 0x0003D102 },
- { 0x0000CA68, 0x0003D102 },
- { 0x0000C9DA, 0x0003D102 },
- { 0x0000CA6A, 0x0003D103 },
- { 0x0000C922, 0x0003D099 },
- { 0x0000C97C, 0x0003D099 },
- { 0x0000CA0B, 0x0003D099 },
- { 0x0000CA72, 0x0003D099 },
- { 0x0000CA0E, 0x0003D107 },
- { 0x0000CA73, 0x0003D107 },
- { 0x0000CA12, 0x0003D108 },
- { 0x0000CA1C, 0x0003D10E },
- { 0x0000CA83, 0x0003D10E },
- { 0x0000CA1F, 0x0003D110 },
- { 0x0000CA86, 0x0003D110 },
- { 0x0000CA23, 0x0003D112 },
- { 0x0000CA8A, 0x0003D112 },
- { 0x0000CA92, 0x0003D122 },
- { 0x0000CA30, 0x0003D116 },
- { 0x0000CA96, 0x0003D116 },
- { 0x0000CA36, 0x0003D117 },
- { 0x0000C9FC, 0x0003D117 },
- { 0x0000CA9B, 0x0003D117 },
- { 0x0000CA63, 0x0003D117 },
- { 0x0000CA38, 0x0003D11B },
- { 0x0000CA15, 0x0003D109 },
- { 0x0000CA7B, 0x0003D109 },
- { 0x0000CA2E, 0x0003D115 },
- { 0x0000CA94, 0x0003D115 },
- { 0x0000CA5C, 0x0003D115 },
- { 0x0000CA21, 0x0003D111 },
- { 0x0000CA88, 0x0003D111 },
- { 0x0000CA2A, 0x0003D114 },
- { 0x0000CA28, 0x0003D119 },
- { 0x0000CA8E, 0x0003D119 },
- { 0x0000CA17, 0x0003D10B },
- { 0x0000CA7D, 0x0003D10B },
- { 0x0000CA4C, 0x0003D10B },
- { 0x0000CA06, 0x0003D105 },
- { 0x0000CA6C, 0x0003D105 },
- { 0x0000CA0A, 0x0003D106 },
- { 0x0000CA70, 0x0003D106 },
- { 0x0000CA19, 0x0003D10C },
- { 0x0000CA7F, 0x0003D10C },
- { 0x0000C9FF, 0x0003D101 },
- { 0x0000CA65, 0x0003D101 },
- { 0x00000000, 0x00000000 }
+static const PreResponse BARBOT_PRERESPONSES_EN[] = {
+ { 0x0CA02, 0x3D102 },
+ { 0x0CA68, 0x3D102 },
+ { 0x0C9DA, 0x3D102 },
+ { 0x0CA6A, 0x3D103 },
+ { 0x0C922, 0x3D099 },
+ { 0x0C97C, 0x3D099 },
+ { 0x0CA0B, 0x3D099 },
+ { 0x0CA72, 0x3D099 },
+ { 0x0CA0E, 0x3D107 },
+ { 0x0CA73, 0x3D107 },
+ { 0x0CA12, 0x3D108 },
+ { 0x0CA1C, 0x3D10E },
+ { 0x0CA83, 0x3D10E },
+ { 0x0CA1F, 0x3D110 },
+ { 0x0CA86, 0x3D110 },
+ { 0x0CA23, 0x3D112 },
+ { 0x0CA8A, 0x3D112 },
+ { 0x0CA92, 0x3D122 },
+ { 0x0CA30, 0x3D116 },
+ { 0x0CA96, 0x3D116 },
+ { 0x0CA36, 0x3D117 },
+ { 0x0C9FC, 0x3D117 },
+ { 0x0CA9B, 0x3D117 },
+ { 0x0CA63, 0x3D117 },
+ { 0x0CA38, 0x3D11B },
+ { 0x0CA15, 0x3D109 },
+ { 0x0CA7B, 0x3D109 },
+ { 0x0CA2E, 0x3D115 },
+ { 0x0CA94, 0x3D115 },
+ { 0x0CA5C, 0x3D115 },
+ { 0x0CA21, 0x3D111 },
+ { 0x0CA88, 0x3D111 },
+ { 0x0CA2A, 0x3D114 },
+ { 0x0CA28, 0x3D119 },
+ { 0x0CA8E, 0x3D119 },
+ { 0x0CA17, 0x3D10B },
+ { 0x0CA7D, 0x3D10B },
+ { 0x0CA4C, 0x3D10B },
+ { 0x0CA06, 0x3D105 },
+ { 0x0CA6C, 0x3D105 },
+ { 0x0CA0A, 0x3D106 },
+ { 0x0CA70, 0x3D106 },
+ { 0x0CA19, 0x3D10C },
+ { 0x0CA7F, 0x3D10C },
+ { 0x0C9FF, 0x3D101 },
+ { 0x0CA65, 0x3D101 },
+ { 0x00000, 0x00000 }
+};
+static const PreResponse BARBOT_PRERESPONSES_DE[] = {
+ { 0x0ca11, 0x3d102 },
+ { 0x0ca77, 0x3d102 },
+ { 0x0c9e9, 0x3d102 },
+ { 0x0ca79, 0x3d103 },
+ { 0x0c931, 0x3d099 },
+ { 0x0c98b, 0x3d099 },
+ { 0x0ca1a, 0x3d099 },
+ { 0x0ca81, 0x3d099 },
+ { 0x0ca1d, 0x3d107 },
+ { 0x0ca82, 0x3d107 },
+ { 0x0ca21, 0x3d108 },
+ { 0x0ca2b, 0x3d10e },
+ { 0x0ca92, 0x3d10e },
+ { 0x0ca2e, 0x3d110 },
+ { 0x0ca95, 0x3d110 },
+ { 0x0ca32, 0x3d112 },
+ { 0x0ca99, 0x3d112 },
+ { 0x0caa1, 0x3d122 },
+ { 0x0ca3f, 0x3d116 },
+ { 0x0caa5, 0x3d116 },
+ { 0x0ca45, 0x3d117 },
+ { 0x0ca0b, 0x3d117 },
+ { 0x0caaa, 0x3d117 },
+ { 0x0ca72, 0x3d117 },
+ { 0x0ca47, 0x3d11b },
+ { 0x0ca24, 0x3d109 },
+ { 0x0ca8a, 0x3d109 },
+ { 0x0ca3d, 0x3d115 },
+ { 0x0caa3, 0x3d115 },
+ { 0x0ca6b, 0x3d115 },
+ { 0x0ca30, 0x3d111 },
+ { 0x0ca97, 0x3d111 },
+ { 0x0ca39, 0x3d114 },
+ { 0x0ca37, 0x3d119 },
+ { 0x0ca9d, 0x3d119 },
+ { 0x0ca26, 0x3d10b },
+ { 0x0ca8c, 0x3d10b },
+ { 0x0ca5b, 0x3d10b },
+ { 0x0ca15, 0x3d105 },
+ { 0x0ca7b, 0x3d105 },
+ { 0x0ca19, 0x3d106 },
+ { 0x0ca7f, 0x3d106 },
+ { 0x0ca28, 0x3d10c },
+ { 0x0ca8e, 0x3d10c },
+ { 0x0ca0e, 0x3d101 },
+ { 0x0ca74, 0x3d101 },
+ { 0x00000, 0x00000 }
+};
+
+static const PreResponse BELLBOT_PRERESPONSES_EN[] = {
+ { 0x052DC, 0x30D40 },
+ { 0x054E9, 0x30D40 },
+ { 0x054EC, 0x30D40 },
+ { 0x054F0, 0x30D40 },
+ { 0x0532C, 0x31625 },
+ { 0x05330, 0x31625 },
+ { 0x05368, 0x31625 },
+ { 0x05369, 0x31625 },
+ { 0x0536A, 0x31625 },
+ { 0x0536B, 0x31625 },
+ { 0x0536C, 0x31625 },
+ { 0x0536D, 0x31625 },
+ { 0x053A4, 0x31625 },
+ { 0x0558A, 0x31625 },
+ { 0x05485, 0x31625 },
+ { 0x04EE7, 0x31625 },
+ { 0x04EE8, 0x31625 },
+ { 0x0530A, 0x31625 },
+ { 0x0530B, 0x31625 },
+ { 0x053F6, 0x31625 },
+ { 0x053F7, 0x31625 },
+ { 0x053F8, 0x31625 },
+ { 0x053F9, 0x31625 },
+ { 0x053FA, 0x31625 },
+ { 0x053FB, 0x31625 },
+ { 0x053FC, 0x31625 },
+ { 0x053FD, 0x31625 },
+ { 0x0556B, 0x31041 },
+ { 0x05499, 0x30D40 },
+ { 0x053E9, 0x30E01 },
+ { 0x053EB, 0x30E01 },
+ { 0x053EC, 0x30E01 },
+ { 0x053ED, 0x30E01 },
+ { 0x053EE, 0x30E01 },
+ { 0x053EF, 0x30E01 },
+ { 0x053F0, 0x30E01 },
+ { 0x053F1, 0x30E01 },
+ { 0x053F2, 0x30E01 },
+ { 0x053EA, 0x30E01 },
+ { 0x05441, 0x30F00 },
+ { 0x05444, 0x30F00 },
+ { 0x05445, 0x30F00 },
+ { 0x05443, 0x30F00 },
+ { 0x05446, 0x30F00 },
+ { 0x05447, 0x30F00 },
+ { 0x05448, 0x30F00 },
+ { 0x05449, 0x30F00 },
+ { 0x0544A, 0x30F00 },
+ { 0x0544B, 0x30F00 },
+ { 0x05442, 0x30F00 },
+ { 0x0527C, 0x315C8 },
+ { 0x00000, 0x00000 }
};
-static const PreResponse BELLBOT_PRERESPONSES[] = {
- { 0x000052DC, 0x00030D40 },
- { 0x000054E9, 0x00030D40 },
- { 0x000054EC, 0x00030D40 },
- { 0x000054F0, 0x00030D40 },
- { 0x0000532C, 0x00031625 },
- { 0x00005330, 0x00031625 },
- { 0x00005368, 0x00031625 },
- { 0x00005369, 0x00031625 },
- { 0x0000536A, 0x00031625 },
- { 0x0000536B, 0x00031625 },
- { 0x0000536C, 0x00031625 },
- { 0x0000536D, 0x00031625 },
- { 0x000053A4, 0x00031625 },
- { 0x0000558A, 0x00031625 },
- { 0x00005485, 0x00031625 },
- { 0x00004EE7, 0x00031625 },
- { 0x00004EE8, 0x00031625 },
- { 0x0000530A, 0x00031625 },
- { 0x0000530B, 0x00031625 },
- { 0x000053F6, 0x00031625 },
- { 0x000053F7, 0x00031625 },
- { 0x000053F8, 0x00031625 },
- { 0x000053F9, 0x00031625 },
- { 0x000053FA, 0x00031625 },
- { 0x000053FB, 0x00031625 },
- { 0x000053FC, 0x00031625 },
- { 0x000053FD, 0x00031625 },
- { 0x0000556B, 0x00031041 },
- { 0x00005499, 0x00030D40 },
- { 0x000053E9, 0x00030E01 },
- { 0x000053EB, 0x00030E01 },
- { 0x000053EC, 0x00030E01 },
- { 0x000053ED, 0x00030E01 },
- { 0x000053EE, 0x00030E01 },
- { 0x000053EF, 0x00030E01 },
- { 0x000053F0, 0x00030E01 },
- { 0x000053F1, 0x00030E01 },
- { 0x000053F2, 0x00030E01 },
- { 0x000053EA, 0x00030E01 },
- { 0x00005441, 0x00030F00 },
- { 0x00005444, 0x00030F00 },
- { 0x00005445, 0x00030F00 },
- { 0x00005443, 0x00030F00 },
- { 0x00005446, 0x00030F00 },
- { 0x00005447, 0x00030F00 },
- { 0x00005448, 0x00030F00 },
- { 0x00005449, 0x00030F00 },
- { 0x0000544A, 0x00030F00 },
- { 0x0000544B, 0x00030F00 },
- { 0x00005442, 0x00030F00 },
- { 0x0000527C, 0x000315C8 },
- { 0x00000000, 0x00000000 }
+static const PreResponse BELLBOT_PRERESPONSES_DE[] = {
+ { 0x052e2, 0x30d40 },
+ { 0x054f1, 0x30d40 },
+ { 0x054f4, 0x30d40 },
+ { 0x054f8, 0x30d40 },
+ { 0x05332, 0x31625 },
+ { 0x05336, 0x31625 },
+ { 0x0536e, 0x31625 },
+ { 0x0536f, 0x31625 },
+ { 0x05370, 0x31625 },
+ { 0x05371, 0x31625 },
+ { 0x05372, 0x31625 },
+ { 0x05373, 0x31625 },
+ { 0x053ab, 0x31625 },
+ { 0x05592, 0x31625 },
+ { 0x0548c, 0x31625 },
+ { 0x04ee7, 0x31625 },
+ { 0x04ee8, 0x31625 },
+ { 0x05310, 0x31625 },
+ { 0x05311, 0x31625 },
+ { 0x053fd, 0x31625 },
+ { 0x053fe, 0x31625 },
+ { 0x053ff, 0x31625 },
+ { 0x05400, 0x31625 },
+ { 0x05401, 0x31625 },
+ { 0x05402, 0x31625 },
+ { 0x05403, 0x31625 },
+ { 0x05404, 0x31625 },
+ { 0x05573, 0x31041 },
+ { 0x054a1, 0x30d40 },
+ { 0x053f0, 0x30e01 },
+ { 0x053f2, 0x30e01 },
+ { 0x053f3, 0x30e01 },
+ { 0x053f4, 0x30e01 },
+ { 0x053f5, 0x30e01 },
+ { 0x053f6, 0x30e01 },
+ { 0x053f7, 0x30e01 },
+ { 0x053f8, 0x30e01 },
+ { 0x053f9, 0x30e01 },
+ { 0x053f1, 0x30e01 },
+ { 0x05448, 0x30f00 },
+ { 0x0544b, 0x30f00 },
+ { 0x0544c, 0x30f00 },
+ { 0x0544a, 0x30f00 },
+ { 0x0544d, 0x30f00 },
+ { 0x0544e, 0x30f00 },
+ { 0x0544f, 0x30f00 },
+ { 0x05450, 0x30f00 },
+ { 0x05451, 0x30f00 },
+ { 0x05452, 0x30f00 },
+ { 0x05449, 0x30f00 },
+ { 0x05282, 0x315c8 },
+ { 0x00000, 0x00000 }
};
void writeScriptPreResponses(const char *name, const PreResponse *states) {
@@ -151,6 +255,8 @@ void writeScriptPreResponses(const char *name, const PreResponse *states) {
}
void writeAllScriptPreResponses() {
- writeScriptPreResponses("PreResponses/Barbot", BARBOT_PRERESPONSES);
- writeScriptPreResponses("PreResponses/Bellbot", BELLBOT_PRERESPONSES);
+ writeScriptPreResponses("PreResponses/Barbot", BARBOT_PRERESPONSES_EN);
+ writeScriptPreResponses("PreResponses/Barbot/DE", BARBOT_PRERESPONSES_DE);
+ writeScriptPreResponses("PreResponses/Bellbot", BELLBOT_PRERESPONSES_EN);
+ writeScriptPreResponses("PreResponses/Bellbot/DE", BELLBOT_PRERESPONSES_DE);
}
diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp
index 9ebdfa9e7c..aa7a63d224 100644
--- a/engines/sci/detection.cpp
+++ b/engines/sci/detection.cpp
@@ -812,7 +812,7 @@ SaveStateList SciMetaEngine::listSaves(const char *target) const {
Common::InSaveFile *in = saveFileMan->openForLoading(*file);
if (in) {
SavegameMetadata meta;
- if (!get_savegame_metadata(in, &meta)) {
+ if (!get_savegame_metadata(in, meta)) {
// invalid
delete in;
continue;
@@ -861,7 +861,7 @@ SaveStateDescriptor SciMetaEngine::querySaveMetaInfos(const char *target, int sl
if (in) {
SavegameMetadata meta;
- if (!get_savegame_metadata(in, &meta)) {
+ if (!get_savegame_metadata(in, meta)) {
// invalid
delete in;
diff --git a/engines/sci/engine/file.cpp b/engines/sci/engine/file.cpp
index 7e218bc81c..7f737036d2 100644
--- a/engines/sci/engine/file.cpp
+++ b/engines/sci/engine/file.cpp
@@ -34,28 +34,7 @@
namespace Sci {
#ifdef ENABLE_SCI32
-/**
- * A MemoryWriteStreamDynamic with additional read functionality.
- * The read and write functions share a single stream position.
- */
-class MemoryDynamicRWStream : public Common::MemoryWriteStreamDynamic, public Common::SeekableReadStream {
-protected:
- bool _eos;
-public:
- MemoryDynamicRWStream(DisposeAfterUse::Flag disposeMemory = DisposeAfterUse::NO) : MemoryWriteStreamDynamic(disposeMemory), _eos(false) { }
-
- uint32 read(void *dataPtr, uint32 dataSize);
-
- bool eos() const { return _eos; }
- int32 pos() const { return _pos; }
- int32 size() const { return _size; }
- void clearErr() { _eos = false; Common::MemoryWriteStreamDynamic::clearErr(); }
- bool seek(int32 offs, int whence = SEEK_SET) { return Common::MemoryWriteStreamDynamic::seek(offs, whence); }
-
-};
-
-uint32 MemoryDynamicRWStream::read(void *dataPtr, uint32 dataSize)
-{
+uint32 MemoryDynamicRWStream::read(void *dataPtr, uint32 dataSize) {
// Read at most as many bytes as are still available...
if (dataSize > _size - _pos) {
dataSize = _size - _pos;
@@ -69,40 +48,18 @@ uint32 MemoryDynamicRWStream::read(void *dataPtr, uint32 dataSize)
return dataSize;
}
-/**
- * A MemoryDynamicRWStream intended to re-write a file.
- * It reads the contents of `inFile` in the constructor, and writes back
- * the changes to `fileName` in the destructor (and when calling commit() ).
- */
-class SaveFileRewriteStream : public MemoryDynamicRWStream {
-public:
- SaveFileRewriteStream(Common::String fileName,
- Common::SeekableReadStream *inFile,
- kFileOpenMode mode, bool compress);
- virtual ~SaveFileRewriteStream();
-
- virtual uint32 write(const void *dataPtr, uint32 dataSize) { _changed = true; return MemoryDynamicRWStream::write(dataPtr, dataSize); }
-
- void commit(); //< Save back to disk
-
-protected:
- Common::String _fileName;
- bool _compress;
- bool _changed;
-};
-
-SaveFileRewriteStream::SaveFileRewriteStream(Common::String fileName,
+SaveFileRewriteStream::SaveFileRewriteStream(const Common::String &fileName,
Common::SeekableReadStream *inFile,
kFileOpenMode mode,
- bool compress)
-: MemoryDynamicRWStream(DisposeAfterUse::YES),
- _fileName(fileName), _compress(compress)
-{
- const bool truncate = mode == _K_FILE_MODE_CREATE;
- const bool seekToEnd = mode == _K_FILE_MODE_OPEN_OR_CREATE;
+ bool compress) :
+ MemoryDynamicRWStream(DisposeAfterUse::YES),
+ _fileName(fileName),
+ _compress(compress) {
+ const bool truncate = (mode == kFileOpenModeCreate);
+ const bool seekToEnd = (mode == kFileOpenModeOpenOrCreate);
if (!truncate && inFile) {
- unsigned int s = inFile->size();
+ const uint s = inFile->size();
ensureCapacity(s);
inFile->read(_data, s);
if (seekToEnd) {
@@ -119,16 +76,14 @@ SaveFileRewriteStream::~SaveFileRewriteStream() {
}
void SaveFileRewriteStream::commit() {
- // Write contents of buffer back to file
-
- if (_changed) {
- Common::WriteStream *outFile = g_sci->getSaveFileManager()->openForSaving(_fileName, _compress);
- outFile->write(_data, _size);
- delete outFile;
- _changed = false;
+ if (!_changed) {
+ return;
}
-}
+ Common::ScopedPtr<Common::WriteStream> outFile(g_sci->getSaveFileManager()->openForSaving(_fileName, _compress));
+ outFile->write(_data, _size);
+ _changed = false;
+}
#endif
uint findFreeFileHandle(EngineState *s) {
@@ -217,8 +172,19 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo
}
#ifdef ENABLE_SCI32
- if ((g_sci->getGameId() == GID_PHANTASMAGORIA && (filename == "phantsg.dir" || filename == "chase.dat" || filename == "tmp.dat")) ||
- (g_sci->getGameId() == GID_PQSWAT && filename == "swat.dat")) {
+ bool isRewritableFile;
+ switch (g_sci->getGameId()) {
+ case GID_PHANTASMAGORIA:
+ isRewritableFile = (filename == "phantsg.dir" || filename == "chase.dat" || filename == "tmp.dat");
+ break;
+ case GID_PQSWAT:
+ isRewritableFile = (filename == "swat.dat");
+ break;
+ default:
+ isRewritableFile = false;
+ }
+
+ if (isRewritableFile) {
debugC(kDebugLevelFile, " -> file_open opening %s for rewriting", wrappedName.c_str());
inFile = saveFileMan->openForLoading(wrappedName);
@@ -227,8 +193,8 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo
if (!inFile)
inFile = SearchMan.createReadStreamForMember(englishName);
- if (mode == _K_FILE_MODE_OPEN_OR_FAIL && !inFile) {
- debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_OPEN_OR_FAIL): failed to open file '%s'", englishName.c_str());
+ if (mode == kFileOpenModeOpenOrFail && !inFile) {
+ debugC(kDebugLevelFile, " -> file_open(kFileOpenModeOpenOrFail): failed to open file '%s'", englishName.c_str());
return SIGNAL_REG;
}
@@ -241,7 +207,7 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo
outFile = stream;
} else
#endif
- if (mode == _K_FILE_MODE_OPEN_OR_FAIL) {
+ if (mode == kFileOpenModeOpenOrFail) {
// Try to open file, abort if not possible
inFile = saveFileMan->openForLoading(wrappedName);
// If no matching savestate exists: fall back to reading from a regular
@@ -250,19 +216,19 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo
inFile = SearchMan.createReadStreamForMember(englishName);
if (!inFile)
- debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_OPEN_OR_FAIL): failed to open file '%s'", englishName.c_str());
- } else if (mode == _K_FILE_MODE_CREATE) {
+ debugC(kDebugLevelFile, " -> file_open(kFileOpenModeOpenOrFail): failed to open file '%s'", englishName.c_str());
+ } else if (mode == kFileOpenModeCreate) {
// Create the file, destroying any content it might have had
outFile = saveFileMan->openForSaving(wrappedName, isCompressed);
if (!outFile)
- debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_CREATE): failed to create file '%s'", englishName.c_str());
- } else if (mode == _K_FILE_MODE_OPEN_OR_CREATE) {
+ debugC(kDebugLevelFile, " -> file_open(kFileOpenModeCreate): failed to create file '%s'", englishName.c_str());
+ } else if (mode == kFileOpenModeOpenOrCreate) {
// Try to open file, create it if it doesn't exist
outFile = saveFileMan->openForSaving(wrappedName, isCompressed);
if (!outFile)
- debugC(kDebugLevelFile, " -> file_open(_K_FILE_MODE_CREATE): failed to create file '%s'", englishName.c_str());
+ debugC(kDebugLevelFile, " -> file_open(kFileOpenModeCreate): failed to create file '%s'", englishName.c_str());
- // QfG1 opens the character export file with _K_FILE_MODE_CREATE first,
+ // QfG1 opens the character export file with kFileOpenModeCreate first,
// closes it immediately and opens it again with this here. Perhaps
// other games use this for read access as well. I guess changing this
// whole code into using virtual files and writing them after close
@@ -287,7 +253,7 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo
}
FileHandle *getFileFromHandle(EngineState *s, uint handle) {
- if ((handle == 0) || ((handle >= VIRTUALFILE_HANDLE_START) && (handle <= VIRTUALFILE_HANDLE_END))) {
+ if ((handle == 0) || ((handle >= kVirtualFileHandleStart) && (handle <= kVirtualFileHandleEnd))) {
error("Attempt to use invalid file handle (%d)", handle);
return 0;
}
@@ -333,38 +299,34 @@ static bool _savegame_sort_byDate(const SavegameDesc &l, const SavegameDesc &r)
return (l.time > r.time);
}
-bool fillSavegameDesc(const Common::String &filename, SavegameDesc *desc) {
+bool fillSavegameDesc(const Common::String &filename, SavegameDesc &desc) {
Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager();
- Common::SeekableReadStream *in;
- if ((in = saveFileMan->openForLoading(filename)) == nullptr) {
+ Common::ScopedPtr<Common::SeekableReadStream> in(saveFileMan->openForLoading(filename));
+ if (!in) {
return false;
}
SavegameMetadata meta;
- if (!get_savegame_metadata(in, &meta) || meta.name.empty()) {
- // invalid
- delete in;
+ if (!get_savegame_metadata(in.get(), meta) || meta.name.empty()) {
return false;
}
- delete in;
const int id = strtol(filename.end() - 3, NULL, 10);
- desc->id = id;
- desc->date = meta.saveDate;
+ desc.id = id;
// We need to fix date in here, because we save DDMMYYYY instead of
// YYYYMMDD, so sorting wouldn't work
- desc->date = ((desc->date & 0xFFFF) << 16) | ((desc->date & 0xFF0000) >> 8) | ((desc->date & 0xFF000000) >> 24);
- desc->time = meta.saveTime;
- desc->version = meta.version;
- desc->gameVersion = meta.gameVersion;
- desc->script0Size = meta.script0Size;
- desc->gameObjectOffset = meta.gameObjectOffset;
+ desc.date = ((meta.saveDate & 0xFFFF) << 16) | ((meta.saveDate & 0xFF0000) >> 8) | ((meta.saveDate & 0xFF000000) >> 24);
+ desc.time = meta.saveTime;
+ desc.version = meta.version;
+ desc.gameVersion = meta.gameVersion;
+ desc.script0Size = meta.script0Size;
+ desc.gameObjectOffset = meta.gameObjectOffset;
#ifdef ENABLE_SCI32
if (g_sci->getGameId() == GID_SHIVERS) {
- desc->lowScore = meta.lowScore;
- desc->highScore = meta.highScore;
+ desc.lowScore = meta.lowScore;
+ desc.highScore = meta.highScore;
} else if (g_sci->getGameId() == GID_MOTHERGOOSEHIRES) {
- desc->avatarId = meta.avatarId;
+ desc.avatarId = meta.avatarId;
}
#endif
@@ -372,10 +334,10 @@ bool fillSavegameDesc(const Common::String &filename, SavegameDesc *desc) {
meta.name.deleteLastChar();
// At least Phant2 requires use of strncpy, since it creates save game
- // names of exactly SCI_MAX_SAVENAME_LENGTH
- strncpy(desc->name, meta.name.c_str(), SCI_MAX_SAVENAME_LENGTH);
+ // names of exactly kMaxSaveNameLength
+ strncpy(desc.name, meta.name.c_str(), kMaxSaveNameLength);
- return desc;
+ return true;
}
// Create an array containing all found savedgames, sorted by creation date
@@ -394,8 +356,9 @@ void listSavegames(Common::Array<SavegameDesc> &saves) {
#endif
SavegameDesc desc;
- fillSavegameDesc(filename, &desc);
- saves.push_back(desc);
+ if (fillSavegameDesc(filename, desc)) {
+ saves.push_back(desc);
+ }
}
// Sort the list by creation date of the saves
@@ -411,6 +374,74 @@ int findSavegame(Common::Array<SavegameDesc> &saves, int16 savegameId) {
return -1;
}
+#ifdef ENABLE_SCI32
+Common::MemoryReadStream *makeCatalogue(const uint maxNumSaves, const uint gameNameSize, const Common::String &fileNamePattern, const bool ramaFormat) {
+ enum {
+ kGameIdSize = sizeof(int16),
+ kNumSavesSize = sizeof(int16),
+ kFreeSlotSize = sizeof(int16),
+ kTerminatorSize = kGameIdSize,
+ kTerminator = 0xFFFF
+ };
+
+ Common::Array<SavegameDesc> games;
+ listSavegames(games);
+
+ const uint numSaves = MIN(games.size(), maxNumSaves);
+ const uint fileNameSize = fileNamePattern.empty() ? 0 : 12;
+ const uint entrySize = kGameIdSize + fileNameSize + gameNameSize;
+ uint dataSize = numSaves * entrySize + kTerminatorSize;
+ if (ramaFormat) {
+ dataSize += kNumSavesSize + kFreeSlotSize * maxNumSaves;
+ }
+
+ byte *out = (byte *)malloc(dataSize);
+ const byte *const data = out;
+
+ Common::Array<bool> usedSlots;
+ if (ramaFormat) {
+ WRITE_LE_UINT16(out, numSaves);
+ out += kNumSavesSize;
+ usedSlots.resize(maxNumSaves);
+ }
+
+ for (uint i = 0; i < numSaves; ++i) {
+ const SavegameDesc &save = games[i];
+ const uint16 id = save.id - kSaveIdShift;
+ if (!ramaFormat) {
+ WRITE_LE_UINT16(out, id);
+ out += kGameIdSize;
+ }
+ if (fileNameSize) {
+ const Common::String fileName = Common::String::format(fileNamePattern.c_str(), id);
+ strncpy(reinterpret_cast<char *>(out), fileName.c_str(), fileNameSize);
+ out += fileNameSize;
+ }
+ // Game names can be up to exactly gameNameSize
+ strncpy(reinterpret_cast<char *>(out), save.name, gameNameSize);
+ out += gameNameSize;
+ if (ramaFormat) {
+ WRITE_LE_UINT16(out, id);
+ out += kGameIdSize;
+
+ assert(id >= 0 && id < maxNumSaves);
+ usedSlots[id] = true;
+ }
+ }
+
+ if (ramaFormat) {
+ // A table indicating which save game slots are occupied
+ for (uint i = 0; i < usedSlots.size(); ++i) {
+ WRITE_LE_UINT16(out, !usedSlots[i]);
+ out += kFreeSlotSize;
+ }
+ }
+
+ WRITE_LE_UINT16(out, kTerminator);
+
+ return new Common::MemoryReadStream(data, dataSize, DisposeAfterUse::YES);
+}
+#endif
FileHandle::FileHandle() : _in(0), _out(0) {
}
diff --git a/engines/sci/engine/file.h b/engines/sci/engine/file.h
index 1657dd3c7c..b94caa039f 100644
--- a/engines/sci/engine/file.h
+++ b/engines/sci/engine/file.h
@@ -23,20 +23,21 @@
#ifndef SCI_ENGINE_FILE_H
#define SCI_ENGINE_FILE_H
+#include "common/memstream.h"
#include "common/str-array.h"
#include "common/stream.h"
namespace Sci {
enum kFileOpenMode {
- _K_FILE_MODE_OPEN_OR_CREATE = 0,
- _K_FILE_MODE_OPEN_OR_FAIL = 1,
- _K_FILE_MODE_CREATE = 2
+ kFileOpenModeOpenOrCreate = 0,
+ kFileOpenModeOpenOrFail = 1,
+ kFileOpenModeCreate = 2
};
enum {
- SCI_MAX_SAVENAME_LENGTH = 36, ///< Maximum length of a savegame name (including optional terminator character).
- MAX_SAVEGAME_NR = 20 ///< Maximum number of savegames
+ kMaxSaveNameLength = 36, ///< Maximum length of a savegame name (including optional terminator character).
+ kMaxNumSaveGames = 20 ///< Maximum number of savegames
};
#ifdef ENABLE_SCI32
@@ -51,10 +52,12 @@ enum {
};
#endif
-#define VIRTUALFILE_HANDLE_START 32000
-#define VIRTUALFILE_HANDLE_SCI32SAVE 32100
-#define VIRTUALFILE_HANDLE_SCIAUDIO 32300
-#define VIRTUALFILE_HANDLE_END 32300
+enum {
+ kVirtualFileHandleStart = 32000,
+ kVirtualFileHandleSci32Save = 32100,
+ kVirtualFileHandleSciAudio = 32300,
+ kVirtualFileHandleEnd = 32300
+};
struct SavegameDesc {
int16 id;
@@ -62,7 +65,7 @@ struct SavegameDesc {
int date;
int time;
int version;
- char name[SCI_MAX_SAVENAME_LENGTH];
+ char name[kMaxSaveNameLength];
Common::String gameVersion;
uint32 script0Size;
uint32 gameObjectOffset;
@@ -112,7 +115,66 @@ private:
void addAsVirtualFiles(Common::String title, Common::String fileMask);
};
+#ifdef ENABLE_SCI32
+/**
+ * A MemoryWriteStreamDynamic with additional read functionality.
+ * The read and write functions share a single stream position.
+ */
+class MemoryDynamicRWStream : public Common::MemoryWriteStreamDynamic, public Common::SeekableReadStream {
+public:
+ MemoryDynamicRWStream(DisposeAfterUse::Flag disposeMemory = DisposeAfterUse::NO) : MemoryWriteStreamDynamic(disposeMemory), _eos(false) { }
+
+ uint32 read(void *dataPtr, uint32 dataSize);
+
+ bool eos() const { return _eos; }
+ int32 pos() const { return _pos; }
+ int32 size() const { return _size; }
+ void clearErr() { _eos = false; Common::MemoryWriteStreamDynamic::clearErr(); }
+ bool seek(int32 offs, int whence = SEEK_SET) { return Common::MemoryWriteStreamDynamic::seek(offs, whence); }
+
+protected:
+ bool _eos;
+};
+
+/**
+ * A MemoryDynamicRWStream intended to re-write a file.
+ * It reads the contents of `inFile` in the constructor, and writes back
+ * the changes to `fileName` in the destructor (and when calling commit() ).
+ */
+class SaveFileRewriteStream : public MemoryDynamicRWStream {
+public:
+ SaveFileRewriteStream(const Common::String &fileName,
+ Common::SeekableReadStream *inFile,
+ kFileOpenMode mode, bool compress);
+ virtual ~SaveFileRewriteStream();
+
+ virtual uint32 write(const void *dataPtr, uint32 dataSize) { _changed = true; return MemoryDynamicRWStream::write(dataPtr, dataSize); }
+
+ void commit(); //< Save back to disk
+
+protected:
+ Common::String _fileName;
+ bool _compress;
+ bool _changed;
+};
+
+#endif
+
uint findFreeFileHandle(EngineState *s);
+reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mode, bool unwrapFilename);
+FileHandle *getFileFromHandle(EngineState *s, uint handle);
+int fgets_wrapper(EngineState *s, char *dest, int maxsize, int handle);
+void listSavegames(Common::Array<SavegameDesc> &saves);
+int findSavegame(Common::Array<SavegameDesc> &saves, int16 savegameId);
+bool fillSavegameDesc(const Common::String &filename, SavegameDesc &desc);
+
+#ifdef ENABLE_SCI32
+/**
+ * Constructs an in-memory stream from the ScummVM save game list that is
+ * compatible with game scripts' game catalogue readers.
+ */
+Common::MemoryReadStream *makeCatalogue(const uint maxNumSaves, const uint gameNameSize, const Common::String &fileNamePattern, const bool ramaFormat);
+#endif
} // End of namespace Sci
diff --git a/engines/sci/engine/guest_additions.cpp b/engines/sci/engine/guest_additions.cpp
index e74a5d6e3f..06cf0c9f66 100644
--- a/engines/sci/engine/guest_additions.cpp
+++ b/engines/sci/engine/guest_additions.cpp
@@ -243,7 +243,12 @@ void GuestAdditions::instantiateScriptHook(Script &script, const bool ignoreDela
// segment table to change (versus save games that are not patched),
// breaking persistent objects (like the control panel in SQ6) which
// require reg_ts created during game startup to always be the same
- patchGameSaveRestoreSCI32(script);
+
+ if (g_sci->getGameId() == GID_RAMA) {
+ patchGameSaveRestoreRama(script);
+ } else {
+ patchGameSaveRestoreSCI32(script);
+ }
}
}
@@ -392,25 +397,7 @@ static const byte SRDialogPatch[] = {
};
void GuestAdditions::patchGameSaveRestoreSCI32(Script &script) const {
- const ObjMap &objMap = script.getObjectMap();
- for (ObjMap::const_iterator it = objMap.begin(); it != objMap.end(); ++it) {
- const Object &obj = it->_value;
- if (strncmp(_segMan->getObjectName(obj.getPos()), "SRDialog", 8) != 0) {
- continue;
- }
-
- const uint16 methodCount = obj.getMethodCount();
- for (uint16 methodNr = 0; methodNr < methodCount; ++methodNr) {
- const uint16 selectorId = obj.getFuncSelector(methodNr);
- const Common::String methodName = _kernel->getSelectorName(selectorId);
- if (methodName == "doit") {
- const reg_t methodAddress = obj.getFunction(methodNr);
- byte *patchPtr = const_cast<byte *>(script.getBuf(methodAddress.getOffset()));
- memcpy(patchPtr, SRDialogPatch, sizeof(SRDialogPatch));
- break;
- }
- }
- }
+ patchSRDialogDoit(script, "SRDialog", SRDialogPatch, sizeof(SRDialogPatch));
}
static const byte SRTorinPatch[] = {
@@ -446,7 +433,7 @@ void GuestAdditions::patchGameSaveRestorePhant2(Script &script) const {
for (ObjMap::const_iterator it = objects.begin(); it != objects.end(); ++it) {
const Object &obj = it->_value;
- if (strncmp(_segMan->derefString(obj.getNameSelector()), "srGetGame", 9) != 0) {
+ if (strcmp(_segMan->derefString(obj.getNameSelector()), "srGetGame") != 0) {
continue;
}
@@ -461,6 +448,50 @@ void GuestAdditions::patchGameSaveRestorePhant2(Script &script) const {
}
}
+static const byte RamaSRDialogPatch[] = {
+ 0x78, // push1
+ 0x7c, // pushSelf
+ 0x43, kScummVMSaveLoadId, 0x02, 0x00, // callk kScummVMSaveLoad, 0
+ 0x48 // ret
+};
+
+static const int RamaSRDialogUint16Offsets[] = { 4 };
+
+void GuestAdditions::patchGameSaveRestoreRama(Script &script) const {
+ patchSRDialogDoit(script, "Save", RamaSRDialogPatch, sizeof(RamaSRDialogPatch), RamaSRDialogUint16Offsets, ARRAYSIZE(RamaSRDialogUint16Offsets));
+ patchSRDialogDoit(script, "Restore", RamaSRDialogPatch, sizeof(RamaSRDialogPatch), RamaSRDialogUint16Offsets, ARRAYSIZE(RamaSRDialogUint16Offsets));
+}
+
+void GuestAdditions::patchSRDialogDoit(Script &script, const char *const objectName, const byte *patchData, const int patchSize, const int *uint16Offsets, const uint numOffsets) const {
+ const ObjMap &objMap = script.getObjectMap();
+ for (ObjMap::const_iterator it = objMap.begin(); it != objMap.end(); ++it) {
+ const Object &obj = it->_value;
+ if (strcmp(_segMan->getObjectName(obj.getPos()), objectName) != 0) {
+ continue;
+ }
+
+ const uint16 methodCount = obj.getMethodCount();
+ for (uint16 methodNr = 0; methodNr < methodCount; ++methodNr) {
+ const uint16 selectorId = obj.getFuncSelector(methodNr);
+ const Common::String methodName = _kernel->getSelectorName(selectorId);
+ if (methodName == "doit") {
+ const reg_t methodAddress = obj.getFunction(methodNr);
+ byte *patchPtr = const_cast<byte *>(script.getBuf(methodAddress.getOffset()));
+ memcpy(patchPtr, patchData, patchSize);
+
+ if (g_sci->isBE()) {
+ for (uint i = 0; i < numOffsets; ++i) {
+ const int offset = uint16Offsets[i];
+ SWAP(patchPtr[offset], patchPtr[offset + 1]);
+ }
+ }
+
+ return;
+ }
+ }
+ }
+}
+
reg_t GuestAdditions::kScummVMSaveLoad(EngineState *s, int argc, reg_t *argv) const {
if (g_sci->getGameId() == GID_PHANTASMAGORIA2) {
return promptSaveRestorePhant2(s, argc, argv);
@@ -470,6 +501,10 @@ reg_t GuestAdditions::kScummVMSaveLoad(EngineState *s, int argc, reg_t *argv) co
return promptSaveRestoreTorin(s, argc, argv);
}
+ if (g_sci->getGameId() == GID_RAMA) {
+ return promptSaveRestoreRama(s, argc, argv);
+ }
+
return promptSaveRestoreDefault(s, argc, argv);
}
@@ -522,6 +557,92 @@ reg_t GuestAdditions::promptSaveRestorePhant2(EngineState *s, int argc, reg_t *a
return make_reg(0, saveNo);
}
+reg_t GuestAdditions::promptSaveRestoreRama(EngineState *s, int argc, reg_t *argv) const {
+ assert(argc == 1);
+ const bool isSave = (strcmp(_segMan->getObjectName(argv[0]), "Save") == 0);
+
+ const reg_t editor = _segMan->findObjectByName("editI");
+ reg_t outDescription = readSelector(_segMan, editor, SELECTOR(text));
+ if (!_segMan->isValidAddr(outDescription, SEG_TYPE_ARRAY)) {
+ _segMan->allocateArray(kArrayTypeString, 0, &outDescription);
+ writeSelector(_segMan, editor, SELECTOR(text), outDescription);
+ }
+
+ int saveNo = runSaveRestore(isSave, outDescription, s->_delayedRestoreGameId);
+ int saveIndex = -1;
+ if (saveNo != -1) {
+ // The save number returned by runSaveRestore is a SCI save number
+ // because normally SRDialogs return the save ID, but RAMA returns the
+ // save game's index in the save game list instead, so we need to
+ // convert back to the ScummVM save number here to find the correct
+ // index
+ saveNo += kSaveIdShift;
+
+ Common::Array<SavegameDesc> saves;
+ listSavegames(saves);
+ saveIndex = findSavegame(saves, saveNo);
+
+ if (isSave) {
+ bool resetCatalogFile = false;
+ const Common::String saveGameName = _segMan->getString(outDescription);
+
+ // The original game save/restore code returns index 0 when a game
+ // is created that does not already exist and then the scripts find
+ // the next hole and insert there, but the ScummVM GUI works
+ // differently and allows users to insert a game wherever they want,
+ // so we need to force the save game to exist in advance so RAMA's
+ // save code will successfully put it where we want it
+ if (saveIndex == -1) {
+ // We need to touch the save file just so it exists here, since
+ // otherwise the game will not let us save to the new save slot
+ // (it will try to come up with a brand new slot instead)
+ Common::OutSaveFile *out = g_sci->getSaveFileManager()->openForSaving(g_sci->getSavegameName(saveNo));
+ set_savegame_metadata(out, saveGameName, "");
+
+ // Make sure the save file is fully written before we try to
+ // re-retrieve the list of saves, since otherwise it may not
+ // show up in the list
+ delete out;
+
+ // We have to re-retrieve saves and find the index instead of
+ // assuming the newest save will be in index 0 because save game
+ // times are not guaranteed to be steady
+ saves.clear();
+ listSavegames(saves);
+ saveIndex = findSavegame(saves, saveNo);
+ if (saveIndex == -1) {
+ warning("Stub save not found when trying to save a new game to slot %d", saveNo);
+ } else {
+ // Kick the CatalogFile into believing that this new save
+ // game exists already, otherwise it the game will not
+ // actually save into the new save
+ resetCatalogFile = true;
+ }
+ } else if (strncmp(saveGameName.c_str(), saves[saveIndex].name, kMaxSaveNameLength) != 0) {
+ // The game doesn't let the save game name change for the same
+ // slot, but ScummVM's GUI does, so force the new name into the
+ // save file metadata if it has changed so it actually makes it
+ // into the save game
+ Common::ScopedPtr<Common::OutSaveFile> out(g_sci->getSaveFileManager()->openForSaving(g_sci->getSavegameName(saveNo)));
+ set_savegame_metadata(out.get(), saveGameName, "");
+ resetCatalogFile = true;
+ }
+
+ if (resetCatalogFile) {
+ const reg_t catalogFileId = _state->variables[VAR_GLOBAL][kGlobalVarRamaCatalogFile];
+ if (catalogFileId.isNull()) {
+ warning("Could not find CatalogFile when saving from launcher");
+ }
+ reg_t args[] = { NULL_REG };
+ invokeSelector(catalogFileId, SELECTOR(dispose));
+ invokeSelector(catalogFileId, SELECTOR(init), ARRAYSIZE(args), args);
+ }
+ }
+ }
+
+ return make_reg(0, saveIndex);
+}
+
int GuestAdditions::runSaveRestore(const bool isSave, reg_t outDescription, const int forcedSaveNo) const {
int saveNo;
Common::String descriptionString;
@@ -564,7 +685,7 @@ int GuestAdditions::runSaveRestore(const bool isSave, reg_t outDescription, cons
// number here to match what would come from the normal SCI save/restore
// dialog. There is additional special code for handling the autosave
// game inside of kRestoreGame32.
- --saveNo;
+ saveNo -= kSaveIdShift;
}
return saveNo;
@@ -624,6 +745,14 @@ bool GuestAdditions::restoreFromLauncher() const {
// which will automatically return the `_delayedRestoreGameId` instead
// of prompting the user for a save game
invokeSelector(g_sci->getGameObject(), SELECTOR(restore));
+
+ // The normal save game system resets _delayedRestoreGameId with a
+ // call to `EngineState::reset`, but RAMA uses a custom save game
+ // system which does not reset the engine, so we need to clear the
+ // ID here or the engine will just try to restore the game forever
+ if (g_sci->getGameId() == GID_RAMA) {
+ _state->_delayedRestoreGameId = -1;
+ }
}
_restoring = false;
diff --git a/engines/sci/engine/guest_additions.h b/engines/sci/engine/guest_additions.h
index 64bd667414..a1043a8402 100644
--- a/engines/sci/engine/guest_additions.h
+++ b/engines/sci/engine/guest_additions.h
@@ -220,6 +220,17 @@ private:
void patchGameSaveRestorePhant2(Script &script) const;
/**
+ * Patches the ScummVM save/load dialogue into RAMA.
+ */
+ void patchGameSaveRestoreRama(Script &script) const;
+
+ /**
+ * Patches the `doit` method of an SRDialog object with the given name
+ * using the given patch data.
+ */
+ void patchSRDialogDoit(Script &script, const char *const objectName, const byte *patchData, const int patchSize, const int *uint16Offsets = nullptr, const uint numOffsets = 0) const;
+
+ /**
* Prompts for a save game and returns it to game scripts using default
* SRDialog game class semantics.
*/
@@ -238,6 +249,12 @@ private:
reg_t promptSaveRestorePhant2(EngineState *s, int argc, reg_t *argv) const;
/**
+ * Prompts for a save game and returns it to game scripts using RAMA's
+ * custom SRDialog class semantics.
+ */
+ reg_t promptSaveRestoreRama(EngineState *s, int argc, reg_t *argv) const;
+
+ /**
* Prompts the user to save or load a game.
*
* @param isSave If true, the prompt is for saving.
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index d7a83d9dbf..884a499542 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -67,6 +67,7 @@ struct SciKernelMapSubEntry {
#define SIG_SINCE_SCI11 SCI_VERSION_1_1, SCI_VERSION_NONE
#define SIG_SCI2 SCI_VERSION_2, SCI_VERSION_2
#define SIG_SCI21EARLY SCI_VERSION_2_1_EARLY, SCI_VERSION_2_1_EARLY
+#define SIG_SCI21MID_LATE SCI_VERSION_2_1_MIDDLE, SCI_VERSION_2_1_LATE
#define SIG_THRU_SCI21EARLY SCI_VERSION_2, SCI_VERSION_2_1_EARLY
#define SIG_THRU_SCI21MID SCI_VERSION_2, SCI_VERSION_2_1_MIDDLE
#define SIG_SINCE_SCI21 SCI_VERSION_2_1_EARLY, SCI_VERSION_3
@@ -324,7 +325,8 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
{ SIG_SINCE_SCI21MID, 13, MAP_CALL(FileIOReadByte), "i", NULL },
{ SIG_SINCE_SCI21MID, 14, MAP_CALL(FileIOWriteByte), "ii", NULL },
{ SIG_SINCE_SCI21MID, 15, MAP_CALL(FileIOReadWord), "i", NULL },
- { SIG_SINCE_SCI21MID, 16, MAP_CALL(FileIOWriteWord), "ii", NULL },
+ { SIG_SCI21MID_LATE, 16, MAP_CALL(FileIOWriteWord), "ii", NULL },
+ { SIG_SCI3, 16, MAP_CALL(FileIOWriteWord), "i.", NULL },
{ SIG_SINCE_SCI21MID, 17, "FileIOCheckFreeSpace", kCheckFreeSpace, "i(r)", NULL },
{ SIG_SINCE_SCI21MID, 18, MAP_CALL(FileIOGetCWD), "r", NULL },
{ SIG_SINCE_SCI21MID, 19, MAP_CALL(FileIOIsValidDirectory), "[ro]", NULL },
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index 3b8420849a..db7bbce640 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -41,6 +41,7 @@
#include "sci/sound/audio.h"
#include "sci/console.h"
#ifdef ENABLE_SCI32
+#include "graphics/thumbnail.h"
#include "sci/engine/guest_additions.h"
#include "sci/engine/message.h"
#include "sci/resource.h"
@@ -48,13 +49,6 @@
namespace Sci {
-extern reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mode, bool unwrapFilename);
-extern FileHandle *getFileFromHandle(EngineState *s, uint handle);
-extern int fgets_wrapper(EngineState *s, char *dest, int maxsize, int handle);
-extern void listSavegames(Common::Array<SavegameDesc> &saves);
-extern int findSavegame(Common::Array<SavegameDesc> &saves, int16 savegameId);
-extern bool fillSavegameDesc(const Common::String &filename, SavegameDesc *desc);
-
/**
* Writes the cwd to the supplied address and returns the address in acc.
*/
@@ -269,6 +263,34 @@ static bool saveCatalogueExists(const Common::String &name) {
return exists;
}
+
+static Common::String getRamaSaveName(EngineState *s, const uint saveNo) {
+ const reg_t catalogId = s->variables[VAR_GLOBAL][kGlobalVarRamaCatalogFile];
+ if (catalogId.isNull()) {
+ error("Could not find CatalogFile object to retrieve save game name");
+ }
+
+ const List *list = s->_segMan->lookupList(readSelector(s->_segMan, catalogId, SELECTOR(elements)));
+ if (!list) {
+ error("Could not read CatalogFile object list");
+ }
+
+ Node *node = s->_segMan->lookupNode(list->first);
+ while (node) {
+ const reg_t entryId = node->value;
+ if (readSelectorValue(s->_segMan, entryId, SELECTOR(fileNumber)) == saveNo) {
+ reg_t description = readSelector(s->_segMan, entryId, SELECTOR(description));
+ if (s->_segMan->isObject(description)) {
+ description = readSelector(s->_segMan, description, SELECTOR(data));
+ }
+ return s->_segMan->getString(description);
+ }
+
+ node = s->_segMan->lookupNode(node->succ);
+ }
+
+ error("Could not find a save name for save %u", saveNo);
+}
#endif
reg_t kFileIO(EngineState *s, int argc, reg_t *argv) {
@@ -319,11 +341,11 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
if (g_sci->getGameId() == GID_SHIVERS && name.hasSuffix(".SG")) {
// Shivers stores the name and score of save games in separate %d.SG
// files, which are used by the save/load screen
- if (mode == _K_FILE_MODE_OPEN_OR_CREATE || mode == _K_FILE_MODE_CREATE) {
+ if (mode == kFileOpenModeOpenOrCreate || mode == kFileOpenModeCreate) {
// Suppress creation of the SG file, since it is not necessary
debugC(kDebugLevelFile, "Not creating unused file %s", name.c_str());
return SIGNAL_REG;
- } else if (mode == _K_FILE_MODE_OPEN_OR_FAIL) {
+ } else if (mode == kFileOpenModeOpenOrFail) {
// Create a virtual file containing the save game description
// and current score progress, as the game scripts expect.
int saveNo;
@@ -331,7 +353,9 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
saveNo += kSaveIdShift;
SavegameDesc save;
- fillSavegameDesc(g_sci->getSavegameName(saveNo), &save);
+ if (!fillSavegameDesc(g_sci->getSavegameName(saveNo), save)) {
+ return SIGNAL_REG;
+ }
Common::String score;
if (!save.highScore) {
@@ -340,9 +364,9 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
score = Common::String::format("%u%03u", save.highScore, save.lowScore);
}
- const uint nameLength = Common::strnlen(save.name, SCI_MAX_SAVENAME_LENGTH);
+ const uint nameLength = Common::strnlen(save.name, kMaxSaveNameLength);
const uint size = nameLength + /* \r\n */ 2 + score.size();
- char *buffer = (char *)malloc(size);
+ byte *buffer = (byte *)malloc(size);
memcpy(buffer, save.name, nameLength);
buffer[nameLength] = '\r';
buffer[nameLength + 1] = '\n';
@@ -350,7 +374,7 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
const uint handle = findFreeFileHandle(s);
- s->_fileHandles[handle]._in = new Common::MemoryReadStream((byte *)buffer, size, DisposeAfterUse::YES);
+ s->_fileHandles[handle]._in = new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES);
s->_fileHandles[handle]._out = nullptr;
s->_fileHandles[handle]._name = "";
@@ -359,11 +383,11 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
} else if (g_sci->getGameId() == GID_MOTHERGOOSEHIRES && name.hasSuffix(".DTA")) {
// MGDX stores the name and avatar ID in separate %d.DTA files, which
// are used by the save/load screen
- if (mode == _K_FILE_MODE_OPEN_OR_CREATE || mode == _K_FILE_MODE_CREATE) {
+ if (mode == kFileOpenModeOpenOrCreate || mode == kFileOpenModeCreate) {
// Suppress creation of the DTA file, since it is not necessary
debugC(kDebugLevelFile, "Not creating unused file %s", name.c_str());
return SIGNAL_REG;
- } else if (mode == _K_FILE_MODE_OPEN_OR_FAIL) {
+ } else if (mode == kFileOpenModeOpenOrFail) {
// Create a virtual file containing the save game description
// and avatar ID, as the game scripts expect.
int saveNo;
@@ -380,10 +404,12 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
saveNo += kSaveIdShift;
SavegameDesc save;
- fillSavegameDesc(g_sci->getSavegameName(saveNo), &save);
+ if (!fillSavegameDesc(g_sci->getSavegameName(saveNo), save)) {
+ return SIGNAL_REG;
+ }
const Common::String avatarId = Common::String::format("%02d", save.avatarId);
- const uint nameLength = Common::strnlen(save.name, SCI_MAX_SAVENAME_LENGTH);
+ const uint nameLength = Common::strnlen(save.name, kMaxSaveNameLength);
const uint size = nameLength + /* \r\n */ 2 + avatarId.size() + 1;
char *buffer = (char *)malloc(size);
memcpy(buffer, save.name, nameLength);
@@ -404,40 +430,7 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
// catalogue, but since we do not create catalogues for most SCI32
// games, ignore the write
if (name == "temp.tmp") {
- return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
- }
-
- // KQ7 tries to read out game information from catalogues directly
- // instead of using the standard kSaveGetFiles function
- if (name == "kq7cdsg.cat") {
- if (mode == _K_FILE_MODE_OPEN_OR_CREATE || mode == _K_FILE_MODE_CREATE) {
- // Suppress creation of the catalogue file, since it is not necessary
- debugC(kDebugLevelFile, "Not creating unused file %s", name.c_str());
- return SIGNAL_REG;
- } else if (mode == _K_FILE_MODE_OPEN_OR_FAIL) {
- Common::Array<SavegameDesc> saves;
- listSavegames(saves);
-
- const uint recordSize = sizeof(int16) + SCI_MAX_SAVENAME_LENGTH;
- const uint numSaves = MIN<uint>(saves.size(), 10);
- const uint size = numSaves * recordSize + /* terminator */ 2;
- byte *const buffer = (byte *)malloc(size);
-
- byte *out = buffer;
- for (uint i = 0; i < numSaves; ++i) {
- WRITE_UINT16(out, saves[i].id - kSaveIdShift);
- strncpy((char *)out + sizeof(int16), saves[i].name, SCI_MAX_SAVENAME_LENGTH);
- out += recordSize;
- }
- WRITE_UINT16(out, 0xFFFF);
-
- const uint handle = findFreeFileHandle(s);
- s->_fileHandles[handle]._in = new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES);
- s->_fileHandles[handle]._out = nullptr;
- s->_fileHandles[handle]._name = "";
-
- return make_reg(0, handle);
- }
+ return make_reg(0, kVirtualFileHandleSci32Save);
}
} else if (g_sci->getGameId() == GID_PQSWAT) {
// PQSWAT tries to create subdirectories for each game profile
@@ -449,19 +442,86 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
} else if (g_sci->getGameId() == GID_PHANTASMAGORIA2 && name == "RESDUK.PAT") {
// Ignore the censorship password file in lieu of our game option
return SIGNAL_REG;
+ } else if (g_sci->getGameId() == GID_RAMA) {
+ int saveNo = -1;
+ if (name == "autorama.sg") {
+ saveNo = kAutoSaveId;
+ } else if (sscanf(name.c_str(), "ramasg.%i", &saveNo) == 1) {
+ saveNo += kSaveIdShift;
+ }
+
+ if (saveNo != -1) {
+ Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager();
+ const Common::String fileName = g_sci->getSavegameName(saveNo);
+ Common::SeekableReadStream *in = nullptr;
+ Common::OutSaveFile *out = nullptr;
+ bool valid = false;
+
+ if (mode == kFileOpenModeOpenOrFail) {
+ in = saveFileMan->openForLoading(fileName);
+ if (in) {
+ SavegameMetadata meta;
+ if (get_savegame_metadata(in, meta)) {
+ Graphics::skipThumbnail(*in);
+ valid = true;
+ }
+ }
+ } else {
+ out = saveFileMan->openForSaving(fileName);
+ if (out) {
+ Common::String saveName;
+ if (saveNo != kAutoSaveId) {
+ saveName = getRamaSaveName(s, saveNo - kSaveIdShift);
+ }
+ Common::ScopedPtr<Common::SeekableReadStream> versionFile(SearchMan.createReadStreamForMember("VERSION"));
+ const Common::String gameVersion = versionFile->readLine();
+ set_savegame_metadata(out, saveName, gameVersion);
+ valid = true;
+ }
+ }
+
+ if (valid) {
+ uint handle = findFreeFileHandle(s);
+ s->_fileHandles[handle]._in = in;
+ s->_fileHandles[handle]._out = out;
+ s->_fileHandles[handle]._name = "-scummvm-save-";
+ return make_reg(0, handle);
+ }
+ }
}
// See kMakeSaveCatName
if (name == "fake.cat") {
- return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
+ return make_reg(0, kVirtualFileHandleSci32Save);
}
if (isSaveCatalogue(name)) {
const bool exists = saveCatalogueExists(name);
if (exists) {
+ // KQ7 & RAMA read out game information from catalogues directly
+ // instead of using the standard kSaveGetFiles function
+ if (name == "kq7cdsg.cat" || name == "ramasg.cat") {
+ if (mode == kFileOpenModeOpenOrCreate || mode == kFileOpenModeCreate) {
+ // Suppress creation of the catalogue file, since it is not necessary
+ debugC(kDebugLevelFile, "Not creating unused file %s", name.c_str());
+ return SIGNAL_REG;
+ } else if (mode == kFileOpenModeOpenOrFail) {
+ const uint handle = findFreeFileHandle(s);
+
+ if (name == "kq7cdsg.cat") {
+ s->_fileHandles[handle]._in = makeCatalogue(10, kMaxSaveNameLength, "", false);
+ } else {
+ s->_fileHandles[handle]._in = makeCatalogue(100, 20, "ramasg.%d", true);
+ }
+ s->_fileHandles[handle]._out = nullptr;
+ s->_fileHandles[handle]._name = "";
+ return make_reg(0, handle);
+ }
+ }
+
// Dummy handle is used to represent the catalogue and ignore any
// direct game script writes
- return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
+ return make_reg(0, kVirtualFileHandleSci32Save);
} else {
return SIGNAL_REG;
}
@@ -472,7 +532,7 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
if (name.hasPrefix("sciAudio\\")) {
// fan-made sciAudio extension, don't create those files and instead return a virtual handle
- return make_reg(0, VIRTUALFILE_HANDLE_SCIAUDIO);
+ return make_reg(0, kVirtualFileHandleSciAudio);
}
// QFG import rooms get a virtual filelisting instead of an actual one
@@ -495,7 +555,7 @@ reg_t kFileIOClose(EngineState *s, int argc, reg_t *argv) {
uint16 handle = argv[0].toUint16();
- if (handle >= VIRTUALFILE_HANDLE_START) {
+ if (handle >= kVirtualFileHandleStart) {
// it's a virtual handle? ignore it
return getSciVersion() >= SCI_VERSION_2 ? TRUE_REG : SIGNAL_REG;
}
@@ -539,7 +599,7 @@ reg_t kFileIOWriteRaw(EngineState *s, int argc, reg_t *argv) {
uint16 size = argv[2].toUint16();
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
+ if (handle == kVirtualFileHandleSci32Save) {
return make_reg(0, size);
}
#endif
@@ -673,7 +733,7 @@ reg_t kFileIOWriteString(EngineState *s, int argc, reg_t *argv) {
// We skip creating these files, and instead handle the calls
// directly. Since the sciAudio calls are only creating text files,
// this is probably the most straightforward place to handle them.
- if (handle == VIRTUALFILE_HANDLE_SCIAUDIO) {
+ if (handle == kVirtualFileHandleSciAudio) {
Common::List<ExecStack>::const_iterator iter = s->_executionStack.reverse_begin();
iter--; // sciAudio
iter--; // sciAudio child
@@ -756,10 +816,24 @@ reg_t kFileIOExists(EngineState *s, int argc, reg_t *argv) {
return saveCatalogueExists(name) ? TRUE_REG : NULL_REG;
}
- // LSL7 checks to see if the autosave save exists when deciding whether to
- // go to the main menu or not on startup
+ int findSaveNo = -1;
+
if (g_sci->getGameId() == GID_LSL7 && name == "autosvsg.000") {
- return g_sci->getSaveFileManager()->listSavefiles(g_sci->getSavegameName(0)).empty() ? NULL_REG : TRUE_REG;
+ // LSL7 checks to see if the autosave save exists when deciding whether
+ // to go to the main menu or not on startup
+ findSaveNo = kAutoSaveId;
+ } else if (g_sci->getGameId() == GID_RAMA) {
+ // RAMA checks to see if save game files exist before showing them in
+ // the native save/load dialogue
+ if (name == "autorama.sg") {
+ findSaveNo = kAutoSaveId;
+ } else if (sscanf(name.c_str(), "ramasg.%i", &findSaveNo) == 1) {
+ findSaveNo += kSaveIdShift;
+ }
+ }
+
+ if (findSaveNo != -1) {
+ return g_sci->getSaveFileManager()->listSavefiles(g_sci->getSavegameName(findSaveNo)).empty() ? NULL_REG : TRUE_REG;
}
#endif
@@ -862,24 +936,48 @@ reg_t kFileIOWriteByte(EngineState *s, int argc, reg_t *argv) {
}
reg_t kFileIOReadWord(EngineState *s, int argc, reg_t *argv) {
- FileHandle *f = getFileFromHandle(s, argv[0].toUint16());
+ const uint16 handle = argv[0].toUint16();
+ FileHandle *f = getFileFromHandle(s, handle);
if (!f)
- return NULL_REG;
- return make_reg(0, f->_in->readUint16LE());
+ return s->r_acc;
+
+ reg_t value;
+ if (s->_fileHandles[handle]._name == "-scummvm-save-") {
+ value._segment = f->_in->readUint16LE();
+ value._offset = f->_in->readUint16LE();
+ } else {
+ value = make_reg(0, f->_in->readUint16LE());
+ }
+
+ if (f->_in->err()) {
+ return s->r_acc;
+ }
+
+ return value;
}
reg_t kFileIOWriteWord(EngineState *s, int argc, reg_t *argv) {
- uint16 handle = argv[0].toUint16();
+ const uint16 handle = argv[0].toUint16();
-#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
+ if (handle == kVirtualFileHandleSci32Save) {
return s->r_acc;
}
-#endif
FileHandle *f = getFileFromHandle(s, handle);
- if (f)
+ if (!f) {
+ return s->r_acc;
+ }
+
+ if (s->_fileHandles[handle]._name == "-scummvm-save-") {
+ f->_out->writeUint16LE(argv[1]._segment);
+ f->_out->writeUint16LE(argv[1]._offset);
+ } else {
+ if (argv[1].isPointer()) {
+ error("Attempt to write non-number %04x:%04x", PRINT_REG(argv[1]));
+ }
f->_out->writeUint16LE(argv[1].toUint16());
+ }
+
return s->r_acc;
}
@@ -1174,7 +1272,7 @@ reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv) {
Common::Array<SavegameDesc> saves;
listSavegames(saves);
- uint totalSaves = MIN<uint>(saves.size(), MAX_SAVEGAME_NR);
+ uint totalSaves = MIN<uint>(saves.size(), kMaxNumSaveGames);
Common::String game_id = s->_segMan->getString(argv[0]);
@@ -1187,14 +1285,14 @@ reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv) {
totalSaves = 0;
}
- const uint bufSize = (totalSaves * SCI_MAX_SAVENAME_LENGTH) + 1;
+ const uint bufSize = (totalSaves * kMaxSaveNameLength) + 1;
char *saveNames = new char[bufSize];
char *saveNamePtr = saveNames;
for (uint i = 0; i < totalSaves; i++) {
*slot++ = make_reg(0, saves[i].id + SAVEGAMEID_OFFICIALRANGE_START); // Store the virtual savegame ID (see above)
strcpy(saveNamePtr, saves[i].name);
- saveNamePtr += SCI_MAX_SAVENAME_LENGTH;
+ saveNamePtr += kMaxSaveNameLength;
}
*saveNamePtr = 0; // Terminate list
@@ -1239,7 +1337,7 @@ reg_t kSaveGame32(EngineState *s, int argc, reg_t *argv) {
s->_msgState->getMessage(0, autoSaveNameTuple, autoSaveNameId);
if (saveDescription == autoSaveName.toString()) {
- saveNo = 0;
+ saveNo = kAutoSaveId;
}
s->_segMan->freeArray(autoSaveNameId);
@@ -1321,7 +1419,7 @@ reg_t kCheckSaveGame32(EngineState *s, int argc, reg_t *argv) {
}
SavegameDesc save;
- if (!fillSavegameDesc(g_sci->getSavegameName(saveNo), &save)) {
+ if (!fillSavegameDesc(g_sci->getSavegameName(saveNo), save)) {
return NULL_REG;
}
@@ -1369,19 +1467,19 @@ reg_t kGetSaveFiles32(EngineState *s, int argc, reg_t *argv) {
// Normally SSCI limits to 20 games per directory, but ScummVM allows more
// than that with games that use the standard save-load dialogue
- descriptions.resize(SCI_MAX_SAVENAME_LENGTH * saves.size() + 1, true);
+ descriptions.resize(kMaxSaveNameLength * saves.size() + 1, true);
saveIds.resize(saves.size() + 1, true);
for (uint i = 0; i < saves.size(); ++i) {
const SavegameDesc &save = saves[i];
- char *target = &descriptions.charAt(SCI_MAX_SAVENAME_LENGTH * i);
+ char *target = &descriptions.charAt(kMaxSaveNameLength * i);
// At least Phant2 requires use of strncpy, since it creates save game
- // names of exactly SCI_MAX_SAVENAME_LENGTH
- strncpy(target, save.name, SCI_MAX_SAVENAME_LENGTH);
+ // names of exactly kMaxSaveNameLength
+ strncpy(target, save.name, kMaxSaveNameLength);
saveIds.setFromInt16(i, save.id - kSaveIdShift);
}
- descriptions.charAt(SCI_MAX_SAVENAME_LENGTH * saves.size()) = '\0';
+ descriptions.charAt(kMaxSaveNameLength * saves.size()) = '\0';
saveIds.setFromInt16(saves.size(), 0);
return make_reg(0, saves.size());
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 28e054bea9..e5336b37bc 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -932,7 +932,7 @@ void _k_GenericDrawControl(EngineState *s, reg_t controlObject, bool hilite) {
}
}
- debugC(kDebugLevelGraphics, "drawing list control %04x:%04x to %d,%d, diff %d", PRINT_REG(controlObject), x, y, SCI_MAX_SAVENAME_LENGTH);
+ debugC(kDebugLevelGraphics, "drawing list control %04x:%04x to %d,%d", PRINT_REG(controlObject), x, y);
g_sci->_gfxControls16->kernelDrawList(rect, controlObject, maxChars, listCount, listStrings, fontId, style, upperPos, cursorPos, isAlias, hilite);
delete[] listStrings;
return;
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp
index 2f66e51a6e..2ca5a65fc0 100644
--- a/engines/sci/engine/klists.cpp
+++ b/engines/sci/engine/klists.cpp
@@ -859,19 +859,19 @@ reg_t kArrayFill(EngineState *s, int argc, reg_t *argv) {
reg_t kArrayCopy(EngineState *s, int argc, reg_t *argv) {
SciArray &target = *s->_segMan->lookupArray(argv[0]);
const uint16 targetIndex = argv[1].toUint16();
+ const uint16 sourceIndex = argv[3].toUint16();
+ const int16 count = argv[4].toSint16();
- SciArray source;
- // String copies may be made from static script data
if (!s->_segMan->isArray(argv[2])) {
+ // String copies may be made from static script data
+ SciArray source;
source.setType(kArrayTypeString);
source.fromString(s->_segMan->getString(argv[2]));
+ target.copy(source, sourceIndex, targetIndex, count);
} else {
- source = *s->_segMan->lookupArray(argv[2]);
+ target.copy(*s->_segMan->lookupArray(argv[2]), sourceIndex, targetIndex, count);
}
- const uint16 sourceIndex = argv[3].toUint16();
- const uint16 count = argv[4].toUint16();
- target.copy(source, sourceIndex, targetIndex, count);
return argv[0];
}
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index fd07e0c126..60ad497b84 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -1184,30 +1184,8 @@ void SegManager::reconstructClones() {
bool gamestate_save(EngineState *s, Common::WriteStream *fh, const Common::String &savename, const Common::String &version) {
- TimeDate curTime;
- g_system->getTimeAndDate(curTime);
-
- SavegameMetadata meta;
- meta.version = CURRENT_SAVEGAME_VERSION;
- meta.name = savename;
- meta.gameVersion = version;
- meta.saveDate = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF);
- meta.saveTime = ((curTime.tm_hour & 0xFF) << 16) | (((curTime.tm_min) & 0xFF) << 8) | ((curTime.tm_sec) & 0xFF);
-
- Resource *script0 = g_sci->getResMan()->findResource(ResourceId(kResourceTypeScript, 0), false);
- meta.script0Size = script0->size();
- meta.gameObjectOffset = g_sci->getGameObject().getOffset();
-
- // Checking here again
-// TODO: This breaks Torin autosave, is there actually any reason for it?
-// if (s->executionStackBase) {
-// warning("Cannot save from below kernel function");
-// return false;
-// }
-
- Common::Serializer ser(0, fh);
- sync_SavegameMetadata(ser, meta);
- Graphics::saveThumbnail(*fh);
+ set_savegame_metadata(fh, savename, version);
+ Common::Serializer ser(nullptr, fh);
s->saveLoadWithSerializer(ser); // FIXME: Error handling?
if (g_sci->_gfxPorts)
g_sci->_gfxPorts->saveLoadWithSerializer(ser);
@@ -1395,22 +1373,42 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
s->gameIsRestarting = GAMEISRESTARTING_RESTORE;
}
-bool get_savegame_metadata(Common::SeekableReadStream *stream, SavegameMetadata *meta) {
+void set_savegame_metadata(Common::WriteStream *fh, const Common::String &savename, const Common::String &version) {
+ TimeDate curTime;
+ g_system->getTimeAndDate(curTime);
+
+ SavegameMetadata meta;
+ meta.version = CURRENT_SAVEGAME_VERSION;
+ meta.name = savename;
+ meta.gameVersion = version;
+ meta.saveDate = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF);
+ meta.saveTime = ((curTime.tm_hour & 0xFF) << 16) | (((curTime.tm_min) & 0xFF) << 8) | ((curTime.tm_sec) & 0xFF);
+
+ Resource *script0 = g_sci->getResMan()->findResource(ResourceId(kResourceTypeScript, 0), false);
+ assert(script0);
+ meta.script0Size = script0->size();
+ meta.gameObjectOffset = g_sci->getGameObject().getOffset();
+
+ Common::Serializer ser(nullptr, fh);
+ sync_SavegameMetadata(ser, meta);
+ Graphics::saveThumbnail(*fh);
+}
+
+bool get_savegame_metadata(Common::SeekableReadStream *stream, SavegameMetadata &meta) {
assert(stream);
- assert(meta);
- Common::Serializer ser(stream, 0);
- sync_SavegameMetadata(ser, *meta);
+ Common::Serializer ser(stream, nullptr);
+ sync_SavegameMetadata(ser, meta);
if (stream->eos())
return false;
- if ((meta->version < MINIMUM_SAVEGAME_VERSION) ||
- (meta->version > CURRENT_SAVEGAME_VERSION)) {
- if (meta->version < MINIMUM_SAVEGAME_VERSION)
+ if ((meta.version < MINIMUM_SAVEGAME_VERSION) ||
+ (meta.version > CURRENT_SAVEGAME_VERSION)) {
+ if (meta.version < MINIMUM_SAVEGAME_VERSION)
warning("Old savegame version detected- can't load");
else
- warning("Savegame version is %d- maximum supported is %0d", meta->version, CURRENT_SAVEGAME_VERSION);
+ warning("Savegame version is %d- maximum supported is %0d", meta.version, CURRENT_SAVEGAME_VERSION);
return false;
}
diff --git a/engines/sci/engine/savegame.h b/engines/sci/engine/savegame.h
index 29930241b1..1ac25b26a9 100644
--- a/engines/sci/engine/savegame.h
+++ b/engines/sci/engine/savegame.h
@@ -118,8 +118,12 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *save);
/**
* Read the header from a savegame.
*/
-bool get_savegame_metadata(Common::SeekableReadStream* stream, SavegameMetadata* meta);
+bool get_savegame_metadata(Common::SeekableReadStream *stream, SavegameMetadata &meta);
+/**
+ * Write the header to a savegame.
+ */
+void set_savegame_metadata(Common::WriteStream *fh, const Common::String &savename, const Common::String &version);
} // End of namespace Sci
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index a0243defa8..c1da3f25e0 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -698,9 +698,9 @@ int Script::relocateOffsetSci3(uint32 offset) const {
}
#endif
-bool Script::relocateLocal(SegmentId segment, int location) {
+bool Script::relocateLocal(SegmentId segment, int location, uint32 offset) {
if (_localsBlock)
- return relocateBlock(_localsBlock->_locals, _localsOffset, segment, location, getHeapOffset());
+ return relocateBlock(_localsBlock->_locals, _localsOffset, segment, location, offset);
else
return false;
}
@@ -804,7 +804,7 @@ void Script::relocateSci0Sci21(const SegmentId segmentId) {
// We only relocate locals and objects here, and ignore relocation of
// code blocks. In SCI1.1 and newer versions, only locals and objects
// are relocated.
- if (!relocateLocal(segmentId, pos)) {
+ if (!relocateLocal(segmentId, pos, getHeapOffset())) {
// Not a local? It's probably an object or code block. If it's an
// object, relocate it.
const ObjMap::iterator end = _objects.end();
@@ -817,19 +817,23 @@ void Script::relocateSci0Sci21(const SegmentId segmentId) {
#ifdef ENABLE_SCI32
void Script::relocateSci3(const SegmentId segmentId) {
- SciSpan<const byte> relocStart = _buf->subspan(_buf->getUint32SEAt(8));
+ SciSpan<const byte> relocEntry = _buf->subspan(_buf->getUint32SEAt(8));
const uint relocCount = _buf->getUint16SEAt(18);
- ObjMap::iterator it;
- for (it = _objects.begin(); it != _objects.end(); ++it) {
- SciSpan<const byte> seeker = relocStart;
- for (uint i = 0; i < relocCount; ++i) {
- it->_value.relocateSci3(segmentId,
- seeker.getUint32SEAt(0),
- seeker.getUint32SEAt(4),
- _script.size());
- seeker += 10;
+ for (uint i = 0; i < relocCount; ++i) {
+ const uint location = relocEntry.getUint32SEAt(0);
+ const uint offset = relocEntry.getUint32SEAt(4);
+
+ if (!relocateLocal(segmentId, location, offset)) {
+ const ObjMap::iterator end = _objects.end();
+ for (ObjMap::iterator it = _objects.begin(); it != end; ++it) {
+ if (it->_value.relocateSci3(segmentId, location, offset, _script.size())) {
+ break;
+ }
+ }
}
+
+ relocEntry += 10;
}
}
#endif
@@ -973,7 +977,7 @@ void Script::initializeLocals(SegManager *segMan) {
const SciSpan<const byte> base = _buf->subspan(getLocalsOffset());
for (uint16 i = 0; i < getLocalsCount(); i++)
- locals->_locals[i] = make_reg(0, base.getUint16SEAt(i * 2));
+ locals->_locals[i] = make_reg(0, base.getUint16SEAt(i * sizeof(uint16)));
} else {
// In SCI0 early, locals are set at run time, thus zero them all here
for (uint16 i = 0; i < getLocalsCount(); i++)
diff --git a/engines/sci/engine/script.h b/engines/sci/engine/script.h
index 1befef1c8a..f4afca7681 100644
--- a/engines/sci/engine/script.h
+++ b/engines/sci/engine/script.h
@@ -318,7 +318,7 @@ private:
void relocateSci3(const SegmentId segmentId);
#endif
- bool relocateLocal(SegmentId segment, int location);
+ bool relocateLocal(SegmentId segment, int location, uint32 offset);
#ifdef ENABLE_SCI32
/**
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index a5d2a67b94..78b51c11f0 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -138,6 +138,10 @@ static const char *const selectorNameTable[] = {
"readWord", // LSL7, Phant1, Torin
"flag", // PQ4
"select", // PQ4
+ "handle", // RAMA
+ "saveFilePtr", // RAMA
+ "priority", // RAMA
+ "plane", // RAMA
#endif
NULL
};
@@ -199,7 +203,11 @@ enum ScriptPatcherSelectors {
SELECTOR_setScaler,
SELECTOR_readWord,
SELECTOR_flag,
- SELECTOR_select
+ SELECTOR_select,
+ SELECTOR_handle,
+ SELECTOR_saveFilePtr,
+ SELECTOR_priority,
+ SELECTOR_plane
#endif
};
@@ -6218,9 +6226,83 @@ static const uint16 ramaBenchmarkPatch[] = {
PATCH_END
};
-// script, description, signature patch
+// RAMA initialises the font system with an incorrect text resolution (it uses
+// the resolution from Phant1) which causes text to be scaled incorrectly.
+static const uint16 ramaTextResolutionSignature[] = {
+ 0x39, 0x03, // pushi 3
+ 0x78, // push1
+ SIG_MAGICDWORD,
+ 0x38, SIG_UINT16(0x276), // pushi 630
+ 0x38, SIG_UINT16(0x1c2), // pushi 450
+ 0x43, 0x49, SIG_UINT16(0x06), // callk Font, 6
+ SIG_END
+};
+
+static const uint16 ramaTextResolutionPatch[] = {
+ PATCH_ADDTOOFFSET(+3), // pushi 3, push1
+ 0x38, PATCH_UINT16(0x280), // pushi 640
+ 0x38, PATCH_UINT16(0x1e0), // pushi 480
+ PATCH_END
+};
+
+// RAMA uses a custom save game format that game scripts read and write
+// manually. The save game format serialises object references, which in the
+// original engine could be done just by writing int16s (since object references
+// were just 16-bit indexes), but in ScummVM we have to write the full 32-bit
+// reg_t. We hijack kFileIOReadWord/kFileIOWriteWord to do this for us, but we
+// need the game to agree to use those kFileIO calls instead of doing raw reads
+// and creating its own numbers, as it tries to do here in
+// `SaveManager::readWord`.
+static const uint16 ramaSerializeRegTSignature1[] = {
+ SIG_MAGICDWORD,
+ 0x38, SIG_SELECTOR16(newWith), // pushi $10b (newWith)
+ 0x7a, // push2
+ 0x7a, // push2
+ 0x72, SIG_UINT16(0x00), // lofsa ""
+ 0x36, // push
+ 0x51, 0x0f, // class Str
+ SIG_END
+};
+
+static const uint16 ramaSerializeRegTPatch1[] = {
+ 0x38, PATCH_SELECTOR16(readWord), // pushi readWord
+ 0x76, // push0
+ 0x62, PATCH_SELECTOR16(saveFilePtr), // pToa saveFilePtr
+ 0x4a, PATCH_UINT16(0x04), // send 4
+ 0x48, // ret
+ PATCH_END
+};
+
+// When opening a datacube on the pocket computer, `DocReader::init` will try
+// to perform arithmetic on a pointer to `thighComputer::plane` and then use the
+// resulting value as the priority for the DocReader. This happened to work in
+// SSCI because the plane pointer would just be a high numeric value, but
+// ScummVM needs an actual number, not a pointer.
+// Applies to at least: US English
+static const uint16 ramaDocReaderInitSignature[] = {
+ 0x39, SIG_SELECTOR8(priority), // pushi $1a (priority)
+ 0x78, // push1
+ 0x39, SIG_SELECTOR8(plane), // pushi $19 (plane)
+ 0x76, // push0
+ 0x7a, // push2
+ SIG_MAGICDWORD,
+ 0x39, 0x2c, // pushi 44
+ 0x76, // push0
+ 0x43, 0x02, SIG_UINT16(0x04), // callk ScriptID, 4
+ SIG_END
+};
+
+static const uint16 ramaDocReaderInitPatch[] = {
+ PATCH_ADDTOOFFSET(+3), // pushi priority, push1
+ 0x39, PATCH_SELECTOR8(priority), // pushi priority
+ PATCH_END
+};
+
static const SciScriptPatcherEntry ramaSignatures[] = {
- { true, 64908, "disable video benchmarking", 1, ramaBenchmarkSignature, ramaBenchmarkPatch },
+ { true, 0, "fix bad text resolution", 1, ramaTextResolutionSignature, ramaTextResolutionPatch },
+ { true, 55, "fix bad DocReader::init priority calculation", 1, ramaDocReaderInitSignature, ramaDocReaderInitPatch },
+ { true, 85, "fix SaveManager to use normal readWord calls", 1, ramaSerializeRegTSignature1, ramaSerializeRegTPatch1 },
+ { true, 64908, "disable video benchmarking", 1, ramaBenchmarkSignature, ramaBenchmarkPatch },
SCI_SIGNATUREENTRY_TERMINATOR
};
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index 8eca6713b3..d6e2dd3c24 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -436,7 +436,7 @@ public:
_size(0),
_data(nullptr) {}
- SciArray(const SciArray &array) : Common::Serializable() {
+ SciArray(const SciArray &array) {
_type = array._type;
_size = array._size;
_elementSize = array._elementSize;
@@ -505,10 +505,14 @@ public:
}
/**
- * Returns the size of the array, in bytes.
+ * Returns the maximum number of bytes that can be stored in the array.
*/
uint16 byteSize() const {
- return _size * _elementSize;
+ uint16 size = _size;
+ if (_type == kArrayTypeID || _type == kArrayTypeInt16) {
+ size *= sizeof(uint16);
+ }
+ return size;
}
/**
@@ -527,14 +531,6 @@ public:
}
/**
- * Shrinks a string array to its optimal size.
- */
- void snug() {
- assert(_type == kArrayTypeString || _type == kArrayTypeByte);
- resize(Common::strnlen((char *)_data, _size) + 1, true);
- }
-
- /**
* Returns a pointer to the array's raw data storage.
*/
void *getRawData() { return _data; }
@@ -765,12 +761,12 @@ public:
* Copies values from the source array. Both arrays will be grown if needed
* to prevent out-of-bounds reads/writes.
*/
- void copy(SciArray &source, const uint16 sourceIndex, const uint16 targetIndex, uint16 count) {
- if (count == 65535 /* -1 */) {
+ void copy(SciArray &source, const uint16 sourceIndex, const uint16 targetIndex, int16 count) {
+ if (count == -1) {
count = source.size() - sourceIndex;
}
- if (!count) {
+ if (count < 1) {
return;
}
@@ -892,7 +888,7 @@ public:
break;
}
- return Common::String::format("type %s; %u entries; %u bytes", type, size(), byteSize());
+ return Common::String::format("type %s; %u entries", type, size());
}
protected:
@@ -976,7 +972,7 @@ public:
inline SciBitmap() : _data(nullptr), _dataSize(0), _gc(true) {}
- inline SciBitmap(const SciBitmap &other) : Common::Serializable() {
+ inline SciBitmap(const SciBitmap &other) {
_dataSize = other._dataSize;
_data = (byte *)malloc(other._dataSize);
memcpy(_data, other._data, other._dataSize);
diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp
index d310b0fafd..1feb80844c 100644
--- a/engines/sci/engine/selector.cpp
+++ b/engines/sci/engine/selector.cpp
@@ -227,6 +227,9 @@ void Kernel::mapSelectors() {
FIND_SELECTOR(num);
FIND_SELECTOR(reallyRestore);
FIND_SELECTOR(bookMark);
+ FIND_SELECTOR(fileNumber);
+ FIND_SELECTOR(description);
+ FIND_SELECTOR(dispose);
#endif
}
diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h
index 977411429a..1603ca94f3 100644
--- a/engines/sci/engine/selector.h
+++ b/engines/sci/engine/selector.h
@@ -184,6 +184,9 @@ struct SelectorCache {
Selector num; // for Phant2 restore from launcher
Selector reallyRestore; // for Phant2 restore from launcher
Selector bookMark; // for Phant2 auto-save
+ Selector fileNumber; // for RAMA save/load
+ Selector description; // for RAMA save/load
+ Selector dispose; // for RAMA save/load save from launcher
#endif
};
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h
index 792287ba53..83550f8aa6 100644
--- a/engines/sci/engine/vm.h
+++ b/engines/sci/engine/vm.h
@@ -155,6 +155,7 @@ enum GlobalVar {
kGlobalVarTextSpeed = 94, // SCI32; 0 is fastest, 8 is slowest
kGlobalVarGK1Music1 = 102, // 0 to 127
kGlobalVarGK1Music2 = 103, // 0 to 127
+ kGlobalVarRamaCatalogFile = 130,
kGlobalVarLSL6HiresGameFlags = 137,
kGlobalVarGK1NarratorMode = 166, // 0 for text, 1 for speech
kGlobalVarPhant1MusicVolume = 187, // 0 to 15
diff --git a/engines/titanic/game/cdrom_tray.cpp b/engines/titanic/game/cdrom_tray.cpp
index 0215b58f43..f9daf17d00 100644
--- a/engines/titanic/game/cdrom_tray.cpp
+++ b/engines/titanic/game/cdrom_tray.cpp
@@ -76,12 +76,12 @@ bool CCDROMTray::ActMsg(CActMsg *msg) {
} else if (_insertedCD == "None") {
// Opening tray with no CD
playMovie(44, 54, 0);
- playSound("a#34.wav", 50, 0, 0);
+ playSound(TRANSLATE("a#34.wav", "a#29.wav"), 50, 0, 0);
_isOpened = true;
} else if (_insertedCD == "newCD1" || _insertedCD == "newCD2") {
// Opening tray with standard CD
playMovie(22, 32, 0);
- playSound("a#34.wav", 50, 0, 0);
+ playSound(TRANSLATE("a#34.wav", "a#29.wav"), 50, 0, 0);
_isOpened = true;
} else if (_insertedCD == "newSTCD") {
// Opening tray with Starship Titanic CD
diff --git a/engines/titanic/game/computer.cpp b/engines/titanic/game/computer.cpp
index 9aa5db252c..a9ff1ce9c0 100644
--- a/engines/titanic/game/computer.cpp
+++ b/engines/titanic/game/computer.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/computer.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -46,7 +47,7 @@ void CComputer::load(SimpleFile *file) {
bool CComputer::ActMsg(CActMsg *msg) {
if (_state) {
- playSound("a#35.wav");
+ playSound(TRANSLATE("a#35.wav", "a#30.wav"));
playMovie(32, 42, 0);
if (msg->_action == "CD1")
@@ -66,11 +67,11 @@ bool CComputer::ActMsg(CActMsg *msg) {
bool CComputer::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
if (_currentCD == "None") {
if (_state) {
- playSound("a#35.wav");
+ playSound(TRANSLATE("a#35.wav", "a#30.wav"));
playMovie(11, 21, 0);
_state = 0;
} else {
- playSound("a#34.wav");
+ playSound(TRANSLATE("a#34.wav", "a#29.wav"));
playMovie(0, 10, 0);
_state = 1;
}
@@ -81,7 +82,7 @@ bool CComputer::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
actMsg.execute(_currentCD);
_currentCD = "None";
} else {
- playSound("a#34.wav");
+ playSound(TRANSLATE("a#34.wav", "a#29.wav"));
playMovie(21, 31, 0);
_state = 1;
}
@@ -92,10 +93,10 @@ bool CComputer::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
bool CComputer::MovieEndMsg(CMovieEndMsg *msg) {
if (msg->_endFrame == 90) {
- playSound("a#32.wav");
- playSound("a#33.wav");
- playSound("a#31.wav");
- playSound("a#0.wav");
+ playSound(TRANSLATE("a#32.wav", "a#27.wav"));
+ playSound(TRANSLATE("a#33.wav", "a#28.wav"));
+ playSound(TRANSLATE("a#31.wav", "a#26.wav"));
+ playSound(TRANSLATE("a#0.wav", "a#52.wav"));
gotoView("Home.Node 4.E", "_TRACK,3,e-cu,4,E");
}
diff --git a/engines/titanic/game/nose_holder.cpp b/engines/titanic/game/nose_holder.cpp
index d00c7b372e..be17d536b0 100644
--- a/engines/titanic/game/nose_holder.cpp
+++ b/engines/titanic/game/nose_holder.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/nose_holder.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -54,7 +55,7 @@ bool CNoseHolder::ActMsg(CActMsg *msg) {
if (msg->_action == "Sneeze" && !_itemName.empty() && _dropEnabled) {
CProximity prox;
prox._positioningMode = POSMODE_VECTOR;
- playSound("z#35.wav", prox);
+ playSound(TRANSLATE("z#35.wav", "z#567.wav"), prox);
if (getView() == findView()) {
setVisible(true);
diff --git a/engines/titanic/game/sauce_dispensor.cpp b/engines/titanic/game/sauce_dispensor.cpp
index 7b395e5b11..993a577fd7 100644
--- a/engines/titanic/game/sauce_dispensor.cpp
+++ b/engines/titanic/game/sauce_dispensor.cpp
@@ -23,6 +23,7 @@
#include "titanic/game/sauce_dispensor.h"
#include "titanic/carry/chicken.h"
#include "titanic/carry/glass.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -73,7 +74,7 @@ bool CSauceDispensor::Use(CUse *msg) {
CChicken *chicken = static_cast<CChicken *>(msg->_item);
_field104 = true;
if (_starlingsDead) {
- playSound("b#15.wav", 50);
+ playSound(TRANSLATE("b#15.wav", "z#562.wav"), 50);
if (chicken->_condiment != "None") {
petDisplayMessage(1, FOODSTUFF_ALREADY_GARNISHED);
@@ -96,7 +97,7 @@ bool CSauceDispensor::Use(CUse *msg) {
CMovieEndMsg endMsg(0, 0);
endMsg.execute(this);
- playSound("z#120.wav");
+ playSound(TRANSLATE("z#120.wav", "z#651.wav"));
petDisplayMessage(1, DISPENSOR_IS_EMPTY);
} else if (msg->_item->isEquals("BeerGlass")) {
diff --git a/engines/titanic/game/search_point.cpp b/engines/titanic/game/search_point.cpp
index bbe923267a..da5c4e5d55 100644
--- a/engines/titanic/game/search_point.cpp
+++ b/engines/titanic/game/search_point.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/search_point.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -47,7 +48,7 @@ bool CSearchPoint::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
child->petAddToInventory();
CVisibleMsg visibleMsg(true);
visibleMsg.execute(child->getName());
- playSound("z#47.wav");
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"));
}
if (--_value == 0)
diff --git a/engines/titanic/game/seasonal_adjustment.cpp b/engines/titanic/game/seasonal_adjustment.cpp
index 7a729c9d90..f9f834eed4 100644
--- a/engines/titanic/game/seasonal_adjustment.cpp
+++ b/engines/titanic/game/seasonal_adjustment.cpp
@@ -22,6 +22,7 @@
#include "titanic/game/seasonal_adjustment.h"
#include "titanic/core/project_item.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -79,7 +80,7 @@ bool CSeasonalAdjustment::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
}
bool CSeasonalAdjustment::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
- playSound("z#42.wav");
+ playSound(TRANSLATE("z#42.wav", "z#743.wav"));
if (!_enabled) {
petDisplayMessage(1, SEASONAL_SWITCH_NOT_WORKING);
} else if (!_switching) {
diff --git a/engines/titanic/game/sgt/sgt_state_room.cpp b/engines/titanic/game/sgt/sgt_state_room.cpp
index 3ddfcfef5f..ca6acaef16 100644
--- a/engines/titanic/game/sgt/sgt_state_room.cpp
+++ b/engines/titanic/game/sgt/sgt_state_room.cpp
@@ -22,6 +22,7 @@
#include "titanic/game/sgt/sgt_state_room.h"
#include "titanic/pet_control/pet_control.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -141,7 +142,7 @@ bool CSGTStateRoom::EnterRoomMsg(CEnterRoomMsg *msg) {
if (roomFlags == assignedRoom && getPassengerClass() == 3
&& _statics->_announcementFlag) {
// Congratulations, you may have won an upgrade
- playSound("b#21.wav");
+ playSound(TRANSLATE("b#21.wav", "b#2.wav"));
_statics->_announcementFlag = false;
}
diff --git a/engines/titanic/game/sgt/toilet.cpp b/engines/titanic/game/sgt/toilet.cpp
index 0bcb08fe38..a4541bf377 100644
--- a/engines/titanic/game/sgt/toilet.cpp
+++ b/engines/titanic/game/sgt/toilet.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/sgt/toilet.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -51,7 +52,7 @@ bool CToilet::TurnOn(CTurnOn *msg) {
_startFrame = 0;
_endFrame = 11;
playMovie(0, 11, MOVIE_WAIT_FOR_FINISH);
- playSound("b#1.wav");
+ playSound(TRANSLATE("b#1.wav", "b#86.wav"));
}
return true;
@@ -65,7 +66,7 @@ bool CToilet::TurnOff(CTurnOff *msg) {
_startFrame = 11;
_endFrame = 18;
playMovie(11, 18, MOVIE_NOTIFY_OBJECT | MOVIE_WAIT_FOR_FINISH);
- playSound("b#1.wav");
+ playSound(TRANSLATE("b#1.wav", "b#86.wav"));
}
return true;
diff --git a/engines/titanic/game/sgt/washstand.cpp b/engines/titanic/game/sgt/washstand.cpp
index 217e36c1e9..a087969dba 100644
--- a/engines/titanic/game/sgt/washstand.cpp
+++ b/engines/titanic/game/sgt/washstand.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/sgt/washstand.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -48,7 +49,7 @@ bool CWashstand::TurnOn(CTurnOn *msg) {
_startFrame = 0;
_endFrame = 14;
playMovie(0, 14, MOVIE_WAIT_FOR_FINISH);
- playSound("b#14.wav");
+ playSound(TRANSLATE("b#14.wav", "b#99.wav"));
}
return true;
@@ -62,7 +63,7 @@ bool CWashstand::TurnOff(CTurnOff *msg) {
_startFrame = 14;
_endFrame = 28;
playMovie(14, 28, MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
- playSound("b#14.wav");
+ playSound(TRANSLATE("b#14.wav", "b#99.wav"));
}
return true;
diff --git a/engines/titanic/game/speech_dispensor.cpp b/engines/titanic/game/speech_dispensor.cpp
index 7f5580abb5..460cf0fdc1 100644
--- a/engines/titanic/game/speech_dispensor.cpp
+++ b/engines/titanic/game/speech_dispensor.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/speech_dispensor.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -85,7 +86,7 @@ bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) {
switch (_state) {
case 0:
- playSound("z#93.wav");
+ playSound(TRANSLATE("z#93.wav", "z#624.wav"));
if (_seasonNum == SEASON_WINTER) {
petDisplayMessage(1, FROZEN_TO_BRANCH);
_hitCounter = 0;
@@ -120,7 +121,7 @@ bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) {
bool CSpeechDispensor::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
if (!_speechFallen) {
- playSound("z#93.wav");
+ playSound(TRANSLATE("z#93.wav", "z#624.wav"));
if (_failureType) {
petDisplayMessage(1, OUT_OF_REACH);
} else {
diff --git a/engines/titanic/game/sub_glass.cpp b/engines/titanic/game/sub_glass.cpp
index 48cc84815a..ced6f662e9 100644
--- a/engines/titanic/game/sub_glass.cpp
+++ b/engines/titanic/game/sub_glass.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/sub_glass.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -67,7 +68,7 @@ bool CSUBGlass::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
if (!_fieldBC && _startFrame >= 0) {
_fieldBC = true;
playMovie(_startFrame, _endFrame, MOVIE_NOTIFY_OBJECT);
- playSound("z#30.wav");
+ playSound(TRANSLATE("z#30.wav", "z#561.wav"));
}
return true;
@@ -89,7 +90,7 @@ bool CSUBGlass::SignalObject(CSignalObject *msg) {
if (_signalStartFrame >= 0) {
playMovie(_signalStartFrame, _signalEndFrame, MOVIE_WAIT_FOR_FINISH);
- playSound("z#30.wav");
+ playSound(TRANSLATE("z#30.wav", "z#561.wav"));
_fieldBC = false;
}
}
diff --git a/engines/titanic/game/television.cpp b/engines/titanic/game/television.cpp
index 7c1e33cce4..be5d1ae40e 100644
--- a/engines/titanic/game/television.cpp
+++ b/engines/titanic/game/television.cpp
@@ -26,6 +26,7 @@
#include "titanic/debugger.h"
#include "titanic/game/get_lift_eye2.h"
#include "titanic/pet_control/pet_control.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -245,8 +246,8 @@ bool CTelevision::MovieEndMsg(CMovieEndMsg *msg) {
// You may be a winner
CProximity prox1, prox2;
prox1._soundType = prox2._soundType = Audio::Mixer::kSpeechSoundType;
- playSound("z#47.wav", prox1);
- _soundHandle = playSound("b#20.wav", prox2);
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"), prox1);
+ _soundHandle = playSound(TRANSLATE("b#20.wav", "b#1.wav"), prox2);
// Get the room flags for the SGT floor we're on
CPetControl *pet = getPetControl();
diff --git a/engines/titanic/game/throw_tv_down_well.cpp b/engines/titanic/game/throw_tv_down_well.cpp
index 680fc7e29f..ba01b32620 100644
--- a/engines/titanic/game/throw_tv_down_well.cpp
+++ b/engines/titanic/game/throw_tv_down_well.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/throw_tv_down_well.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -68,7 +69,7 @@ bool CThrowTVDownWell::EnterViewMsg(CEnterViewMsg *msg) {
bool CThrowTVDownWell::MovieEndMsg(CMovieEndMsg *msg) {
sleep(2000);
changeView("ParrotLobby.Node 11.N");
- playSound("z#471.wav");
+ playSound(TRANSLATE("z#471.wav", "z#208.wav"));
addTimer(2, 7000, 0);
return true;
}
@@ -77,19 +78,19 @@ bool CThrowTVDownWell::TimerMsg(CTimerMsg *msg) {
if (msg->_actionVal == 1) {
changeView("ParrotLobby.Node 10.N");
} else if (msg->_actionVal == 2) {
- playSound("z#468.wav", 50);
+ playSound(TRANSLATE("z#468.wav", "z#205.wav"), 50);
sleep(1500);
changeView(_viewName);
_viewName = "NULL";
unlockMouse();
- playSound("z#47.wav");
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"));
}
return true;
}
bool CThrowTVDownWell::MovieFrameMsg(CMovieFrameMsg *msg) {
- playSound("z#470.wav");
+ playSound(TRANSLATE("z#470.wav", "z#207.wav"));
return true;
}
diff --git a/engines/titanic/game/up_lighter.cpp b/engines/titanic/game/up_lighter.cpp
index b19d899603..115cd097f6 100644
--- a/engines/titanic/game/up_lighter.cpp
+++ b/engines/titanic/game/up_lighter.cpp
@@ -23,6 +23,7 @@
#include "titanic/game/up_lighter.h"
#include "titanic/core/project_item.h"
#include "titanic/npcs/parrot.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -62,7 +63,7 @@ void CUpLighter::load(SimpleFile *file) {
bool CUpLighter::MovieEndMsg(CMovieEndMsg *msg) {
if (_hosePumping) {
- playSound("z#47.wav");
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"));
_noseDispensed = true;
CVisibleMsg visibleMsg(true);
diff --git a/engines/titanic/game/useless_lever.cpp b/engines/titanic/game/useless_lever.cpp
index 82d8983710..74b6371c06 100644
--- a/engines/titanic/game/useless_lever.cpp
+++ b/engines/titanic/game/useless_lever.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/useless_lever.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -42,11 +43,11 @@ void CUselessLever::load(SimpleFile *file) {
bool CUselessLever::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
if (_fieldE0) {
playMovie(15, 30, 0);
- playSound("z#56.wav");
+ playSound(TRANSLATE("z#56.wav", "z#587.wav"));
_fieldE0 = false;
} else {
playMovie(0, 14, 0);
- playSound("z#56.wav");
+ playSound(TRANSLATE("z#56.wav", "z#587.wav"));
_fieldE0 = true;
}
diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk
index 8c5cdd6446..617e262396 100644
--- a/engines/titanic/module.mk
+++ b/engines/titanic/module.mk
@@ -484,14 +484,6 @@ MODULE_OBJS := \
support/text_cursor.o \
support/time_event_info.o \
support/video_surface.o \
- true_talk/german/barbot_script.o \
- true_talk/german/bellbot_script.o \
- true_talk/german/deskbot_script.o \
- true_talk/german/doorbot_script.o \
- true_talk/german/liftbot_script.o \
- true_talk/german/maitred_script.o \
- true_talk/german/parrot_script.o \
- true_talk/german/succubus_script.o \
true_talk/barbot_script.o \
true_talk/bellbot_script.o \
true_talk/deskbot_script.o \
diff --git a/engines/titanic/moves/restricted_move.cpp b/engines/titanic/moves/restricted_move.cpp
index 52ff280437..279380a93c 100644
--- a/engines/titanic/moves/restricted_move.cpp
+++ b/engines/titanic/moves/restricted_move.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/moves/restricted_move.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -54,11 +55,12 @@ bool CRestrictedMove::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
} else if (classNum != UNCHECKED) {
petDisplayMessage(1, CLASS_NOT_ALLOWED_AT_DEST);
} else if (compareRoomNameTo("EmbLobby")) {
- playSound("a#17.wav");
+ if (g_language != Common::DE_DEU)
+ playSound("a#17.wav");
petDisplayMessage(1, CHECK_IN_AT_RECEPTION);
} else if (compareViewNameTo("Titania.Node 1.S")) {
CProximity prox(Audio::Mixer::kSpeechSoundType);
- playSound("z#226.wav", prox);
+ playSound(TRANSLATE("z#226.wav", "z#132.wav"), prox);
changeView(_destination);
}
diff --git a/engines/titanic/npcs/succubus.cpp b/engines/titanic/npcs/succubus.cpp
index 6eeccd345a..b8fddf2079 100644
--- a/engines/titanic/npcs/succubus.cpp
+++ b/engines/titanic/npcs/succubus.cpp
@@ -25,6 +25,7 @@
#include "titanic/carry/chicken.h"
#include "titanic/core/view_item.h"
#include "titanic/pet_control/pet_control.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -289,7 +290,7 @@ bool CSuccUBus::SubAcceptCCarryMsg(CSubAcceptCCarryMsg *msg) {
item->setVisible(false);
if (_startFrame1 >= 0) {
- playSound("z#23.wav");
+ playSound(TRANSLATE("z#23.wav", "z#554.wav"));
playMovie(_startFrame1, _endFrame1, 0);
}
@@ -366,7 +367,7 @@ bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) {
if (_isOn) {
_isOn = false;
if (_offStartFrame >= 0)
- playSound("z#27.wav", 100);
+ playSound(TRANSLATE("z#27.wav", "z#558.wav"), 100);
if (_signalFlag)
setVisible(false);
@@ -535,7 +536,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
if (msg->_endFrame == _offEndFrame) {
if (_endingStartFrame >= 0)
- playSound("z#30.wav", 100);
+ playSound(TRANSLATE("z#30.wav", "z#561.wav"), 100);
if (_signalFlag) {
_signalFlag = false;
@@ -680,12 +681,12 @@ bool CSuccUBus::TurnOn(CTurnOn *msg) {
if (pet) {
if (!_signalFlag && _initialStartFrame >= 0) {
playMovie(_initialStartFrame, _initialEndFrame, 0);
- playSound("z#30.wav", 100);
+ playSound(TRANSLATE("z#30.wav", "z#561.wav"), 100);
}
if (_onStartFrame >= 0) {
playMovie(_onStartFrame, _onEndFrame, MOVIE_NOTIFY_OBJECT);
- playSound("z#26.wav", 100);
+ playSound(TRANSLATE("z#26.wav", "z#557.wav"), 100);
}
uint petRoomFlags = pet->getRoomFlags();
@@ -712,7 +713,7 @@ bool CSuccUBus::TurnOff(CTurnOff *msg) {
}
if (_offStartFrame >= 0) {
- playSound("z#27.wav", 100);
+ playSound(TRANSLATE("z#27.wav", "z#558.wav"), 100);
playMovie(_offStartFrame, _offEndFrame, MOVIE_NOTIFY_OBJECT | MOVIE_WAIT_FOR_FINISH);
}
@@ -753,7 +754,7 @@ bool CSuccUBus::SUBTransition(CSUBTransition *msg) {
bool CSuccUBus::SetChevRoomBits(CSetChevRoomBits *msg) {
if (_isOn) {
_destRoomFlags = msg->_roomFlags;
- playSound("z#98.wav", 100);
+ playSound(TRANSLATE("z#98.wav", "z#629.wav"), 100);
}
return true;
diff --git a/engines/titanic/npcs/titania.cpp b/engines/titanic/npcs/titania.cpp
index d3e3395fc8..bfc0ba1bfd 100644
--- a/engines/titanic/npcs/titania.cpp
+++ b/engines/titanic/npcs/titania.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/npcs/titania.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -146,7 +147,7 @@ bool CTitania::ActMsg(CActMsg *msg) {
if (msg->_action == "SleepTitania") {
setVisible(true);
playCutscene(52, 104);
- playSound("z#47.wav", 100);
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"), 100);
changeView("Titania.Node 7.S", "");
// Re-enable control, and reset bomb's volume back to normal 60%
@@ -178,7 +179,7 @@ bool CTitania::ActMsg(CActMsg *msg) {
&& _mouth && _visionCentre && _speechCentre
&& _olfactoryCentre && _auditoryCentre) {
CProximity prox(Audio::Mixer::kSpeechSoundType);
- playSound("z#47.wav", prox);
+ playSound(TRANSLATE("z#47.wav", "z#578.wav"), prox);
CActMsg actMsg("Woken");
actMsg.execute("MouthSlot");
diff --git a/engines/titanic/sound/titania_speech.cpp b/engines/titanic/sound/titania_speech.cpp
index c6365a828b..30446fd992 100644
--- a/engines/titanic/sound/titania_speech.cpp
+++ b/engines/titanic/sound/titania_speech.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/sound/titania_speech.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -57,7 +58,7 @@ bool CTitaniaSpeech::ActMsg(CActMsg *msg) {
CProximity prox(Audio::Mixer::kSpeechSoundType);
switch (_actionNum) {
case 1:
- loadSound("a#12.wav");
+ loadSound(TRANSLATE("a#12.wav", "a#0.wav"));
sleep(1000);
playMovie(0, 187, MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
movieSetPlaying(true);
@@ -65,7 +66,7 @@ bool CTitaniaSpeech::ActMsg(CActMsg *msg) {
break;
case 2:
- loadSound("a#11.wav");
+ loadSound(TRANSLATE("a#11.wav", "a#4.wav"));
addTimer(0);
startAnimTimer("Para2", 300);
addTimer(6000);
@@ -78,25 +79,25 @@ bool CTitaniaSpeech::ActMsg(CActMsg *msg) {
case 3:
visibleMsg._visible = false;
visibleMsg.execute("TitaniaStillControl");
- loadSound("a#10.wav");
+ loadSound(TRANSLATE("a#10.wav", "a#2.wav"));
playMovie(585, 706, MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
- playSound("a#10.wav", prox);
+ playSound(TRANSLATE("a#10.wav", "a#2.wav"), prox);
break;
case 4:
visibleMsg._visible = false;
visibleMsg.execute("TitaniaStillControl");
- loadSound("a#9.wav");
+ loadSound(TRANSLATE("a#9.wav", "a#3.wav"));
playMovie(707, 905, MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
- playSound("a#9.wav", prox);
+ playSound(TRANSLATE("a#9.wav", "a#3.wav"), prox);
break;
case 5:
visibleMsg._visible = false;
visibleMsg.execute("TitaniaStillControl");
- loadSound("a#8.wav");
+ loadSound(TRANSLATE("a#8.wav", "a#1.wav"));
playMovie(906, 938, MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
- playSound("a#8.wav", prox);
+ playSound(TRANSLATE("a#8.wav", "a#1.wav"), prox);
break;
default:
@@ -125,7 +126,7 @@ bool CTitaniaSpeech::MovieFrameMsg(CMovieFrameMsg *msg) {
int frame = getMovieFrame();
if (frame == 0) {
CProximity prox(Audio::Mixer::kSpeechSoundType);
- playSound("a#12.wav", prox);
+ playSound(TRANSLATE("a#12.wav", "a#0.wav"), prox);
}
return true;
@@ -142,7 +143,7 @@ bool CTitaniaSpeech::TimerMsg(CTimerMsg *msg) {
actMsg.execute(this);
} else if (msg->_action == "Para2") {
CProximity prox(Audio::Mixer::kSpeechSoundType);
- playSound("a#11.wav", prox);
+ playSound(TRANSLATE("a#11.wav", "a#4.wav"), prox);
} else {
frameMsg._frameNumber = _backgroundFrame++;
frameMsg.execute("TitaniaStillControl");
diff --git a/engines/titanic/true_talk/barbot_script.cpp b/engines/titanic/true_talk/barbot_script.cpp
index be1c73b1e9..430330a35a 100644
--- a/engines/titanic/true_talk/barbot_script.cpp
+++ b/engines/titanic/true_talk/barbot_script.cpp
@@ -24,22 +24,34 @@
#include "titanic/true_talk/barbot_script.h"
#include "titanic/true_talk/true_talk_manager.h"
#include "titanic/titanic.h"
+#include "titanic/translation.h"
namespace Titanic {
-static const int STATE_ARRAY[7] = {
- 0xCAB0, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, 0xCAB7
+static const int STATE_ARRAY_EN[7] = {
+ 51888, 51890, 51891, 51892, 51893, 51894, 51895
+};
+static const int STATE_ARRAY_DE[7] = {
+ 51903, 51905, 51906, 51907, 51908, 51909, 51910
};
-static const uint ARRAY1[] = {
+static const uint ARRAY1_EN[23] = {
0, 50033, 50044, 50045, 50046, 50047, 50048, 50049,
50050, 50051, 50034, 50035, 50036, 50037, 50038, 50039,
50040, 50041, 50042, 50043, 50411, 0
};
+static const uint ARRAY1_DE[23] = {
+ 0, 50033, 50044, 50045, 50046, 50047, 50048, 50049, 50050,
+ 50051, 50034, 50035, 50036, 50037, 50038, 50039, 50040,
+ 50041, 50042, 50043, 50421, 0, 0
+};
-static const uint ARRAY2[] = {
+static const uint ARRAY2_EN[10] = {
51899, 51900, 51901, 51902, 51903, 51904, 51905, 51906, 51907, 0
};
+static const uint ARRAY2_DE[10] = {
+ 51914, 51915, 51916, 51917, 51918, 51919, 51920, 51921, 51922, 0
+};
BarbotScript::BarbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
@@ -74,9 +86,9 @@ int BarbotScript::chooseResponse(const TTroomScript *roomScript, const TTsentenc
if (tag == MKTAG('D', 'N', 'A', '1') || tag == MKTAG('H', 'H', 'G', 'Q') ||
tag == MKTAG('A', 'N', 'S', 'W') || tag == MKTAG('S', 'U', 'M', 'S')) {
if (_state < 7) {
- addResponse(STATE_ARRAY[_state++]);
+ addResponse(TRANSLATE(STATE_ARRAY_EN[_state++], STATE_ARRAY_DE[_state++]));
} else {
- selectResponse(51896);
+ selectResponse(TRANSLATE(51896, 51911));
setState(1);
_state = 0;
}
@@ -142,7 +154,11 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
if (isState9()) {
if (sentence->localWord("visioncenter") || sentence->localWord("brain") ||
sentence->contains("vision") || sentence->contains("visual") ||
- sentence->contains("brain") || sentence->contains("crystal")) {
+ sentence->contains("brain") || sentence->contains("crystal") ||
+ sentence->contains("gesichtsmodul") || sentence->contains("sehmodul") ||
+ sentence->contains("gesichtszentrum") || sentence->contains("hirn") ||
+ sentence->contains("hirnstueck")
+ ) {
if (CTrueTalkManager::getStateValue(2)) {
addResponse(getDialogueId(251003));
applyResponse();
@@ -151,40 +167,40 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
}
}
- if (sentence->contains("goldfish")) {
+ if (sentence->contains("goldfish") || sentence->contains("goldfisch")) {
addResponse(getDialogueId(250184));
applyResponse();
return 2;
}
- dialogueId = ARRAY1[getRandomNumber(20)];
- if (!ARRAY2[_arrIndex])
+ dialogueId = TRANSLATE(ARRAY1_EN[getRandomNumber(20)], ARRAY1_DE[getRandomNumber(20)]);
+ if (!TRANSLATE(ARRAY2_EN[_arrIndex], ARRAY2_DE[_arrIndex]))
_arrIndex = 0;
if (_arrIndex) {
- dialogueId = ARRAY2[_arrIndex++];
+ dialogueId = TRANSLATE(ARRAY2_EN[_arrIndex++], ARRAY2_DE[_arrIndex++]);
} else if (getRandomNumber(100) > 35) {
- dialogueId = ARRAY2[0];
+ dialogueId = TRANSLATE(ARRAY2_EN[0], ARRAY2_DE[0]);
_arrIndex = 1;
} else if (getRandomNumber(100) > 60) {
switch (sentence->_category) {
case 2:
- dialogueId = 51914;
+ dialogueId = TRANSLATE(51914, 51929);
break;
case 3:
- dialogueId = 51911;
+ dialogueId = TRANSLATE(51911, 51926);
break;
case 4:
- dialogueId = 51913;
+ dialogueId = TRANSLATE(51913, 51928);
break;
case 5:
- dialogueId = 51912;
+ dialogueId = TRANSLATE(51912, 51927);
break;
case 6:
- dialogueId = 51915;
+ dialogueId = TRANSLATE(51915, 51930);
break;
case 7:
- dialogueId = 51909;
+ dialogueId = TRANSLATE(51909, 51924);
break;
default:
break;
@@ -215,56 +231,60 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
if (!val34) {
goto done;
- } else if (val34 > 50357) {
+ } else if (val34 > TRANSLATE(50357, 50366)) {
goto done;
- } else if (val34 == 50357) {
- return applySentenceIds(50358, -1);
+ } else if (val34 == TRANSLATE(50357, 50366)) {
+ return applySentenceIds(TRANSLATE(50358, 50367), -1);
}
switch (val34) {
case 1:
if (flag)
- return applySentenceIds(51898, 2);
+ return applySentenceIds(TRANSLATE(51898, 51913), 2);
if (flag2)
- return applySentenceIds(51897);
+ return applySentenceIds(TRANSLATE(51897, 51912));
break;
case 2:
if (flag)
- return applySentenceIds(51897);
+ return applySentenceIds(TRANSLATE(51897, 51912));
break;
case 3:
- if (sentence->localWord("useless") || sentence->contains("useless"))
- return applySentenceIds(50824);
+ if (sentence->localWord("useless") || sentence->contains("useless") ||
+ sentence->contains("hoffnungsloser fall"))
+ return applySentenceIds(TRANSLATE(50824, 50837));
break;
case 4:
if (flag)
- return applySentenceIds(getRandomBit() ? 50512 : 51642);
+ return applySentenceIds(getRandomBit() ?
+ TRANSLATE(50512, 50522) : TRANSLATE(51642, 51657));
else if (flag2)
- return applySentenceIds(getRandomBit() ? 50511 : 51643);
+ return applySentenceIds(getRandomBit() ?
+ TRANSLATE(50511, 50521) : TRANSLATE(51643, 51658));
break;
case 5:
if (flag)
- return applySentenceIds(50829, 6);
+ return applySentenceIds(TRANSLATE(50829, 50842), 6);
if (flag2)
- return applySentenceIds(50828);
+ return applySentenceIds(TRANSLATE(50828, 50841));
break;
case 6:
if (flag)
- return applySentenceIds(50831);
+ return applySentenceIds(TRANSLATE(50831, 50844));
if (flag2)
- return applySentenceIds(50830);
+ return applySentenceIds(TRANSLATE(50830, 50843));
break;
case 7:
- if (flag2 || sentence->contains("never"))
- return applySentenceIds(51553);
- if (flag || sentence->contains("nicest"))
- return applySentenceIds(51554);
+ if (flag2 || sentence->contains("never") || sentence->contains("niemals") ||
+ sentence->contains("nie"))
+ return applySentenceIds(TRANSLATE(51553, 51568));
+ if (flag || sentence->contains("nicest") || sentence->contains("schoenste"))
+ return applySentenceIds(TRANSLATE(51554, 51569));
break;
case 8:
if (flag)
- return applySentenceIds(50961);
+ return applySentenceIds(TRANSLATE(50961, 50974));
if (flag2)
- return applySentenceIds(50960);
+ return applySentenceIds(TRANSLATE(50960, 50973));
break;
case 9:
if (flag)
@@ -299,7 +319,7 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
return applySentenceIds(getDialogueId(250946));
break;
case 15:
- if (flag || sentence->contains("or")) {
+ if (flag || sentence->contains("or") || sentence->contains("oder")) {
return applySentenceIds(getDialogueId(250526), 16);
} else {
if (g_vm->_trueTalkManager->_quotesTree.search(
@@ -311,9 +331,9 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
break;
case 17:
if (flag) {
- return applySentenceIds(50382);
+ return applySentenceIds(TRANSLATE(50382, 50391));
} else if (flag2) {
- return applySentenceIds(51423);
+ return applySentenceIds(TRANSLATE(51423, 51438));
}
// Intentional fall-through
@@ -327,15 +347,15 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
return applySentenceIds(getDialogueId(250565), 20);
case 20:
if (flag)
- return applySentenceIds(50307);
+ return applySentenceIds(TRANSLATE(50307, 50315));
if (flag2)
- return applySentenceIds(50306);
+ return applySentenceIds(TRANSLATE(50306, 50314));
break;
case 21:
if (flag)
- return applySentenceIds(50359);
+ return applySentenceIds(TRANSLATE(50359, 50368));
if (flag2)
- return applySentenceIds(50357);
+ return applySentenceIds(TRANSLATE(50357, 50366));
break;
case 23:
if (val2C == 6 || val2C == 10)
@@ -344,7 +364,10 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
case 24:
if (sentence->contains("do not know")
|| sentence->contains("no idea")
- || sentence->contains("a clue")) {
+ || sentence->contains("a clue")
+ || sentence->contains("keine ahnung")
+ || sentence->contains("weiss nicht")
+ || sentence->contains("keinen schimmer")) {
return applySentenceIds(getDialogueId(250553));
} else {
return applySentenceIds(getDialogueId(250552));
@@ -354,7 +377,7 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
if (flag || val2C == 10)
applySentenceIds(getDialogueId(251899), 26);
else if (flag2)
- return applySentenceIds(50215);
+ return applySentenceIds(TRANSLATE(50215, 50223));
break;
case 26:
if (g_vm->_trueTalkManager->_quotesTree.search(
@@ -387,7 +410,7 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
return applySentenceIds(getDialogueId(250642));
break;
case 33:
- return applySentenceIds(50763);
+ return applySentenceIds(TRANSLATE(50763, 50776));
case 34:
if (flag)
return applySentenceIds(getDialogueId(251622));
@@ -400,15 +423,15 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
break;
case 36:
if (flag)
- return applySentenceIds(50335);
+ return applySentenceIds(TRANSLATE(50335, 50344));
if (flag2)
- return applySentenceIds(50334);
+ return applySentenceIds(TRANSLATE(50334, 50343));
break;
case 37:
if (flag)
- return applySentenceIds(50217);
+ return applySentenceIds(TRANSLATE(50217, 50225));
if (flag2)
- return applySentenceIds(50153);
+ return applySentenceIds(TRANSLATE(50153, 50157));
break;
case 38:
return applySentenceIds(getDialogueId(250637));
@@ -426,9 +449,9 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
break;
case 43:
if (flag)
- return applySentenceIds(50416, -1);
+ return applySentenceIds(TRANSLATE(50416, 50426), -1);
if (flag2)
- return applySentenceIds(50415, -1);
+ return applySentenceIds(TRANSLATE(50415, 50425), -1);
break;
case 44:
if (flag)
@@ -443,91 +466,99 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
if (sentence->localWord("summer")
|| sentence->contains("summer")
|| sentence->localWord("autumn")
- || sentence->contains("autumn")) {
- return applySentenceIds(50743);
+ || sentence->contains("autumn")
+ || sentence->contains("herbst")) {
+ return applySentenceIds(TRANSLATE(50743, 50755));
} else if (sentence->localWord("winter") || sentence->contains("winter")) {
- return applySentenceIds(50696);
+ return applySentenceIds(TRANSLATE(50696, 50708));
} else {
- return applySentenceIds(50225);
+ return applySentenceIds(TRANSLATE(50225, 50233));
}
break;
case 46:
if (val2C == 7 || val2C == 10)
- return applySentenceIds(50698);
+ return applySentenceIds(TRANSLATE(50698, 50710));
break;
case 47:
if (flag || flag2 || val2C == 6)
- return applySentenceIds(50717);
+ return applySentenceIds(TRANSLATE(50717, 50729));
break;
case 48:
if (flag)
- return applySentenceIds(50710);
+ return applySentenceIds(TRANSLATE(50710, 50722));
if (flag2)
- return applySentenceIds(50225);
+ return applySentenceIds(TRANSLATE(50225, 50233));
break;
case 49:
- if (sentence->localWord("scraliontis") || sentence->contains("scraliontis"))
- return applySentenceIds(50711);
+ if (sentence->localWord("scraliontis") || sentence->contains("scraliontis") ||
+ sentence->contains("skraliontis"))
+ return applySentenceIds(TRANSLATE(50711, 50723));
if (sentence->localWord("brobostigon") || sentence->contains("brobostigon"))
- return applySentenceIds(50712);
+ return applySentenceIds(TRANSLATE(50712, 50724));
break;
case 50:
- return applySentenceIds(50713);
+ return applySentenceIds(TRANSLATE(50713, 50725));
case 51:
if (flag)
- return applySentenceIds(50715);
+ return applySentenceIds(TRANSLATE(50715, 50727));
if (flag2)
- return applySentenceIds(50714);
+ return applySentenceIds(TRANSLATE(50714, 50726));
break;
case 52:
if (sentence->localWord("note") || sentence->contains("note"))
- return applySentenceIds(50716);
- return applySentenceIds(50210);
+ return applySentenceIds(TRANSLATE(50716, 50728));
+ return applySentenceIds(TRANSLATE(50210, 50218));
case 53:
- return applySentenceIds(50210);
+ return applySentenceIds(TRANSLATE(50210, 50218));
case 54:
if (getDialRegion(0) != 0) {
- if (val2C == 12)
- return applySentenceIds(50174);
+ if (val2C)
+ return applySentenceIds(TRANSLATE(50174, 50178));
else
- return applySentenceIds(50300);
+ return applySentenceIds(TRANSLATE(50300, 50308));
} else if (val2C == 7 || val2C == 10) {
- return applySentenceIds(50871);
+ return applySentenceIds(TRANSLATE(50871, 50884));
}
break;
case 55:
if (flag)
- return applySentenceIds(50302);
+ return applySentenceIds(TRANSLATE(50302, 50310));
if (flag2)
- return applySentenceIds(50301);
+ return applySentenceIds(TRANSLATE(50301, 50309));
break;
case 56:
if (flag)
- return applySentenceIds(50304);
+ return applySentenceIds(TRANSLATE(50304, 50312));
if (flag2)
- return applySentenceIds(50303);
+ return applySentenceIds(TRANSLATE(50303, 50311));
break;
case 57:
if (sentence->localWord("mustard")
|| sentence->contains("mustard")
|| sentence->localWord("tomato")
- || sentence->contains("tomato"))
- return applySentenceIds(50320);
+ || sentence->contains("tomato")
+ || sentence->contains("senf")
+ || sentence->contains("tomate"))
+ return applySentenceIds(TRANSLATE(50320, 50329));
if (sentence->localWord("sauce")
|| sentence->localWord("puree")
|| sentence->contains("sauce")
|| sentence->contains("puree")
|| sentence->contains("bird")
- || sentence->contains("starling")) {
- applySentenceIds(50321);
+ || sentence->contains("starling")
+ || sentence->contains("sosse")
+ || sentence->contains("pueree")
+ || sentence->contains("vogel")
+ || sentence->contains("staren")) {
+ applySentenceIds(TRANSLATE(50321, 50330));
CTrueTalkManager::triggerAction(30, 0);
return 2;
}
- return applySentenceIds(50320);
+ return applySentenceIds(TRANSLATE(50320, 50329));
case 58:
if (val2C == 6 || val2C == 10)
- return applySentenceIds(50880);
+ return applySentenceIds(TRANSLATE(50880, 50893));
break;
case 59:
if (flag) {
@@ -581,7 +612,7 @@ int BarbotScript::process(const TTroomScript *roomScript, const TTsentence *sent
return applySentenceIds(getDialogueId(250631));
break;
case 65:
- if (sentence->localWord("now") || sentence->localWord("soonh"))
+ if (sentence->localWord("now") || sentence->localWord("soon"))
return applySentenceIds(getDialogueId(250424));
return applySentenceIds(getDialogueId(250506));
case 66:
@@ -623,7 +654,7 @@ done:
updateCurrentDial(true);
- if (sentence->contains("goldfish")) {
+ if (sentence->contains("goldfish") || sentence->contains("goldfisch")) {
addResponse(250184);
} else if ((sentence->localWord("puree") || sentence->localWord("pureed"))
&& sentence->localWord("parrot")) {
diff --git a/engines/titanic/true_talk/bellbot_script.cpp b/engines/titanic/true_talk/bellbot_script.cpp
index ec15c5dfbf..84d5c59713 100644
--- a/engines/titanic/true_talk/bellbot_script.cpp
+++ b/engines/titanic/true_talk/bellbot_script.cpp
@@ -26,6 +26,7 @@
#include "titanic/pet_control/pet_control.h"
#include "titanic/core/node_item.h"
#include "titanic/titanic.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -41,6 +42,10 @@ static const RoomDialogueId ROOM_DIALOGUE_IDS[] = {
{ 0, 0 }
};
+static const uint PRERESPONSE_IDS_DE[] = {
+ 0
+};
+
BellbotScript::BellbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2) :
TTnpcScript(val1, charClass, v2, charName, v3, val2, -1, -1, -1, 0),
@@ -89,75 +94,78 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
if (getValue(1) <= 2)
updateCurrentDial(1);
- // Handle room specific sentences
- switch (roomScript->_scriptId) {
- case 101:
- if (getValue(2) == 1) {
- result = processEntries(&_sentences[11], 0, roomScript, sentence);
- }
- break;
+ if (g_language != Common::DE_DEU) {
+ // Handle room specific sentences
+ switch (roomScript->_scriptId) {
+ case 101:
+ if (getValue(2) == 1) {
+ result = processEntries(&_sentences[11], 0, roomScript, sentence);
+ }
+ break;
- case 107:
- result = processEntries(&_sentences[5], 0, roomScript, sentence);
- break;
+ case 107:
+ result = processEntries(&_sentences[5], 0, roomScript, sentence);
+ break;
- case 108:
- result = processEntries(&_sentences[7], 0, roomScript, sentence);
- break;
+ case 108:
+ result = processEntries(&_sentences[7], 0, roomScript, sentence);
+ break;
- case 109:
- result = processEntries(&_sentences[13], 0, roomScript, sentence);
- break;
+ case 109:
+ result = processEntries(&_sentences[13], 0, roomScript, sentence);
+ break;
- case 110:
- result = processEntries(&_sentences[16], 0, roomScript, sentence);
- break;
+ case 110:
+ result = processEntries(&_sentences[16], 0, roomScript, sentence);
+ break;
- case 111:
- result = processEntries(&_sentences[10], 0, roomScript, sentence);
- break;
+ case 111:
+ result = processEntries(&_sentences[10], 0, roomScript, sentence);
+ break;
- case 112:
- result = processEntries(&_sentences[15], 0, roomScript, sentence);
- break;
+ case 112:
+ result = processEntries(&_sentences[15], 0, roomScript, sentence);
+ break;
- case 113:
- result = processEntries(&_sentences[9], 0, roomScript, sentence);
- break;
+ case 113:
+ result = processEntries(&_sentences[9], 0, roomScript, sentence);
+ break;
- case 114:
- result = processEntries(&_sentences[18], 0, roomScript, sentence);
- break;
+ case 114:
+ result = processEntries(&_sentences[18], 0, roomScript, sentence);
+ break;
- case 115:
- result = processEntries(&_sentences[12], 0, roomScript, sentence);
- break;
+ case 115:
+ result = processEntries(&_sentences[12], 0, roomScript, sentence);
+ break;
- case 116:
- result = processEntries(&_sentences[8], 0, roomScript, sentence);
- break;
+ case 116:
+ result = processEntries(&_sentences[8], 0, roomScript, sentence);
+ break;
- case 117:
- result = processEntries(&_sentences[6], 0, roomScript, sentence);
- break;
+ case 117:
+ result = processEntries(&_sentences[6], 0, roomScript, sentence);
+ break;
- case 123:
- result = processEntries(&_sentences[17], 0, roomScript, sentence);
- break;
+ case 123:
+ result = processEntries(&_sentences[17], 0, roomScript, sentence);
+ break;
- case 125:
- result = processEntries(&_sentences[14], 0, roomScript, sentence);
- break;
+ case 125:
+ result = processEntries(&_sentences[14], 0, roomScript, sentence);
+ break;
- case 131:
- if (getValue(26) == 0) {
- result = processEntries(&_sentences[getValue(6) ? 5 : 4], 0, roomScript, sentence);
+ case 131:
+ if (getValue(26) == 0) {
+ result = processEntries(&_sentences[getValue(6) ? 5 : 4], 0, roomScript, sentence);
+ }
+ break;
}
- break;
+
+ if (result == 2)
+ return 2;
}
- if (result == 2)
- return 2;
if (sentence->contains("pretend you summoned yourself") ||
sentence->contains("pretend you just summoned yourself")) {
if (scriptChanged(roomScript, 157) == 2)
@@ -193,20 +201,38 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
}
if (sentence->contains("what should i do here")
- || sentence->contains("what do i do here")
- || sentence->contains("what shall i do in here")
- || sentence->contains("what shall i do in this room")
- || sentence->contains("what should i do in this room")
- || sentence->contains("what am i supposed to do in here")
- || sentence->contains("what should i do in here")
- || sentence->contains("what do i do in this room")) {
+ || sentence->contains("what do i do here")
+ || sentence->contains("what shall i do in here")
+ || sentence->contains("what shall i do in this room")
+ || sentence->contains("what should i do in this room")
+ || sentence->contains("what am i supposed to do in here")
+ || sentence->contains("what should i do in here")
+ || sentence->contains("what do i do in this room")
+ || sentence->localWord("doidohere")
+ || sentence->contains("was soll ich denn hier tun")
+ || sentence->contains("was soll ich hier tun")
+ || sentence->contains("was gibt es hier zu tun")
+ || sentence->contains("was kann man denn hier machen")
+ || sentence->contains("was kann man denn hier tun")
+ || sentence->contains("was soll ich hier drin tun")
+ || sentence->contains("was soll ich hier")
+ || sentence->contains("wohin soll ich jetzt")
+ || sentence->contains("was ist das hier fuer ein raum")
+ || sentence->contains("was ist denn hier zu tun")
+ || sentence->contains("was kann man hier machen")
+ || sentence->contains("was soll ich jetzt machen")
+ || sentence->contains("was kommt jetzt")
+ || sentence->contains("was kommt nun")
+ || sentence->contains("wozu bin ich eigentlich hier")
+ || sentence->contains("wozu bin ich denn hier")) {
if (addRoomDescription(roomScript)) {
applyResponse();
return 2;
}
}
- if (sentence->contains("help")
+ if (sentence->localWord("help")
+ || (g_language == Common::DE_DEU && sentence->contains("help"))
|| sentence->contains("what now")
|| sentence->contains("what next")
|| sentence->contains("give me a hint")
@@ -216,7 +242,20 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
|| sentence->contains("what shall i do")
|| sentence->contains("what would you do")
|| sentence->contains("what should i do")
- || sentence->contains("what do i do")) {
+ || sentence->contains("what do i do")
+ || sentence->contains("was nun")
+ || sentence->contains("so und was kommt jetzt")
+ || sentence->contains("und jetzt")
+ || sentence->contains("einen hinweis")
+ || sentence->contains("einen tip")
+ || sentence->contains("ich bin verzweifelt")
+ || sentence->contains("bin ich auf der richtigen spur")
+ || sentence->contains("was soll ich jetzt anfangen")
+ || sentence->contains("wozu raetst du mir")
+ || sentence->contains("was muss ich jetzt")
+ || sentence->contains("was wuerdest du an meiner stelle")
+ || sentence->contains("was soll ich als naechstes tun")
+ || sentence->contains("was soll ich hier")) {
if (getDialRegion(0) == 1) {
randomResponse4(roomScript, getValue(1));
applyResponse();
@@ -241,37 +280,48 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
if (processEntries(&_entries, _entryCount, roomScript, sentence) == 2)
return 2;
- if ((sentence->_category == 4 && sentence->localWord("am") && sentence->localWord("i"))
- || (sentence->localWord("are") && sentence->localWord("we"))
- || (sentence->_category == 3 && sentence->localWord("room")
- && sentence->localWord("we") && sentence->localWord("in"))
- || (sentence->_category == 3 && sentence->localWord("rom")
- && sentence->localWord("is") && sentence->localWord("this"))
- ) {
- uint id = getRangeValue(getRoomDialogueId(roomScript));
- addResponse(getDialogueId(id ? id : 201384));
- applyResponse();
- return 2;
- }
+ if (g_language != Common::DE_DEU) {
+ if ((sentence->_category == 4 && sentence->localWord("am") && sentence->localWord("i"))
+ || (sentence->localWord("are") && sentence->localWord("we"))
+ || (sentence->_category == 3 && sentence->localWord("room")
+ && sentence->localWord("we") && sentence->localWord("in"))
+ || (sentence->_category == 3 && sentence->localWord("rom")
+ && sentence->localWord("is") && sentence->localWord("this"))
+ ) {
+ uint id = getRangeValue(getRoomDialogueId(roomScript));
+ addResponse(getDialogueId(id ? id : 201384));
+ applyResponse();
+ return 2;
+ }
- if (getValue(1) >= 3) {
- result = processEntries(&_sentences[1], 0, roomScript, sentence);
- } else if (getValue(1) == 2) {
- result = processEntries(&_sentences[2], 0, roomScript, sentence);
- } else if (getValue(1) == 1) {
- result = processEntries(&_sentences[3], 0, roomScript, sentence);
+ if (getValue(1) >= 3) {
+ result = processEntries(&_sentences[1], 0, roomScript, sentence);
+ } else if (getValue(1) == 2) {
+ result = processEntries(&_sentences[2], 0, roomScript, sentence);
+ } else if (getValue(1) == 1) {
+ result = processEntries(&_sentences[3], 0, roomScript, sentence);
- if (sentence->contains("shrinkbot")) {
+ if (sentence->contains("shrinkbot")) {
+ addResponse(getDialogueId(200583));
+ applyResponse();
+ return 2;
+ }
+ }
+ if (result == 2)
+ return 2;
+ } else {
+ if (getValue(1) == 1 && (sentence->localWord("shrinkbot") ||
+ sentence->contains("psychobot"))) {
addResponse(getDialogueId(200583));
applyResponse();
return 2;
}
}
- if (result == 2)
- return 2;
- if (sentence->localWord("television") || sentence->localWord("tv")
- || sentence->localWord("crush") || sentence->localWord("crushed")) {
+ if ((g_language != Common::DE_DEU || getValue(40) == 0) &&
+ (sentence->localWord("television") || sentence->localWord("tv")
+ || sentence->localWord("crush") || sentence->localWord("crushed")
+ || sentence->localWord("crushedtv"))) {
if (roomScript->_scriptId == 111 || getRandomBit()) {
addResponse(getDialogueId(getRandomBit() ? 200912 : 200913));
} else {
@@ -289,7 +339,8 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
return 2;
}
- if (sentence->contains("my") && (sentence->contains("where can i find")
+ if ((sentence->contains("my") || sentence->contains("mein"))
+ && (sentence->contains("where can i find")
|| sentence->contains("where is")
|| sentence->contains("wheres")
|| sentence->contains("help me find")
@@ -298,13 +349,26 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
|| sentence->contains("id like")
|| sentence->contains("i would like")
|| sentence->contains("have you seen")
+ || sentence->contains("gibt es hier")
+ || sentence->contains("wo finde ich")
+ || sentence->contains("sind hier")
+ || sentence->contains("habt ihr")
+ || sentence->contains("gibt es")
+ || sentence->contains("wo sind")
+ || sentence->contains("wo ist")
+ || sentence->contains("wie komme ich")
+ || sentence->contains("wie erreicht man")
+ || sentence->contains("hast du")
+ || sentence->contains("ich moechte")
+ || sentence->contains("gib mir")
+ || sentence->contains("haettest du vielleicht")
+ || sentence->contains("ich haette gern")
)) {
addResponse(getDialogueId(200799));
applyResponse();
return 2;
}
- setupSentences();
uint tagId = g_vm->_trueTalkManager->_quotes.find(sentence->_normalizedLine);
if (tagId && chooseResponse(roomScript, sentence, tagId) == 2)
return 2;
@@ -642,104 +706,183 @@ int BellbotScript::updateState(uint oldId, uint newId, int index) {
}
int BellbotScript::preResponse(uint id) {
+ if (g_language == Common::DE_DEU && getDialRegion(0) == 0
+ && getRandomNumber(100) > 80)
+ return 251250;
+
int newId = _preResponses.find(id);
- if (newId == 202277) {
- applyResponse();
- CTrueTalkManager::triggerAction(1, 0);
- }
- if (newId == 200769) {
- applyResponse();
- CTrueTalkManager::triggerAction(18, 0);
- }
+ if (g_language != Common::DE_DEU) {
+ if (newId == 202277) {
+ applyResponse();
+ CTrueTalkManager::triggerAction(1, 0);
+ }
+ if (newId == 200769) {
+ applyResponse();
+ CTrueTalkManager::triggerAction(18, 0);
+ }
- if (id == 21790)
- CTrueTalkManager::triggerAction(13, 0);
+ if (id == 21790)
+ CTrueTalkManager::triggerAction(13, 0);
+ }
return newId;
}
int BellbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
- switch (val1) {
- case 1:
- addResponse(getDialogueId(*srcIdP));
- applyResponse();
- return 2;
-
- case 2:
- addResponse(getDialogueId(*srcIdP));
- addResponse(getDialogueId(getRandomNumber(2) == 1 ? 200192 : 200157));
- addResponse(getDialogueId(200176));
- applyResponse();
- return 2;
+ if (g_language == Common::EN_ANY) {
+ switch (val1) {
+ case 1:
+ addResponse(getDialogueId(*srcIdP));
+ applyResponse();
+ return 2;
- case 21:
- if (CTrueTalkManager::getStateValue(7) == 0) {
- selectResponse(21372);
+ case 2:
+ addResponse(getDialogueId(*srcIdP));
+ addResponse(getDialogueId(getRandomNumber(2) == 1 ? 200192 : 200157));
+ addResponse(getDialogueId(200176));
applyResponse();
return 2;
- }
- if (!sentence->localWord("broken") && !sentence->contains("broken") &&
+ case 21:
+ if (CTrueTalkManager::getStateValue(7) == 0) {
+ selectResponse(21372);
+ applyResponse();
+ return 2;
+ }
+
+ if (!sentence->localWord("broken") && !sentence->contains("broken") &&
CTrueTalkManager::_currentNPC) {
- CNodeItem *node = CTrueTalkManager::_currentNPC->getNode();
- if (node) {
- CString nodeName = node->getName();
- if (nodeName.containsIgnoreCase("5") || nodeName.containsIgnoreCase("6")
+ CNodeItem *node = CTrueTalkManager::_currentNPC->getNode();
+ if (node) {
+ CString nodeName = node->getName();
+ if (nodeName.containsIgnoreCase("5") || nodeName.containsIgnoreCase("6")
|| nodeName.containsIgnoreCase("7")) {
- CTrueTalkManager::triggerAction(29, 2);
- selectResponse(201571);
- applyResponse();
- return 2;
+ CTrueTalkManager::triggerAction(29, 2);
+ selectResponse(201571);
+ applyResponse();
+ return 2;
+ }
}
}
- }
- CTrueTalkManager::triggerAction(29, 1);
- selectResponse(201771);
- applyResponse();
- return 2;
+ CTrueTalkManager::triggerAction(29, 1);
+ selectResponse(201771);
+ applyResponse();
+ return 2;
- case 22:
- if (CTrueTalkManager::getStateValue(7) == 0) {
- selectResponse(21372);
+ case 22:
+ if (CTrueTalkManager::getStateValue(7) == 0) {
+ selectResponse(21372);
+ applyResponse();
+ return 2;
+ }
+
+ if (!sentence->localWord("broken") && !sentence->contains("broken") &&
+ CTrueTalkManager::_currentNPC) {
+ CNodeItem *node = CTrueTalkManager::_currentNPC->getNode();
+ if (node) {
+ CString nodeName = node->getName();
+ if (nodeName.containsIgnoreCase("5") || nodeName.containsIgnoreCase("6")
+ || nodeName.containsIgnoreCase("7")) {
+ CTrueTalkManager::triggerAction(29, 2);
+ selectResponse(201571);
+ applyResponse();
+ return 2;
+ }
+ }
+ }
+
+ CTrueTalkManager::triggerAction(29, 1);
+ selectResponse(201771);
applyResponse();
return 2;
+
+ case 23:
+ case 24:
+ if (CTrueTalkManager::getStateValue(7) == 0) {
+ selectResponse(21372);
+ applyResponse();
+ return 2;
+ }
+
+ CTrueTalkManager::triggerAction(29, val1 == 23 ? 3 : 4);
+ break;
+
+ default:
+ break;
}
+ } else {
+ switch (val1) {
+ case 5001:
+ case 5021:
+ return 0;
+
+ case 5002:
+ addResponse(getDialogueId(*srcIdP));
+ addResponse(getDialogueId(200000));
+ applyResponse();
+ return 2;
- if (!sentence->localWord("broken") && !sentence->contains("broken") &&
- CTrueTalkManager::_currentNPC) {
- CNodeItem *node = CTrueTalkManager::_currentNPC->getNode();
- if (node) {
- CString nodeName = node->getName();
- if (nodeName.containsIgnoreCase("5") || nodeName.containsIgnoreCase("6")
- || nodeName.containsIgnoreCase("7")) {
+ case 5003:
+ addResponse(getDialogueId(*srcIdP));
+ return 2;
+
+ case 5022:
+ case 5023:
+ if (CTrueTalkManager::getStateValue(7)) {
+ bool flag = true;
+
+ if (!sentence->localWord("broken") && !sentence->contains("kaputt") &&
+ !sentence->contains("im eimer") && !sentence->contains("funktioniert nicht") &&
+ CTrueTalkManager::_currentNPC) {
+ CNodeItem *node = CTrueTalkManager::_currentNPC->getNode();
+ if (node) {
+ CString nodeName = node->getName();
+ if (nodeName.contains("5") || nodeName.contains("6") || nodeName.contains("7"))
+ flag = false;
+ }
+ }
+
+ if (flag) {
+ CTrueTalkManager::triggerAction(29, 1);
+ selectResponse(201771);
+ }
+ else {
CTrueTalkManager::triggerAction(29, 2);
- selectResponse(201571);
- applyResponse();
- return 2;
+ selectResponse(201554);
}
}
- }
+ else {
+ selectResponse(21378);
+ }
- CTrueTalkManager::triggerAction(29, 1);
- selectResponse(201771);
- applyResponse();
- return 2;
+ applyResponse();
+ return 2;
- case 23:
- case 24:
- if (CTrueTalkManager::getStateValue(7) == 0) {
- selectResponse(21372);
+ case 5024:
+ if (CTrueTalkManager::getStateValue(7)) {
+ CTrueTalkManager::triggerAction(29, 3);
+ return 0;
+ }
+
+ selectResponse(21378);
applyResponse();
return 2;
- }
- CTrueTalkManager::triggerAction(29, val1 == 23 ? 3 : 4);
- break;
+ case 5025:
+ if (CTrueTalkManager::getStateValue(7)) {
+ CTrueTalkManager::triggerAction(29, 4);
+ return 0;
+ }
- default:
- break;
+ selectResponse(21378);
+ applyResponse();
+ return 2;
+
+ default:
+ return TTnpcScript::doSentenceEntry(val1, srcIdP, roomScript, sentence);
+ }
}
return 0;
@@ -976,14 +1119,15 @@ int BellbotScript::preprocess(const TTroomScript *roomScript, const TTsentence *
break;
case 21:
- if (sentence->contains("hiker") || sentence->contains("hug")) {
+ if (sentence->localWord("hiker") && (sentence->contains("hug") ||
+ sentence->contains("anhalter"))) {
addResponse(getDialogueId(200379));
applyFlag = true;
}
break;
case 22:
- if (sentence->localWord("get") || sentence->localWord("it")) {
+ if (sentence->localWord("get") && sentence->localWord("it")) {
addResponse(getDialogueId(200474));
applyFlag = true;
}
@@ -1039,9 +1183,9 @@ int BellbotScript::preprocess(const TTroomScript *roomScript, const TTsentence *
break;
case 30:
- if ((sentence->localWord("did") || sentence->localWord("not"))
- || (sentence->localWord("would") || sentence->localWord("not"))
- || (sentence->localWord("could") || sentence->localWord("not"))
+ if ((sentence->localWord("did") && sentence->localWord("not"))
+ || (sentence->localWord("would") && sentence->localWord("not"))
+ || (sentence->localWord("could") && sentence->localWord("not"))
|| sentence->localWord("tried")) {
addResponse(getDialogueId(200416));
applyFlag = true;
@@ -1202,8 +1346,8 @@ case44:
break;
case 51:
- if (sentence->localWord("no") || sentence->localWord("it")
- || sentence->localWord("is") || sentence->localWord("not")
+ if ((sentence->localWord("no") && sentence->localWord("it")
+ && sentence->localWord("is") && sentence->localWord("not"))
|| sentence->contains("yeah right")) {
addResponse(getDialogueId(200636));
applyFlag = true;
@@ -1309,7 +1453,7 @@ stateFlag = false;
break;
case 64:
- if (sentence->localWord("rowboat")) {
+ if (sentence->localWord("rowbot")) {
addResponse(getDialogueId(200052));
applyFlag = true;
}
@@ -1340,9 +1484,9 @@ stateFlag = false;
break;
case 68:
- if ((sentence->localWord("i") && sentence->localWord("care"))
- || sentence->localWord("do")
- || sentence->localWord("me")) {
+ if ((sentence->localWord("i") && (sentence->localWord("care") ||
+ sentence->localWord("do")))
+ || sentence->localWord("me")) {
addResponse(getDialogueId(201006));
applyFlag = true;
}
@@ -1383,10 +1527,13 @@ stateFlag = false;
break;
case 73:
- if (sentence->localWord("mood") && (charId() == 7 || charId() == 5)) {
- addResponse(getDialogueId(201021));
- applyFlag = true;
- stateFlag = false;
+ if (sentence->localWord("mood") || sentence->contains("stimmung") ||
+ sentence->contains("laune") || sentence->contains("verfassung")) {
+ if (charId() == 7 || charId() == 5) {
+ addResponse(getDialogueId(201021));
+ applyFlag = true;
+ stateFlag = false;
+ }
}
break;
@@ -1555,7 +1702,8 @@ stateFlag = false;
break;
case 88:
- if (sentence->_category == 6 || sentence->contains("upside down")) {
+ if (sentence->_category == 6 ||
+ (g_language != Common::DE_DEU && sentence->contains("upside down"))) {
addResponse(getDialogueId(202142));
applyFlag = true;
}
@@ -1836,7 +1984,7 @@ bool BellbotScript::addRoomDescription(const TTroomScript *roomScript) {
switch (roomScript->_scriptId) {
case 101:
- addResponse(getDialogueId(getValue(2) == 1 ? 20185 : 201832));
+ addResponse(getDialogueId(getValue(2) == 1 ? 201835 : 201832));
break;
case 107:
if (_room107First) {
@@ -1907,5 +2055,4 @@ bool BellbotScript::addRoomDescription(const TTroomScript *roomScript) {
return true;
}
-
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/deskbot_script.cpp b/engines/titanic/true_talk/deskbot_script.cpp
index eb782165d2..cd3db1e1f1 100644
--- a/engines/titanic/true_talk/deskbot_script.cpp
+++ b/engines/titanic/true_talk/deskbot_script.cpp
@@ -364,10 +364,15 @@ exit:
int DeskbotScript::preResponse(uint id) {
int newId = 0;
- if (getValue(1) >= 3 && (id == 41176 || id == 41738 || id == 41413 || id == 41740))
+ if (getValue(1) >= 3 && (
+ id == TRANSLATE(41176, 41190) ||
+ id == TRANSLATE(41738, 41429) ||
+ id == TRANSLATE(41413, 41755) ||
+ id == TRANSLATE(41740, 41757)
+ )) {
newId = 241601;
-
- if (id == 42114)
+ }
+ if (id == TRANSLATE(42114, 42132))
CTrueTalkManager::triggerAction(20, 0);
return newId;
@@ -383,6 +388,9 @@ uint DeskbotScript::getDialsBitset() const {
int DeskbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
uint id;
+ if (g_language == Common::DE_DEU && val1 != 4501)
+ return TTnpcScript::doSentenceEntry(val1, srcIdP, roomScript, sentence);
+
switch (val1) {
case 1:
id = *srcIdP;
diff --git a/engines/titanic/true_talk/doorbot_script.cpp b/engines/titanic/true_talk/doorbot_script.cpp
index ac0b1aff21..9493af6fe2 100644
--- a/engines/titanic/true_talk/doorbot_script.cpp
+++ b/engines/titanic/true_talk/doorbot_script.cpp
@@ -29,11 +29,14 @@
namespace Titanic {
-static const int STATE_ARRAY[9] = {
- 0x2E2A, 0x2E2B, 0x2E2C, 0x2E2D, 0x2E2E, 0x2E2F, 0x2E30, 0x2E31, 0x2E32
+static const int STATE_ARRAY_EN[9] = {
+ 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826
+};
+static const int STATE_ARRAY_DE[9] = {
+ 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839
};
-static const RoomDialogueId ROOM_DIALOGUES1[] = {
+static const RoomDialogueId ROOM_DIALOGUES1_EN[] = {
{ 100, 10523 }, { 101, 10499 }, { 107, 10516 }, { 108, 10500 },
{ 109, 10490 }, { 110, 10504 }, { 111, 10506 }, { 112, 10498 },
{ 113, 10502 }, { 114, 10507 }, { 115, 10497 }, { 116, 10508 },
@@ -42,12 +45,28 @@ static const RoomDialogueId ROOM_DIALOGUES1[] = {
{ 128, 10495 }, { 129, 10496 }, { 130, 10491 }, { 131, 10493 },
{ 132, 10492 }, { 0, 0 }
};
-static const RoomDialogueId ROOM_DIALOGUES2[] = {
+static const RoomDialogueId ROOM_DIALOGUES1_DE[] = {
+ { 101, 10375 }, { 107, 10379 }, { 108, 10378 }, { 109, 10364 },
+ { 110, 10377 }, { 111, 10383 }, { 112, 10374 }, { 113, 10376 },
+ { 114, 10384 }, { 115, 10373 }, { 116, 10385 }, { 117, 10380 },
+ { 118, 10380 }, { 122, 10392 }, { 123, 10390 }, { 124, 10386 },
+ { 125, 10387 }, { 126, 10389 }, { 127, 10388 }, { 128, 10371 },
+ { 129, 10372 }, { 130, 10366 }, { 131, 10368 }, { 132, 10367 },
+ { 0, 0 }
+};
+
+static const RoomDialogueId ROOM_DIALOGUES2_EN[] = {
{ 102, 221981 }, { 110, 221948 }, { 111, 221968 }, { 107, 222000 },
{ 101, 221935 }, { 112, 221924 }, { 113, 221942 }, { 116, 221977 },
{ 124, 221987 }, { 125, 221984 }, { 127, 221991 }, { 128, 221916 },
{ 129, 221919 }, { 131, 221912 }, { 132, 221908 }, { 0, 0 }
};
+static const RoomDialogueId ROOM_DIALOGUES2_DE[] = {
+ { 102, 221981 }, { 110, 221948 }, { 111, 221968 }, { 107, 222000 },
+ { 101, 221935 }, { 112, 221924 }, { 113, 221942 }, { 116, 221977 },
+ { 124, 221987 }, { 125, 221984 }, { 127, 221991 }, { 128, 221916 },
+ { 129, 221919 }, { 131, 221912 }, { 132, 221909 }, { 0, 0 }
+};
DoorbotScript::DoorbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
@@ -91,10 +110,10 @@ int DoorbotScript::chooseResponse(const TTroomScript *roomScript, const TTsenten
tag == MKTAG('A', 'N', 'S', 'W') || tag == MKTAG('S', 'U', 'M', 'S')) {
if (_stateIndex > 9)
_stateIndex = 0;
- addResponse(STATE_ARRAY[_stateIndex]);
+ addResponse(TRANSLATE(STATE_ARRAY_EN[_stateIndex], STATE_ARRAY_DE[_stateIndex]));
applyResponse();
- if (STATE_ARRAY[_stateIndex] == 11826)
+ if (_stateIndex == 8)
setState(1);
++_stateIndex;
return 2;
@@ -202,7 +221,8 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
return setResponse(getDialogueId(220113));
}
- if (sentence->_category == 6 && sentence->contains("why not")) {
+ if (sentence->_category == 6 && (sentence->contains("why not") ||
+ sentence->contains("warum nicht"))) {
return setResponse(11871, 8);
}
@@ -215,53 +235,55 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
switch (currState) {
case 1:
if (flag1)
- return setResponse(11828, 2);
+ return setResponse(TRANSLATE(11828, 11841), 2);
if (flag2)
- return setResponse(11827, 0);
+ return setResponse(TRANSLATE(11827, 11840), 0);
break;
case 2:
if (flag1)
- return setResponse(11827, 0);
+ return setResponse(TRANSLATE(11827, 11840), 0);
break;
case 3:
if (sentMode == 3)
- return setResponse(10406, 0);
+ return setResponse(TRANSLATE(10406, 10417), 0);
break;
case 4:
if (flag1)
- return setResponse(11332, 0);
+ return setResponse(TRANSLATE(11332, 11345), 0);
if (flag2)
- return setResponse(11331, 0);
+ return setResponse(TRANSLATE(11331, 11344), 0);
break;
case 5:
- return setResponse(11868, 0);
+ if (g_language == Common::EN_ANY)
+ return setResponse(11868, 0);
+ break;
case 6:
- return setResponse(11872, 0);
+ return setResponse(TRANSLATE(11872, 11885), 7);
case 7:
- return setResponse(11869, 0);
+ return setResponse(TRANSLATE(11869, 11882), 0);
case 8:
- return setResponse(11870, 0);
+ return setResponse(TRANSLATE(11870, 11883), 0);
case 12:
if (flag1)
- return setResponse(11894, 13);
+ return setResponse(TRANSLATE(11894, 11907), 13);
if (flag2)
- return setResponse(11893, 13);
+ return setResponse(TRANSLATE(11893, 11906), 13);
break;
case 13:
- return setResponse(11895, 12);
+ return setResponse(TRANSLATE(11895, 11908), 12);
case 15:
if (sentMode == 3 || sentMode == 6)
- return setResponse(10257, 0);
+ return setResponse(TRANSLATE(10257, 10260), 0);
break;
case 16: {
@@ -307,47 +329,47 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
case 21:
if (flag2)
- return setResponse(10935, 0);
+ return setResponse(TRANSLATE(10935, 10947), 0);
break;
case 22:
if (flag1) {
if (getRandomBit()) {
- return setResponse(11211, 23);
+ return setResponse(TRANSLATE(11211, 11223), 23);
} else {
- return setResponse(10127, 0);
+ return setResponse(TRANSLATE(10127, 10128), 0);
}
}
if (flag2)
- return setResponse(10136, 0);
+ return setResponse(TRANSLATE(10136, 10137), 0);
break;
case 23:
- return setResponse(10212, 0);
+ return setResponse(TRANSLATE(10212, 10213), 0);
case 24:
if (flag1)
- return setResponse(11151, 0);
+ return setResponse(TRANSLATE(11151, 11163), 0);
if (flag2)
- return setResponse(11150, 0);
+ return setResponse(TRANSLATE(11150, 11162), 0);
break;
case 25:
case 26:
if (flag2) {
if (getRandomBit()) {
- return setResponse(11211, 23);
+ return setResponse(TRANSLATE(11211, 11223), 23);
} else {
- return setResponse(10127, 0);
+ return setResponse(TRANSLATE(10127, 10128), 0);
}
}
if (flag1)
- return setResponse(10136, 0);
+ return setResponse(TRANSLATE(10136, 10137), 0);
break;
case 27:
if (flag1 || sentence->localWord("did") || sentence->contains("did"))
- return setResponse(221175, 28);
+ return setResponse(getDialogueId(221175), 28);
break;
case 28:
@@ -365,17 +387,20 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
case 31:
if (sentMode == 3 || sentMode == 10)
- return setResponse(10350, 0);
+ return setResponse(TRANSLATE(10350, 10353), 0);
break;
case 32:
- return setResponse(10110, 0);
+ return setResponse(TRANSLATE(10110, 10111), 0);
case 33:
if (sentence->contains("sieve") || sentence->contains("colander")
|| sentence->contains("vegetable") || sentence->contains("ground")
|| sentence->contains("earth") || sentence->contains("garden")
- || sentence->contains("cheese") || sentence->contains("strainer")) {
+ || sentence->contains("cheese") || sentence->contains("strainer")
+ || sentence->contains("sieb") || sentence->contains("emmenthaler")
+ || sentence->contains("gemuese") || sentence->contains("kaese")
+ || sentence->contains("erde") || sentence->contains("garten")) {
return setResponse(getDialogueId(221375), 0);
} else if (getRandomNumber(100) > 30) {
return setResponse(getDialogueId(221376), 33);
@@ -386,67 +411,74 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
case 34:
if (sentence->localWord("bellbot"))
- return setResponse(10094, 0);
- if (sentence->localWord("bellbot"))
- return setResponse(10349, 0);
- if (sentence->localWord("deskbot") || sentence->localWord("titania"))
- return setResponse(10148, 0);
- if (sentence->localWord("barbot") || sentence->localWord("rowbot")
- || sentence->localWord("liftbot") || sentence->localWord("maitredbot"))
- return setResponse(10147, 0);
+ return setResponse(TRANSLATE(10094, 10095), 0);
+ if (sentence->localWord("doorbot"))
+ return setResponse(TRANSLATE(10349, 10352), 0);
+
+ if (g_language == Common::EN_ANY) {
+ if (sentence->localWord("deskbot") || sentence->localWord("titania"))
+ return setResponse(10148, 0);
+ if (sentence->localWord("barbot") || sentence->localWord("rowbot")
+ || sentence->localWord("liftbot") || sentence->localWord("maitredbot"))
+ return setResponse(10147, 0);
+ }
break;
case 35:
- return setResponse(10811, 36);
+ return setResponse(TRANSLATE(10811, 10822), 36);
case 36:
if (flag1)
- return setResponse(10813, 37);
+ return setResponse(TRANSLATE(10813, 10824), 37);
if (flag2)
- return setResponse(10812, 37);
+ return setResponse(TRANSLATE(10812, 10823), 37);
break;
case 37:
if (flag1)
- return setResponse(10815, 37);
+ return setResponse(TRANSLATE(10815, 10826), 37);
if (flag2)
- return setResponse(10814, 37);
+ return setResponse(TRANSLATE(10814, 10825), 37);
break;
case 38:
- return setResponse(10848, 39);
+ if (g_language == Common::EN_ANY)
+ return setResponse(10848, 39);
case 39:
- return setResponse(10823, 40);
+ if (g_language == Common::EN_ANY)
+ return setResponse(10823, 40);
case 40:
- return setResponse(10832, 41);
+ return setResponse(TRANSLATE(10832, 10843), 41);
case 41:
- addResponse(10833);
- return setResponse(10835, 0);
+ addResponse(TRANSLATE(10833, 10844));
+ return setResponse(TRANSLATE(10835, 10846), 0);
case 42:
if (sentence->localWord("please"))
- return setResponse(10840, 43);
- return setResponse(10844, 0);
+ return setResponse(TRANSLATE(10840, 10851), 43);
+ return setResponse(TRANSLATE(10844, 10855), 0);
case 43:
case 45:
- return setResponse(10844, 0);
+ return setResponse(TRANSLATE(10844, 10855), 0);
case 44:
if (sentence->localWord("thanks"))
- return setResponse(10843, 45);
- return setResponse(10844, 0);
+ return setResponse(TRANSLATE(10843, 10854), 45);
+ return setResponse(TRANSLATE(10844, 10855), 0);
case 46:
if (flag1)
return setResponse(getDialogueId(222251), 0);
- if (flag2)
+ if (g_language == Common::EN_ANY && flag2)
return setResponse(10713, 0);
break;
+ default:
+ break;
}
}
@@ -457,39 +489,48 @@ int DoorbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
return setResponse(getDialogueId(221043), 0);
int result = 0;
- switch (roomScript->_scriptId) {
- case 100:
- case 101:
- case 102:
- case 107:
- case 110:
- case 111:
- case 124:
- case 129:
- case 131:
- case 132:
- result = processEntries(&_sentences[roomScript->_scriptId], 0, roomScript, sentence);
- break;
- default:
- break;
+ if (g_language == Common::EN_ANY) {
+ switch (roomScript->_scriptId) {
+ case 100:
+ case 101:
+ case 102:
+ case 107:
+ case 110:
+ case 111:
+ case 124:
+ case 129:
+ case 131:
+ case 132:
+ result = processEntries(&_sentences[roomScript->_scriptId], 0, roomScript, sentence);
+ break;
+ default:
+ break;
+ }
+
+ if (result == 2)
+ return 2;
}
- if (result == 2)
- return 2;
if (processEntries(&_entries, _entryCount, roomScript, sentence) == 2
|| processEntries(_defaultEntries, 0, roomScript, sentence) == 2
|| defaultProcess(roomScript, sentence))
return 2;
+ if (g_language == Common::DE_DEU && sentence->contains("42")) {
+ selectResponse(11831);
+ applyResponse();
+ return 2;
+ }
+
switch (sentence->_category) {
case 11:
if (getRandomNumber(100) > 90)
- return setResponse(10839, 42);
- return setResponse(222415, 0);
+ return setResponse(TRANSLATE(10839, 10850), 42);
+ return setResponse(getDialogueId(222415), 0);
case 12:
if (getRandomNumber(100) > 90)
- return setResponse(10841, 44);
+ return setResponse(TRANSLATE(10841, 10852), 44);
return setResponse(getDialogueId(222416), 0);
case 13:
@@ -696,10 +737,12 @@ int DoorbotScript::updateState(uint oldId, uint newId, int index) {
default:
break;
}
- } else if (newId >= 220883) {
+ }
+ else if (newId >= 220883) {
CTrueTalkManager::setFlags(38, 1);
CTrueTalkManager::triggerAction(28, 0);
- } else if (newId >= 220076) {
+ }
+ else if (newId >= 220076) {
switch (newId) {
case 220078:
case 220080:
@@ -715,11 +758,13 @@ int DoorbotScript::updateState(uint oldId, uint newId, int index) {
}
CTrueTalkManager::setFlags(39, 1);
- } else if (newId == 220075) {
+ }
+ else if (newId == 220075) {
if (flag39)
return getRangeValue(221381);
CTrueTalkManager::setFlags(39, 1);
- } else if (newId == 220038) {
+ }
+ else if (newId == 220038) {
return 220038;
}
@@ -745,7 +790,7 @@ int DoorbotScript::updateState(uint oldId, uint newId, int index) {
int DoorbotScript::preResponse(uint id) {
uint newId = 0;
if (getDialRegion(0) != 1 && getRandomNumber(100) > 60) {
- addResponse(11195);
+ addResponse(TRANSLATE(11195, 11207));
newId = 222193;
}
@@ -765,6 +810,15 @@ uint DoorbotScript::getDialsBitset() const {
int DoorbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
int id2, id = 0;
+ if (g_language == Common::DE_DEU) {
+ if (val1 == 4010 || (val1 >= 4012 && val1 <= 4015)) {
+ return TTnpcScript::doSentenceEntry(val1, srcIdP, roomScript, sentence);
+ }
+
+ if (val1 >= 4009 && val1 <= 4030)
+ val1 -= 4000;
+ }
+
switch (val1) {
case 2:
if (getValue(1) != 1)
@@ -787,7 +841,8 @@ int DoorbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
return 1;
break;
case 9:
- if (sentence->localWord("my") || sentence->contains("my"))
+ if (sentence->localWord("my") || sentence->contains("my")
+ || sentence->contains("mein"))
return true;
id2 = getRoomDialogueId1(roomScript);
if (id2) {
@@ -886,12 +941,20 @@ int DoorbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
CTrueTalkManager::triggerAction(29, 4);
break;
case 26:
- if (!sentence->localWord("my") && !sentence->contains("my"))
- return 1;
+ if (!sentence->localWord("my")) {
+ if (g_language == Common::EN_ANY && !sentence->contains("my"))
+ return 1;
+ if (g_language == Common::DE_DEU && !sentence->contains("mein"))
+ return 1;
+ }
break;
case 27:
- if (!sentence->localWord("earth") && !sentence->contains("earth"))
- return 1;
+ if (!sentence->localWord("earth")) {
+ if (g_language == Common::EN_ANY && !sentence->contains("earth"))
+ return 1;
+ if (g_language == Common::EN_ANY && !sentence->contains("erde"))
+ return 1;
+ }
break;
case 28:
id2 = getRoomDialogueId2(roomScript);
@@ -902,31 +965,36 @@ int DoorbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
}
break;
case 29:
- if (sentence->localWord("another") || sentence->localWord("more") ||
- sentence->localWord("additional") || sentence->contains("another") ||
- sentence->contains("more") || sentence->contains("additional")) {
+ if (sentence->localWord("another") || sentence->localWord("more")
+ || sentence->localWord("additional") || sentence->contains("another")
+ || sentence->contains("more") || sentence->contains("additional")
+ || sentence->contains("noch ein") || sentence->contains("einen anderen")
+ || sentence->contains("ein anderes") || sentence->contains("eine andere")
+ || sentence->contains("zusaetzliche")) {
addResponse(getDialogueId(220058));
applyResponse();
return 2;
}
break;
case 30:
- if (!sentence->localWord("because") && !sentence->contains("because"))
+ if (!sentence->localWord("because") && !sentence->contains("because")
+ && !(g_language == Common::DE_DEU && sentence->contains("well")))
return 1;
break;
- case 0x200:
+
+ case 512:
if (getValue(4) != 1)
id = 221157;
break;
- case 0x201:
+ case 513:
if (getValue(4) != 2)
id = 221157;
break;
- case 0x202:
+ case 514:
if (getValue(4) != 3)
id = 221157;
break;
- case 0x203:
+ case 515:
if (getValue(4) != 0)
id = 221157;
break;
@@ -1000,7 +1068,8 @@ int DoorbotScript::setResponse(int dialogueId, int v34) {
}
int DoorbotScript::getRoomDialogueId1(const TTroomScript *roomScript) {
- for (const RoomDialogueId *r = ROOM_DIALOGUES1; r->_roomNum; ++r) {
+ const RoomDialogueId *r = TRANSLATE(ROOM_DIALOGUES1_EN, ROOM_DIALOGUES1_DE);
+ for (; r->_roomNum; ++r) {
if (r->_roomNum == roomScript->_scriptId)
return getDialogueId(r->_dialogueId);
}
@@ -1009,7 +1078,8 @@ int DoorbotScript::getRoomDialogueId1(const TTroomScript *roomScript) {
}
int DoorbotScript::getRoomDialogueId2(const TTroomScript *roomScript) {
- for (const RoomDialogueId *r = ROOM_DIALOGUES2; r->_roomNum; ++r) {
+ const RoomDialogueId *r = TRANSLATE(ROOM_DIALOGUES2_EN, ROOM_DIALOGUES2_DE);
+ for (; r->_roomNum; ++r) {
if (r->_roomNum == roomScript->_scriptId)
return getDialogueId(r->_dialogueId);
}
diff --git a/engines/titanic/true_talk/german/barbot_script.cpp b/engines/titanic/true_talk/german/barbot_script.cpp
deleted file mode 100644
index 3a8177696a..0000000000
--- a/engines/titanic/true_talk/german/barbot_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/barbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/barbot_script.h b/engines/titanic/true_talk/german/barbot_script.h
deleted file mode 100644
index 2d1c25d6b2..0000000000
--- a/engines/titanic/true_talk/german/barbot_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_BARBOT_SCRIPT_DE_H
-#define TITANIC_BARBOT_SCRIPT_DE_H
-
-#include "titanic/true_talk/barbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class BarbotScript : public ::Titanic::BarbotScript {
-public:
- BarbotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
- ::Titanic::BarbotScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_BARBOT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/bellbot_script.cpp b/engines/titanic/true_talk/german/bellbot_script.cpp
deleted file mode 100644
index c6ff9f6a50..0000000000
--- a/engines/titanic/true_talk/german/bellbot_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/bellbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/bellbot_script.h b/engines/titanic/true_talk/german/bellbot_script.h
deleted file mode 100644
index 42f6e5d7cf..0000000000
--- a/engines/titanic/true_talk/german/bellbot_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_BELLBOT_SCRIPT_DE_H
-#define TITANIC_BELLBOT_SCRIPT_DE_H
-
-#include "titanic/true_talk/bellbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class BellbotScript : public ::Titanic::BellbotScript {
-public:
- BellbotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2) :
- ::Titanic::BellbotScript(val1, charClass, v2, charName, v3, val2) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_BELLBOT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/deskbot_script.cpp b/engines/titanic/true_talk/german/deskbot_script.cpp
deleted file mode 100644
index c4d4d3703c..0000000000
--- a/engines/titanic/true_talk/german/deskbot_script.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/deskbot_script.h"
-#include "titanic/true_talk/true_talk_manager.h"
-
-namespace Titanic {
-namespace German {
-
-int DeskbotScript::preResponse(uint id) {
- int newId = 0;
- if (getValue(1) >= 3 && (id == 41190 || id == 41429 || id == 41755 || id == 41757))
- newId = 241601;
-
- if (id == 42132)
- CTrueTalkManager::triggerAction(20, 0);
-
- return newId;
-}
-
-int DeskbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
- if (val1 != 4501)
- return TTnpcScript::doSentenceEntry(val1, srcIdP, roomScript, sentence);
-
- int v = getValue(1);
- int tagId = *srcIdP;
-
- switch (v) {
- case 1:
- tagId = 240336;
- break;
-
- case 2:
- tagId = addAssignedRoomDialogue();
- break;
-
- case 3:
- if (tagId == 240431 || tagId == 240432) {
- if (getValue(v) == 1) {
- if (tagId == 240431)
- tagId = 240432;
- } else {
- if (tagId == 240432)
- tagId = 240431;
- }
- }
- break;
-
- default:
- break;
- }
-
- addResponse(getDialogueId(tagId));
- applyResponse();
- return 2;
-}
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/deskbot_script.h b/engines/titanic/true_talk/german/deskbot_script.h
deleted file mode 100644
index c3719c85d0..0000000000
--- a/engines/titanic/true_talk/german/deskbot_script.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_DESKBOT_SCRIPT_DE_H
-#define TITANIC_DESKBOT_SCRIPT_DE_H
-
-#include "titanic/true_talk/deskbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class DeskbotScript : public ::Titanic::DeskbotScript {
-public:
- DeskbotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2) :
- ::Titanic::DeskbotScript(val1, charClass, v2, charName, v3, val2) {}
-
- /**
- * Handles getting a pre-response
- */
- virtual int preResponse(uint id);
-
- /**
- * Process a sentence fragment entry
- */
- virtual int doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence);
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_DESKBOT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/doorbot_script.cpp b/engines/titanic/true_talk/german/doorbot_script.cpp
deleted file mode 100644
index 616653d9cb..0000000000
--- a/engines/titanic/true_talk/german/doorbot_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/deskbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/doorbot_script.h b/engines/titanic/true_talk/german/doorbot_script.h
deleted file mode 100644
index 1653f42d40..0000000000
--- a/engines/titanic/true_talk/german/doorbot_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_DOORBOT_SCRIPT_DE_H
-#define TITANIC_DOORBOT_SCRIPT_DE_H
-
-#include "titanic/true_talk/doorbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class DoorbotScript : public ::Titanic::DoorbotScript {
-public:
- DoorbotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
- ::Titanic::DoorbotScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_DOORBOT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/liftbot_script.cpp b/engines/titanic/true_talk/german/liftbot_script.cpp
deleted file mode 100644
index fade9968c4..0000000000
--- a/engines/titanic/true_talk/german/liftbot_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/liftbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/liftbot_script.h b/engines/titanic/true_talk/german/liftbot_script.h
deleted file mode 100644
index 650a45201d..0000000000
--- a/engines/titanic/true_talk/german/liftbot_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_LIFTBOT_SCRIPT_DE_H
-#define TITANIC_LIFTBOT_SCRIPT_DE_H
-
-#include "titanic/true_talk/liftbot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class LiftbotScript : public ::Titanic::LiftbotScript {
-public:
- LiftbotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
- ::Titanic::LiftbotScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_LIFTBOT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/maitred_script.cpp b/engines/titanic/true_talk/german/maitred_script.cpp
deleted file mode 100644
index f670cdf58b..0000000000
--- a/engines/titanic/true_talk/german/maitred_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/maitred_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/maitred_script.h b/engines/titanic/true_talk/german/maitred_script.h
deleted file mode 100644
index 2bd2ce8e14..0000000000
--- a/engines/titanic/true_talk/german/maitred_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_MAITRED_SCRIPT_DE_H
-#define TITANIC_MAITRED_SCRIPT_DE_H
-
-#include "titanic/true_talk/maitred_script.h"
-
-namespace Titanic {
-namespace German {
-
-class MaitreDScript : public ::Titanic::MaitreDScript {
-public:
- MaitreDScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2) :
- ::Titanic::MaitreDScript(val1, charClass, v2, charName, v3, val2) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_MAITRED_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/parrot_script.cpp b/engines/titanic/true_talk/german/parrot_script.cpp
deleted file mode 100644
index 3e241c8683..0000000000
--- a/engines/titanic/true_talk/german/parrot_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/parrot_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/parrot_script.h b/engines/titanic/true_talk/german/parrot_script.h
deleted file mode 100644
index b34e6b112f..0000000000
--- a/engines/titanic/true_talk/german/parrot_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_PARROT_SCRIPT_DE_H
-#define TITANIC_PARROT_SCRIPT_DE_H
-
-#include "titanic/true_talk/parrot_script.h"
-
-namespace Titanic {
-namespace German {
-
-class ParrotScript : public ::Titanic::ParrotScript {
-public:
- ParrotScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
- ::Titanic::ParrotScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_PARROT_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/german/succubus_script.cpp b/engines/titanic/true_talk/german/succubus_script.cpp
deleted file mode 100644
index a4963a8a59..0000000000
--- a/engines/titanic/true_talk/german/succubus_script.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "titanic/true_talk/german/succubus_script.h"
-
-namespace Titanic {
-namespace German {
-
-} // End of namespace German
-} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/german/succubus_script.h b/engines/titanic/true_talk/german/succubus_script.h
deleted file mode 100644
index f9ad25c36e..0000000000
--- a/engines/titanic/true_talk/german/succubus_script.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TITANIC_SUCCUBUS_SCRIPT_DE_H
-#define TITANIC_SUCCUBUS_SCRIPT_DE_H
-
-#include "titanic/true_talk/succubus_script.h"
-
-namespace Titanic {
-namespace German {
-
-class SuccUBusScript : public ::Titanic::SuccUBusScript {
-public:
- SuccUBusScript(int val1, const char *charClass, int v2,
- const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
- ::Titanic::SuccUBusScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
-};
-
-} // End of namespace German
-} // End of namespace Titanic
-
-#endif /* TITANIC_SUCCUBUS_SCRIPT_DE_H */
diff --git a/engines/titanic/true_talk/liftbot_script.cpp b/engines/titanic/true_talk/liftbot_script.cpp
index 5f0f6fbb66..757b640c76 100644
--- a/engines/titanic/true_talk/liftbot_script.cpp
+++ b/engines/titanic/true_talk/liftbot_script.cpp
@@ -24,13 +24,17 @@
#include "titanic/true_talk/liftbot_script.h"
#include "titanic/true_talk/true_talk_manager.h"
#include "titanic/titanic.h"
+#include "titanic/translation.h"
namespace Titanic {
int LiftbotScript::_stateIndex;
-static const int STATE_ARRAY[7] = {
- 0x78BE, 0x78C0, 0x78C1, 0x78C2, 0x78C3, 0x78C4, 0x78C5
+static const int STATE_ARRAY_EN[7] = {
+ 30910, 30912, 30913, 30914, 30915, 30916, 30917
+};
+static const int STATE_ARRAY_DE[7] = {
+ 30919, 30921, 30922, 30923, 30924, 30925, 30926
};
LiftbotScript::LiftbotScript(int val1, const char *charClass, int v2,
@@ -63,21 +67,22 @@ int LiftbotScript::chooseResponse(const TTroomScript *roomScript, const TTsenten
case MKTAG('H', 'H', 'G', 'Q'):
case MKTAG('A', 'N', 'S', 'W'):
if (_stateIndex >= 7) {
- selectResponse(30918);
+ selectResponse(TRANSLATE(30918, 30927));
setState(2);
_stateIndex = 0;
} else {
- addResponse(STATE_ARRAY[_stateIndex++]);
+ addResponse(TRANSLATE(STATE_ARRAY_EN[_stateIndex++],
+ STATE_ARRAY_DE[_stateIndex++]));
}
applyResponse();
return 2;
case MKTAG('O', 'R', 'D', '8'):
- addResponse(30475);
- addResponse(30467);
- addResponse(30466);
- addResponse(30474);
+ addResponse(TRANSLATE(30475, 30484));
+ addResponse(TRANSLATE(30467, 30476));
+ addResponse(TRANSLATE(30466, 30475));
+ addResponse(TRANSLATE(30474, 30483));
applyResponse();
return SS_2;
@@ -103,22 +108,22 @@ int LiftbotScript::process(const TTroomScript *roomScript, const TTsentence *sen
switch (currState) {
case 2:
if (flag1)
- return addDialogueAndState(30920, 3);
+ return addDialogueAndState(TRANSLATE(30920, 30929), 3);
if (flag2)
- return addDialogueAndState(30919, 1);
+ return addDialogueAndState(TRANSLATE(30919, 30928), 1);
break;
case 3:
if (flag1)
- return addDialogueAndState(30919, 1);
+ return addDialogueAndState(TRANSLATE(30919, 30928), 1);
break;
case 4:
- return addDialogueAndState(210391, 1);
+ return addDialogueAndState(getDialogueId(210391), 1);
case 5:
if (sentence->contains("reborzo") || sentence->contains("is that"))
- return addDialogueAndState(30515, 1);
+ return addDialogueAndState(TRANSLATE(30515, 30524), 1);
break;
case 6:
@@ -184,7 +189,7 @@ ScriptChangedResult LiftbotScript::scriptChanged(const TTroomScript *roomScript,
break;
case 155:
- selectResponse(30446);
+ selectResponse(TRANSLATE(30446, 30455));
applyResponse();
break;
@@ -192,7 +197,7 @@ ScriptChangedResult LiftbotScript::scriptChanged(const TTroomScript *roomScript,
if (getCurrentFloor() == 1) {
addResponse(getDialogueId(210614));
} else {
- selectResponse(30270);
+ selectResponse(TRANSLATE(30270, 30272));
}
applyResponse();
break;
@@ -201,7 +206,7 @@ ScriptChangedResult LiftbotScript::scriptChanged(const TTroomScript *roomScript,
break;
}
- if (id >= 210000 && id <= 211001) {
+ if (id >= 210000 && id <= (uint)TRANSLATE(211001, 211003)) {
addResponse(getDialogueId(id));
applyResponse();
}
@@ -333,8 +338,13 @@ int LiftbotScript::updateState(uint oldId, uint newId, int index) {
}
int LiftbotScript::preResponse(uint id) {
- if (id == 30565 || id == 30566 || id == 30567 || id == 30568
- || id == 30569 || id == 30570 || id == 30571)
+ if (id == (uint)TRANSLATE(30565, 30574)
+ || id == (uint)TRANSLATE(30566, 30575)
+ || id == (uint)TRANSLATE(30567, 30576)
+ || id == (uint)TRANSLATE(30568, 30577)
+ || id == (uint)TRANSLATE(30569, 30578)
+ || id == (uint)TRANSLATE(30570, 30579)
+ || id == (uint)TRANSLATE(30571, 30580))
return 210901;
if (getDialRegion(0) == 0 && getRandomNumber(100) > 60)
@@ -355,7 +365,6 @@ uint LiftbotScript::getDialsBitset() const {
return bits;
}
-
int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
// Responses for each floor when asked "what floor are we on"
static const int FLOOR_RESPONSE_IDS[] = {
@@ -374,7 +383,9 @@ int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
getState();
int stateVal;
- switch (val1) {
+ int state = (g_language == Common::DE_DEU && val1 > 3000 && val1 < 3020)
+ ? val1 - 3000 : val1;
+ switch (state) {
case 1:
if (getValue(1) != 1)
return 1;
@@ -394,8 +405,9 @@ int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
if (sentence->localWord("big") || sentence->localWord("small")) {
addResponse(getDialogueId(210215));
applyResponse();
- } else if (sentence->localWord("my") || sentence->contains("my") ||
- sentence->contains("bedroom") || sentence->contains("state")) {
+ } else if (sentence->localWord("my") || sentence->contains("my")
+ || sentence->contains("bedroom") || sentence->contains("state")
+ || sentence->contains("mein") || sentence->contains("schlafzimmer")) {
addResponse1(CTrueTalkManager::getStateValue(4), true, 0);
} else {
selectResponse(210763);
@@ -434,9 +446,11 @@ int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
case 14:
// Which lift am I in
stateVal = getState6();
- if (sentence->contains("elevator") ||
- (!sentence->contains("lift") && getRandomNumber(100) > 60))
- stateVal += 4;
+ if (g_language == Common::EN_ANY) {
+ if (sentence->contains("elevator") ||
+ (!sentence->contains("lift") && getRandomNumber(100) > 60))
+ stateVal += 4;
+ }
selectResponse(LIFT_RESPONSE_IDS[stateVal]);
applyResponse();
return 2;
@@ -450,7 +464,9 @@ int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
applyResponse();
return 2;
case 16:
- if (sentence->contains("elevator") || sentence->contains("elavator"))
+ if (g_language == Common::DE_DEU)
+ addResponse(30589);
+ else if (sentence->contains("elevator") || sentence->contains("elavator"))
addResponse(30579);
else
addResponse(30580);
@@ -461,6 +477,7 @@ int LiftbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScri
return 1;
break;
default:
+
break;
}
@@ -510,11 +527,12 @@ int LiftbotScript::addResponse1(int index, bool flag, int id) {
return 1;
} else if (index == getCurrentFloor()) {
if (index == 1) {
- addResponse(30558 - (getRandomBit() ? 290 : 0));
+ addResponse(TRANSLATE(30558 - (getRandomBit() ? 290 : 0),
+ 30567 - (getRandomBit() ? 297 : 0)));
addResponse(getDialogueId(210589));
} else {
if (index == 39)
- addResponse(30346);
+ addResponse(TRANSLATE(30346, 30348));
addResponse(getDialogueId(210589));
}
@@ -539,9 +557,10 @@ int LiftbotScript::addResponse1(int index, bool flag, int id) {
if (flag) {
if (index == 1) {
- selectResponse(30558 - (getRandomBit() ? 290 : 0));
+ selectResponse(TRANSLATE(30558 - (getRandomBit() ? 290 : 0),
+ 30567 - (getRandomBit() ? 297 : 0)));
} else if (index == 39) {
- addResponse(30346);
+ addResponse(TRANSLATE(30346, 30348));
} else {
if (getRandomNumber(100) > 35 && index >= 2 && index <= 38) {
addResponse(getDialogueId(DIALOGUE_IDS[index - 2]));
@@ -638,7 +657,7 @@ int LiftbotScript::sentence1(const TTsentence *sentence) {
diff = -100;
}
- if (sentence->localWord("lobby"))
+ if (g_language == Common::EN_ANY && sentence->localWord("lobby"))
diff = (getValue(1) == 0 ? 1 : 0) - 99;
if (sentence->localWord("bottomofwell") || sentence->contains("bottom"))
diff = 39;
@@ -656,22 +675,25 @@ int LiftbotScript::sentence1(const TTsentence *sentence) {
}
if (sentence->_category == 4 || sentence->localWord("find")
- || sentence->contains("get to")) {
+ || sentence->contains("get to")
+ || sentence->contains("komme ich")
+ || sentence->contains("ich will zum")
+ || sentence->contains("ich will zur")
+ || sentence->contains("ich will ins")
+ || sentence->contains("ich will in")) {
if (getCurrentFloor() != diff) {
selectResponse(diff == 1 ? 210769 : 210764);
- applyResponse();
} else if (!newId) {
selectResponse(210764);
- applyResponse();
- } else if (newId >= 210715 && newId <= 210719) {
- selectResponse(newId);
- applyResponse();
- } else {
+ } else if (newId > 210715 && newId <= 210719) {
addResponse(getDialogueId(210720));
+ selectResponse(getDialogueId(newId));
selectResponse(210715);
- applyResponse();
+ } else {
+ selectResponse(newId);
}
+ applyResponse();
return 1;
}
diff --git a/engines/titanic/true_talk/maitred_script.cpp b/engines/titanic/true_talk/maitred_script.cpp
index 98a4b42e70..1033db29e0 100644
--- a/engines/titanic/true_talk/maitred_script.cpp
+++ b/engines/titanic/true_talk/maitred_script.cpp
@@ -23,6 +23,7 @@
#include "common/textconsole.h"
#include "titanic/true_talk/maitred_script.h"
#include "titanic/true_talk/true_talk_manager.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -81,9 +82,10 @@ int MaitreDScript::process(const TTroomScript *roomScript, const TTsentence *sen
stopFighting(false);
_answerCtr = 0;
- if (sentence->contains("restaurant at the end of the universe")
+ if (sentence->contains(TRANSLATE("restaurant at the end of the universe",
+ "restaurant am ende des universums"))
|| sentence->contains("milliway")
- || sentence->contains("big bang burger bar")) {
+ || sentence->contains(TRANSLATE("big bang burger bar", "frittenbude"))) {
addResponse(getDialogueId(260975));
applyResponse();
} else if (processEntries(&_entries, _entryCount, roomScript, sentence) == 2) {
@@ -111,7 +113,20 @@ int MaitreDScript::process(const TTroomScript *roomScript, const TTsentence *sen
if (++_answerCtr > 50 || sentence->localWord("stop") || sentence->localWord("enough")
|| sentence->contains("i give up") || sentence->contains("i give in")
- || sentence->contains("i surrender") || sentence->contains("i submit")) {
+ || sentence->contains("i surrender") || sentence->contains("i submit")
+ || sentence->contains("ich gebe auf")
+ || sentence->contains("ich ergebe mich")
+ || sentence->contains("ich kapituliere")
+ || sentence->contains("ich unterwerfe mich")
+ || sentence->contains("hoer auf")
+ || sentence->contains("lass")
+ || sentence->contains("schluss")
+ || sentence->contains("hoer sofort")
+ || sentence->contains("genug")
+ || sentence->contains("basta")
+ || sentence->contains("halt")
+ || sentence->contains("voll")
+ || sentence->contains("was soll")) {
_answerCtr = 0;
stopFighting(false);
addResponse(getDialogueId(260063));
@@ -123,17 +138,22 @@ int MaitreDScript::process(const TTroomScript *roomScript, const TTsentence *sen
addResponse(getDialogueId(260678));
} else if (sentence->contains("touche") || sentence->contains("toushe")) {
addResponse(getDialogueId(260098));
- } else if (sentence->contains("have at you")) {
+ } else if (sentence->contains("have at you") || sentence->contains("ausfall")) {
addResponse(getDialogueId(260047));
- } else if (sentence->contains("en garde") || sentence->contains("on guard")) {
+ } else if (sentence->contains("en garde") || sentence->contains("on guard")
+ || sentence->contains("attacke")) {
addResponse(getDialogueId(260008));
+ } else if (g_language == Common::DE_DEU && !sentence->contains("ich")
+ && (sentence->contains("surrender") || sentence->contains("gebe auf")
+ || sentence->contains("ergebe mich"))) {
+ addResponse(getDialogueId(260086));
} else if ((sentence->localWord("surrender") && !sentence->contains("i surrender"))
|| (sentence->contains("give up") && !sentence->contains("i give up"))
|| (sentence->contains("give in") && !sentence->contains("i give in"))
|| (sentence->contains("submit") && !sentence->contains("i submit"))) {
addResponse(getDialogueId(260086));
} else {
- addResponse(getDialogueId(260031));
+ addResponse(getDialogueId(260131));
}
applyResponse();
@@ -539,14 +559,14 @@ int MaitreDScript::updateState(uint oldId, uint newId, int index) {
}
if (!getValue(12)) {
- static const uint FLAG_IDS[] = {
+ static const uint FIGHTING_IDS[] = {
260080, 260066, 260067, 260062, 260050, 260087, 260090, 260171, 260173,
260184, 260193, 260202, 260205, 260220, 260221, 260223, 260231, 260232,
260365, 260373, 260374, 260387, 260421, 260622, 260695, 0
};
- for (uint idx = 0; FLAG_IDS[idx]; ++idx) {
- if (FLAG_IDS[idx] == newId) {
+ for (uint idx = 0; FIGHTING_IDS[idx]; ++idx) {
+ if (FIGHTING_IDS[idx] == newId) {
startFighting();
break;
}
@@ -916,7 +936,7 @@ int MaitreDScript::preprocess(const TTroomScript *roomScript, const TTsentence *
case 21:
case 22:
- if (sentence->contains("cooking")
+ if (sentence->contains(TRANSLATE("cooking", "kochen"))
|| (sentence->localWord("what") && sentence->localWord("mean"))) {
addResponse(getDialogueId(260238));
applyFlag = true;
diff --git a/engines/titanic/true_talk/succubus_script.cpp b/engines/titanic/true_talk/succubus_script.cpp
index 94875840b3..34ae772e1c 100644
--- a/engines/titanic/true_talk/succubus_script.cpp
+++ b/engines/titanic/true_talk/succubus_script.cpp
@@ -24,6 +24,7 @@
#include "titanic/true_talk/succubus_script.h"
#include "titanic/true_talk/true_talk_manager.h"
#include "titanic/titanic.h"
+#include "titanic/translation.h"
namespace Titanic {
@@ -171,15 +172,28 @@ int SuccUBusScript::process(const TTroomScript *roomScript, const TTsentence *se
}
ScriptChangedResult SuccUBusScript::scriptChanged(const TTroomScript *roomScript, uint id) {
- if (id == 148)
- CTrueTalkManager::setFlags(3, 1);
- else if (id == 150)
- CTrueTalkManager::setFlags(2, 1);
+ if (g_language == Common::EN_ANY) {
+ if (id == 148)
+ CTrueTalkManager::setFlags(3, 1);
+ else if (id == 150)
+ CTrueTalkManager::setFlags(2, 1);
+ } else {
+ if (id == 70211 || id == 230013) {
+ addResponse(getDialogueId(230163));
+ applyResponse();
+ return SCR_2;
+ } else if (id < 70211) {
+ if (id == 148)
+ CTrueTalkManager::setFlags(3, 1);
+ else if (id == 150)
+ CTrueTalkManager::setFlags(2, 1);
+ }
+ }
if (id >= 230000 && id <= 230245) {
addResponse(getDialogueId(id));
applyResponse();
- } else if (id >= 70000 && id <= 70243) {
+ } else if (id >= 70000 && id <= (uint)TRANSLATE(70243, 70248)) {
addResponse(id);
applyResponse();
}
diff --git a/engines/titanic/true_talk/tt_scripts.cpp b/engines/titanic/true_talk/tt_scripts.cpp
index 4c103ed457..bda6e672bd 100644
--- a/engines/titanic/true_talk/tt_scripts.cpp
+++ b/engines/titanic/true_talk/tt_scripts.cpp
@@ -30,14 +30,6 @@
#include "titanic/true_talk/maitred_script.h"
#include "titanic/true_talk/parrot_script.h"
#include "titanic/true_talk/succubus_script.h"
-#include "titanic/true_talk/german/barbot_script.h"
-#include "titanic/true_talk/german/bellbot_script.h"
-#include "titanic/true_talk/german/deskbot_script.h"
-#include "titanic/true_talk/german/doorbot_script.h"
-#include "titanic/true_talk/german/liftbot_script.h"
-#include "titanic/true_talk/german/maitred_script.h"
-#include "titanic/true_talk/german/parrot_script.h"
-#include "titanic/true_talk/german/succubus_script.h"
#include "titanic/translation.h"
namespace Titanic {
@@ -72,25 +64,14 @@ TTscripts::TTscripts() {
addScript(new TTroomScript(scriptNum));
// Load npc scripts
- if (g_language == Common::DE_DEU) {
- addScript(new German::BarbotScript(100, "Barbot", 0, "Fortillian", 9, 1, -1, -1, -1, 0), 112);
- addScript(new German::BellbotScript(101, "Bellbot", 0, "Krage", 8, 1), 110);
- addScript(new German::DeskbotScript(103, "DeskBot", 0, "Marsinta", 11, 2), 110);
- addScript(new German::DoorbotScript(104, "Doorbot", 0, "Fentible", 11, 1, -1, -1, -1, 0), 100);
- addScript(new German::LiftbotScript(105, "LiftBot", 0, "Nobby", 11, 1, -1, -1, -1, 0), 103);
- addScript(new German::ParrotScript(107, "Parrot", 0, "The Parrot", 5, 1, -1, -1, -1, 0), 111);
- addScript(new German::SuccUBusScript(111, "Succubus", 0, "Shorbert", 9, 1, -1, -1, -1, 0), 110);
- addScript(new German::MaitreDScript(112, "MaitreDBot", 0, "Dastrogaaar", 8, 1), 132);
- } else {
- addScript(new BarbotScript(100, "Barbot", 0, "Fortillian", 9, 1, -1, -1, -1, 0), 112);
- addScript(new BellbotScript(101, "Bellbot", 0, "Krage", 8, 1), 110);
- addScript(new DeskbotScript(103, "DeskBot", 0, "Marsinta", 11, 2), 110);
- addScript(new DoorbotScript(104, "Doorbot", 0, "Fentible", 11, 1, -1, -1, -1, 0), 100);
- addScript(new LiftbotScript(105, "LiftBot", 0, "Nobby", 11, 1, -1, -1, -1, 0), 103);
- addScript(new ParrotScript(107, "Parrot", 0, "The Parrot", 5, 1, -1, -1, -1, 0), 111);
- addScript(new SuccUBusScript(111, "Succubus", 0, "Shorbert", 9, 1, -1, -1, -1, 0), 110);
- addScript(new MaitreDScript(112, "MaitreDBot", 0, "Dastrogaaar", 8, 1), 132);
- }
+ addScript(new BarbotScript(100, "Barbot", 0, "Fortillian", 9, 1, -1, -1, -1, 0), 112);
+ addScript(new BellbotScript(101, "Bellbot", 0, "Krage", 8, 1), 110);
+ addScript(new DeskbotScript(103, "DeskBot", 0, "Marsinta", 11, 2), 110);
+ addScript(new DoorbotScript(104, "Doorbot", 0, "Fentible", 11, 1, -1, -1, -1, 0), 100);
+ addScript(new LiftbotScript(105, "LiftBot", 0, "Nobby", 11, 1, -1, -1, -1, 0), 103);
+ addScript(new ParrotScript(107, "Parrot", 0, "The Parrot", 5, 1, -1, -1, -1, 0), 111);
+ addScript(new SuccUBusScript(111, "Succubus", 0, "Shorbert", 9, 1, -1, -1, -1, 0), 110);
+ addScript(new MaitreDScript(112, "MaitreDBot", 0, "Dastrogaaar", 8, 1), 132);
}
void TTscripts::addScript(TTnpcScript *script, int scriptId) {
diff --git a/image/png.cpp b/image/png.cpp
index cfbcba5206..86d33b6952 100644
--- a/image/png.cpp
+++ b/image/png.cpp
@@ -122,11 +122,6 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
png_destroy_read_struct(&pngPtr, NULL, NULL);
return false;
}
- png_infop endInfo = png_create_info_struct(pngPtr);
- if (!endInfo) {
- png_destroy_read_struct(&pngPtr, &infoPtr, NULL);
- return false;
- }
png_set_error_fn(pngPtr, NULL, pngError, pngWarning);
// TODO: The manual says errors should be handled via setjmp
@@ -239,7 +234,7 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
png_read_end(pngPtr, NULL);
// Destroy libpng structures
- png_destroy_read_struct(&pngPtr, &infoPtr, &endInfo);
+ png_destroy_read_struct(&pngPtr, &infoPtr, NULL);
return true;
#else
@@ -287,11 +282,6 @@ bool writePNG(Common::WriteStream &out, const Graphics::Surface &input, const bo
png_destroy_write_struct(&pngPtr, NULL);
return false;
}
- png_infop endInfo = png_create_info_struct(pngPtr);
- if (!endInfo) {
- png_destroy_write_struct(&pngPtr, &infoPtr);
- return false;
- }
png_set_error_fn(pngPtr, NULL, pngError, pngWarning);
// TODO: The manual says errors should be handled via setjmp
diff --git a/po/be_BY.po b/po/be_BY.po
index 5c0ca6583f..0ee462e17b 100644
--- a/po/be_BY.po
+++ b/po/be_BY.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-07-26 18:23+0000\n"
"Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n"
"Language-Team: Belarusian <https://translations.scummvm.org/projects/scummvm/"
@@ -1841,8 +1841,8 @@ msgstr "Г~а~лоўнае меню"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1862,8 +1862,9 @@ msgstr "Захаваць гульню:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2894,8 +2895,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2908,8 +2909,8 @@ msgstr "Узнавіць гульню:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3598,16 +3599,16 @@ msgstr ""
"Калі ласка, скарыстайцеся іншай праграмай для прагляду файла дапамогі "
"гульні: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "Фармат захаванай гульні састарэў, не магу прачытаць яго"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Версія файла захавання %d, але максімальна падтрымваецца %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 350d5aa2e0..d549212b95 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-02-20 14:15+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Catalan <https://translations.scummvm.org/projects/scummvm/"
@@ -1836,8 +1836,8 @@ msgstr "~R~etorna al Llanчador"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1857,8 +1857,9 @@ msgstr "Desa la partida:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2876,8 +2877,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2890,8 +2891,8 @@ msgstr "Recupera la partida:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3570,16 +3571,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 3f14657a33..372724970e 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-04 15:43+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Czech <https://translations.scummvm.org/projects/scummvm/"
@@ -1846,8 +1846,8 @@ msgstr "~N~сvrat do SpouЙtьшe"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1867,8 +1867,9 @@ msgstr "UloОit hru:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2898,8 +2899,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2912,8 +2913,8 @@ msgstr "Obnovit hru:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3590,16 +3591,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/da_DK.po b/po/da_DK.po
index 61929c475e..ea7ce86686 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-29 07:29+0000\n"
"Last-Translator: poulsen93 <poulsen93@gmail.com>\n"
"Language-Team: Danish <https://translations.scummvm.org/projects/scummvm/"
@@ -1838,8 +1838,8 @@ msgstr "~R~etur til oversigt"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1859,8 +1859,9 @@ msgstr "Gemmer:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2889,8 +2890,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2903,8 +2904,8 @@ msgstr "Gendan spil:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3591,16 +3592,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/de_DE.po b/po/de_DE.po
index b85610b006..01c88280a2 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.10.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-09-11 18:50+0000\n"
"Last-Translator: Lothar Serra Mari <rootfather@scummvm.org>\n"
"Language-Team: German <https://translations.scummvm.org/projects/scummvm/"
@@ -1865,8 +1865,8 @@ msgstr "Zur Spiele~l~iste"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1886,8 +1886,9 @@ msgstr "Speichern:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2921,8 +2922,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2935,8 +2936,8 @@ msgstr "Spiel laden:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3634,16 +3635,16 @@ msgstr ""
"Bitte verwenden Sie einen externen Betrachter, um die Hilfedatei des Spiels "
"zu іffnen: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "Das Format dieses Spielstands ist veraltet; laden nicht mіglich"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Spielstand-Version ist %d, hіchste unterstќtzte Version ist %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/el.po b/po/el.po
index da2b6e2500..e502d97499 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.10.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-04-28 11:12+0000\n"
"Last-Translator: Arius <alidop@pathfinder.gr>\n"
"Language-Team: Greek <https://translations.scummvm.org/projects/scummvm/"
@@ -1872,8 +1872,8 @@ msgstr "Х№щѓ~є~ё. ѓєяэ Яфчучєо"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1893,8 +1893,9 @@ msgstr "С№яшоъхѕѓч №сщїэщфщя§:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2929,8 +2930,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2943,8 +2944,8 @@ msgstr "Х№сэсіяём №сщїэщфщя§:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3638,16 +3639,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/es_ES.po b/po/es_ES.po
index 547ce4b5d9..d4ad2b8716 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-04-23 05:59+0000\n"
"Last-Translator: Santiago Sanchez <sanchez.santiago.j@gmail.com>\n"
"Language-Team: Spanish <https://translations.scummvm.org/projects/scummvm/"
@@ -1854,8 +1854,8 @@ msgstr "~V~olver al lanzador"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1875,8 +1875,9 @@ msgstr "Guardar partida:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2903,8 +2904,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2917,8 +2918,8 @@ msgstr "Cargar partida:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3602,16 +3603,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/eu.po b/po/eu.po
index ff7027da56..b01a5f35a1 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-04 13:27+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Basque <https://translations.scummvm.org/projects/scummvm/"
@@ -1842,8 +1842,8 @@ msgstr "It~z~uli abiarazlera"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1863,8 +1863,9 @@ msgstr "Gorde jokoa:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2893,8 +2894,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2907,8 +2908,8 @@ msgstr "Jokoa kargatu:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3596,16 +3597,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 74f7316951..5944d0dbfd 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-09-09 13:38+0000\n"
"Last-Translator: Timo Mikkolainen <tmikkola@gmail.com>\n"
"Language-Team: Finnish <https://translations.scummvm.org/projects/scummvm/"
@@ -1840,8 +1840,8 @@ msgstr "Palaa p~e~livalitsimeen"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1861,8 +1861,9 @@ msgstr "Tallenna peli:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2888,8 +2889,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2902,8 +2903,8 @@ msgstr "Lataa pelitallenne:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3579,17 +3580,17 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr "Kфytф ulkoista ohjelmaa pelin ohjetiedoston avaamiseen: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
"Tфmфn pelitallenteen formaatti on vanhentunut, sitф ei pystytф lataamaan"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Pelitallenteen versio on %d, suurin tuettu versio on %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 98fb6a5c22..319ec39b25 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-07-03 10:14+0000\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <https://translations.scummvm.org/projects/scummvm/"
@@ -1860,8 +1860,8 @@ msgstr "Retour au ~L~anceur"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1881,8 +1881,9 @@ msgstr "Sauvegarde :"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2913,8 +2914,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2927,8 +2928,8 @@ msgstr "Charger le jeu :"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3619,20 +3620,20 @@ msgstr ""
"Veuillez utiliser une application externe pour ouvrir le fichier d'Aide du "
"jeu : %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
"Le format de ce fichier de sauvegarde est obsolшte. Le fichier ne peut ъtre "
"chargщ."
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
"La version du fichier de sauvegarde est %d, mais la version maximum "
"supportщe est %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/gl_ES.po b/po/gl_ES.po
index 5bbc9dcdff..34151c4393 100644
--- a/po/gl_ES.po
+++ b/po/gl_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-11-28 15:51+0000\n"
"Last-Translator: Santiago G. Sanz <santiagogarciasanz@gmail.com>\n"
"Language-Team: Galician <https://translations.scummvm.org/projects/scummvm/"
@@ -1850,8 +1850,8 @@ msgstr "~V~olver ao Iniciador"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1871,8 +1871,9 @@ msgstr "Gardar partida:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2898,8 +2899,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2912,8 +2913,8 @@ msgstr "Restaurar xogo:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3607,16 +3608,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 8da7fc5e0d..9c4e917f69 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-09-09 02:29+0000\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian <https://translations.scummvm.org/projects/scummvm/"
@@ -1834,8 +1834,8 @@ msgstr "Visszatщrщs az indэtѓba"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1855,8 +1855,9 @@ msgstr "Jсtщk mentщse:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2878,8 +2879,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2892,8 +2893,8 @@ msgstr "Jсtщkmenet visszaсllэtсsa:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3572,16 +3573,16 @@ msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
"A jсtщk sњgѓfсjljсnak megnyitсsсhoz kќlsѕ megjelenэtѕt kell hasznсlnia: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "A mentett jсtщk formсtuma elavult, nem lehet betіlteni"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "A mentщs verziѓja %d, a maximсlisan tсmogatott %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/it_IT.po b/po/it_IT.po
index 637cbc9b6f..899ee41821 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-09-09 07:41+0000\n"
"Last-Translator: Paolo Bossi <pbossi86@gmail.com>\n"
"Language-Team: Italian <https://translations.scummvm.org/projects/scummvm/"
@@ -1853,8 +1853,8 @@ msgstr "~V~ai a elenco giochi"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1874,8 +1874,9 @@ msgstr "Salva gioco:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2904,8 +2905,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2918,8 +2919,8 @@ msgstr "Ripristina partita:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3606,17 +3607,17 @@ msgstr ""
"Si prega di usare un programma di visualizzazione esterno per aprire il file "
"di aiuto:%s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "Il formato di questo salvataggio ш obsoleto, impossibile caricarlo"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
"La versione del salvataggio ш %d, la versione piљ recente supportata ш %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/nb_NO.po b/po/nb_NO.po
index e16eb29e79..5d4ceeb5b1 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-26 17:36+0000\n"
"Last-Translator: Einar Johan Trјan Sјmхen <einarjohants@gmail.com>\n"
"Language-Team: Norwegian Bokmхl <https://translations.scummvm.org/projects/"
@@ -1839,8 +1839,8 @@ msgstr "~T~ilbake til oppstarter"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1860,8 +1860,9 @@ msgstr "Lagret spill:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2884,8 +2885,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2898,8 +2899,8 @@ msgstr "Gjennopprett spill:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3578,16 +3579,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 21160b9a1d..0a61924431 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.9.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-09-11 06:41+0000\n"
"Last-Translator: Ben Castricum <github@bencastricum.nl>\n"
"Language-Team: Dutch <https://translations.scummvm.org/projects/scummvm/"
@@ -1843,8 +1843,8 @@ msgstr "S~t~artmenu"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1864,8 +1864,9 @@ msgstr "Spel opslaan:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2899,8 +2900,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2913,8 +2914,8 @@ msgstr "Laad opgeslagen spel:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3605,17 +3606,17 @@ msgstr ""
"Gebruik a.u.b. een externe viewer om het help-bestand van het spel te "
"openen: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
"Het formaat van dit opgeslagen spel is verouderd, het laden is niet mogelijk"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Opgeslagen spel heeft versie %d, maximaal ondersteunde is %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index d2e7795274..51d634c863 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-18 18:23+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Norwegian Nynorsk <https://translations.scummvm.org/projects/"
@@ -1835,8 +1835,8 @@ msgstr "Tilbake til Oppsta~r~tar"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1856,8 +1856,9 @@ msgstr "Lagra spel:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2879,8 +2880,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2893,8 +2894,8 @@ msgstr "Gjenopprett spel:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3543,16 +3544,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index b244f3fe1e..cb7881c588 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-01-25 12:49+0000\n"
"Last-Translator: RafaГ Rzepecki <divided.mind@gmail.com>\n"
"Language-Team: Polish <https://translations.scummvm.org/projects/scummvm/"
@@ -1845,8 +1845,8 @@ msgstr "~P~owrѓt do launchera"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1866,8 +1866,9 @@ msgstr "Zapis:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2889,8 +2890,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2903,8 +2904,8 @@ msgstr "Wznѓw grъ:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3586,16 +3587,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index ea7048aa54..6f2c39b42d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-03-03 22:26+0000\n"
"Last-Translator: rafaelmessias <rmmartins@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.scummvm.org/"
@@ -1872,8 +1872,8 @@ msgstr "~V~oltar ao menu"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1893,8 +1893,9 @@ msgstr "Salvar jogo:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2926,8 +2927,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2940,8 +2941,8 @@ msgstr "Restaurar jogo:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3626,16 +3627,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index ff456feb90..c95e2b9c89 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.10.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-01-30 14:50+0000\n"
"Last-Translator: Vitor Santos <vitorhgsantos90@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://translations.scummvm.org/"
@@ -1831,8 +1831,8 @@ msgstr ""
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1852,8 +1852,9 @@ msgstr ""
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2835,8 +2836,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2849,8 +2850,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3462,16 +3463,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 164a5bc352..4ebb6d36c7 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-06-20 15:35+0000\n"
"Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n"
"Language-Team: Russian <https://translations.scummvm.org/projects/scummvm/"
@@ -1844,8 +1844,8 @@ msgstr "~В~ главное меню"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1865,8 +1865,9 @@ msgstr "Сохранить игру:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2894,8 +2895,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2908,8 +2909,8 @@ msgstr "Восстановить игру:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3599,17 +3600,17 @@ msgstr ""
"Пожалуйста, воспользуйтесь другой программой для просмотра файла помощи "
"игры: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
#, fuzzy
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "Формат файла сохранённой игры устарел, не могу загрузить его"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, fuzzy, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Версия файла сохранения: %d, но максимальная поддерживаемая: %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
#, fuzzy
msgid ""
"This saved game was created with a different version of the game, unable to "
diff --git a/po/scummvm.pot b/po/scummvm.pot
index 5c01b0b6e9..36da2316cc 100644
--- a/po/scummvm.pot
+++ b/po/scummvm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.10.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\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"
@@ -1796,8 +1796,8 @@ msgstr ""
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1817,8 +1817,9 @@ msgstr ""
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2800,8 +2801,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2814,8 +2815,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3426,16 +3427,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index c4e58d2cbb..730822d2b7 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-01-06 09:18+0000\n"
"Last-Translator: Petter Sjіlund <ignalina@mac.com>\n"
"Language-Team: Swedish <https://translations.scummvm.org/projects/scummvm/"
@@ -1848,8 +1848,8 @@ msgstr "Хte~r~vфnd till launcher"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1869,8 +1869,9 @@ msgstr "Spara spelet:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2896,8 +2897,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2910,8 +2911,8 @@ msgstr "Ladda sparfil:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3596,16 +3597,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 2c0ee4db8f..af8c194737 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.9.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2017-06-14 14:55+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Ukrainian <https://translations.scummvm.org/projects/scummvm/"
@@ -1845,8 +1845,8 @@ msgstr "~П~овер.в головне меню"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1866,8 +1866,9 @@ msgstr "Зберегти гру:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2895,8 +2896,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2909,8 +2910,8 @@ msgstr "Відновити гру:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3595,16 +3596,16 @@ msgstr ""
"Будь-ласка, використовуйте іншу програму для переглядання файлу допомоги "
"ігри: %s"
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr "Формат цього файлу збереженої гри застарілий, не можу його прочитати"
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr "Версія файлу збереження %d, але максимально підртимується %0d"
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"
diff --git a/po/zh-Latn_CN.po b/po/zh-Latn_CN.po
index ff58da8eb0..5c93012c1a 100644
--- a/po/zh-Latn_CN.po
+++ b/po/zh-Latn_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.9.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n"
-"POT-Creation-Date: 2017-09-16 06:06+0200\n"
+"POT-Creation-Date: 2017-09-24 04:40+0200\n"
"PO-Revision-Date: 2016-12-26 19:38+0000\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Chinese <https://translations.scummvm.org/projects/scummvm/"
@@ -1835,8 +1835,8 @@ msgstr "~R~Fanhui Qidongqi"
#: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298
#: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:106
#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:535 engines/sci/engine/kfile.cpp:944
-#: engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:656
+#: engines/sci/engine/kfile.cpp:1042 engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -1856,8 +1856,9 @@ msgstr "Baocun Youxi:"
#: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350
#: engines/mohawk/dialogs.cpp:106 engines/neverhood/menumodule.cpp:880
#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:379
-#: engines/sci/engine/guest_additions.cpp:536 engines/sci/engine/kfile.cpp:944
-#: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250
+#: engines/sci/engine/guest_additions.cpp:657
+#: engines/sci/engine/kfile.cpp:1042 engines/scumm/dialogs.cpp:184
+#: engines/sherlock/scalpel/scalpel.cpp:1250
#: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291
#: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599
#: engines/wage/saveload.cpp:758 engines/zvision/file/save_manager.cpp:49
@@ -2880,8 +2881,8 @@ msgstr ""
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:538
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:659
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore game:"
@@ -2894,8 +2895,8 @@ msgstr "Huifu Youxi:"
#: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473
#: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377
#: engines/neverhood/menumodule.cpp:893
-#: engines/sci/engine/guest_additions.cpp:539
-#: engines/sci/engine/kfile.cpp:1063 engines/sherlock/scalpel/scalpel.cpp:1263
+#: engines/sci/engine/guest_additions.cpp:660
+#: engines/sci/engine/kfile.cpp:1161 engines/sherlock/scalpel/scalpel.cpp:1263
#: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266
#: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62
msgid "Restore"
@@ -3573,16 +3574,16 @@ msgstr ""
msgid "Please use an external viewer to open the game's help file: %s"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1314
+#: engines/sci/engine/savegame.cpp:1292
msgid "The format of this saved game is obsolete, unable to load it"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1316
+#: engines/sci/engine/savegame.cpp:1294
#, c-format
msgid "Savegame version is %d, maximum supported is %0d"
msgstr ""
-#: engines/sci/engine/savegame.cpp:1327
+#: engines/sci/engine/savegame.cpp:1305
msgid ""
"This saved game was created with a different version of the game, unable to "
"load it"