diff options
-rw-r--r-- | devtools/create_supernova/create_image/015/clickfield_info (renamed from devtools/create_supernova2/create_image/015/clickfield_info) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/015/free_tile.xcf (renamed from devtools/create_supernova2/create_image/015/free_tile.xcf) | bin | 1567 -> 1567 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image0.bmp (renamed from devtools/create_supernova2/create_image/015/image0.bmp) | bin | 45306 -> 45306 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image1.bmp (renamed from devtools/create_supernova2/create_image/015/image1.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image10.bmp (renamed from devtools/create_supernova2/create_image/015/image10.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image11.bmp (renamed from devtools/create_supernova2/create_image/015/image11.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image12.bmp (renamed from devtools/create_supernova2/create_image/015/image12.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image13.bmp (renamed from devtools/create_supernova2/create_image/015/image13.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image14.bmp (renamed from devtools/create_supernova2/create_image/015/image14.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image15.bmp (renamed from devtools/create_supernova2/create_image/015/image15.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image16.bmp (renamed from devtools/create_supernova2/create_image/015/image16.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image17.bmp (renamed from devtools/create_supernova2/create_image/015/image17.bmp) | bin | 20298 -> 20298 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image18.bmp (renamed from devtools/create_supernova2/create_image/015/image18.bmp) | bin | 15282 -> 15282 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image19.bmp (renamed from devtools/create_supernova2/create_image/015/image19.bmp) | bin | 7074 -> 7074 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image2.bmp (renamed from devtools/create_supernova2/create_image/015/image2.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image3.bmp (renamed from devtools/create_supernova2/create_image/015/image3.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image4.bmp (renamed from devtools/create_supernova2/create_image/015/image4.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image5.bmp (renamed from devtools/create_supernova2/create_image/015/image5.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image6.bmp (renamed from devtools/create_supernova2/create_image/015/image6.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image7.bmp (renamed from devtools/create_supernova2/create_image/015/image7.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image8.bmp (renamed from devtools/create_supernova2/create_image/015/image8.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/image9.bmp (renamed from devtools/create_supernova2/create_image/015/image9.bmp) | bin | 1314 -> 1314 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/015/palette (renamed from devtools/create_supernova2/create_image/015/palette) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/015/section_info (renamed from devtools/create_supernova2/create_image/015/section_info) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/028/clickfield_info (renamed from devtools/create_supernova2/create_image/028/clickfield_info) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/028/image0.bmp (renamed from devtools/create_supernova2/create_image/028/image0.bmp) | bin | 64830 -> 64830 bytes | |||
-rw-r--r-- | devtools/create_supernova/create_image/028/palette (renamed from devtools/create_supernova2/create_image/028/palette) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/028/section_info (renamed from devtools/create_supernova2/create_image/028/section_info) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/README (renamed from devtools/create_supernova2/create_image/README) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/create_image.cpp (renamed from devtools/create_supernova2/create_image/create_image.cpp) | 0 | ||||
-rwxr-xr-x | devtools/create_supernova/create_image/create_ms2_data.015.sh (renamed from devtools/create_supernova2/create_image/create_ms2_data.015.sh) | 0 | ||||
-rwxr-xr-x | devtools/create_supernova/create_image/create_ms2_data.028.sh (renamed from devtools/create_supernova2/create_image/create_ms2_data.028.sh) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/create_image/module.mk (renamed from devtools/create_supernova2/create_image/module.mk) | 2 | ||||
-rw-r--r-- | devtools/create_supernova/create_supernova.cpp | 154 | ||||
-rw-r--r-- | devtools/create_supernova/create_supernova.h | 2 | ||||
-rw-r--r-- | devtools/create_supernova/gametext.h | 758 | ||||
-rw-r--r-- | devtools/create_supernova/module.mk | 3 | ||||
-rw-r--r-- | devtools/create_supernova/ms2.doc-en (renamed from devtools/create_supernova2/ms2.doc-en) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/ms2.inf-en (renamed from devtools/create_supernova2/ms2.inf-en) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/ms2_data.015-en (renamed from devtools/create_supernova2/ms2_data.015-en) | bin | 87123 -> 87123 bytes | |||
-rw-r--r-- | devtools/create_supernova/ms2_data.028-en (renamed from devtools/create_supernova2/ms2_data.028-en) | bin | 64744 -> 64744 bytes | |||
-rw-r--r-- | devtools/create_supernova/strings1-en.po (renamed from devtools/create_supernova/strings-en.po) | 0 | ||||
-rw-r--r-- | devtools/create_supernova/strings2-en.po (renamed from devtools/create_supernova2/strings-en.po) | 0 | ||||
-rw-r--r-- | devtools/create_supernova2/create_supernova2.cpp | 339 | ||||
-rw-r--r-- | devtools/create_supernova2/create_supernova2.h | 33 | ||||
-rw-r--r-- | devtools/create_supernova2/file.cpp | 66 | ||||
-rw-r--r-- | devtools/create_supernova2/file.h | 59 | ||||
-rw-r--r-- | devtools/create_supernova2/gametext.h | 793 | ||||
-rw-r--r-- | devtools/create_supernova2/img1-en-original.jpg | bin | 269133 -> 0 bytes | |||
-rw-r--r-- | devtools/create_supernova2/img1-en.pbm | bin | 38457 -> 0 bytes | |||
-rw-r--r-- | devtools/create_supernova2/img1-en.xcf | bin | 22946 -> 0 bytes | |||
-rw-r--r-- | devtools/create_supernova2/module.mk | 15 | ||||
-rw-r--r-- | devtools/create_supernova2/po_parser.cpp | 221 | ||||
-rw-r--r-- | devtools/create_supernova2/po_parser.h | 78 | ||||
-rw-r--r-- | engines/supernova/graphics.cpp | 92 | ||||
-rw-r--r-- | engines/supernova/screen.cpp | 12 | ||||
-rw-r--r-- | engines/supernova/screen.h | 4 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 130 | ||||
-rw-r--r-- | engines/supernova/supernova.h | 5 |
59 files changed, 1028 insertions, 1738 deletions
diff --git a/devtools/create_supernova2/create_image/015/clickfield_info b/devtools/create_supernova/create_image/015/clickfield_info index 14d95f6c83..14d95f6c83 100644 --- a/devtools/create_supernova2/create_image/015/clickfield_info +++ b/devtools/create_supernova/create_image/015/clickfield_info diff --git a/devtools/create_supernova2/create_image/015/free_tile.xcf b/devtools/create_supernova/create_image/015/free_tile.xcf Binary files differindex cae63117a5..cae63117a5 100644 --- a/devtools/create_supernova2/create_image/015/free_tile.xcf +++ b/devtools/create_supernova/create_image/015/free_tile.xcf diff --git a/devtools/create_supernova2/create_image/015/image0.bmp b/devtools/create_supernova/create_image/015/image0.bmp Binary files differindex dbe9d249c2..dbe9d249c2 100644 --- a/devtools/create_supernova2/create_image/015/image0.bmp +++ b/devtools/create_supernova/create_image/015/image0.bmp diff --git a/devtools/create_supernova2/create_image/015/image1.bmp b/devtools/create_supernova/create_image/015/image1.bmp Binary files differindex afee16bff8..afee16bff8 100644 --- a/devtools/create_supernova2/create_image/015/image1.bmp +++ b/devtools/create_supernova/create_image/015/image1.bmp diff --git a/devtools/create_supernova2/create_image/015/image10.bmp b/devtools/create_supernova/create_image/015/image10.bmp Binary files differindex b7bd16f5ee..b7bd16f5ee 100644 --- a/devtools/create_supernova2/create_image/015/image10.bmp +++ b/devtools/create_supernova/create_image/015/image10.bmp diff --git a/devtools/create_supernova2/create_image/015/image11.bmp b/devtools/create_supernova/create_image/015/image11.bmp Binary files differindex 7bc12dc3e5..7bc12dc3e5 100644 --- a/devtools/create_supernova2/create_image/015/image11.bmp +++ b/devtools/create_supernova/create_image/015/image11.bmp diff --git a/devtools/create_supernova2/create_image/015/image12.bmp b/devtools/create_supernova/create_image/015/image12.bmp Binary files differindex 27c3822321..27c3822321 100644 --- a/devtools/create_supernova2/create_image/015/image12.bmp +++ b/devtools/create_supernova/create_image/015/image12.bmp diff --git a/devtools/create_supernova2/create_image/015/image13.bmp b/devtools/create_supernova/create_image/015/image13.bmp Binary files differindex 4757b8c98b..4757b8c98b 100644 --- a/devtools/create_supernova2/create_image/015/image13.bmp +++ b/devtools/create_supernova/create_image/015/image13.bmp diff --git a/devtools/create_supernova2/create_image/015/image14.bmp b/devtools/create_supernova/create_image/015/image14.bmp Binary files differindex 1f4ac7f2d1..1f4ac7f2d1 100644 --- a/devtools/create_supernova2/create_image/015/image14.bmp +++ b/devtools/create_supernova/create_image/015/image14.bmp diff --git a/devtools/create_supernova2/create_image/015/image15.bmp b/devtools/create_supernova/create_image/015/image15.bmp Binary files differindex 784f3a175f..784f3a175f 100644 --- a/devtools/create_supernova2/create_image/015/image15.bmp +++ b/devtools/create_supernova/create_image/015/image15.bmp diff --git a/devtools/create_supernova2/create_image/015/image16.bmp b/devtools/create_supernova/create_image/015/image16.bmp Binary files differindex 1f4ac7f2d1..1f4ac7f2d1 100644 --- a/devtools/create_supernova2/create_image/015/image16.bmp +++ b/devtools/create_supernova/create_image/015/image16.bmp diff --git a/devtools/create_supernova2/create_image/015/image17.bmp b/devtools/create_supernova/create_image/015/image17.bmp Binary files differindex 01a0a9539a..01a0a9539a 100644 --- a/devtools/create_supernova2/create_image/015/image17.bmp +++ b/devtools/create_supernova/create_image/015/image17.bmp diff --git a/devtools/create_supernova2/create_image/015/image18.bmp b/devtools/create_supernova/create_image/015/image18.bmp Binary files differindex 6989ef9e94..6989ef9e94 100644 --- a/devtools/create_supernova2/create_image/015/image18.bmp +++ b/devtools/create_supernova/create_image/015/image18.bmp diff --git a/devtools/create_supernova2/create_image/015/image19.bmp b/devtools/create_supernova/create_image/015/image19.bmp Binary files differindex f5a5afdde7..f5a5afdde7 100644 --- a/devtools/create_supernova2/create_image/015/image19.bmp +++ b/devtools/create_supernova/create_image/015/image19.bmp diff --git a/devtools/create_supernova2/create_image/015/image2.bmp b/devtools/create_supernova/create_image/015/image2.bmp Binary files differindex b7bd16f5ee..b7bd16f5ee 100644 --- a/devtools/create_supernova2/create_image/015/image2.bmp +++ b/devtools/create_supernova/create_image/015/image2.bmp diff --git a/devtools/create_supernova2/create_image/015/image3.bmp b/devtools/create_supernova/create_image/015/image3.bmp Binary files differindex 2d646d9e5c..2d646d9e5c 100644 --- a/devtools/create_supernova2/create_image/015/image3.bmp +++ b/devtools/create_supernova/create_image/015/image3.bmp diff --git a/devtools/create_supernova2/create_image/015/image4.bmp b/devtools/create_supernova/create_image/015/image4.bmp Binary files differindex 77493cb6e2..77493cb6e2 100644 --- a/devtools/create_supernova2/create_image/015/image4.bmp +++ b/devtools/create_supernova/create_image/015/image4.bmp diff --git a/devtools/create_supernova2/create_image/015/image5.bmp b/devtools/create_supernova/create_image/015/image5.bmp Binary files differindex 784f3a175f..784f3a175f 100644 --- a/devtools/create_supernova2/create_image/015/image5.bmp +++ b/devtools/create_supernova/create_image/015/image5.bmp diff --git a/devtools/create_supernova2/create_image/015/image6.bmp b/devtools/create_supernova/create_image/015/image6.bmp Binary files differindex 1f4ac7f2d1..1f4ac7f2d1 100644 --- a/devtools/create_supernova2/create_image/015/image6.bmp +++ b/devtools/create_supernova/create_image/015/image6.bmp diff --git a/devtools/create_supernova2/create_image/015/image7.bmp b/devtools/create_supernova/create_image/015/image7.bmp Binary files differindex 77493cb6e2..77493cb6e2 100644 --- a/devtools/create_supernova2/create_image/015/image7.bmp +++ b/devtools/create_supernova/create_image/015/image7.bmp diff --git a/devtools/create_supernova2/create_image/015/image8.bmp b/devtools/create_supernova/create_image/015/image8.bmp Binary files differindex e8047cbed4..e8047cbed4 100644 --- a/devtools/create_supernova2/create_image/015/image8.bmp +++ b/devtools/create_supernova/create_image/015/image8.bmp diff --git a/devtools/create_supernova2/create_image/015/image9.bmp b/devtools/create_supernova/create_image/015/image9.bmp Binary files differindex 693573601b..693573601b 100644 --- a/devtools/create_supernova2/create_image/015/image9.bmp +++ b/devtools/create_supernova/create_image/015/image9.bmp diff --git a/devtools/create_supernova2/create_image/015/palette b/devtools/create_supernova/create_image/015/palette index 075b385ddb..075b385ddb 100644 --- a/devtools/create_supernova2/create_image/015/palette +++ b/devtools/create_supernova/create_image/015/palette diff --git a/devtools/create_supernova2/create_image/015/section_info b/devtools/create_supernova/create_image/015/section_info index 2000012c11..2000012c11 100644 --- a/devtools/create_supernova2/create_image/015/section_info +++ b/devtools/create_supernova/create_image/015/section_info diff --git a/devtools/create_supernova2/create_image/028/clickfield_info b/devtools/create_supernova/create_image/028/clickfield_info index 620726975b..620726975b 100644 --- a/devtools/create_supernova2/create_image/028/clickfield_info +++ b/devtools/create_supernova/create_image/028/clickfield_info diff --git a/devtools/create_supernova2/create_image/028/image0.bmp b/devtools/create_supernova/create_image/028/image0.bmp Binary files differindex 9333191bc3..9333191bc3 100644 --- a/devtools/create_supernova2/create_image/028/image0.bmp +++ b/devtools/create_supernova/create_image/028/image0.bmp diff --git a/devtools/create_supernova2/create_image/028/palette b/devtools/create_supernova/create_image/028/palette index bb77e05946..bb77e05946 100644 --- a/devtools/create_supernova2/create_image/028/palette +++ b/devtools/create_supernova/create_image/028/palette diff --git a/devtools/create_supernova2/create_image/028/section_info b/devtools/create_supernova/create_image/028/section_info index 5ced3d303f..5ced3d303f 100644 --- a/devtools/create_supernova2/create_image/028/section_info +++ b/devtools/create_supernova/create_image/028/section_info diff --git a/devtools/create_supernova2/create_image/README b/devtools/create_supernova/create_image/README index 80c898f8bf..80c898f8bf 100644 --- a/devtools/create_supernova2/create_image/README +++ b/devtools/create_supernova/create_image/README diff --git a/devtools/create_supernova2/create_image/create_image.cpp b/devtools/create_supernova/create_image/create_image.cpp index 1bf1e24f7c..1bf1e24f7c 100644 --- a/devtools/create_supernova2/create_image/create_image.cpp +++ b/devtools/create_supernova/create_image/create_image.cpp diff --git a/devtools/create_supernova2/create_image/create_ms2_data.015.sh b/devtools/create_supernova/create_image/create_ms2_data.015.sh index 883cff6046..883cff6046 100755 --- a/devtools/create_supernova2/create_image/create_ms2_data.015.sh +++ b/devtools/create_supernova/create_image/create_ms2_data.015.sh diff --git a/devtools/create_supernova2/create_image/create_ms2_data.028.sh b/devtools/create_supernova/create_image/create_ms2_data.028.sh index 66fda85204..66fda85204 100755 --- a/devtools/create_supernova2/create_image/create_ms2_data.028.sh +++ b/devtools/create_supernova/create_image/create_ms2_data.028.sh diff --git a/devtools/create_supernova2/create_image/module.mk b/devtools/create_supernova/create_image/module.mk index cb99dfed41..547b6dde18 100644 --- a/devtools/create_supernova2/create_image/module.mk +++ b/devtools/create_supernova/create_image/module.mk @@ -1,4 +1,4 @@ -MODULE := devtools/create_supernova2/create_image +MODULE := devtools/create_supernova/create_image MODULE_OBJS := create_image.o diff --git a/devtools/create_supernova/create_supernova.cpp b/devtools/create_supernova/create_supernova.cpp index 2022808303..b9571e4644 100644 --- a/devtools/create_supernova/create_supernova.cpp +++ b/devtools/create_supernova/create_supernova.cpp @@ -2,6 +2,7 @@ #include "gametext.h" #include "file.h" #include "po_parser.h" +#include <iostream> // HACK to allow building with the SDL backend on MinGW // see bug #1800764 "TOOLS: MinGW tools building broken" @@ -20,12 +21,62 @@ const char *lang[] = { NULL }; -void writeDocFile(File& outputFile, const char *fileExtension, const char* language) { +void writeDatafile(File& outputFile, int fileNumber, const char* language, int part) { + File dataFile; + char fileName[20]; + if (part == 1) + sprintf(fileName, "msn_data.%03d-%s", fileNumber, language); + if (part == 2) + sprintf(fileName, "ms2_data.%03d-%s", fileNumber, language); + if (!dataFile.open(fileName, kFileReadMode)) { + printf("Cannot find dataFile %s. This file will be skipped.\n", fileName); + return; + } + + // Write block header in output file (4 bytes). + // M(fileNumber) for example M015 + char number[4]; + sprintf(number, "%03d", fileNumber); + outputFile.writeByte('M'); + for (int i = 0 ; i < 3 ; ++i) { + outputFile.writeByte(number[i]); + } + // And write the language code on 4 bytes as well (padded with 0 if needed). + int languageLength = strlen(language); + for (int i = 0 ; i < 4 ; ++i) { + if (i < languageLength) + outputFile.writeByte(language[i]); + else + outputFile.writeByte(0); + } + + // Write block size + + dataFile.seek(0, SEEK_END); + int length = dataFile.pos(); + dataFile.seek(0, SEEK_SET); + outputFile.writeLong(length); + + // Write all the bytes. We should have w * h / 8 bytes + // However we need to invert the bits has the engine expects 1 for the background and 0 for the text (black) + // but pbm uses 0 for white and 1 for black. + for (int i = 0 ; i < length; ++i) { + byte b = dataFile.readByte(); + outputFile.writeByte(b); + } + + dataFile.close(); +} + +void writeDocFile(File& outputFile, const char *fileExtension, const char* language, int part) { File docFile; char fileName[20]; - sprintf(fileName, "msn.%s-%s", fileExtension, language); + if (part == 1) + sprintf(fileName, "msn.%s-%s", fileExtension, language); + if (part == 2) + sprintf(fileName, "ms2.%s-%s", fileExtension, language); if (!docFile.open(fileName, kFileReadMode)) { - printf("Cannot find file 'msn.%s' for language '%s'. This file will be skipped.\n", fileExtension, language); + printf("Cannot find file '%s'. This file will be skipped.\n", fileName); return; } @@ -37,7 +88,7 @@ void writeDocFile(File& outputFile, const char *fileExtension, const char* langu else outputFile.writeByte(fileExtension[i]); } - outputFile.writeByte('1'); + outputFile.writeByte((char) part + '0'); // And write the language code on 4 bytes as well (padded with 0 if needed). int languageLength = strlen(language); @@ -179,7 +230,7 @@ void writeImage(File& outputFile, const char *name, const char* language) { imgFile.close(); } -void writeGermanStrings(File& outputFile) { +void writeGermanStrings(File& outputFile, int part) { // Write header and language outputFile.write("TEXT", 4); outputFile.write("de\0\0", 4); @@ -190,7 +241,11 @@ void writeGermanStrings(File& outputFile) { outputFile.writeLong(blockSize); // Write all the strings - const char **s = &gameText[0]; + const char **s; + if (part == 1) + s = &gameText1[0]; + if (part == 2) + s = &gameText2[0]; while (*s) { outputFile.writeString(*s); blockSize += strlen(*s) + 1; @@ -203,9 +258,9 @@ void writeGermanStrings(File& outputFile) { outputFile.seek(0, SEEK_END); } -void writeStrings(File& outputFile, const char* language) { +void writeStrings(File& outputFile, const char* language, int part) { char fileName[16]; - sprintf(fileName, "strings-%s.po", language); + sprintf(fileName, "strings%d-%s.po", part, language); PoMessageList* poList = parsePoFile(fileName); if (!poList) { printf("Cannot find strings file for language '%s'.\n", language); @@ -231,7 +286,11 @@ void writeStrings(File& outputFile, const char* language) { // Write all the strings. // If a string is not translated we use the German one. - const char **s = &gameText[0]; + const char **s; + if (part == 1) + s = &gameText1[0]; + if (part == 2) + s = &gameText2[0]; while (*s) { const char* translation = poList->findTranslation(*s); if (translation) { @@ -247,10 +306,66 @@ void writeStrings(File& outputFile, const char* language) { // Now write the block size and then go back to the end of the file. outputFile.seek(blockSizePos, SEEK_SET); + outputFile.writeLong(blockSize); outputFile.seek(0, SEEK_END); } +void writeMS1(File &outputFile) { + // First part + outputFile.writeByte(1); + + // Reserve space for game block size + uint32 blockSizePos = outputFile.pos(); + uint32 blockSize = 0; + outputFile.writeLong(blockSize); + + // German strings + writeGermanStrings(outputFile, 1); + + // Other languages + const char **l = &lang[0]; + while(*l) { + writeImage(outputFile, "img1", *l); + writeImage(outputFile, "img2", *l); + writeStrings(outputFile, *l, 1); + writeDocFile(outputFile, "inf", *l, 1); + writeDocFile(outputFile, "doc", *l, 1); + ++l; + } + blockSize = outputFile.pos() - blockSizePos - 4; + outputFile.seek(blockSizePos, SEEK_SET); + outputFile.writeLong(blockSize); + outputFile.seek(0, SEEK_END); +} + +void writeMS2(File &outputFile) { + // Second part + outputFile.writeByte(2); + + // Reserve space for game block size + uint32 blockSizePos = outputFile.pos(); + uint32 blockSize = 0; + outputFile.writeLong(blockSize); + + // German strings + writeGermanStrings(outputFile, 2); + + // Other languages + const char **l = &lang[0]; + while(*l) { + writeDatafile(outputFile, 15, *l, 2); + writeDatafile(outputFile, 28, *l, 2); + writeStrings(outputFile, *l, 2); + writeDocFile(outputFile, "inf", *l, 2); + writeDocFile(outputFile, "doc", *l, 2); + ++l; + } + blockSize = outputFile.pos() - blockSizePos - 4; + outputFile.seek(blockSizePos, SEEK_SET); + outputFile.writeLong(blockSize); + outputFile.seek(0, SEEK_END); +} /** * Main method @@ -265,31 +380,24 @@ int main(int argc, char *argv[]) { // The generated file is of the form: // 3 bytes: 'MSN' // 1 byte: version + // - game blocks + // 1 byte: part (1 or 2) + // 4 bytes: game block size // -- data blocks // 4 bytes: header 'IMG1' and 'IMG2' for newspaper images (for file 1 and file 2 respectively), // 'TEXT' for strings // 4 bytes: language code ('en\0', 'de\0'- see common/language.cpp) // 4 bytes: block size n (uint32) // n bytes: data - // --- + // -- + // - // Header outputFile.write("MSN", 3); outputFile.writeByte(VERSION); - // German strings - writeGermanStrings(outputFile); - - // Other languages - const char **l = &lang[0]; - while(*l) { - writeImage(outputFile, "img1", *l); - writeImage(outputFile, "img2", *l); - writeStrings(outputFile, *l); - writeDocFile(outputFile, "inf", *l); - writeDocFile(outputFile, "doc", *l); - ++l; - } + writeMS1(outputFile); + writeMS2(outputFile); outputFile.close(); return 0; diff --git a/devtools/create_supernova/create_supernova.h b/devtools/create_supernova/create_supernova.h index 830478641a..858395caea 100644 --- a/devtools/create_supernova/create_supernova.h +++ b/devtools/create_supernova/create_supernova.h @@ -26,7 +26,7 @@ #ifndef CREATE_SUPERNOVA_H #define CREATE_SUPERNOVA_H -#define VERSION 2 +#define VERSION 3 diff --git a/devtools/create_supernova/gametext.h b/devtools/create_supernova/gametext.h index 93d9a646b2..84529b192b 100644 --- a/devtools/create_supernova/gametext.h +++ b/devtools/create_supernova/gametext.h @@ -34,7 +34,7 @@ // TODO: add the strings from the engine here, add an Id string in comment. // And in the engine add a StringId enum with all the Ids = index in this array. -const char *gameText[] = { +const char *gameText1[] = { // 0 "Gehe", // kStringCommandGo "Schau", // kStringCommandLook @@ -830,4 +830,760 @@ const char *gameText[] = { NULL }; +const char *gameText2[] = { + // 0 + "Gehe", //Go + "Schau", //Look + "Nimm", //Take + "\231ffne", //Open + "Schlie\341e", //Close + // 5 + "Dr\201cke", //Push + "Ziehe", //Pull + "Benutze", //Use + "Rede", //Talk + "Gib", //Give + // 10 + "Gehe zu ", //Go to + "Schau ", //Look at + "Nimm ", //Take + "\231ffne ", //Open + "Schlie\341e ", //Close + // 15 + "Dr\201cke ", //Push + "Ziehe ", //Pull + "Benutze ", //Use + "Rede mit ", //Talk to + "Gib ", //Give + // 20 + " an ", // to + " mit ", // with + "Es ist nichts Besonderes daran.", //There's nothing special about it. + "|", //Dialog separator + "Gespr\204ch beenden", //End of conversation + // 25 + " F1 Hilfe", // kStringHelpOverview1 + " F2 Anleitung", // kStringHelpOverview2 + " F3 Programminformationen", //kStringHelpOverview3 + " F4 Textgeschwindigkeit", //kStringHelpOverview4 + " F5 Laden/Speichern", // kStringHelpOverview5 + // 30 + " ESC Vorspann \201berspringen", // kStringHelpOverview6 + "Alt X Spiel beenden", // kStringHelpOverview7 + "Textgeschwindigkeit:", //Text speed: + "Spiel abbrechen?", //Leave game? + "Ja", //Yes + // 35 + "Nein", //No + "Laden", //Load + "Speichern", //Save + "Zur\201ck", //Back + "Neustart", //Restart + // 40 + "Schreibfehler", //write error + "Das tr\204gst du doch bei dir.", //You already carry this. + "Du bist doch schon da.", //You are already there. + "Das ist geschlossen.", //This is closed. + "Das hast du doch schon.", //You already have that. + // 45 + "Das brauchst du nicht.", //You don't need that. + "Das kannst du nicht nehmen.", //You can't take that. + "Das l\204\341t sich nicht \224ffnen.", //This cannot be opened. + "Das ist schon offen.", //This is already opened. + "Das ist verschlossen.", //This is locked. + // 50 + "Das l\204\341t sich nicht schlie\341en.", //This cannot be closed. + "Das ist schon geschlossen.", //This is already closed. + "Behalt es lieber!", //Better keep it! + "Das geht nicht.", //You can't do that. + "^(C) 1994 Thomas und Steffen Dingel#", //^(C) 1994 Thomas and Steffen Dingel# + // 55 + "Story und Grafik:^ Thomas Dingel#", //Story and Graphics:^ Thomas Dingel# + "Programmierung:^ Steffen Dingel#", //Programming:^ Steffen Dingel# + "Musik:^ Bernd Hoffmann#", //Music:^ Bernd Hoffmann# + "Getestet von ...#", //Tested by ...# + "^Das war's.#", //^That's it.# + // 60 + "^Schlu\341!#", //^Over!# + "^Ende!#", //^End!# + "^Aus!#", //^Done!# + "^Tsch\201\341!#", //^Bye!# + "Oh!", //Oh! + // 65 + "Nicht schlecht!", //Not bad! + "Supersound!", //Supersound! + "Klasse!", //Great! + "Nicht zu fassen!", //I can't believe it! + "Super, ey!", //Dope, yo! + // 70 + "Fantastisch!", //Fantastic! + "Umwerfend!", //Stunning! + "Genial!", //Brilliant! + "Spitze!", //Awesome! + "Jawoll!", //Alright! + // 75 + "Hervorragend!", //Outstanding! + "Ultragut!", //Ultra-good! + "Megacool!", //Mega cool! + "Yeah!", //Yeah! + "Ein W\204chter betritt den Raum.|Du wirst verhaftet.", //A guard enters the room.|You are getting arrested. + // 80 + "Die n\204chsten paar Jahre|verbringst du im Knast.", //You will spend the next|few years in jail. + "Es wird Alarm ausgel\224st.", //The alarm is about to be set off. + "Du h\224rst Schritte.", //You are hearing footsteps. + "Um das Schloss zu \224ffnen,|brauchst du einige Zeit.", //You will take some time,|to pick that lock. + "Du ger\204tst in Panik|und ziehst die Keycard|aus der T\201r.", //You are panicking|and remove the keycard|from the door. + // 85 + "Du hast deinen Auftrag|noch nicht ausgef\201hrt.", //You have not completed|your task yet. + "Obwohl du die Alarmanlage noch|nicht ausgeschaltet hast,|entscheidest du dich, zu fliehen.", //Although you haven't|disabled the alarm yet,|you decide to escape. + "Du entledigst dich der Einbruchswerkzeuge|und nimmst ein Taxi zum Kulturpalast.", //You get rid of your burglar tools|and take a cab to the Palace of Culture. + "Diese T\201r brauchst|du nicht zu \224ffnen.", //You don't need|to open this door. + "Uff, es hat geklappt!", //Phew, it worked! + // 90 + "Zur\201ck im Quartier der Gangster ...", //Back in the gangsters' hideout ... + "Das lief ja wie am Schn\201rchen!", //Everything went like clockwork! + "Hier, dein Anteil von 30000 Xa.", //Here, your share of 30000 Xa. + "Wo ist denn der Saurierkopf?", //Where's the dinosaur skull? + "Dazu hatte ich keine Zeit mehr.", //I didn't have enough time for that. + // 95 + "Was? Du spinnst wohl!|Dann kriegst du auch deinen|Anteil nicht. Raus!", //What? You're nuts!|Then you won't get your|share. Beat it! + "Der Sauger ist schon dort.", //The suction cup is already there. + "Du heftest den Sauger an die Wand|und h\204lst dich daran fest.", //You attach the suction cup to the wall|and hold on to it. + "Du stellst dich auf den|Boden nimmst den Sauger|wieder von der Wand", //You stand on the floor|then remove the suction cup from the wall + "Die Alarmanlage ist|schon ausgeschaltet.", //The alarm system is|already switched off. + // 100 + "Um die Anlage abzuschalten,|brauchst du einige Zeit.", //To turn off the system,|you need some time. + "Die Alarmanlage ist jetzt ausgeschaltet.", //The alarm system is now switched off. + "Saurier", //Dinosaur + "Du hast jetzt besseres zu tun,|als das Ding anzuschauen.", //You have better things to do now|than look at that thing. + "Eingang", //Entrance + // 105 + "T\201r", //Door + "Strasse zum Stadtzentrum", //Road to the city center + "Kamera", //Security camera + "Hoffentlich bemerkt dich niemand.", //Hopefully nobody will notice you. + "Haupteingang", //Main entrance + // 110 + "Gang", //Corridor + "Ziemlich gro\341.", //Quite large. + "Saurierkopf", //Dinosaur head + "Dies ist der Kopf,|den du suchst.", //This is the head|you're looking for. + "Alarmanlage", //Alarm system + // 115 + "Sauger", //Suction cup + "Wand", //Wall + "Loch", //Opening + "Buchstabe", //Letter + "Sie ist sehr massiv.", //It is very massive. + // 120 + "Hmm, X und Y, irgendwo|habe ich die Buchstaben|schon gesehen.", //Hmm, X and Y|I have seen these letters|somewhere before. + "Deine Zeit ist um, Fremder!", //Your Time is up, Stranger! + "Du hast das Seil|doch schon festgebunden.", //You already tied the rope. + "Das w\201rde wenig bringen.", //That would have little effect. + "Sonnenstich, oder was?", //Sunstroke, or what? + // 125 + "Du merkst, da\341 der Boden|unter dir nachgibt, und|springst zur Seite.", //You notice that the ground|is giving way under you,|and you leap aside. + "Puzzleteil", //Puzzle piece + "Neben diesem Stein|ist kein freies Feld.", //There's no free square|next to this stone. + "Du spielst gerade ein|Adventure, kein Rollenspiel!", //You are currently playing an|Adventure, not a Role-Playing Game! + "Du kannst das Seil|nirgends befestigen.", //There's nowhere|to attach the rope. + // 130 + "Es pa\341t nicht|zwischen die Steine.", //It does not fit|between the stones. + "Das ist doch|oben festgebunden!", //That is already|tied up above! + "Hey, das ist|mindestens 10 Meter tief!", //Hey, that is|at least 10 meters deep! + "In dem Schlitz|ist nichts mehr.", //There is nothing|left in the slot. + "Das ist mindestens 5 Meter tief!", //That is at least 5 meters deep! + // 135 + "Du versuchst, den Sarg zu|\224ffnen, aber der Deckel bewegt|sich keinen Millimeter.", //You try to open the coffin,|but the lid does not|move a millimeter. + "Du hast die Kugel schon gedr\201ckt.", //You have already|pushed the ball. + "Die Kugel bewegt sich ein St\201ck.", //The ball moves a bit. + "Herzlichen Gl\201ckwunsch!", //Congratulations! + "Sie haben das Spiel gel\224st|und gewinnen 400 Xa!", //You solved the game|and won 400 Xa! + // 140 + "Vielen Dank f\201r die Benutzung eines|VIRTUAL-REALITY-SYSTEMS-Produkts!", //Thank you for using a|VIRTUAL-REALITY-SYSTEMS product! + "N", //N + "O", //E + "S", //S + "W", //W + // 145 + "Seil", //Rope + "Schild", //Sign + "Darauf steht:|\"Willst du finden das|richtige Loch, so wage|dich in die Pyramide!\".", //It reads:|"Want to find|the right hole? Then dare|to enter the pyramid!". + "Es ist eine kleine \231ffnung.", //It is a small opening. + "Pyramide", //Pyramid + // 150 + "Komisch! Was soll eine Pyramide|bei den Axacussanern? Deine|eigenen Gedanken scheinen|den Spielverlauf zu beeinflussen.", //Weird! What is a pyramid doing|at the Axacussians? Your own thoughts seem to influence|the course of the game. + "Sonne", //Sun + "Sch\224n!", //Nice! + "\"Hallo Fremder, wenn du diesen|Raum betreten hast, bleibt|dir nur noch eine Stunde Zeit,|um deine Aufgabe zu erf\201llen!\"", //"Hello, Stranger, when you enter|this room, you have only an hour|to accomplish your task!" + "rechte Seite", //right side + // 155 + "linke Seite", //left side + "Knopf", //Button + "Schrift", //Inscription + "Tomate", //Tomato + "Komisch!", //Funny! + // 160 + "Messer", //Knife + "Es ist ein relativ stabiles Messer.", //It is a relatively sturdy knife. + "Monster", //Monster + "Es ist dick und|ungef\204hr 15 Meter lang.", //It is thick and|about 15 meters long. + "Augen", //Eyes + // 165 + "Mund", //Mouth + "Es ist nur eine Statue.", //It's just a statue. + "Zettel", //Note + "Darauf steht:|\"Wenn du fast am Ziel|bist, tu folgendes:|Sauf!\"", //It reads:|"When you're almost there,|do the following:|Drink!" + "Es ist ca. 10 Meter tief.", //It is about 10 meters deep. + // 170 + "Oben siehst du helles Licht.", //Above you is a bright light. + "Darauf steht:|\"Ruhe eine Minute im Raum|zwischen den Monstern,|und du wirst belohnt!\"", //It reads:|"Rest a minute in the room|between the monsters,|and you'll be rewarded!" + "Schlitz", //Slot + "Du kommst mit den|H\204nden nicht rein.", //You cannot get in|with your hands. + "Es ist ca. 5 Meter tief.", //It is about 5 meters deep. + // 175 + "Steine", //Stones + "Platte", //Plate + "Sarg", //Coffin + "Ausgang", //Exit + "Unheimlich!", //Creepy! + // 180 + "Zahnb\201rste", //Toothbrush + "Die Sache mit der|Artus GmbH scheint dir zu|Kopf gestiegen zu sein.", //The thing with the|Artus GmbH seems to have|gotten to your head. + "Zahnpastatube", //Toothpaste + "Kugel", //Ball + "Hmm, die Kugel sieht lose aus.", //Hmm, the ball looks loose. + // 185 + "Auge", //Eye + "Irgendwas stimmt damit nicht.", //Something is wrong with that. + "Sieht nach Metall aus.", //It looks like metal. + "Ein Taxi kommt angerauscht,|du steigst ein.", //A taxi arrives, and you get in. + "Du dr\201ckst auf den Knopf, aber nichts passiert", //You press the button, but nothing happens + // 190 + "Es ist leer.", //It is empty. + "Du findest ein kleines Ger\204t,|einen Ausweis und einen Xa.", //You find a small device,|an ID card and a Xa. + "Du heftest den|Magnet an die Stange.", //You attach the|magnet to the pole. + "Stange mit Magnet", //Pole with magnet + "Raffiniert!", //Cunning! + // 195 + "Du mu\341t das|Ger\204t erst kaufen.", //You must buy|this device first. + "Du legst den Chip|in das Ger\204t ein.", //You insert the chip|into the device. + "Du \201berspielst die CD|auf den Musikchip.", //You transfer the CD|to the Music chip. + "Ohne einen eingelegten|Musikchip kannst du auf dem|Ger\204t nichts aufnehmen.", //Without an inserted|music chip, you can not|record on the device. + "Du nimmst den Chip|aus dem Ger\204t.", //You remove the chip|from the device. + // 200 + "Es ist kein Chip eingelegt.", //There is no chip inserted. + "Wozu? Du hast sowieso nur die eine CD.", //What for? You only have one CD anyway. + "Die \"Mad Monkeys\"-CD. Du hast|sie schon tausendmal geh\224rt.", //The "Mad Monkeys" CD.|You've heard them a thousand times. + "Du h\224rst nichts.|Der Chip ist unbespielt.", //All you hear is silence.|The chip is empty. + "Du h\224rst dir den Anfang|der \201berspielten CD an.", //You are listening to the beginning|of the copied CD. + // 205 + "Es ist kein Chip einglegt.", //There is no chip inserted. + "Du trinkst etwas von den Zeug, danach|f\201hlst du dich leicht beschwipst.", //You drink some of the stuff,|then begin to feel slightly tipsy. + "%d Xa", //%d Xa + "Als du ebenfalls aussteigst haben|die anderen Passagiere das|Fluggel\204nde bereits verlassen.", //When you get off the plane|the other passengers|have already left the airport. + "Flughafen", //Airport + // 210 + "Stadtzentrum", //Downtown + "Kulturpalast", //Palace of Culture + "Erde", //Earth + "Privatwohnung", //Private apartment + "(Taxi verlassen)", //(Leave the taxi) + // 215 + "(Bezahlen)", //(Pay) + "Adresse:| ", //Address:| + "Fuddeln gilt nicht!|Zu diesem Zeitpunkt kannst du diese|Adresse noch gar nicht kennen!", //Fiddling with the system doesn't work!|At this time you can not|even know this address! + "Du hast nicht|mehr genug Geld.", //You do not|have enough money left. + "Du merkst, da\341 das Taxi stark beschleunigt.", //You notice the taxi is accelerating rapidly. + // 220 + "F\201nf Minuten sp\204ter ...", //Five minutes later ... + "Du hast doch schon eine Stange", //You already have a pole + "Du s\204gst eine der Stangen ab.", //You saw off one of the poles. + "Du betrittst das einzige|offene Gesch\204ft, das|du finden kannst.", //You enter the only|open shop that|you can find. + "Die Kabine ist besetzt.", //The cabin is occupied. + // 225 + "He, nimm erstmal das Geld|aus dem R\201ckgabeschlitz!", //Hey, take the money|from the return slot! + "Du hast doch schon bezahlt.", //You have already paid. + "Du hast nicht mehr genug Geld.", //You do not have enough money left. + "Du wirfst 10 Xa in den Schlitz.", //You put 10 Xa in the slot. + "Dir wird schwarz vor Augen.", //You are about to pass out. + // 230 + "Du ruhst dich eine Weile aus.", //You rest for a while. + "An der Wand steht:|\"Ich kenne eine tolle Geheimschrift:|A=Z, B=Y, C=X ...|0=0, 1=9, 2=8 ...\"", //On the Wall is:|"I know a great cypher:|A=Z, B=Y, C=X ...|0=0, 1=9, 2=8 ..." + "Ok, ich nehme es.", //OK, I'll take it. + "Nein danke, das ist mir zu teuer.", //No thanks, that's too expensive for me. + "Ich w\201rde gern etwas kaufen.", //I would like to buy something. + // 235 + "Ich bin's, Horst Hummel.", //It's me, Horst Hummel. + "Haben Sie auch einen Musikchip f\201r das Ger\204t?", //Do you have a music chip for the device? + "Eine tolle Maske, nicht wahr?", //It's a great mask, right? + "Komisch, da\341 sie schon drei Jahre da steht.", //Strange that it has been there for three years. + "Ein starker Trunk. Zieht ganz sch\224n rein.", //A strong drink. It hits you pretty hard. + // 240 + "Ein Abspiel- und Aufnahmeger\204t f\201r die neuen Musikchips.", //A playback and recording device for the new music chips. + "Eine ARTUS-Zahnb\201rste. Der letzte Schrei.", //An ARTUS toothbrush. The latest craze. + "Verkaufe ich massenhaft, die Dinger.", //I sell these things in bulk. + "Das sind echte Rarit\204ten. B\201cher in gebundener Form.", //These are real rarities. Books in bound form. + "Die Encyclopedia Axacussana.", //The Encyclopedia Axacussana. + // 245 + "Das gr\224\341te erh\204ltliche Lexikon auf 30 Speicherchips.", //The largest available dictionary on 30 memory chips. + "\232ber 400 Trilliarden Stichw\224rter.", //Over 400 sextillion keywords. + "Die ist nicht zu verkaufen.", //It is not for sale. + "So eine habe ich meinem Enkel zum Geburtstag geschenkt.", //I gave one to my grandson for his birthday. + "Er war begeistert von dem Ding.", //He was excited about this thing. + // 250 + "Der stammt aus einem bekannten Computerspiel.", //It comes from a well-known computer game. + "Robust, handlich und stromsparend.", //Sturdy, handy and energy-saving. + "Irgendein lasches Ges\224ff.", //Some cheap swill. + "Das sind Protestaufkleber gegen die hohen Taxigeb\201hren.", //These are stickers protesting the high taxi fees. + "Das ist Geschirr aus der neuen Umbina-Kollektion.", //These are dishes from the new Umbina-Collection. + // 255 + "H\204\341lich, nicht wahr?", //Ugly, right? + "Aber verkaufen tut sich das Zeug gut.", //But this stuff sells well. + "Das kostet %d Xa.", //That costs %d Xa. + "Schauen Sie sich ruhig um!", //Take a look around! + "Unsinn!", //Nonsense! + // 260 + "Tut mir leid, die sind|schon alle ausverkauft.", //I'm very sorry,|they are already sold out. + "Guten Abend.", //Good evening. + "Hallo.", //Hello. + "Huch, Sie haben mich aber erschreckt!", //Yikes, you scared me! + "Wieso?", //How so? + // 265 + "Ihre Verkleidung ist wirklich t\204uschend echt.", //Your disguise is deceptively real-looking. + "Welche Verkleidung?", //What disguise? + "Na, tun Sie nicht so!", //Stop pretending you don't know! + "Sie haben sich verkleidet wie der Au\341erirdische,|dieser Horst Hummel, oder wie er hei\341t.", //You disguised yourself as that extraterrestrial guy,|Horst Hummel, or whatever his name is. + "Ich BIN Horst Hummel!", //I AM Horst Hummel! + // 270 + "Geben Sie's auf!", //Give it up! + "An Ihrer Gestik merkt man, da\341 Sie|ein verkleideter Axacussaner sind.", //You can tell from your gestures that you are|a disguised Axacussan. + "Der echte Hummel bewegt sich|anders, irgendwie ruckartig.", //The real Hummel moves|differently, kind of jerky. + "Weil er ein Roboter ist! ICH bin der Echte!", //Because he is a robot! I am the real one! + "Ach, Sie spinnen ja!", //Oh, you are crazy! + // 275 + "Sie Trottel!!!", //You Idiot!!! + "Seien Sie still, oder ich werfe Sie raus!", //Shut up or I'll kick you out! + "Taschenmesser", //Pocket knife + "Hey, da ist sogar eine S\204ge dran.", //Hey, there's even a saw on it. + "20 Xa", //20 Xa + // 280 + "Discman", //Discman + "Da ist noch die \"Mad Monkeys\"-CD drin.", //The "Mad Monkeys" CD is still in there. + "Mit dem Ding sollst du dich|an der Wand festhalten.", //You should hold onto the wall|using that thing. + "Spezialkeycard", //Special keycard + "Damit sollst du die|T\201ren knacken k\224nnen.", //With that you should be able to crack the doors. + // 285 + "Alarmknacker", //Alarm cracker + "Ein kleines Ger\204t, um|die Alarmanlage auszuschalten.", //A small device|to turn off the alarm. + "Karte", //Keycard + "Raumschiff", //Spaceship + "Damit bist du hierhergekommen.", //You came here with it. + // 290 + "Fahrzeuge", //Vehicles + "Du kannst von hier aus nicht erkennen,|was das f\201r Fahrzeuge sind.", //You cannot tell from here|what those vehicles are. + "Fahrzeug", //Vehicle + "Es scheint ein Taxi zu sein.", //It seems to be a taxi. + "Komisch, er ist verschlossen.", //Funny, it is closed. + // 295 + "Portemonnaie", //Wallet + "Das mu\341 ein Axacussaner|hier verloren haben.", //This must have been|lost by an Axacussan. + "Ger\204t", //Device + "Auf dem Ger\204t steht: \"Taxi-Call\".|Es ist ein kleiner Knopf daran.", //The device says "Taxi Call."|There is a small button on it. + "Ausweis", //ID card + // 300 + "Auf dem Ausweis steht:| Berta Tschell| Axacuss City| 115AY2,96A,32", //On the card it reads: | Berta Tschell | Axacuss City | 115AY2,96A,32 + "Treppe", //Staircase + "Sie f\201hrt zu den Gesch\204ften.", //It leads to the shops. + "Gesch\204ftsstra\341e im Hintergrund", //Business street in the background + "Die Stra\341e scheint kein Ende zu haben.", //The road seems to have no end. + // 305 + "Stange", //Rod + "Pfosten", //Post + "Gel\204nder", //Railing + "Plakat", //Poster + "Musik Pur - Der Musikwettbewerb!|Heute im Kulturpalast|Hauptpreis:|Fernsehauftritt mit Horst Hummel|Sponsored by Artus GmbH", //Pure Music - The Music Competition!|Today at the Palace of Culture|Main Prize:|Television appearance with Horst Hummel|Sponsored by Artus GmbH + // 310 + "Kabine", //Cabin + "Sie ist frei!", //It is free! + "Sie ist besetzt.", //It is occupied. + "F\201\341e", //Feet + "Komisch, die|F\201\341e scheinen|erstarrt zu sein.", //Strange, the|feet seem to be frozen. + // 315 + "Haube", //Hood + "Sieht aus wie beim Fris\224r.", //Looks like the hairdresser. + "400 Xa", //400 Xa + "10 Xa", //10 Xa + "Dar\201ber steht:|\"Geldeinwurf: 10 Xa\".", //It says:|"Coins: 10 Xa". + // 320 + "Dar\201ber steht:|\"Gewinnausgabe / Geldr\201ckgabe\".", //It says:|"Prize / Money Return". + "Stuhl", //Chair + "Etwas Entspannung k\224nntest du jetzt gebrauchen.", //You could use some relaxation right about now. + "Gekritzel", //Scribble + "Gesicht", //Face + // 325 + "Nicht zu fassen! Die|W\204nde sind genauso beschmutzt|wie auf der Erde.", //Unbelievable! The walls|are just as dirty|as those on Earth. + "B\201cher", //Books + "Lexikon", //Dictionary + "Pflanze", //Plant + "Maske", //Mask + // 330 + "Schlange", //Snake + "Becher", //Cup + "Joystick", //Joystick + "Eine normale Zahnb\201rste,|es steht nur \"Artus\" darauf.", //An ordinary toothbrush.|It says "Artus" on it. + "Musikger\204t", //Music device + // 335 + "Ein Ger\204t zum Abspielen und|Aufnehmen von Musikchips.|Es ist ein Mikrofon daran.", //A device for playing and recording music chips.|There is a microphone on it. + "Flasche", //Bottle + "Auf dem Etikett steht:|\"Enth\204lt 10% Hyperalkohol\".", //The label says: "Contains 10% hyperalcohol". + "Kiste", //Box + "Verk\204ufer", //Seller + // 340 + "Was? Daf\201r wollen Sie die Karte haben?", //What? Do you want the card for that? + "Sie sind wohl nicht ganz \201ber|die aktuellen Preise informiert!", //You are probably not completely|informed about the current prices! + "Ich bin's, Horst Hummel!", //It's me, Horst Hummel! + "Sch\224nes Wetter heute!", //Nice weather today! + "K\224nnen Sie mir sagen, von wem ich eine Eintrittskarte f\201r den Musikwettbewerb kriegen kann?", //Can you tell me who can get me a ticket for the music contest? + // 345 + "Ok, hier haben Sie den Xa.", //OK, here is the Xa. + "Ich biete Ihnen 500 Xa.", //I offer you 500 Xa. + "Ich biete Ihnen 1000 Xa.", //I offer you 1000 Xa. + "Ich biete Ihnen 5000 Xa.", //I offer you 5000 Xa. + "Ich biete Ihnen 10000 Xa.", //I offer you 10000 Xa. + // 350 + "Vielen Dank f\201r Ihren Kauf!", //Thank you for your purchase! + "Was bieten Sie mir|denn nun f\201r die Karte?", //What will you offer me|for the card? + "Hallo, Sie!", //Hello to you! + "Was wollen Sie?", //What do you want? + "Wer sind Sie?", //Who are you? + // 355 + "Horst Hummel!", //Horst Hummel! + "Kenne ich nicht.", //Never heard of him. + "Was, Sie kennen den ber\201hmten Horst Hummel nicht?", //What, you don't know the famous Horst Hummel? + "Ich bin doch der, der immer im Fernsehen zu sehen ist.", //I'm the guy who is always on TV. + "Ich kenne Sie wirklich nicht.", //I really do not know you. + // 360 + "Komisch.", //Funny. + "Aha.", //Aha. + "Ja, kann ich.", //Yes, I can. + "Von wem denn?", //From whom? + "Diese Information kostet einen Xa.", //This information costs a Xa. + // 365 + "Wie Sie meinen.", //As you say. + "Sie k\224nnen die Karte von MIR bekommen!", //You can get the card from ME! + "Aber nur eine Teilnahmekarte,|keine Eintrittskarte.", //But only a participation ticket,|not an entrance ticket. + "Was wollen Sie daf\201r haben?", //What do you want for it? + "Machen Sie ein Angebot!", //Make an offer! + // 370 + "Das ist ein gutes Angebot!", //That's a good offer! + "Daf\201r gebe ich Ihnen meine|letzte Teilnahmekarte!", //For that I give you my|last participation card! + "(Dieser Trottel!)", //(That Idiot!) + "Ich w\201rde gern beim Musikwettbewerb zuschauen.", //I would like to watch the music competition. + "Ich w\201rde gern am Musikwettbewerb teilnehmen.", //I would like to participate in the music competition. + // 375 + "Wieviel Uhr haben wir?", //What time is it? + "Ja.", //Yes. + "Nein.", //No. + "Hallo, Leute!", //Hi guys! + "Hi, Fans!", //Hi, fans! + // 380 + "Gute Nacht!", //Good night! + "\216h, wie geht es euch?", //Uh, how are you? + "Sch\224nes Wetter heute.", //Nice weather today. + "Hmm ...", //Hmm ... + "Tja ...", //Well ... + // 385 + "Also ...", //So ... + "Ok, los gehts!", //OK let's go! + "Ich klimper mal was auf dem Keyboard hier.", //I'll fix something on the keyboard here. + "Halt, sie sind doch schon drangewesen!", //Stop, you have already been on it! + "He, Sie! Haben Sie|eine Eintrittskarte?", //Hey, you! Do you have|a ticket? + // 390 + "Ja nat\201rlich, hier ist meine Teilnahmekarte.", //Yes of course, here is my participation ticket. + "Sie sind Teilnehmer! Fragen|Sie bitte an der Kasse nach,|wann Sie auftreten k\224nnen.", //You are a participant!|Please ask at the checkout|when you can go on stage. + "\216h, nein.", //Uh, no. + "He, wo ist Ihr Musikchip?", //Hey, where's your music chip? + "Laber nicht!", //Stop talking! + // 395 + "Fang an!", //Get started! + "Einen Moment, ich mu\341 erstmal \201berlegen, was ich|euch spiele.", //One moment, I have to think about what I'm playing for you. + "Anfangen!!!", //Begin!!! + "Nun denn ...", //Well then ... + "Raus!", //Out! + // 400 + "Buh!", //Boo! + "Aufh\224ren!", //Stop! + "Hilfe!", //Help! + "Ich verziehe mich lieber.", //I'd prefer to get lost. + "Mist, auf dem Chip war|gar keine Musik drauf.", //Damn, there was no music on the chip at all. + // 405 + "Das ging ja voll daneben!", //That went completely wrong! + "Du n\204herst dich der B\201hne,|aber dir wird mulmig zumute.", //You approach the stage,|but you feel queasy. + "Du traust dich nicht, vor|so vielen Menschen aufzutreten|und kehrst wieder um.", //You do not dare to appear|in front of so many people|and turn around. + "Oh, Sie sind Teilnehmer!|Dann sind Sie aber sp\204t dran.", //Oh, you are a participant!|But you are late. + "Spielen Sie die Musik live?", //Do you play the music live? + // 410 + "Dann geben Sie bitte Ihren Musikchip ab!|Er wird bei Ihrem Auftritt abgespielt.", //Then please submit your music chip!|It will be played during your performance. + "Oh, Sie sind sofort an der Reihe!|Beeilen Sie sich! Der B\201hneneingang|ist hinter dem Haupteingang rechts.", //Oh, it's your turn!|Hurry! The stage entrance|is to the right behind the main entrance. + "Habe ich noch einen zweiten Versuch?", //Can I have another try? + "Nein!", //No! + "Haben Sie schon eine Eintrittskarte?", //Do you already have a ticket? + // 415 + "Tut mir leid, die Karten|sind schon alle ausverkauft.", //I'm sorry, the tickets|are already sold out. + "Mist!", //Crap! + "Haben Sie schon eine Teilnahmekarte?", //Do you already have a participation ticket? + "Ja, hier ist sie.", //Yes, here it is. + "Tut mir leid, die Teilnahmekarten|sind schon alle ausverkauft.", //I'm sorry, the participation tickets|are already sold out. + // 420 + "Schei\341e!", //Crap! + "Das kann ich Ihnen|leider nicht sagen.", //I can not tell you that. + "Wo ist denn nun Ihr Musikchip?", //Where is your music chip? + "Jetzt beeilen Sie sich doch!", //Now hurry up! + "Huch, Sie sind hier bei einem Musik-,|nicht bei einem Imitationswettbewerb", //Huh, you're here at a music contest,|not at an imitation contest + // 425 + "Imitationswettbewerb?|Ich will niemanden imitieren.", //Imitation contest?|I do not want to imitate anyone. + "Guter Witz, wieso sehen Sie|dann aus wie Horst Hummel?", //Good joke. Then why do you look like Horst Hummel? + "Na, nun h\224ren Sie auf! So perfekt ist|ihre Verkleidung auch wieder nicht.", //Oh come on! Your disguise isn't that perfect. + "Ich werde Ihnen beweisen, da\341 ich Horst Hummel bin,|indem ich diesen Wettbewerb hier gewinne.", //I will prove to you that I am Horst Hummel|by winning this competition. + "Dann kann ich in dieser verdammten Fernsehshow|auftreten.", //Then I can perform in this|damn TV show. + // 430 + "Du hampelst ein bi\341chen zu|der Musik vom Chip herum.|Die Leute sind begeistert!", //You're rocking a little bit|to the music from the chip.|The audience is excited! + "Guten Abend. Diesmal haben wir|einen besonderen Gast bei uns.", //Good evening. This time we have|a special guest with us. + "Es ist der Gewinner des gestrigen|Musikwettbewerbs im Kulturpalast,|der dort vor allem durch seine|Verkleidung aufgefallen war.", //He is the winner of yesterday's music competition in the Palace of Culture.|He was particularly noteworthy|because of his disguise. + "Sie haben das Wort!", //You have the floor! + "Nun ja, meine erste Frage lautet: ...", //Well, my first question is ... + // 435 + "Warum haben Sie sich sofort nach|Ihrer Landung entschlossen, f\201r|die Artus-GmbH zu arbeiten?", //Why did you decide immediately|after your arrival to work for|Artus GmbH? + "Es war meine freie Entscheidung.|Die Artus-GmbH hat mir einfach gefallen.", //It was a decision I made on my own.|I just decided I liked Artus-GmbH. + "Wieso betonen Sie, da\341 es|Ihre freie Entscheidung war?|Haben Sie Angst, da\341 man Ihnen|nicht glaubt?", //Why do you stress that|it was your own decision?|Are you afraid that nobody will believe you otherwise? + "Also, ich mu\341 doch sehr bitten!|Was soll diese unsinnige Frage?", //How dare you!|What is with this nonsensical question? + "Ich finde die Frage wichtig.|Nun, Herr Hummel, was haben|Sie dazu zu sagen?", //I think the question is important.|Well, Mr. Hummel, what do you have to say? + // 440 + "Auf solch eine Frage brauche|ich nicht zu antworten!", //I don't feel that I have|to answer such a question! + "Gut, dann etwas anderes ...", //Alright, something else then ... + "Sie sind von Beruf Koch.|Wie hie\341 das Restaurant,|in dem Sie auf der Erde|gearbeitet haben?", //You are a chef by profession.|What was the name of the restaurant|where you worked|on Earth? + "Hmm, da\341 wei\341 ich nicht mehr.", //Hmm, I do not remember that. + "Sie wollen mir doch nicht weismachen,|da\341 Sie den Namen vergessen haben!", //Do you really expect me to believe you cannot remember the name? + // 445 + "Schlie\341lich haben Sie|zehn Jahre dort gearbeitet!", //After all, you worked there for ten years! + "Woher wollen Sie das wissen?", //How do you know that? + "Nun, ich komme von der Erde,|im Gegensatz zu Ihnen!", //Well, I come from Earth,|unlike you! + "Langsam gehen Sie zu weit!", //Now you've gone too far! + "Sie sind ein Roboter!|Das merkt man schon an|Ihrer dummen Antwort!|Sie sind nicht optimal|programmiert!", //You are a robot!|It is obvious from|your stupid answer!|You are not even programmed|correctly! + // 450 + "Wenn Sie jetzt nicht mit Ihren|Beleidigungen aufh\224ren, mu\341 ich|Ihnen das Mikrofon abschalten!", //If you do not stop right now|with your insults, I will have|to turn off the microphone! + "Ich bin der echte Horst Hummel,|und hier ist der Beweis!", //I am the real Horst Hummel,|and here is the proof! + "Am n\204chsten Morgen sind alle|Zeitungen voll mit deiner spektakul\204ren|Enth\201llung des Schwindels.", //The next morning, all the papers|are full of your spectacular|revelation of fraud. + "Die Manager der Artus-GmbH und Commander|Sumoti wurden sofort verhaftet.", //The managers of Artus-GmbH and Commander|Sumoti were arrested immediately. + "Nach dem Stre\341 der letzten Tage,|entscheidest du dich, auf die|Erde zur\201ckzukehren.", //After these stressful last few days|you decide to return to Earth. + // 455 + "W\204hrend du dich vor Interviews|kaum noch retten kannst, ...", //While you can barely save|yourself from interviews, ... + "... arbeiten die Axacussanischen|Techniker an einem Raumschiff,|das dich zur Erde zur\201ckbringen soll.", //... the Axacussan|technicians are working on a spaceship|to bring you back to Earth. + "Eine Woche sp\204ter ist der|Tag des Starts gekommen.", //One week later, the day of the launch has arrived. + "Zum dritten Mal in deinem|Leben verbringst du eine lange|Zeit im Tiefschlaf.", //For the third time in your life,|you spend a long time|in deep sleep. + "Zehn Jahre sp\204ter ...", //Ten years later ... + // 460 + "Du wachst auf und beginnst,|dich schwach an deine|Erlebnisse zu erinnern.", //You wake up and begin|to faintly remember|your experiences. + "Um dich herum ist alles dunkel.", //Everything is dark around you. + "Sie zeigt %d an.", //It displays %d. + "Ich interessiere mich f\201r den Job, bei dem man \201ber Nacht", //I'm interested in the job where you can get + "reich werden kann.", //rich overnight. + // 465 + "Ich verkaufe frische Tomaten.", //I sell fresh tomatoes. + "Ich bin der Klempner. Ich soll hier ein Rohr reparieren.", //I am the plumber. I'm supposed to fix a pipe here. + "Ja, h\224rt sich gut an.", //Yes, it sounds good. + "Krumme Gesch\204fte? F\201r wen halten Sie mich? Auf Wiedersehen!", //Crooked business? Who do you think I am? Goodbye! + "\216h - k\224nnten Sie mir das Ganze nochmal erkl\204ren?", //Uh - could you explain that to me again? + // 470 + "Wie gro\341 ist mein Anteil?", //How big is my share? + "Machen Sie es immer so, da\341 Sie Ihre Komplizen \201ber ein Graffitti anwerben?", //Do you always use graffiti to recruit your accomplices? + "Hmm, Moment mal, ich frage den Boss.", //Hmm wait, I will ask the boss. + "Kurze Zeit sp\204ter ...", //A short while later ... + "Ok, der Boss will dich sprechen.", //OK, the boss wants to talk to you. + // 475 + "Du betrittst die Wohnung und|wirst zu einem Tisch gef\201hrt.", //You enter the apartment and are led to a table. + "Hmm, du willst dir also|etwas Geld verdienen?", //Hmm, so you want to earn some money? + "Nun ja, wir planen|einen n\204chtlichen Besuch|eines bekannten Museums.", //Well, we're planning|a nightly visit|to a well-known museum. + "Wie sieht's aus, bist du interessiert?", //So, are you interested? + "Halt, warte!", //Stop, wait! + // 480 + "\232berleg's dir, es springen|30000 Xa f\201r dich raus!", //Think about it, your share would be|30000 Xa! + "30000?! Ok, ich mache mit.", //30000?! Alright, count me in. + "Gut, dann zu den Einzelheiten.", //Good, now then to the details. + "Bei dem Museum handelt es|sich um das Orzeng-Museum.", //The museum in question is|the Orzeng Museum. + "Es enth\204lt die wertvollsten|Dinosaurierfunde von ganz Axacuss.", //It contains the most valuable|dinosaur discoveries of Axacuss. + // 485 + "Wir haben es auf das Sodo-Skelett|abgesehen. Es ist weltber\201hmt.", //We're aiming to get the Sodo skeleton.|It is world-famous. + "Alle bekannten Pal\204ontologen haben|sich schon damit besch\204ftigt.", //All known paleontologists|have already dealt with it. + "Der Grund daf\201r ist, da\341 es allen|bis jetzt bekannten Erkenntnissen|\232ber die Evolution widerspricht.", //The reason for this is that it contradicts all known|knowledge about evolution. + "Irgendein verr\201ckter Forscher|bietet uns 200.000 Xa,|wenn wir ihm das Ding beschaffen.", //Some crazy researcher|will give us 200,000 Xa|if we retrieve that thing for him. + "So, jetzt zu deiner Aufgabe:", //So, now to your task: + // 490 + "Du dringst durch den Nebeneingang|in das Geb\204ude ein.", //You enter the building through|the side entrance. + "Dort schaltest du die Alarmanlage aus,|durch die das Sodo-Skelett gesichert wird.", //There you switch off the alarm system,|which secures the Sodo skeleton. + "Wir betreten einen anderen Geb\204udeteil|und holen uns das Gerippe.", //We'll enter another part of the building|and fetch the skeleton. + "Deine Aufgabe ist nicht leicht.|Schau dir diesen Plan an.", //Your task is not easy.|Look at this plan. + "Unten siehst du die kleine Abstellkammer,|durch die du in die Austellungsr\204ume kommst.", //Below you can see the small storage room,|through which you come to the showrooms. + // 495 + "Bei der mit Y gekennzeichneten|Stelle ist die Alarmanlage.", //The alarm system is at the location marked Y. + "Bei dem X steht ein gro\341er Dinosaurier|mit einem wertvollen Sch\204del.|Den Sch\204del nimmst du mit.", //The X marks the spot with a big dinosaur|with a valuable skull.|You will take the skull with you. + "Nun zu den Problemen:", //Now for the problems: + "Die wei\341 gekennzeichneten|T\201ren sind verschlossen.", //The marked white doors|are locked. + "Sie m\201ssen mit einer Spezialkeycard ge\224ffnet|werden, was jedoch einige Zeit dauert.", //They have to be opened with a special keycard,|which can take a while. + // 500 + "Au\341erdem gibt es in den auf der Karte|farbigen R\204umen einen Druck-Alarm.", //In addition, there are pressure alarms|in the rooms which are colored on the map. + "Du darfst dich dort nicht l\204nger|als 16 bzw. 8 Sekunden aufhalten,|sonst wird Alarm ausgel\224st.", //You can not stay there longer than|16 or 8 seconds,|or the alarm will go off. + "Im Raum oben rechts ist|eine Kamera installiert.", //In the room at the top right|there is a camera installed. + "Diese wird jedoch nur von|der 21. bis zur 40. Sekunde|einer Minute \201berwacht.", //However, it is only monitored|between the 21st and the 40th second|of every minute. + "Das gr\224\341te Problem ist der W\204chter.", //The biggest problem is the guard. + // 505 + "Er braucht f\201r seine Runde genau|eine Minute, ist also ungef\204hr|zehn Sekunden in einem Raum.", //He needs exactly one minute for his round,|so he is in each room|for about ten seconds. + "Du m\201\341test seine Schritte h\224ren k\224nnen,|wenn du in der Abstellkammer bist|und der W\204chter dort vorbeikommt.", //You should be able to hear his footsteps|if you are in the closet|and the guard passes by. + "Wenn du es bis zur Alarmanlage|geschafft hast, h\204ngst du dich|mit dem Sauger an die Wand,|damit du keinen Druck-Alarm ausl\224st.", //If you make it to the alarm system,|you'll use the sucker to hang on the wall|to avoid triggering the pressure alarm. + "Die Alarmanlage schaltest du|mit einem speziellen Ger\204t aus.", //You switch off the alarm system|with a special device. + "Wenn du das geschafft hast, nichts|wie raus! Aber keine Panik,|du darfst keinen Alarm ausl\224sen.", //Once you're done, get out of there!|But do not panic!|You must not set off the alarm. + // 510 + "So, noch irgendwelche Fragen?", //So, any more questions? + "Also gut.", //All right then. + "Du bekommst 30000 Xa.", //You get 30,000 Xa. + "Ja, die Methode hat sich bew\204hrt.", //Yes, that method has proven itself worthy. + "Hast du sonst noch Fragen?", //Do you have any questions? + // 515 + "Nachdem wir alles gekl\204rt|haben, kann es ja losgehen!", //Now that we are on the same page we can get started! + "Zur vereinbarten Zeit ...", //At the agreed upon time ... + "Du stehst vor dem Orzeng Museum,|w\204hrend die Gangster schon in einen|anderen Geb\204uderteil eingedrungen sind.", //You stand in front of the Orzeng Museum,|while the gangsters have already penetrated|into another part of the building. + "Wichtiger Hinweis:|Hier ist die letzte M\224glichkeit,|vor dem Einbruch abzuspeichern.", //Important note:|Here is the last possibility to save|before the break-in. + "Wenn Sie das Museum betreten haben,|k\224nnen Sie nicht mehr speichern!", //Once you enter the museum|you will not be able to save! + // 520 + "Stecken Sie sich Ihre|Tomaten an den Hut!", //You can keep your tomatoes! + "Das kann ja jeder sagen!", //Anyone can say that! + "Niemand \224ffnet.", //Nobody answers. + "Welche Zahl willst du eingeben: ", //What number do you want to enter: + "Falsche Eingabe", //Invalid input + // 525 + "Der Aufzug bewegt sich.", //The elevator is moving. + "Die Karte wird|nicht angenommen.", //The card|is not accepted. + "Da ist nichts mehr.", //There is nothing left. + "Da ist ein Schl\201ssel unter dem Bett!", //There's a key under the bed! + "Hey, da ist etwas unter dem|Bett. Nach dem Ger\204usch zu|urteilen, ist es aus Metall.", //Hey, there is something under the|bed. Judging by the noise,|it is made of metal. + // 530 + "Mist, es gelingt dir nicht,|den Gegenstand hervorzuholen.", //Damn, you do not succeed in getting the object out. + "Die Klappe ist schon offen.", //The flap is already open. + "Der Schl\201sssel pa\341t nicht.", //The key does not fit. + "Du steckst den Chip in die|Anlage, aber es passiert nichts.|Die Anlage scheint kaputt zu sein.", //You put the chip in the stereo,|but nothing happens.|The stereo seems to be broken. + "Es passiert nichts. Das Ding|scheint kaputt zu sein.", //Nothing happens. The thing|seems to be broken. + // 535 + "Hochspannung ist ungesund, wie du aus|Teil 1 eigentlich wissen m\201\341test!", //High voltage is unhealthy, as you|should already know|from Part 1! + "Es h\204ngt ein Kabel heraus.", //A cable hangs out. + "Irgendetwas hat hier|nicht ganz funktioniert.", //Something did not|quite work out here. + "Du ziehst den Raumanzug an.", //You put on your space suit. + "Du ziehst den Raumanzug aus.", //You take off your space suit. + // 540 + "Das ist schon verbunden.", //That is already connected. + "Die Leitung ist hier|schon ganz richtig.", //The cable is already|at the right place. + "Roger W.! Wie kommen Sie denn hierher?", //Roger W.! How did you get here? + "Ach, sieh mal einer an! Sie schon wieder!", //Oh, look at that! It's you again! + "Wo haben Sie denn|Ihr Schiff gelassen?", //Where did you|leave your ship? + // 545 + "Schauen Sie mal hinter mich auf|den Turm! Da oben h\204ngt es.", //Take a look behind me, up on|the tower! It's up there. + "Ich hatte es scheinbar etwas zu|eilig, aber ich mu\341te unbedingt|zu den Dreharbeiten nach Xenon!", //Apparently I was too much in a hurry,|but I had to be at the film shooting in Xenon! + "Mich wundert, da\341 es die Leute|hier so gelassen nehmen.", //I am surprised that people|here take things so calmly. + "Die tun gerade so, als ob der Turm|schon immer so schr\204g gestanden h\204tte!", //They are pretending that the tower|has always been that slanted! + "Hat er auch, schon seit|mehreren Jahrhunderten!", //It has, for|several centuries, actually! + // 550 + "\216h ... ach so. Und von wo|kommen Sie? Sie hatten's ja|wohl auch ziemlich eilig.", //Uh ... I see. And where are you coming from? It seems you were in quite a hurry as well. + "Ich komme von Axacuss.", //I come from Axacuss. + "Hmm, was mach ich jetzt blo\341?", //Hmm, what am I going to do now? + "Ich kenne ein gutes Cafe nicht|weit von hier, da k\224nnen|wir uns erstmal erholen.", //I know a good cafe not far from here,|where we can get some rest. + "Ok, einverstanden.", //OK, I agree. + // 555 + "Faszinierend!", //Fascinating! + "Taxis", //Taxis + "Hier ist ja richtig was los!", //There seems to be something really going on here! + "Axacussaner", //Axacussan + "Teilnahmekarte", //Participation card + // 560 + "Axacussanerin", //Axacussian + "Darauf steht:|\"115AY2,96A\"", //It reads:|"115AY2,96A" + "Darauf steht:|\"115AY2,96B\"", //It reads:|"115AY2,96B" + "Darauf steht:|\"341,105A\"", //It reads:|"341,105A" + "Darauf steht:|\"341,105B\"", //It reads:|"341,105B" + // 565 + "Klingel", //Bell + "Anzeige", //Display + "Tastenblock", //Keypad + "Es sind Tasten von 0 bis 9 darauf.", //There are keys from 0 to 9 on it. + "Chip", //Chip + // 570 + "Es ist ein Musikchip!", //It's a music chip! + "Klappe", //Hatch + "Sie ist mit einem altmodischen|Schlo\341 verschlossen.", //It is secured with an old-fashioned lock. + "Musikanlage", //Music system + "Toll, eine in die Wand|integrierte Stereoanlage.", //Great, a built-in stereo|in the wall. + // 575 + "Boxen", //Speakers + "Ganz normale Boxen.", //Ordinary speakers. + "Stifte", //Pencils + "Ganz normale Stifte.", //Ordinary pencils. + "Metallkl\224tzchen", //Metal blocks + // 580 + "Es ist magnetisch.", //It is magnetic. + "Bild", //Image + "Ein ungew\224hnliches Bild.", //An unusual picture. + "Schrank", //Cabinet + "Er ist verschlossen", //It is closed + // 585 + "Aufzug", //Elevator + "unter Bett", //under bed + "Unter dem Bett sind bestimmt wichtige|Dinge zu finden, nur kommst du nicht darunter.|Du br\204uchtest einen Stock oder so etwas.", //Under the bed are certainly important|things to find, only you cannot reach underneath.|You need a stick or something. + "Schl\201ssel", //Key + "Ein kleiner Metallschl\201ssel.", //A small metal key. + // 590 + "Schalter", //Switch + "Griff", //Handle + "Luke", //Hatch + "Raumanzug", //Space suit + "Ein zusammenfaltbarer Raumanzug.", //A collapsible spacesuit. + // 595 + "Leitung", //Cable + "Irgendetwas scheint hier|kaputtgegangen zu sein.", //Something seems to|have broken here. + "Sie h\204ngt lose von der Decke runter.", //It hangs loose from the ceiling. + "Zur Erinnerung:|Dir ist es gelungen, aus den|Artus-Geheimb\201ros zu fliehen.", //Reminder:|You managed to escape from the|Artus-GmbH secret offices. + "Nun befindest du dich in|einem Passagierraumschiff,|das nach Axacuss City fliegt.", //Now you are in a passenger|spaceship that|flies to Axacuss City. + // 600 + "W\204hrend des Fluges schaust du dir|das axacussanische Fernsehprogramm an.|Du st\224\341t auf etwas Interessantes ...", //During the flight, you watch the|Axacussan TV program.|You come across something interesting ... + "Herzlich willkommen!", //Welcome! + "Heute zu Gast ist Alga Lorch.|Sie wird Fragen an den Erdling|Horst Hummel stellen.", //Alga Lorch will be present today.|She will ask questions to the Earthling|Horst Hummel. + "Horst wird alle Fragen|beantworten, soweit es|ihm m\224glich ist.", //Horst will answer all|questions as fully|as possible. + "Sie haben das Wort, Frau Lorch!", //You have the floor, Mrs Lorch! + // 605 + "Herr Hummel, hier ist meine erste Frage: ...", //Mr. Hummel, here is my first question: ... + "Sie sind nun ein ber\201hmter Mann auf Axacuss.|Aber sicher vermissen Sie auch Ihren Heimatplaneten.", //You are now a famous man on Axacuss.|But surely you miss your home planet. + "Wenn Sie w\204hlen k\224nnten, w\201rden Sie lieber|ein normales Leben auf der Erde f\201hren,|oder finden Sie das Leben hier gut?", //If you could choose, would you prefer|to lead a normal life on Earth,|or do you find life here good? + "Ehrlich gesagt finde ich es sch\224n,|ber\201hmt zu sein. Das Leben ist|aufregender als auf der Erde.", //Honestly, I think it's nice to be|famous. Life is more exciting here|than on Earth. + "Au\341erdem sind die Leute von der|Artus GmbH hervorragende Freunde.", //In addition, the people of|Artus GmbH are excellent friends. + // 610 + "Nun ja, planen Sie denn trotzdem,|irgendwann auf die Erde zur\201ckzukehren?", //Well, are you still planning|to return to Earth someday? + "Das kann ich Ihnen zum jetzigen|Zeitpunkt noch nicht genau sagen.", //At this point in time,|I haven't made up my mind, yet. + "Aber ich versichere Ihnen, ich|werde noch eine Weile hierbleiben.", //But I assure you,|I will stay here for a while. + "Aha, mich interessiert au\341erdem,|ob es hier auf Axacuss etwas gibt,|das Sie besonders m\224gen.", //I see. I'm also interested in|whether there's anything here on Axacuss that you particularly like. + "Oh mir gef\204llt der ganze Planet,|aber das Beste hier sind die|hervorragenden Artus-Zahnb\201rsten!", //Oh I like the whole planet,|but the best thing here are the|extraordinary Artus toothbrushes! + // 615 + "Zahnb\201rsten von solcher Qualit\204t|gab es auf der Erde nicht.", //Toothbrushes of such quality|do not exist on Earth. + "\216h, ach so.", //Um, I see. + "Pl\224tzlich lenkt dich eine|Lautsprecherstimme vom Fernseher ab.", //Suddenly, a speaker's voice|distracts you from the television. + "\"Sehr geehrte Damen und Herren,|wir sind soeben auf dem Flughafen|von Axacuss City gelandet.\"", //"Ladies and Gentlemen,|We just landed at the airport|at Axacuss City." + "\"Ich hoffe, Sie hatten einen angenehmen Flug.|Bitte verlassen Sie das Raumschiff! Auf Wiedersehen!\"", //"I hope you had a nice flight.|Please leave the spaceship! Goodbye!" + // 620 + "W\204hrend die anderen Passagiere|aussteigen, versuchst du,|den Schock zu verarbeiten.", //While the other passengers|are disembarking, you are trying|to handle the shock. + "\"Ich mu\341 beweisen, da\341 dieser|Roboter der falsche Horst|Hummel ist!\", denkst du.", //"I have to prove that this robot|is the wrong Horst|Hummel!", you think to yourself. + "\"Diese Mistkerle von der Artus GmbH und|Commander Sumoti m\201ssen entlarvt werden!\"", //"These bastards from Artus GmbH and|Commander Sumoti must be unmasked!" + "Sieht gef\204hrlich aus!", //Looks dangerous + "Das Auge ist schon offen.", //This Eye is already opened + // 625 + "Es gelingt dir, zu fliehen.", //You manage to escape + NULL +}; + #endif // GAMETEXT_H diff --git a/devtools/create_supernova/module.mk b/devtools/create_supernova/module.mk index 806cccadaa..92af416807 100644 --- a/devtools/create_supernova/module.mk +++ b/devtools/create_supernova/module.mk @@ -10,3 +10,6 @@ TOOL_EXECUTABLE := create_supernova # Include common rules include $(srcdir)/rules.mk + +include $(srcdir)/devtools/create_supernova2/create_image/module.mk +.PHONY: $(srcdir)/devtools/create_supernova2/create_image/module.mk diff --git a/devtools/create_supernova2/ms2.doc-en b/devtools/create_supernova/ms2.doc-en index da6df8c4ed..da6df8c4ed 100644 --- a/devtools/create_supernova2/ms2.doc-en +++ b/devtools/create_supernova/ms2.doc-en diff --git a/devtools/create_supernova2/ms2.inf-en b/devtools/create_supernova/ms2.inf-en index ed3da5067c..ed3da5067c 100644 --- a/devtools/create_supernova2/ms2.inf-en +++ b/devtools/create_supernova/ms2.inf-en diff --git a/devtools/create_supernova2/ms2_data.015-en b/devtools/create_supernova/ms2_data.015-en Binary files differindex 20ab5307db..20ab5307db 100644 --- a/devtools/create_supernova2/ms2_data.015-en +++ b/devtools/create_supernova/ms2_data.015-en diff --git a/devtools/create_supernova2/ms2_data.028-en b/devtools/create_supernova/ms2_data.028-en Binary files differindex 88ab4c8ec1..88ab4c8ec1 100644 --- a/devtools/create_supernova2/ms2_data.028-en +++ b/devtools/create_supernova/ms2_data.028-en diff --git a/devtools/create_supernova/strings-en.po b/devtools/create_supernova/strings1-en.po index 1d0328982a..1d0328982a 100644 --- a/devtools/create_supernova/strings-en.po +++ b/devtools/create_supernova/strings1-en.po diff --git a/devtools/create_supernova2/strings-en.po b/devtools/create_supernova/strings2-en.po index d4e58c68fd..d4e58c68fd 100644 --- a/devtools/create_supernova2/strings-en.po +++ b/devtools/create_supernova/strings2-en.po diff --git a/devtools/create_supernova2/create_supernova2.cpp b/devtools/create_supernova2/create_supernova2.cpp deleted file mode 100644 index a6399b99cc..0000000000 --- a/devtools/create_supernova2/create_supernova2.cpp +++ /dev/null @@ -1,339 +0,0 @@ -#include "create_supernova2.h" -#include "gametext.h" -#include "file.h" -#include "po_parser.h" - -// HACK to allow building with the SDL backend on MinGW -// see bug #1800764 "TOOLS: MinGW tools building broken" -#ifdef main -#undef main -#endif // main - -// List of languages to look for. To add new languages you only need to change the array below -// and add the supporting files: -// - 640x480 bitmap picture for the newpaper named 'img1-##.pbm' and 'img2-##.pbm' -// in pbm binary format (you can use gimp to generate those) -// - strings in a po file named 'strings-##.po' that uses CP850 encoding - -const char *lang[] = { - "en", - NULL -}; - -void writeDocFile(File& outputFile, const char *fileExtension, const char* language) { - File docFile; - char fileName[20]; - sprintf(fileName, "ms2.%s-%s", fileExtension, language); - if (!docFile.open(fileName, kFileReadMode)) { - printf("Cannot find file 'ms2.%s' for language '%s'. This file will be skipped.\n", fileExtension, language); - return; - } - - // Write block header in output file (4 bytes). - // We convert the file extension to upper case. - for (int i = 0 ; i < 3 ; ++i) { - if (fileExtension[i] >= 97 && fileExtension[i] <= 122) - outputFile.writeByte(fileExtension[i] - 32); - else - outputFile.writeByte(fileExtension[i]); - } - outputFile.writeByte('2'); - - // And write the language code on 4 bytes as well (padded with 0 if needed). - int languageLength = strlen(language); - for (int i = 0 ; i < 4 ; ++i) { - if (i < languageLength) - outputFile.writeByte(language[i]); - else - outputFile.writeByte(0); - } - - // Write block size - - docFile.seek(0, SEEK_END); - int length = docFile.pos(); - docFile.seek(0, SEEK_SET); - outputFile.writeLong(length); - - // Write all the bytes. - for (int i = 0 ; i < length; ++i) { - byte b = docFile.readByte(); - outputFile.writeByte(b); - } - - docFile.close(); -} - -void writeDatafile(File& outputFile, int fileNumber, const char* language) { - File dataFile; - char fileName[20]; - sprintf(fileName, "ms2_data.%03d-%s", fileNumber, language); - if (!dataFile.open(fileName, kFileReadMode)) { - printf("Cannot find dataFile 'ms2_data.%3d' for language '%s'. This file will be skipped.\n", fileNumber, language); - return; - } - - // Write block header in output file (4 bytes). - // M(fileNumber) for example M015 - char number[4]; - sprintf(number, "%03d", fileNumber); - outputFile.writeByte('M'); - for (int i = 0 ; i < 3 ; ++i) { - outputFile.writeByte(number[i]); - } - // And write the language code on 4 bytes as well (padded with 0 if needed). - int languageLength = strlen(language); - for (int i = 0 ; i < 4 ; ++i) { - if (i < languageLength) - outputFile.writeByte(language[i]); - else - outputFile.writeByte(0); - } - - // Write block size - - dataFile.seek(0, SEEK_END); - int length = dataFile.pos(); - dataFile.seek(0, SEEK_SET); - outputFile.writeLong(length); - - // Write all the bytes. We should have w * h / 8 bytes - // However we need to invert the bits has the engine expects 1 for the background and 0 for the text (black) - // but pbm uses 0 for white and 1 for black. - for (int i = 0 ; i < length; ++i) { - byte b = dataFile.readByte(); - outputFile.writeByte(b); - } - - dataFile.close(); -} - -void writeImage(File& outputFile, const char *name, const char* language) { - File imgFile; - char fileName[16]; - sprintf(fileName, "%s-%s.pbm", name, language); - if (!imgFile.open(fileName, kFileReadMode)) { - printf("Cannot find image '%s' for language '%s'. This image will be skipped.\n", name, language); - return; - } - - char str[256]; - - // Read header (and check we have a binary PBM file) - // See http://netpbm.sourceforge.net/doc/pbm.html - // Header is in the form: - // - A "magic number" for identifying the file type ("P4" for binary pdm) - // - Whitespace (blanks, TABs, CRs, LFs). - // - The width in pixels of the image, formatted as ASCII characters in decimal. - // - Whitespace. - // - The height in pixels of the image, again in ASCII decimal. - // - A single whitespace character (usually a newline). - // - The raster data. - // Before the whitespace character that delimits the raster, any characters from a "#" - // through the next carriage return or newline character, is a comment and is ignored. - // Note that the comment can starts in the middle of a line. Note also that if you have - // a comment right before the raster, the newline at the end of the comment is not - // sufficient to delimit the raster. - - int w = 0, h = 0; - enum PbmState { PbmMagic, PbmWidth, PbmHeight}; - PbmState state = PbmMagic; - int i = 0; - do { - char c = (char)imgFile.readByte(); - if (c == '#') { - do { - c = (char)imgFile.readByte(); - } while (c != '\r' && c != '\n' && !imgFile.eof()); - // If the comment is after the height, we need to read one more character - // before the raster data begin. - if (state == PbmHeight && i > 0) - c = (char)imgFile.readByte(); - } - if (isspace(c)) { - if (i > 0) { - str[i] = 0; - i = 0; - if (state == PbmMagic) { - if (strcmp(str, "P4") != 0) { - imgFile.close(); - printf("File '%s' doesn't seem to be a binary pbm file! This image will be skipped.\n", fileName); - return; - } - } else { - int *s = state == PbmWidth ? &w : &h; - if (sscanf(str, "%d", s) != 1) { - imgFile.close(); - printf("Failed to read image size in binary pbm file '%s'. This image will be skipped.\n", fileName); - return; - } - } - if (state == PbmMagic) - state = PbmWidth; - else if (state == PbmWidth) - state = PbmHeight; - else { - // We have finished reading the header. - // Check the size is as expected. - if ((w != 640 || h != 480) && (w != 320 || h != 200)) { - imgFile.close(); - printf("Binary pbm file '%s' doesn't have the expected size (expected: 640x480 or 320x200, read: %dx%d). This image will be skipped.\n", fileName, w, h); - return; - } - // And break out of the loop. - break; - } - } - } else - str[i++] = c; - if (imgFile.eof()) { - printf("Unexpected end of file in '%s' while reading pbm header! This image will be skipped.\n", fileName); - return; - } - } while (1); - - // Write block header in output file (4 bytes). - // We convert the image name to upper case. - for (i = 0 ; i < 4 ; ++i) { - if (name[i] >= 97 && name[i] <= 122) - outputFile.writeByte(name[i] - 32); - else - outputFile.writeByte(name[i]); - } - // And write the language code on 4 bytes as well (padded with 0 if needed). - int languageLength = strlen(language); - for (i = 0 ; i < 4 ; ++i) { - if (i < languageLength) - outputFile.writeByte(language[i]); - else - outputFile.writeByte(0); - } - - // Write block size - outputFile.writeLong(w * h / 8); - - // Write all the bytes. - for (i = 0 ; i < w * h / 8 ; ++i) { - byte b = imgFile.readByte(); - outputFile.writeByte(~b); - } - - imgFile.close(); -} - -void writeGermanStrings(File& outputFile) { - // Write header and language - outputFile.write("TEXT", 4); - outputFile.write("de\0\0", 4); - - // Reserve the size for the block size, but we will write it at the end once we know what it is. - uint32 blockSizePos = outputFile.pos(); - uint32 blockSize = 0; - outputFile.writeLong(blockSize); - - // Write all the strings - const char **s = &gameText[0]; - while (*s) { - outputFile.writeString(*s); - blockSize += strlen(*s) + 1; - ++s; - } - - // Now write the block size and then go back to the end of the file. - outputFile.seek(blockSizePos, SEEK_SET); - outputFile.writeLong(blockSize); - outputFile.seek(0, SEEK_END); -} - -void writeStrings(File& outputFile, const char* language) { - char fileName[16]; - sprintf(fileName, "strings-%s.po", language); - PoMessageList* poList = parsePoFile(fileName); - if (!poList) { - printf("Cannot find strings file for language '%s'.\n", language); - return; - } - - // Write block header - outputFile.write("TEXT", 4); - - // And write the language code on 4 bytes as well (padded with 0 if needed). - int languageLength = strlen(language); - for (int i = 0 ; i < 4 ; ++i) { - if (i < languageLength) - outputFile.writeByte(language[i]); - else - outputFile.writeByte(0); - } - - // Reserve the size for the block size, but we will write it at the end once we know what it is. - uint32 blockSizePos = outputFile.pos(); - uint32 blockSize = 0; - outputFile.writeLong(blockSize); - - // Write all the strings. - // If a string is not translated we use the German one. - const char **s = &gameText[0]; - while (*s) { - const char* translation = poList->findTranslation(*s); - if (translation) { - outputFile.writeString(translation); - blockSize += strlen(translation) + 1; - } else { - outputFile.writeString(*s); - blockSize += strlen(*s) + 1; - } - ++s; - } - delete poList; - - // Now write the block size and then go back to the end of the file. - outputFile.seek(blockSizePos, SEEK_SET); - outputFile.writeLong(blockSize); - outputFile.seek(0, SEEK_END); -} - - -/** - * Main method - */ -int main(int argc, char *argv[]) { - File outputFile; - if (!outputFile.open("supernova2.dat", kFileWriteMode)) { - printf("Cannot create file 'supernova2.dat' in current directory.\n"); - exit(0); - } - - // The generated file is of the form: - // 3 bytes: 'MS2' - // 1 byte: version - // -- data blocks - // 4 bytes: header 'IMG1' cyphered text image - // 'TEXT' for strings - // 4 bytes: language code ('en\0', 'de\0'- see common/language.cpp) - // 4 bytes: block size n (uint32) - // n bytes: data - // --- - - // Header - outputFile.write("MS2", 3); - outputFile.writeByte(VERSION); - - // German strings - writeGermanStrings(outputFile); - - // TODO make the needed images and reenable writing them to the .dat file - // Other languages - const char **l = &lang[0]; - while(*l) { - writeDatafile(outputFile, 15, *l); - writeDatafile(outputFile, 28, *l); - writeStrings(outputFile, *l); - writeDocFile(outputFile, "inf", *l); - writeDocFile(outputFile, "doc", *l); - ++l; - } - - outputFile.close(); - return 0; -} diff --git a/devtools/create_supernova2/create_supernova2.h b/devtools/create_supernova2/create_supernova2.h deleted file mode 100644 index a5b7ddb7ee..0000000000 --- a/devtools/create_supernova2/create_supernova2.h +++ /dev/null @@ -1,33 +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. - * - * This is a utility for generating a data file for the supernova engine. - * It contains strings extracted from the original executable as well - * as translations and is required for the engine to work properly. - */ - -#ifndef CREATE_SUPERNOVA2_H -#define CREATE_SUPERNOVA2_H - -#define VERSION 2 - - - -#endif // CREATE_SUPERNOVA2_H diff --git a/devtools/create_supernova2/file.cpp b/devtools/create_supernova2/file.cpp deleted file mode 100644 index d54258d5a4..0000000000 --- a/devtools/create_supernova2/file.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "file.h" - -bool File::open(const char *filename, AccessMode mode) { - f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb"); - return (f != NULL); -} - -void File::close() { - fclose(f); - f = NULL; -} - -int File::seek(int32 offset, int whence) { - return fseek(f, offset, whence); -} - -long File::read(void *buffer, int len) { - return fread(buffer, 1, len, f); -} -void File::write(const void *buffer, int len) { - fwrite(buffer, 1, len, f); -} - -bool File::eof() { - return feof(f) != 0; -} - -byte File::readByte() { - byte v; - read(&v, sizeof(byte)); - return v; -} - -uint16 File::readWord() { - uint16 v; - read(&v, sizeof(uint16)); - return FROM_LE_16(v); -} - -uint32 File::readLong() { - uint32 v; - read(&v, sizeof(uint32)); - return FROM_LE_32(v); -} - -void File::writeByte(byte v) { - write(&v, sizeof(byte)); -} - -void File::writeWord(uint16 v) { - uint16 vTemp = TO_LE_16(v); - write(&vTemp, sizeof(uint16)); -} - -void File::writeLong(uint32 v) { - uint32 vTemp = TO_LE_32(v); - write(&vTemp, sizeof(uint32)); -} - -void File::writeString(const char *s) { - write(s, strlen(s) + 1); -} - -uint32 File::pos() { - return ftell(f); -} diff --git a/devtools/create_supernova2/file.h b/devtools/create_supernova2/file.h deleted file mode 100644 index f285293612..0000000000 --- a/devtools/create_supernova2/file.h +++ /dev/null @@ -1,59 +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. - * - * This is a utility for generating a data file for the supernova engine. - * It contains strings extracted from the original executable as well - * as translations and is required for the engine to work properly. - */ - -#ifndef FILE_H -#define FILE_H - -// Disable symbol overrides so that we can use system headers. -#define FORBIDDEN_SYMBOL_ALLOW_ALL -#include "common/endian.h" - -enum AccessMode { - kFileReadMode = 1, - kFileWriteMode = 2 -}; - -class File { -private: - FILE *f; -public: - bool open(const char *filename, AccessMode mode = kFileReadMode); - void close(); - int seek(int32 offset, int whence = SEEK_SET); - uint32 pos(); - long read(void *buffer, int len); - void write(const void *buffer, int len); - bool eof(); - - byte readByte(); - uint16 readWord(); - uint32 readLong(); - void writeByte(byte v); - void writeWord(uint16 v); - void writeLong(uint32 v); - void writeString(const char *s); -}; - -#endif // FILE_H diff --git a/devtools/create_supernova2/gametext.h b/devtools/create_supernova2/gametext.h deleted file mode 100644 index bc3b217643..0000000000 --- a/devtools/create_supernova2/gametext.h +++ /dev/null @@ -1,793 +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. - * - * This is a utility for generating a data file for the supernova engine. - * It contains strings extracted from the original executable as well - * as translations and is required for the engine to work properly. - */ - -#ifndef GAMETEXT_H -#define GAMETEXT_H - -#include <stddef.h> - -// This file contains the strings in German and is encoded using CP850 encoding. -// Other language should be provided as po files also using the CP850 encoding. - -// TODO: add the strings from the engine here, add an Id string in comment. -// And in the engine add a StringId enum with all the Ids = index in this array. - -const char *gameText[] = { - // 0 - "Gehe", //Go - "Schau", //Look - "Nimm", //Take - "\231ffne", //Open - "Schlie\341e", //Close - // 5 - "Dr\201cke", //Push - "Ziehe", //Pull - "Benutze", //Use - "Rede", //Talk - "Gib", //Give - // 10 - "Gehe zu ", //Go to - "Schau ", //Look at - "Nimm ", //Take - "\231ffne ", //Open - "Schlie\341e ", //Close - // 15 - "Dr\201cke ", //Push - "Ziehe ", //Pull - "Benutze ", //Use - "Rede mit ", //Talk to - "Gib ", //Give - // 20 - " an ", // to - " mit ", // with - "Es ist nichts Besonderes daran.", //There's nothing special about it. - "|", //Dialog separator - "Gespr\204ch beenden", //End of conversation - // 25 - " F1 Hilfe", // kStringHelpOverview1 - " F2 Anleitung", // kStringHelpOverview2 - " F3 Programminformationen", //kStringHelpOverview3 - " F4 Textgeschwindigkeit", //kStringHelpOverview4 - " F5 Laden/Speichern", // kStringHelpOverview5 - // 30 - " ESC Vorspann \201berspringen", // kStringHelpOverview6 - "Alt X Spiel beenden", // kStringHelpOverview7 - "Textgeschwindigkeit:", //Text speed: - "Spiel abbrechen?", //Leave game? - "Ja", //Yes - // 35 - "Nein", //No - "Laden", //Load - "Speichern", //Save - "Zur\201ck", //Back - "Neustart", //Restart - // 40 - "Schreibfehler", //write error - "Das tr\204gst du doch bei dir.", //You already carry this. - "Du bist doch schon da.", //You are already there. - "Das ist geschlossen.", //This is closed. - "Das hast du doch schon.", //You already have that. - // 45 - "Das brauchst du nicht.", //You don't need that. - "Das kannst du nicht nehmen.", //You can't take that. - "Das l\204\341t sich nicht \224ffnen.", //This cannot be opened. - "Das ist schon offen.", //This is already opened. - "Das ist verschlossen.", //This is locked. - // 50 - "Das l\204\341t sich nicht schlie\341en.", //This cannot be closed. - "Das ist schon geschlossen.", //This is already closed. - "Behalt es lieber!", //Better keep it! - "Das geht nicht.", //You can't do that. - "^(C) 1994 Thomas und Steffen Dingel#", //^(C) 1994 Thomas and Steffen Dingel# - // 55 - "Story und Grafik:^ Thomas Dingel#", //Story and Graphics:^ Thomas Dingel# - "Programmierung:^ Steffen Dingel#", //Programming:^ Steffen Dingel# - "Musik:^ Bernd Hoffmann#", //Music:^ Bernd Hoffmann# - "Getestet von ...#", //Tested by ...# - "^Das war's.#", //^That's it.# - // 60 - "^Schlu\341!#", //^Over!# - "^Ende!#", //^End!# - "^Aus!#", //^Done!# - "^Tsch\201\341!#", //^Bye!# - "Oh!", //Oh! - // 65 - "Nicht schlecht!", //Not bad! - "Supersound!", //Supersound! - "Klasse!", //Great! - "Nicht zu fassen!", //I can't believe it! - "Super, ey!", //Dope, yo! - // 70 - "Fantastisch!", //Fantastic! - "Umwerfend!", //Stunning! - "Genial!", //Brilliant! - "Spitze!", //Awesome! - "Jawoll!", //Alright! - // 75 - "Hervorragend!", //Outstanding! - "Ultragut!", //Ultra-good! - "Megacool!", //Mega cool! - "Yeah!", //Yeah! - "Ein W\204chter betritt den Raum.|Du wirst verhaftet.", //A guard enters the room.|You are getting arrested. - // 80 - "Die n\204chsten paar Jahre|verbringst du im Knast.", //You will spend the next|few years in jail. - "Es wird Alarm ausgel\224st.", //The alarm is about to be set off. - "Du h\224rst Schritte.", //You are hearing footsteps. - "Um das Schloss zu \224ffnen,|brauchst du einige Zeit.", //You will take some time,|to pick that lock. - "Du ger\204tst in Panik|und ziehst die Keycard|aus der T\201r.", //You are panicking|and remove the keycard|from the door. - // 85 - "Du hast deinen Auftrag|noch nicht ausgef\201hrt.", //You have not completed|your task yet. - "Obwohl du die Alarmanlage noch|nicht ausgeschaltet hast,|entscheidest du dich, zu fliehen.", //Although you haven't|disabled the alarm yet,|you decide to escape. - "Du entledigst dich der Einbruchswerkzeuge|und nimmst ein Taxi zum Kulturpalast.", //You get rid of your burglar tools|and take a cab to the Palace of Culture. - "Diese T\201r brauchst|du nicht zu \224ffnen.", //You don't need|to open this door. - "Uff, es hat geklappt!", //Phew, it worked! - // 90 - "Zur\201ck im Quartier der Gangster ...", //Back in the gangsters' hideout ... - "Das lief ja wie am Schn\201rchen!", //Everything went like clockwork! - "Hier, dein Anteil von 30000 Xa.", //Here, your share of 30000 Xa. - "Wo ist denn der Saurierkopf?", //Where's the dinosaur skull? - "Dazu hatte ich keine Zeit mehr.", //I didn't have enough time for that. - // 95 - "Was? Du spinnst wohl!|Dann kriegst du auch deinen|Anteil nicht. Raus!", //What? You're nuts!|Then you won't get your|share. Beat it! - "Der Sauger ist schon dort.", //The suction cup is already there. - "Du heftest den Sauger an die Wand|und h\204lst dich daran fest.", //You attach the suction cup to the wall|and hold on to it. - "Du stellst dich auf den|Boden nimmst den Sauger|wieder von der Wand", //You stand on the floor|then remove the suction cup from the wall - "Die Alarmanlage ist|schon ausgeschaltet.", //The alarm system is|already switched off. - // 100 - "Um die Anlage abzuschalten,|brauchst du einige Zeit.", //To turn off the system,|you need some time. - "Die Alarmanlage ist jetzt ausgeschaltet.", //The alarm system is now switched off. - "Saurier", //Dinosaur - "Du hast jetzt besseres zu tun,|als das Ding anzuschauen.", //You have better things to do now|than look at that thing. - "Eingang", //Entrance - // 105 - "T\201r", //Door - "Strasse zum Stadtzentrum", //Road to the city center - "Kamera", //Security camera - "Hoffentlich bemerkt dich niemand.", //Hopefully nobody will notice you. - "Haupteingang", //Main entrance - // 110 - "Gang", //Corridor - "Ziemlich gro\341.", //Quite large. - "Saurierkopf", //Dinosaur head - "Dies ist der Kopf,|den du suchst.", //This is the head|you're looking for. - "Alarmanlage", //Alarm system - // 115 - "Sauger", //Suction cup - "Wand", //Wall - "Loch", //Opening - "Buchstabe", //Letter - "Sie ist sehr massiv.", //It is very massive. - // 120 - "Hmm, X und Y, irgendwo|habe ich die Buchstaben|schon gesehen.", //Hmm, X and Y|I have seen these letters|somewhere before. - "Deine Zeit ist um, Fremder!", //Your Time is up, Stranger! - "Du hast das Seil|doch schon festgebunden.", //You already tied the rope. - "Das w\201rde wenig bringen.", //That would have little effect. - "Sonnenstich, oder was?", //Sunstroke, or what? - // 125 - "Du merkst, da\341 der Boden|unter dir nachgibt, und|springst zur Seite.", //You notice that the ground|is giving way under you,|and you leap aside. - "Puzzleteil", //Puzzle piece - "Neben diesem Stein|ist kein freies Feld.", //There's no free square|next to this stone. - "Du spielst gerade ein|Adventure, kein Rollenspiel!", //You are currently playing an|Adventure, not a Role-Playing Game! - "Du kannst das Seil|nirgends befestigen.", //There's nowhere|to attach the rope. - // 130 - "Es pa\341t nicht|zwischen die Steine.", //It does not fit|between the stones. - "Das ist doch|oben festgebunden!", //That is already|tied up above! - "Hey, das ist|mindestens 10 Meter tief!", //Hey, that is|at least 10 meters deep! - "In dem Schlitz|ist nichts mehr.", //There is nothing|left in the slot. - "Das ist mindestens 5 Meter tief!", //That is at least 5 meters deep! - // 135 - "Du versuchst, den Sarg zu|\224ffnen, aber der Deckel bewegt|sich keinen Millimeter.", //You try to open the coffin,|but the lid does not|move a millimeter. - "Du hast die Kugel schon gedr\201ckt.", //You have already|pushed the ball. - "Die Kugel bewegt sich ein St\201ck.", //The ball moves a bit. - "Herzlichen Gl\201ckwunsch!", //Congratulations! - "Sie haben das Spiel gel\224st|und gewinnen 400 Xa!", //You solved the game|and won 400 Xa! - // 140 - "Vielen Dank f\201r die Benutzung eines|VIRTUAL-REALITY-SYSTEMS-Produkts!", //Thank you for using a|VIRTUAL-REALITY-SYSTEMS product! - "N", //N - "O", //E - "S", //S - "W", //W - // 145 - "Seil", //Rope - "Schild", //Sign - "Darauf steht:|\"Willst du finden das|richtige Loch, so wage|dich in die Pyramide!\".", //It reads:|"Want to find|the right hole? Then dare|to enter the pyramid!". - "Es ist eine kleine \231ffnung.", //It is a small opening. - "Pyramide", //Pyramid - // 150 - "Komisch! Was soll eine Pyramide|bei den Axacussanern? Deine|eigenen Gedanken scheinen|den Spielverlauf zu beeinflussen.", //Weird! What is a pyramid doing|at the Axacussians? Your own thoughts seem to influence|the course of the game. - "Sonne", //Sun - "Sch\224n!", //Nice! - "\"Hallo Fremder, wenn du diesen|Raum betreten hast, bleibt|dir nur noch eine Stunde Zeit,|um deine Aufgabe zu erf\201llen!\"", //"Hello, Stranger, when you enter|this room, you have only an hour|to accomplish your task!" - "rechte Seite", //right side - // 155 - "linke Seite", //left side - "Knopf", //Button - "Schrift", //Inscription - "Tomate", //Tomato - "Komisch!", //Funny! - // 160 - "Messer", //Knife - "Es ist ein relativ stabiles Messer.", //It is a relatively sturdy knife. - "Monster", //Monster - "Es ist dick und|ungef\204hr 15 Meter lang.", //It is thick and|about 15 meters long. - "Augen", //Eyes - // 165 - "Mund", //Mouth - "Es ist nur eine Statue.", //It's just a statue. - "Zettel", //Note - "Darauf steht:|\"Wenn du fast am Ziel|bist, tu folgendes:|Sauf!\"", //It reads:|"When you're almost there,|do the following:|Drink!" - "Es ist ca. 10 Meter tief.", //It is about 10 meters deep. - // 170 - "Oben siehst du helles Licht.", //Above you is a bright light. - "Darauf steht:|\"Ruhe eine Minute im Raum|zwischen den Monstern,|und du wirst belohnt!\"", //It reads:|"Rest a minute in the room|between the monsters,|and you'll be rewarded!" - "Schlitz", //Slot - "Du kommst mit den|H\204nden nicht rein.", //You cannot get in|with your hands. - "Es ist ca. 5 Meter tief.", //It is about 5 meters deep. - // 175 - "Steine", //Stones - "Platte", //Plate - "Sarg", //Coffin - "Ausgang", //Exit - "Unheimlich!", //Creepy! - // 180 - "Zahnb\201rste", //Toothbrush - "Die Sache mit der|Artus GmbH scheint dir zu|Kopf gestiegen zu sein.", //The thing with the|Artus GmbH seems to have|gotten to your head. - "Zahnpastatube", //Toothpaste - "Kugel", //Ball - "Hmm, die Kugel sieht lose aus.", //Hmm, the ball looks loose. - // 185 - "Auge", //Eye - "Irgendwas stimmt damit nicht.", //Something is wrong with that. - "Sieht nach Metall aus.", //It looks like metal. - "Ein Taxi kommt angerauscht,|du steigst ein.", //A taxi arrives, and you get in. - "Du dr\201ckst auf den Knopf, aber nichts passiert", //You press the button, but nothing happens - // 190 - "Es ist leer.", //It is empty. - "Du findest ein kleines Ger\204t,|einen Ausweis und einen Xa.", //You find a small device,|an ID card and a Xa. - "Du heftest den|Magnet an die Stange.", //You attach the|magnet to the pole. - "Stange mit Magnet", //Pole with magnet - "Raffiniert!", //Cunning! - // 195 - "Du mu\341t das|Ger\204t erst kaufen.", //You must buy|this device first. - "Du legst den Chip|in das Ger\204t ein.", //You insert the chip|into the device. - "Du \201berspielst die CD|auf den Musikchip.", //You transfer the CD|to the Music chip. - "Ohne einen eingelegten|Musikchip kannst du auf dem|Ger\204t nichts aufnehmen.", //Without an inserted|music chip, you can not|record on the device. - "Du nimmst den Chip|aus dem Ger\204t.", //You remove the chip|from the device. - // 200 - "Es ist kein Chip eingelegt.", //There is no chip inserted. - "Wozu? Du hast sowieso nur die eine CD.", //What for? You only have one CD anyway. - "Die \"Mad Monkeys\"-CD. Du hast|sie schon tausendmal geh\224rt.", //The "Mad Monkeys" CD.|You've heard them a thousand times. - "Du h\224rst nichts.|Der Chip ist unbespielt.", //All you hear is silence.|The chip is empty. - "Du h\224rst dir den Anfang|der \201berspielten CD an.", //You are listening to the beginning|of the copied CD. - // 205 - "Es ist kein Chip einglegt.", //There is no chip inserted. - "Du trinkst etwas von den Zeug, danach|f\201hlst du dich leicht beschwipst.", //You drink some of the stuff,|then begin to feel slightly tipsy. - "%d Xa", //%d Xa - "Als du ebenfalls aussteigst haben|die anderen Passagiere das|Fluggel\204nde bereits verlassen.", //When you get off the plane|the other passengers|have already left the airport. - "Flughafen", //Airport - // 210 - "Stadtzentrum", //Downtown - "Kulturpalast", //Palace of Culture - "Erde", //Earth - "Privatwohnung", //Private apartment - "(Taxi verlassen)", //(Leave the taxi) - // 215 - "(Bezahlen)", //(Pay) - "Adresse:| ", //Address:| - "Fuddeln gilt nicht!|Zu diesem Zeitpunkt kannst du diese|Adresse noch gar nicht kennen!", //Fiddling with the system doesn't work!|At this time you can not|even know this address! - "Du hast nicht|mehr genug Geld.", //You do not|have enough money left. - "Du merkst, da\341 das Taxi stark beschleunigt.", //You notice the taxi is accelerating rapidly. - // 220 - "F\201nf Minuten sp\204ter ...", //Five minutes later ... - "Du hast doch schon eine Stange", //You already have a pole - "Du s\204gst eine der Stangen ab.", //You saw off one of the poles. - "Du betrittst das einzige|offene Gesch\204ft, das|du finden kannst.", //You enter the only|open shop that|you can find. - "Die Kabine ist besetzt.", //The cabin is occupied. - // 225 - "He, nimm erstmal das Geld|aus dem R\201ckgabeschlitz!", //Hey, take the money|from the return slot! - "Du hast doch schon bezahlt.", //You have already paid. - "Du hast nicht mehr genug Geld.", //You do not have enough money left. - "Du wirfst 10 Xa in den Schlitz.", //You put 10 Xa in the slot. - "Dir wird schwarz vor Augen.", //You are about to pass out. - // 230 - "Du ruhst dich eine Weile aus.", //You rest for a while. - "An der Wand steht:|\"Ich kenne eine tolle Geheimschrift:|A=Z, B=Y, C=X ...|0=0, 1=9, 2=8 ...\"", //On the Wall is:|"I know a great cypher:|A=Z, B=Y, C=X ...|0=0, 1=9, 2=8 ..." - "Ok, ich nehme es.", //OK, I'll take it. - "Nein danke, das ist mir zu teuer.", //No thanks, that's too expensive for me. - "Ich w\201rde gern etwas kaufen.", //I would like to buy something. - // 235 - "Ich bin's, Horst Hummel.", //It's me, Horst Hummel. - "Haben Sie auch einen Musikchip f\201r das Ger\204t?", //Do you have a music chip for the device? - "Eine tolle Maske, nicht wahr?", //It's a great mask, right? - "Komisch, da\341 sie schon drei Jahre da steht.", //Strange that it has been there for three years. - "Ein starker Trunk. Zieht ganz sch\224n rein.", //A strong drink. It hits you pretty hard. - // 240 - "Ein Abspiel- und Aufnahmeger\204t f\201r die neuen Musikchips.", //A playback and recording device for the new music chips. - "Eine ARTUS-Zahnb\201rste. Der letzte Schrei.", //An ARTUS toothbrush. The latest craze. - "Verkaufe ich massenhaft, die Dinger.", //I sell these things in bulk. - "Das sind echte Rarit\204ten. B\201cher in gebundener Form.", //These are real rarities. Books in bound form. - "Die Encyclopedia Axacussana.", //The Encyclopedia Axacussana. - // 245 - "Das gr\224\341te erh\204ltliche Lexikon auf 30 Speicherchips.", //The largest available dictionary on 30 memory chips. - "\232ber 400 Trilliarden Stichw\224rter.", //Over 400 sextillion keywords. - "Die ist nicht zu verkaufen.", //It is not for sale. - "So eine habe ich meinem Enkel zum Geburtstag geschenkt.", //I gave one to my grandson for his birthday. - "Er war begeistert von dem Ding.", //He was excited about this thing. - // 250 - "Der stammt aus einem bekannten Computerspiel.", //It comes from a well-known computer game. - "Robust, handlich und stromsparend.", //Sturdy, handy and energy-saving. - "Irgendein lasches Ges\224ff.", //Some cheap swill. - "Das sind Protestaufkleber gegen die hohen Taxigeb\201hren.", //These are stickers protesting the high taxi fees. - "Das ist Geschirr aus der neuen Umbina-Kollektion.", //These are dishes from the new Umbina-Collection. - // 255 - "H\204\341lich, nicht wahr?", //Ugly, right? - "Aber verkaufen tut sich das Zeug gut.", //But this stuff sells well. - "Das kostet %d Xa.", //That costs %d Xa. - "Schauen Sie sich ruhig um!", //Take a look around! - "Unsinn!", //Nonsense! - // 260 - "Tut mir leid, die sind|schon alle ausverkauft.", //I'm very sorry,|they are already sold out. - "Guten Abend.", //Good evening. - "Hallo.", //Hello. - "Huch, Sie haben mich aber erschreckt!", //Yikes, you scared me! - "Wieso?", //How so? - // 265 - "Ihre Verkleidung ist wirklich t\204uschend echt.", //Your disguise is deceptively real-looking. - "Welche Verkleidung?", //What disguise? - "Na, tun Sie nicht so!", //Stop pretending you don't know! - "Sie haben sich verkleidet wie der Au\341erirdische,|dieser Horst Hummel, oder wie er hei\341t.", //You disguised yourself as that extraterrestrial guy,|Horst Hummel, or whatever his name is. - "Ich BIN Horst Hummel!", //I AM Horst Hummel! - // 270 - "Geben Sie's auf!", //Give it up! - "An Ihrer Gestik merkt man, da\341 Sie|ein verkleideter Axacussaner sind.", //You can tell from your gestures that you are|a disguised Axacussan. - "Der echte Hummel bewegt sich|anders, irgendwie ruckartig.", //The real Hummel moves|differently, kind of jerky. - "Weil er ein Roboter ist! ICH bin der Echte!", //Because he is a robot! I am the real one! - "Ach, Sie spinnen ja!", //Oh, you are crazy! - // 275 - "Sie Trottel!!!", //You Idiot!!! - "Seien Sie still, oder ich werfe Sie raus!", //Shut up or I'll kick you out! - "Taschenmesser", //Pocket knife - "Hey, da ist sogar eine S\204ge dran.", //Hey, there's even a saw on it. - "20 Xa", //20 Xa - // 280 - "Discman", //Discman - "Da ist noch die \"Mad Monkeys\"-CD drin.", //The "Mad Monkeys" CD is still in there. - "Mit dem Ding sollst du dich|an der Wand festhalten.", //You should hold onto the wall|using that thing. - "Spezialkeycard", //Special keycard - "Damit sollst du die|T\201ren knacken k\224nnen.", //With that you should be able to crack the doors. - // 285 - "Alarmknacker", //Alarm cracker - "Ein kleines Ger\204t, um|die Alarmanlage auszuschalten.", //A small device|to turn off the alarm. - "Karte", //Keycard - "Raumschiff", //Spaceship - "Damit bist du hierhergekommen.", //You came here with it. - // 290 - "Fahrzeuge", //Vehicles - "Du kannst von hier aus nicht erkennen,|was das f\201r Fahrzeuge sind.", //You cannot tell from here|what those vehicles are. - "Fahrzeug", //Vehicle - "Es scheint ein Taxi zu sein.", //It seems to be a taxi. - "Komisch, er ist verschlossen.", //Funny, it is closed. - // 295 - "Portemonnaie", //Wallet - "Das mu\341 ein Axacussaner|hier verloren haben.", //This must have been|lost by an Axacussan. - "Ger\204t", //Device - "Auf dem Ger\204t steht: \"Taxi-Call\".|Es ist ein kleiner Knopf daran.", //The device says "Taxi Call."|There is a small button on it. - "Ausweis", //ID card - // 300 - "Auf dem Ausweis steht:| Berta Tschell| Axacuss City| 115AY2,96A,32", //On the card it reads: | Berta Tschell | Axacuss City | 115AY2,96A,32 - "Treppe", //Staircase - "Sie f\201hrt zu den Gesch\204ften.", //It leads to the shops. - "Gesch\204ftsstra\341e im Hintergrund", //Business street in the background - "Die Stra\341e scheint kein Ende zu haben.", //The road seems to have no end. - // 305 - "Stange", //Rod - "Pfosten", //Post - "Gel\204nder", //Railing - "Plakat", //Poster - "Musik Pur - Der Musikwettbewerb!|Heute im Kulturpalast|Hauptpreis:|Fernsehauftritt mit Horst Hummel|Sponsored by Artus GmbH", //Pure Music - The Music Competition!|Today at the Palace of Culture|Main Prize:|Television appearance with Horst Hummel|Sponsored by Artus GmbH - // 310 - "Kabine", //Cabin - "Sie ist frei!", //It is free! - "Sie ist besetzt.", //It is occupied. - "F\201\341e", //Feet - "Komisch, die|F\201\341e scheinen|erstarrt zu sein.", //Strange, the|feet seem to be frozen. - // 315 - "Haube", //Hood - "Sieht aus wie beim Fris\224r.", //Looks like the hairdresser. - "400 Xa", //400 Xa - "10 Xa", //10 Xa - "Dar\201ber steht:|\"Geldeinwurf: 10 Xa\".", //It says:|"Coins: 10 Xa". - // 320 - "Dar\201ber steht:|\"Gewinnausgabe / Geldr\201ckgabe\".", //It says:|"Prize / Money Return". - "Stuhl", //Chair - "Etwas Entspannung k\224nntest du jetzt gebrauchen.", //You could use some relaxation right about now. - "Gekritzel", //Scribble - "Gesicht", //Face - // 325 - "Nicht zu fassen! Die|W\204nde sind genauso beschmutzt|wie auf der Erde.", //Unbelievable! The walls|are just as dirty|as those on Earth. - "B\201cher", //Books - "Lexikon", //Dictionary - "Pflanze", //Plant - "Maske", //Mask - // 330 - "Schlange", //Snake - "Becher", //Cup - "Joystick", //Joystick - "Eine normale Zahnb\201rste,|es steht nur \"Artus\" darauf.", //An ordinary toothbrush.|It says "Artus" on it. - "Musikger\204t", //Music device - // 335 - "Ein Ger\204t zum Abspielen und|Aufnehmen von Musikchips.|Es ist ein Mikrofon daran.", //A device for playing and recording music chips.|There is a microphone on it. - "Flasche", //Bottle - "Auf dem Etikett steht:|\"Enth\204lt 10% Hyperalkohol\".", //The label says: "Contains 10% hyperalcohol". - "Kiste", //Box - "Verk\204ufer", //Seller - // 340 - "Was? Daf\201r wollen Sie die Karte haben?", //What? Do you want the card for that? - "Sie sind wohl nicht ganz \201ber|die aktuellen Preise informiert!", //You are probably not completely|informed about the current prices! - "Ich bin's, Horst Hummel!", //It's me, Horst Hummel! - "Sch\224nes Wetter heute!", //Nice weather today! - "K\224nnen Sie mir sagen, von wem ich eine Eintrittskarte f\201r den Musikwettbewerb kriegen kann?", //Can you tell me who can get me a ticket for the music contest? - // 345 - "Ok, hier haben Sie den Xa.", //OK, here is the Xa. - "Ich biete Ihnen 500 Xa.", //I offer you 500 Xa. - "Ich biete Ihnen 1000 Xa.", //I offer you 1000 Xa. - "Ich biete Ihnen 5000 Xa.", //I offer you 5000 Xa. - "Ich biete Ihnen 10000 Xa.", //I offer you 10000 Xa. - // 350 - "Vielen Dank f\201r Ihren Kauf!", //Thank you for your purchase! - "Was bieten Sie mir|denn nun f\201r die Karte?", //What will you offer me|for the card? - "Hallo, Sie!", //Hello to you! - "Was wollen Sie?", //What do you want? - "Wer sind Sie?", //Who are you? - // 355 - "Horst Hummel!", //Horst Hummel! - "Kenne ich nicht.", //Never heard of him. - "Was, Sie kennen den ber\201hmten Horst Hummel nicht?", //What, you don't know the famous Horst Hummel? - "Ich bin doch der, der immer im Fernsehen zu sehen ist.", //I'm the guy who is always on TV. - "Ich kenne Sie wirklich nicht.", //I really do not know you. - // 360 - "Komisch.", //Funny. - "Aha.", //Aha. - "Ja, kann ich.", //Yes, I can. - "Von wem denn?", //From whom? - "Diese Information kostet einen Xa.", //This information costs a Xa. - // 365 - "Wie Sie meinen.", //As you say. - "Sie k\224nnen die Karte von MIR bekommen!", //You can get the card from ME! - "Aber nur eine Teilnahmekarte,|keine Eintrittskarte.", //But only a participation ticket,|not an entrance ticket. - "Was wollen Sie daf\201r haben?", //What do you want for it? - "Machen Sie ein Angebot!", //Make an offer! - // 370 - "Das ist ein gutes Angebot!", //That's a good offer! - "Daf\201r gebe ich Ihnen meine|letzte Teilnahmekarte!", //For that I give you my|last participation card! - "(Dieser Trottel!)", //(That Idiot!) - "Ich w\201rde gern beim Musikwettbewerb zuschauen.", //I would like to watch the music competition. - "Ich w\201rde gern am Musikwettbewerb teilnehmen.", //I would like to participate in the music competition. - // 375 - "Wieviel Uhr haben wir?", //What time is it? - "Ja.", //Yes. - "Nein.", //No. - "Hallo, Leute!", //Hi guys! - "Hi, Fans!", //Hi, fans! - // 380 - "Gute Nacht!", //Good night! - "\216h, wie geht es euch?", //Uh, how are you? - "Sch\224nes Wetter heute.", //Nice weather today. - "Hmm ...", //Hmm ... - "Tja ...", //Well ... - // 385 - "Also ...", //So ... - "Ok, los gehts!", //OK let's go! - "Ich klimper mal was auf dem Keyboard hier.", //I'll fix something on the keyboard here. - "Halt, sie sind doch schon drangewesen!", //Stop, you have already been on it! - "He, Sie! Haben Sie|eine Eintrittskarte?", //Hey, you! Do you have|a ticket? - // 390 - "Ja nat\201rlich, hier ist meine Teilnahmekarte.", //Yes of course, here is my participation ticket. - "Sie sind Teilnehmer! Fragen|Sie bitte an der Kasse nach,|wann Sie auftreten k\224nnen.", //You are a participant!|Please ask at the checkout|when you can go on stage. - "\216h, nein.", //Uh, no. - "He, wo ist Ihr Musikchip?", //Hey, where's your music chip? - "Laber nicht!", //Stop talking! - // 395 - "Fang an!", //Get started! - "Einen Moment, ich mu\341 erstmal \201berlegen, was ich|euch spiele.", //One moment, I have to think about what I'm playing for you. - "Anfangen!!!", //Begin!!! - "Nun denn ...", //Well then ... - "Raus!", //Out! - // 400 - "Buh!", //Boo! - "Aufh\224ren!", //Stop! - "Hilfe!", //Help! - "Ich verziehe mich lieber.", //I'd prefer to get lost. - "Mist, auf dem Chip war|gar keine Musik drauf.", //Damn, there was no music on the chip at all. - // 405 - "Das ging ja voll daneben!", //That went completely wrong! - "Du n\204herst dich der B\201hne,|aber dir wird mulmig zumute.", //You approach the stage,|but you feel queasy. - "Du traust dich nicht, vor|so vielen Menschen aufzutreten|und kehrst wieder um.", //You do not dare to appear|in front of so many people|and turn around. - "Oh, Sie sind Teilnehmer!|Dann sind Sie aber sp\204t dran.", //Oh, you are a participant!|But you are late. - "Spielen Sie die Musik live?", //Do you play the music live? - // 410 - "Dann geben Sie bitte Ihren Musikchip ab!|Er wird bei Ihrem Auftritt abgespielt.", //Then please submit your music chip!|It will be played during your performance. - "Oh, Sie sind sofort an der Reihe!|Beeilen Sie sich! Der B\201hneneingang|ist hinter dem Haupteingang rechts.", //Oh, it's your turn!|Hurry! The stage entrance|is to the right behind the main entrance. - "Habe ich noch einen zweiten Versuch?", //Can I have another try? - "Nein!", //No! - "Haben Sie schon eine Eintrittskarte?", //Do you already have a ticket? - // 415 - "Tut mir leid, die Karten|sind schon alle ausverkauft.", //I'm sorry, the tickets|are already sold out. - "Mist!", //Crap! - "Haben Sie schon eine Teilnahmekarte?", //Do you already have a participation ticket? - "Ja, hier ist sie.", //Yes, here it is. - "Tut mir leid, die Teilnahmekarten|sind schon alle ausverkauft.", //I'm sorry, the participation tickets|are already sold out. - // 420 - "Schei\341e!", //Crap! - "Das kann ich Ihnen|leider nicht sagen.", //I can not tell you that. - "Wo ist denn nun Ihr Musikchip?", //Where is your music chip? - "Jetzt beeilen Sie sich doch!", //Now hurry up! - "Huch, Sie sind hier bei einem Musik-,|nicht bei einem Imitationswettbewerb", //Huh, you're here at a music contest,|not at an imitation contest - // 425 - "Imitationswettbewerb?|Ich will niemanden imitieren.", //Imitation contest?|I do not want to imitate anyone. - "Guter Witz, wieso sehen Sie|dann aus wie Horst Hummel?", //Good joke. Then why do you look like Horst Hummel? - "Na, nun h\224ren Sie auf! So perfekt ist|ihre Verkleidung auch wieder nicht.", //Oh come on! Your disguise isn't that perfect. - "Ich werde Ihnen beweisen, da\341 ich Horst Hummel bin,|indem ich diesen Wettbewerb hier gewinne.", //I will prove to you that I am Horst Hummel|by winning this competition. - "Dann kann ich in dieser verdammten Fernsehshow|auftreten.", //Then I can perform in this|damn TV show. - // 430 - "Du hampelst ein bi\341chen zu|der Musik vom Chip herum.|Die Leute sind begeistert!", //You're rocking a little bit|to the music from the chip.|The audience is excited! - "Guten Abend. Diesmal haben wir|einen besonderen Gast bei uns.", //Good evening. This time we have|a special guest with us. - "Es ist der Gewinner des gestrigen|Musikwettbewerbs im Kulturpalast,|der dort vor allem durch seine|Verkleidung aufgefallen war.", //He is the winner of yesterday's music competition in the Palace of Culture.|He was particularly noteworthy|because of his disguise. - "Sie haben das Wort!", //You have the floor! - "Nun ja, meine erste Frage lautet: ...", //Well, my first question is ... - // 435 - "Warum haben Sie sich sofort nach|Ihrer Landung entschlossen, f\201r|die Artus-GmbH zu arbeiten?", //Why did you decide immediately|after your arrival to work for|Artus GmbH? - "Es war meine freie Entscheidung.|Die Artus-GmbH hat mir einfach gefallen.", //It was a decision I made on my own.|I just decided I liked Artus-GmbH. - "Wieso betonen Sie, da\341 es|Ihre freie Entscheidung war?|Haben Sie Angst, da\341 man Ihnen|nicht glaubt?", //Why do you stress that|it was your own decision?|Are you afraid that nobody will believe you otherwise? - "Also, ich mu\341 doch sehr bitten!|Was soll diese unsinnige Frage?", //How dare you!|What is with this nonsensical question? - "Ich finde die Frage wichtig.|Nun, Herr Hummel, was haben|Sie dazu zu sagen?", //I think the question is important.|Well, Mr. Hummel, what do you have to say? - // 440 - "Auf solch eine Frage brauche|ich nicht zu antworten!", //I don't feel that I have|to answer such a question! - "Gut, dann etwas anderes ...", //Alright, something else then ... - "Sie sind von Beruf Koch.|Wie hie\341 das Restaurant,|in dem Sie auf der Erde|gearbeitet haben?", //You are a chef by profession.|What was the name of the restaurant|where you worked|on Earth? - "Hmm, da\341 wei\341 ich nicht mehr.", //Hmm, I do not remember that. - "Sie wollen mir doch nicht weismachen,|da\341 Sie den Namen vergessen haben!", //Do you really expect me to believe you cannot remember the name? - // 445 - "Schlie\341lich haben Sie|zehn Jahre dort gearbeitet!", //After all, you worked there for ten years! - "Woher wollen Sie das wissen?", //How do you know that? - "Nun, ich komme von der Erde,|im Gegensatz zu Ihnen!", //Well, I come from Earth,|unlike you! - "Langsam gehen Sie zu weit!", //Now you've gone too far! - "Sie sind ein Roboter!|Das merkt man schon an|Ihrer dummen Antwort!|Sie sind nicht optimal|programmiert!", //You are a robot!|It is obvious from|your stupid answer!|You are not even programmed|correctly! - // 450 - "Wenn Sie jetzt nicht mit Ihren|Beleidigungen aufh\224ren, mu\341 ich|Ihnen das Mikrofon abschalten!", //If you do not stop right now|with your insults, I will have|to turn off the microphone! - "Ich bin der echte Horst Hummel,|und hier ist der Beweis!", //I am the real Horst Hummel,|and here is the proof! - "Am n\204chsten Morgen sind alle|Zeitungen voll mit deiner spektakul\204ren|Enth\201llung des Schwindels.", //The next morning, all the papers|are full of your spectacular|revelation of fraud. - "Die Manager der Artus-GmbH und Commander|Sumoti wurden sofort verhaftet.", //The managers of Artus-GmbH and Commander|Sumoti were arrested immediately. - "Nach dem Stre\341 der letzten Tage,|entscheidest du dich, auf die|Erde zur\201ckzukehren.", //After these stressful last few days|you decide to return to Earth. - // 455 - "W\204hrend du dich vor Interviews|kaum noch retten kannst, ...", //While you can barely save|yourself from interviews, ... - "... arbeiten die Axacussanischen|Techniker an einem Raumschiff,|das dich zur Erde zur\201ckbringen soll.", //... the Axacussan|technicians are working on a spaceship|to bring you back to Earth. - "Eine Woche sp\204ter ist der|Tag des Starts gekommen.", //One week later, the day of the launch has arrived. - "Zum dritten Mal in deinem|Leben verbringst du eine lange|Zeit im Tiefschlaf.", //For the third time in your life,|you spend a long time|in deep sleep. - "Zehn Jahre sp\204ter ...", //Ten years later ... - // 460 - "Du wachst auf und beginnst,|dich schwach an deine|Erlebnisse zu erinnern.", //You wake up and begin|to faintly remember|your experiences. - "Um dich herum ist alles dunkel.", //Everything is dark around you. - "Sie zeigt %d an.", //It displays %d. - "Ich interessiere mich f\201r den Job, bei dem man \201ber Nacht", //I'm interested in the job where you can get - "reich werden kann.", //rich overnight. - // 465 - "Ich verkaufe frische Tomaten.", //I sell fresh tomatoes. - "Ich bin der Klempner. Ich soll hier ein Rohr reparieren.", //I am the plumber. I'm supposed to fix a pipe here. - "Ja, h\224rt sich gut an.", //Yes, it sounds good. - "Krumme Gesch\204fte? F\201r wen halten Sie mich? Auf Wiedersehen!", //Crooked business? Who do you think I am? Goodbye! - "\216h - k\224nnten Sie mir das Ganze nochmal erkl\204ren?", //Uh - could you explain that to me again? - // 470 - "Wie gro\341 ist mein Anteil?", //How big is my share? - "Machen Sie es immer so, da\341 Sie Ihre Komplizen \201ber ein Graffitti anwerben?", //Do you always use graffiti to recruit your accomplices? - "Hmm, Moment mal, ich frage den Boss.", //Hmm wait, I will ask the boss. - "Kurze Zeit sp\204ter ...", //A short while later ... - "Ok, der Boss will dich sprechen.", //OK, the boss wants to talk to you. - // 475 - "Du betrittst die Wohnung und|wirst zu einem Tisch gef\201hrt.", //You enter the apartment and are led to a table. - "Hmm, du willst dir also|etwas Geld verdienen?", //Hmm, so you want to earn some money? - "Nun ja, wir planen|einen n\204chtlichen Besuch|eines bekannten Museums.", //Well, we're planning|a nightly visit|to a well-known museum. - "Wie sieht's aus, bist du interessiert?", //So, are you interested? - "Halt, warte!", //Stop, wait! - // 480 - "\232berleg's dir, es springen|30000 Xa f\201r dich raus!", //Think about it, your share would be|30000 Xa! - "30000?! Ok, ich mache mit.", //30000?! Alright, count me in. - "Gut, dann zu den Einzelheiten.", //Good, now then to the details. - "Bei dem Museum handelt es|sich um das Orzeng-Museum.", //The museum in question is|the Orzeng Museum. - "Es enth\204lt die wertvollsten|Dinosaurierfunde von ganz Axacuss.", //It contains the most valuable|dinosaur discoveries of Axacuss. - // 485 - "Wir haben es auf das Sodo-Skelett|abgesehen. Es ist weltber\201hmt.", //We're aiming to get the Sodo skeleton.|It is world-famous. - "Alle bekannten Pal\204ontologen haben|sich schon damit besch\204ftigt.", //All known paleontologists|have already dealt with it. - "Der Grund daf\201r ist, da\341 es allen|bis jetzt bekannten Erkenntnissen|\232ber die Evolution widerspricht.", //The reason for this is that it contradicts all known|knowledge about evolution. - "Irgendein verr\201ckter Forscher|bietet uns 200.000 Xa,|wenn wir ihm das Ding beschaffen.", //Some crazy researcher|will give us 200,000 Xa|if we retrieve that thing for him. - "So, jetzt zu deiner Aufgabe:", //So, now to your task: - // 490 - "Du dringst durch den Nebeneingang|in das Geb\204ude ein.", //You enter the building through|the side entrance. - "Dort schaltest du die Alarmanlage aus,|durch die das Sodo-Skelett gesichert wird.", //There you switch off the alarm system,|which secures the Sodo skeleton. - "Wir betreten einen anderen Geb\204udeteil|und holen uns das Gerippe.", //We'll enter another part of the building|and fetch the skeleton. - "Deine Aufgabe ist nicht leicht.|Schau dir diesen Plan an.", //Your task is not easy.|Look at this plan. - "Unten siehst du die kleine Abstellkammer,|durch die du in die Austellungsr\204ume kommst.", //Below you can see the small storage room,|through which you come to the showrooms. - // 495 - "Bei der mit Y gekennzeichneten|Stelle ist die Alarmanlage.", //The alarm system is at the location marked Y. - "Bei dem X steht ein gro\341er Dinosaurier|mit einem wertvollen Sch\204del.|Den Sch\204del nimmst du mit.", //The X marks the spot with a big dinosaur|with a valuable skull.|You will take the skull with you. - "Nun zu den Problemen:", //Now for the problems: - "Die wei\341 gekennzeichneten|T\201ren sind verschlossen.", //The marked white doors|are locked. - "Sie m\201ssen mit einer Spezialkeycard ge\224ffnet|werden, was jedoch einige Zeit dauert.", //They have to be opened with a special keycard,|which can take a while. - // 500 - "Au\341erdem gibt es in den auf der Karte|farbigen R\204umen einen Druck-Alarm.", //In addition, there are pressure alarms|in the rooms which are colored on the map. - "Du darfst dich dort nicht l\204nger|als 16 bzw. 8 Sekunden aufhalten,|sonst wird Alarm ausgel\224st.", //You can not stay there longer than|16 or 8 seconds,|or the alarm will go off. - "Im Raum oben rechts ist|eine Kamera installiert.", //In the room at the top right|there is a camera installed. - "Diese wird jedoch nur von|der 21. bis zur 40. Sekunde|einer Minute \201berwacht.", //However, it is only monitored|between the 21st and the 40th second|of every minute. - "Das gr\224\341te Problem ist der W\204chter.", //The biggest problem is the guard. - // 505 - "Er braucht f\201r seine Runde genau|eine Minute, ist also ungef\204hr|zehn Sekunden in einem Raum.", //He needs exactly one minute for his round,|so he is in each room|for about ten seconds. - "Du m\201\341test seine Schritte h\224ren k\224nnen,|wenn du in der Abstellkammer bist|und der W\204chter dort vorbeikommt.", //You should be able to hear his footsteps|if you are in the closet|and the guard passes by. - "Wenn du es bis zur Alarmanlage|geschafft hast, h\204ngst du dich|mit dem Sauger an die Wand,|damit du keinen Druck-Alarm ausl\224st.", //If you make it to the alarm system,|you'll use the sucker to hang on the wall|to avoid triggering the pressure alarm. - "Die Alarmanlage schaltest du|mit einem speziellen Ger\204t aus.", //You switch off the alarm system|with a special device. - "Wenn du das geschafft hast, nichts|wie raus! Aber keine Panik,|du darfst keinen Alarm ausl\224sen.", //Once you're done, get out of there!|But do not panic!|You must not set off the alarm. - // 510 - "So, noch irgendwelche Fragen?", //So, any more questions? - "Also gut.", //All right then. - "Du bekommst 30000 Xa.", //You get 30,000 Xa. - "Ja, die Methode hat sich bew\204hrt.", //Yes, that method has proven itself worthy. - "Hast du sonst noch Fragen?", //Do you have any questions? - // 515 - "Nachdem wir alles gekl\204rt|haben, kann es ja losgehen!", //Now that we are on the same page we can get started! - "Zur vereinbarten Zeit ...", //At the agreed upon time ... - "Du stehst vor dem Orzeng Museum,|w\204hrend die Gangster schon in einen|anderen Geb\204uderteil eingedrungen sind.", //You stand in front of the Orzeng Museum,|while the gangsters have already penetrated|into another part of the building. - "Wichtiger Hinweis:|Hier ist die letzte M\224glichkeit,|vor dem Einbruch abzuspeichern.", //Important note:|Here is the last possibility to save|before the break-in. - "Wenn Sie das Museum betreten haben,|k\224nnen Sie nicht mehr speichern!", //Once you enter the museum|you will not be able to save! - // 520 - "Stecken Sie sich Ihre|Tomaten an den Hut!", //You can keep your tomatoes! - "Das kann ja jeder sagen!", //Anyone can say that! - "Niemand \224ffnet.", //Nobody answers. - "Welche Zahl willst du eingeben: ", //What number do you want to enter: - "Falsche Eingabe", //Invalid input - // 525 - "Der Aufzug bewegt sich.", //The elevator is moving. - "Die Karte wird|nicht angenommen.", //The card|is not accepted. - "Da ist nichts mehr.", //There is nothing left. - "Da ist ein Schl\201ssel unter dem Bett!", //There's a key under the bed! - "Hey, da ist etwas unter dem|Bett. Nach dem Ger\204usch zu|urteilen, ist es aus Metall.", //Hey, there is something under the|bed. Judging by the noise,|it is made of metal. - // 530 - "Mist, es gelingt dir nicht,|den Gegenstand hervorzuholen.", //Damn, you do not succeed in getting the object out. - "Die Klappe ist schon offen.", //The flap is already open. - "Der Schl\201sssel pa\341t nicht.", //The key does not fit. - "Du steckst den Chip in die|Anlage, aber es passiert nichts.|Die Anlage scheint kaputt zu sein.", //You put the chip in the stereo,|but nothing happens.|The stereo seems to be broken. - "Es passiert nichts. Das Ding|scheint kaputt zu sein.", //Nothing happens. The thing|seems to be broken. - // 535 - "Hochspannung ist ungesund, wie du aus|Teil 1 eigentlich wissen m\201\341test!", //High voltage is unhealthy, as you|should already know|from Part 1! - "Es h\204ngt ein Kabel heraus.", //A cable hangs out. - "Irgendetwas hat hier|nicht ganz funktioniert.", //Something did not|quite work out here. - "Du ziehst den Raumanzug an.", //You put on your space suit. - "Du ziehst den Raumanzug aus.", //You take off your space suit. - // 540 - "Das ist schon verbunden.", //That is already connected. - "Die Leitung ist hier|schon ganz richtig.", //The cable is already|at the right place. - "Roger W.! Wie kommen Sie denn hierher?", //Roger W.! How did you get here? - "Ach, sieh mal einer an! Sie schon wieder!", //Oh, look at that! It's you again! - "Wo haben Sie denn|Ihr Schiff gelassen?", //Where did you|leave your ship? - // 545 - "Schauen Sie mal hinter mich auf|den Turm! Da oben h\204ngt es.", //Take a look behind me, up on|the tower! It's up there. - "Ich hatte es scheinbar etwas zu|eilig, aber ich mu\341te unbedingt|zu den Dreharbeiten nach Xenon!", //Apparently I was too much in a hurry,|but I had to be at the film shooting in Xenon! - "Mich wundert, da\341 es die Leute|hier so gelassen nehmen.", //I am surprised that people|here take things so calmly. - "Die tun gerade so, als ob der Turm|schon immer so schr\204g gestanden h\204tte!", //They are pretending that the tower|has always been that slanted! - "Hat er auch, schon seit|mehreren Jahrhunderten!", //It has, for|several centuries, actually! - // 550 - "\216h ... ach so. Und von wo|kommen Sie? Sie hatten's ja|wohl auch ziemlich eilig.", //Uh ... I see. And where are you coming from? It seems you were in quite a hurry as well. - "Ich komme von Axacuss.", //I come from Axacuss. - "Hmm, was mach ich jetzt blo\341?", //Hmm, what am I going to do now? - "Ich kenne ein gutes Cafe nicht|weit von hier, da k\224nnen|wir uns erstmal erholen.", //I know a good cafe not far from here,|where we can get some rest. - "Ok, einverstanden.", //OK, I agree. - // 555 - "Faszinierend!", //Fascinating! - "Taxis", //Taxis - "Hier ist ja richtig was los!", //There seems to be something really going on here! - "Axacussaner", //Axacussan - "Teilnahmekarte", //Participation card - // 560 - "Axacussanerin", //Axacussian - "Darauf steht:|\"115AY2,96A\"", //It reads:|"115AY2,96A" - "Darauf steht:|\"115AY2,96B\"", //It reads:|"115AY2,96B" - "Darauf steht:|\"341,105A\"", //It reads:|"341,105A" - "Darauf steht:|\"341,105B\"", //It reads:|"341,105B" - // 565 - "Klingel", //Bell - "Anzeige", //Display - "Tastenblock", //Keypad - "Es sind Tasten von 0 bis 9 darauf.", //There are keys from 0 to 9 on it. - "Chip", //Chip - // 570 - "Es ist ein Musikchip!", //It's a music chip! - "Klappe", //Hatch - "Sie ist mit einem altmodischen|Schlo\341 verschlossen.", //It is secured with an old-fashioned lock. - "Musikanlage", //Music system - "Toll, eine in die Wand|integrierte Stereoanlage.", //Great, a built-in stereo|in the wall. - // 575 - "Boxen", //Speakers - "Ganz normale Boxen.", //Ordinary speakers. - "Stifte", //Pencils - "Ganz normale Stifte.", //Ordinary pencils. - "Metallkl\224tzchen", //Metal blocks - // 580 - "Es ist magnetisch.", //It is magnetic. - "Bild", //Image - "Ein ungew\224hnliches Bild.", //An unusual picture. - "Schrank", //Cabinet - "Er ist verschlossen", //It is closed - // 585 - "Aufzug", //Elevator - "unter Bett", //under bed - "Unter dem Bett sind bestimmt wichtige|Dinge zu finden, nur kommst du nicht darunter.|Du br\204uchtest einen Stock oder so etwas.", //Under the bed are certainly important|things to find, only you cannot reach underneath.|You need a stick or something. - "Schl\201ssel", //Key - "Ein kleiner Metallschl\201ssel.", //A small metal key. - // 590 - "Schalter", //Switch - "Griff", //Handle - "Luke", //Hatch - "Raumanzug", //Space suit - "Ein zusammenfaltbarer Raumanzug.", //A collapsible spacesuit. - // 595 - "Leitung", //Cable - "Irgendetwas scheint hier|kaputtgegangen zu sein.", //Something seems to|have broken here. - "Sie h\204ngt lose von der Decke runter.", //It hangs loose from the ceiling. - "Zur Erinnerung:|Dir ist es gelungen, aus den|Artus-Geheimb\201ros zu fliehen.", //Reminder:|You managed to escape from the|Artus-GmbH secret offices. - "Nun befindest du dich in|einem Passagierraumschiff,|das nach Axacuss City fliegt.", //Now you are in a passenger|spaceship that|flies to Axacuss City. - // 600 - "W\204hrend des Fluges schaust du dir|das axacussanische Fernsehprogramm an.|Du st\224\341t auf etwas Interessantes ...", //During the flight, you watch the|Axacussan TV program.|You come across something interesting ... - "Herzlich willkommen!", //Welcome! - "Heute zu Gast ist Alga Lorch.|Sie wird Fragen an den Erdling|Horst Hummel stellen.", //Alga Lorch will be present today.|She will ask questions to the Earthling|Horst Hummel. - "Horst wird alle Fragen|beantworten, soweit es|ihm m\224glich ist.", //Horst will answer all|questions as fully|as possible. - "Sie haben das Wort, Frau Lorch!", //You have the floor, Mrs Lorch! - // 605 - "Herr Hummel, hier ist meine erste Frage: ...", //Mr. Hummel, here is my first question: ... - "Sie sind nun ein ber\201hmter Mann auf Axacuss.|Aber sicher vermissen Sie auch Ihren Heimatplaneten.", //You are now a famous man on Axacuss.|But surely you miss your home planet. - "Wenn Sie w\204hlen k\224nnten, w\201rden Sie lieber|ein normales Leben auf der Erde f\201hren,|oder finden Sie das Leben hier gut?", //If you could choose, would you prefer|to lead a normal life on Earth,|or do you find life here good? - "Ehrlich gesagt finde ich es sch\224n,|ber\201hmt zu sein. Das Leben ist|aufregender als auf der Erde.", //Honestly, I think it's nice to be|famous. Life is more exciting here|than on Earth. - "Au\341erdem sind die Leute von der|Artus GmbH hervorragende Freunde.", //In addition, the people of|Artus GmbH are excellent friends. - // 610 - "Nun ja, planen Sie denn trotzdem,|irgendwann auf die Erde zur\201ckzukehren?", //Well, are you still planning|to return to Earth someday? - "Das kann ich Ihnen zum jetzigen|Zeitpunkt noch nicht genau sagen.", //At this point in time,|I haven't made up my mind, yet. - "Aber ich versichere Ihnen, ich|werde noch eine Weile hierbleiben.", //But I assure you,|I will stay here for a while. - "Aha, mich interessiert au\341erdem,|ob es hier auf Axacuss etwas gibt,|das Sie besonders m\224gen.", //I see. I'm also interested in|whether there's anything here on Axacuss that you particularly like. - "Oh mir gef\204llt der ganze Planet,|aber das Beste hier sind die|hervorragenden Artus-Zahnb\201rsten!", //Oh I like the whole planet,|but the best thing here are the|extraordinary Artus toothbrushes! - // 615 - "Zahnb\201rsten von solcher Qualit\204t|gab es auf der Erde nicht.", //Toothbrushes of such quality|do not exist on Earth. - "\216h, ach so.", //Um, I see. - "Pl\224tzlich lenkt dich eine|Lautsprecherstimme vom Fernseher ab.", //Suddenly, a speaker's voice|distracts you from the television. - "\"Sehr geehrte Damen und Herren,|wir sind soeben auf dem Flughafen|von Axacuss City gelandet.\"", //"Ladies and Gentlemen,|We just landed at the airport|at Axacuss City." - "\"Ich hoffe, Sie hatten einen angenehmen Flug.|Bitte verlassen Sie das Raumschiff! Auf Wiedersehen!\"", //"I hope you had a nice flight.|Please leave the spaceship! Goodbye!" - // 620 - "W\204hrend die anderen Passagiere|aussteigen, versuchst du,|den Schock zu verarbeiten.", //While the other passengers|are disembarking, you are trying|to handle the shock. - "\"Ich mu\341 beweisen, da\341 dieser|Roboter der falsche Horst|Hummel ist!\", denkst du.", //"I have to prove that this robot|is the wrong Horst|Hummel!", you think to yourself. - "\"Diese Mistkerle von der Artus GmbH und|Commander Sumoti m\201ssen entlarvt werden!\"", //"These bastards from Artus GmbH and|Commander Sumoti must be unmasked!" - "Sieht gef\204hrlich aus!", //Looks dangerous - "Das Auge ist schon offen.", //This Eye is already opened - // 625 - "Es gelingt dir, zu fliehen.", //You manage to escape - NULL -}; - -#endif // GAMETEXT_H diff --git a/devtools/create_supernova2/img1-en-original.jpg b/devtools/create_supernova2/img1-en-original.jpg Binary files differdeleted file mode 100644 index 6eb4fa73c7..0000000000 --- a/devtools/create_supernova2/img1-en-original.jpg +++ /dev/null diff --git a/devtools/create_supernova2/img1-en.pbm b/devtools/create_supernova2/img1-en.pbm Binary files differdeleted file mode 100644 index bc09a53ed7..0000000000 --- a/devtools/create_supernova2/img1-en.pbm +++ /dev/null diff --git a/devtools/create_supernova2/img1-en.xcf b/devtools/create_supernova2/img1-en.xcf Binary files differdeleted file mode 100644 index e621ada3e2..0000000000 --- a/devtools/create_supernova2/img1-en.xcf +++ /dev/null diff --git a/devtools/create_supernova2/module.mk b/devtools/create_supernova2/module.mk deleted file mode 100644 index 9c3d671d77..0000000000 --- a/devtools/create_supernova2/module.mk +++ /dev/null @@ -1,15 +0,0 @@ -MODULE := devtools/create_supernova2 - -MODULE_OBJS := \ - file.o \ - po_parser.o \ - create_supernova2.o - -# Set the name of the executable -TOOL_EXECUTABLE := create_supernova2 - -# Include common rules -include $(srcdir)/rules.mk - -include $(srcdir)/devtools/create_supernova2/create_image/module.mk -.PHONY: $(srcdir)/devtools/create_supernova2/create_image/module.mk diff --git a/devtools/create_supernova2/po_parser.cpp b/devtools/create_supernova2/po_parser.cpp deleted file mode 100644 index 05a8ac14a7..0000000000 --- a/devtools/create_supernova2/po_parser.cpp +++ /dev/null @@ -1,221 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> - -#include "po_parser.h" - -PoMessageList::PoMessageList() : _list(NULL), _size(0), _allocated(0) { -} - -PoMessageList::~PoMessageList() { - for (int i = 0; i < _size; ++i) - delete _list[i]; - delete[] _list; -} - -int PoMessageList::compareString(const char* left, const char* right) { - if (left == NULL && right == NULL) - return 0; - if (left == NULL) - return -1; - if (right == NULL) - return 1; - return strcmp(left, right); -} - -int PoMessageList::compareMessage(const char *msgLeft, const char *contextLeft, const char *msgRight, const char *contextRight) { - int compare = compareString(msgLeft, msgRight); - if (compare != 0) - return compare; - return compareString(contextLeft, contextRight); -} - -void PoMessageList::insert(const char *translation, const char *msg, const char *context) { - if (msg == NULL || *msg == '\0' || translation == NULL || *translation == '\0') - return; - - // binary-search for the insertion index - int leftIndex = 0; - int rightIndex = _size - 1; - while (rightIndex >= leftIndex) { - int midIndex = (leftIndex + rightIndex) / 2; - int compareResult = compareMessage(msg, context, _list[midIndex]->msgid, _list[midIndex]->msgctxt); - if (compareResult == 0) - return; // The message is already in this list - else if (compareResult < 0) - rightIndex = midIndex - 1; - else - leftIndex = midIndex + 1; - } - // We now have rightIndex = leftIndex - 1 and we need to insert the new message - // between the two (i.a. at leftIndex). - if (_size + 1 > _allocated) { - _allocated += 100; - PoMessage **newList = new PoMessage*[_allocated]; - for (int i = 0; i < leftIndex; ++i) - newList[i] = _list[i]; - for (int i = leftIndex; i < _size; ++i) - newList[i + 1] = _list[i]; - delete[] _list; - _list = newList; - } else { - for (int i = _size - 1; i >= leftIndex; --i) - _list[i + 1] = _list[i]; - } - _list[leftIndex] = new PoMessage(translation, msg, context); - ++_size; -} - -const char *PoMessageList::findTranslation(const char *msg, const char *context) { - if (msg == NULL || *msg == '\0') - return NULL; - - // binary-search for the message - int leftIndex = 0; - int rightIndex = _size - 1; - while (rightIndex >= leftIndex) { - int midIndex = (leftIndex + rightIndex) / 2; - int compareResult = compareMessage(msg, context, _list[midIndex]->msgid, _list[midIndex]->msgctxt); - if (compareResult == 0) - return _list[midIndex]->msgstr; - else if (compareResult < 0) - rightIndex = midIndex - 1; - else - leftIndex = midIndex + 1; - } - return NULL; -} - -PoMessageList *parsePoFile(const char *file) { - FILE *inFile = fopen(file, "r"); - if (!inFile) - return NULL; - - char msgidBuf[1024], msgctxtBuf[1024], msgstrBuf[1024]; - char line[1024], *currentBuf = msgstrBuf; - - PoMessageList *list = new PoMessageList(); - - // Initialize the message attributes. - bool fuzzy = false; - bool fuzzy_next = false; - - // Parse the file line by line. - // The msgstr is always the last line of an entry (i.e. msgid and msgctxt always - // precede the corresponding msgstr). - msgidBuf[0] = msgstrBuf[0] = msgctxtBuf[0] = '\0'; - while (!feof(inFile) && fgets(line, 1024, inFile)) { - if (line[0] == '#' && line[1] == ',') { - // Handle message attributes. - if (strstr(line, "fuzzy")) { - fuzzy_next = true; - continue; - } - } - // Skip empty and comment line - if (*line == '\n' || *line == '#') - continue; - if (strncmp(line, "msgid", 5) == 0) { - if (currentBuf == msgstrBuf) { - // add previous entry - if (*msgstrBuf != '\0' && !fuzzy) - list->insert(msgstrBuf, msgidBuf, msgctxtBuf); - msgidBuf[0] = msgstrBuf[0] = msgctxtBuf[0] = '\0'; - - // Reset the attribute flags. - fuzzy = fuzzy_next; - fuzzy_next = false; - } - strcpy(msgidBuf, stripLine(line)); - currentBuf = msgidBuf; - } else if (strncmp(line, "msgctxt", 7) == 0) { - if (currentBuf == msgstrBuf) { - // add previous entry - if (*msgstrBuf != '\0' && !fuzzy) - list->insert(msgstrBuf, msgidBuf, msgctxtBuf); - msgidBuf[0] = msgstrBuf[0] = msgctxtBuf[0] = '\0'; - - // Reset the attribute flags - fuzzy = fuzzy_next; - fuzzy_next = false; - } - strcpy(msgctxtBuf, stripLine(line)); - currentBuf = msgctxtBuf; - } else if (strncmp(line, "msgstr", 6) == 0) { - strcpy(msgstrBuf, stripLine(line)); - currentBuf = msgstrBuf; - } else { - // concatenate the string at the end of the current buffer - if (currentBuf) - strcat(currentBuf, stripLine(line)); - } - } - if (currentBuf == msgstrBuf) { - // add last entry - if (*msgstrBuf != '\0' && !fuzzy) - list->insert(msgstrBuf, msgidBuf, msgctxtBuf); - } - - fclose(inFile); - return list; -} - -char *stripLine(char *const line) { - // This function modifies line in place and return it. - // Keep only the text between the first two unprotected quotes. - // It also look for literal special characters (e.g. preceded by '\n', '\\', '\"', '\'', '\t') - // and replace them by the special character so that strcmp() can match them at run time. - // Look for the first quote - char const *src = line; - while (*src != '\0' && *src++ != '"') {} - // shift characters until we reach the end of the string or an unprotected quote - char *dst = line; - while (*src != '\0' && *src != '"') { - char c = *src++; - if (c == '\\') { - switch (c = *src++) { - case 'n': c = '\n'; break; - case 't': c = '\t'; break; - case '\"': c = '\"'; break; - case '\'': c = '\''; break; - case '\\': c = '\\'; break; - default: - // Just skip - fprintf(stderr, "Unsupported special character \"\\%c\" in string. Please contact ScummVM developers.\n", c); - continue; - } - } - *dst++ = c; - } - *dst = '\0'; - return line; -} - -char *parseLine(const char *line, const char *field) { - // This function allocate and return a new char*. - // It will return a NULL pointer if the field is not found. - // It is used to parse the header of the po files to find the language name - // and the charset. - const char *str = strstr(line, field); - if (str == NULL) - return NULL; - str += strlen(field); - // Skip spaces - while (*str != '\0' && isspace(*str)) { - ++str; - } - // Find string length (stop at the first '\n') - int len = 0; - while (str[len] != '\0' && str[len] != '\n') { - ++len; - } - if (len == 0) - return NULL; - // Create result string - char *result = new char[len + 1]; - strncpy(result, str, len); - result[len] = '\0'; - return result; -} - diff --git a/devtools/create_supernova2/po_parser.h b/devtools/create_supernova2/po_parser.h deleted file mode 100644 index 7c358e32f6..0000000000 --- a/devtools/create_supernova2/po_parser.h +++ /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. - * - * This is a utility for generating a data file for the supernova engine. - * It contains strings extracted from the original executable as well - * as translations and is required for the engine to work properly. - */ - -#ifndef PO_PARSER_H -#define PO_PARSER_H - -struct PoMessage { - char *msgstr; - char *msgid; - char *msgctxt; - - PoMessage(const char *translation, const char *message, const char *context = NULL) : - msgstr(NULL), msgid(NULL), msgctxt(NULL) - { - if (translation != NULL && *translation != '\0') { - msgstr = new char[1 + strlen(translation)]; - strcpy(msgstr, translation); - } - if (message != NULL && *message != '\0') { - msgid = new char[1 + strlen(message)]; - strcpy(msgid, message); - } - if (context != NULL && *context != '\0') { - msgctxt = new char[1 + strlen(context)]; - strcpy(msgctxt, context); - } - } - ~PoMessage() { - delete[] msgstr; - delete[] msgid; - delete[] msgctxt; - } -}; - -class PoMessageList { -public: - PoMessageList(); - ~PoMessageList(); - - void insert(const char *translation, const char *msg, const char *context = NULL); - const char *findTranslation(const char *msg, const char *context = NULL); - -private: - int compareString(const char *left, const char *right); - int compareMessage(const char *msgLeft, const char *contextLeft, const char *msgRight, const char *contextRight); - - PoMessage **_list; - int _size; - int _allocated; -}; - -PoMessageList *parsePoFile(const char *file); -char *stripLine(char *); -char *parseLine(const char *line, const char *field); - -#endif /* PO_PARSER_H */ diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp index 7bd1cc6063..fb248e3e81 100644 --- a/engines/supernova/graphics.cpp +++ b/engines/supernova/graphics.cpp @@ -96,36 +96,24 @@ bool MSNImage::loadPbmFromEngineDataFile() { Common::File f; char id[5], lang[5]; id[4] = lang[4] = '\0'; - if (_MSPart == 1) { - if (_filenumber == 1) - name = "IMG1"; - else if (_filenumber == 2) - name = "IMG2"; - else - - return false; - if (!f.open(SUPERNOVA_DAT)) - return false; - - f.read(id, 3); - if (strncmp(id, "MSN", 3) != 0) - return false; - int version = f.readByte(); - if (version != SUPERNOVA_DAT_VERSION) - return false; - } else if (_MSPart == 2) { - return false; - - if (!f.open(SUPERNOVA2_DAT)) - return false; + if (_MSPart == 2) + return false; + if (_filenumber == 1) + name = "IMG1"; + else if (_filenumber == 2) + name = "IMG2"; + else - f.read(id, 3); - if (strncmp(id, "MS2", 3) != 0) - return false; - int version = f.readByte(); - if (version != SUPERNOVA2_DAT_VERSION) - return false; - } + return false; + if (!f.open(SUPERNOVA_DAT)) + return false; + + f.read(id, 3); + if (strncmp(id, "MSN", 3) != 0) + return false; + int version = f.readByte(); + if (version != SUPERNOVA_DAT_VERSION) + return false; Common::String cur_lang = ConfMan.get("language"); @@ -133,8 +121,23 @@ bool MSNImage::loadPbmFromEngineDataFile() { // or the format is not as expected. We will get those warning when reading the // strings anyway (actually the engine will even refuse to start). - + int part; + uint32 gameBlockSize; while (!f.eos()) { + part = f.readByte(); + gameBlockSize = f.readUint32LE(); + if (f.eos()){ + return false; + } + if (part == _MSPart) { + break; + } else + f.skip(gameBlockSize); + } + + uint32 readSize = 0; + + while (readSize < gameBlockSize) { f.read(id, 4); f.read(lang, 4); uint32 size = f.readUint32LE(); @@ -142,8 +145,10 @@ bool MSNImage::loadPbmFromEngineDataFile() { break; if (name == id && cur_lang == lang) { return f.read(_encodedImage, size) == size; - } else + } else { f.skip(size); + readSize += size; + } } return false; @@ -164,20 +169,35 @@ bool MSNImage::loadFromEngineDataFile() { else return false; - if (!f.open(SUPERNOVA2_DAT)) + if (!f.open(SUPERNOVA_DAT)) return false; f.read(id, 3); - if (strncmp(id, "MS2", 3) != 0) + if (strncmp(id, "MSN", 3) != 0) return false; int version = f.readByte(); - if (version != SUPERNOVA2_DAT_VERSION) + if (version != SUPERNOVA_DAT_VERSION) return false; } Common::String cur_lang = ConfMan.get("language"); + int part; + uint32 gameBlockSize; while (!f.eos()) { + part = f.readByte(); + gameBlockSize = f.readUint32LE(); + if (f.eos()){ + return false; + } + if (part == _MSPart) { + break; + } else + f.skip(gameBlockSize); + } + + uint32 readSize = 0; + while (readSize < gameBlockSize) { f.read(id, 4); f.read(lang, 4); uint32 size = f.readUint32LE(); @@ -185,8 +205,10 @@ bool MSNImage::loadFromEngineDataFile() { break; if (name == id && cur_lang == lang) { return loadStream(*f.readStream(size)); - } else + } else { f.skip(size); + readSize += size; + } } return false; diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp index 7dc04b0c82..8aacbe83b0 100644 --- a/engines/supernova/screen.cpp +++ b/engines/supernova/screen.cpp @@ -107,6 +107,7 @@ Marquee::Marquee(Screen *screen, MarqueeId id, const char *text) , _textBegin(text) , _delay(0) , _loop(false) + , _oldColor(nullptr) , _screen(screen) { if (_screen->_vm->_MSPart == 1) { _color = kColorLightBlue; @@ -117,6 +118,10 @@ Marquee::Marquee(Screen *screen, MarqueeId id, const char *text) _y = 1; } } else if (_screen->_vm->_MSPart == 2) { + byte purple[3] = {0x9b, 0x00, 0xfb}; + _oldColor = new byte[3]; + _screen->_vm->_system->getPaletteManager()->grabPalette(_oldColor, kColorPurple, 1); + _screen->_vm->_system->getPaletteManager()->setPalette(purple, kColorPurple, 1); _color = kColorPurple; if (id == kMarqueeIntro) { _y = 191; @@ -133,6 +138,13 @@ Marquee::Marquee(Screen *screen, MarqueeId id, const char *text) _screen->_textColor = _color; } +Marquee::~Marquee() { + if (_screen->_vm->_MSPart == 2) { + _screen->_vm->_system->getPaletteManager()->setPalette(_oldColor, kColorPurple, 1); + delete _oldColor; + } +} + void Marquee::clearText() { _screen->renderBox(_x, _y - 1, _textWidth + 1, 9, kColorBlack); } diff --git a/engines/supernova/screen.h b/engines/supernova/screen.h index 0779973fe9..5a94dc05d7 100644 --- a/engines/supernova/screen.h +++ b/engines/supernova/screen.h @@ -64,7 +64,7 @@ enum Color { kColorLightGreen = 13, kColorLightYellow = 14, kColorLightRed = 15, - kColorPurple = 35, + kColorPurple = 16, kColorCursorTransparent = kColorWhite25 }; @@ -102,6 +102,7 @@ public: }; Marquee(Screen *screen, MarqueeId id, const char *text); + ~Marquee(); bool renderCharacter(); void reset(); @@ -115,6 +116,7 @@ private: bool _loop; int _delay; int _color; + byte *_oldColor; int _x; int _y; int _textWidth; diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index d186995f6b..16569cf83a 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -197,47 +197,42 @@ Common::Error SupernovaEngine::loadGameStrings() { Common::File f; char id[5], lang[5]; id[4] = lang[4] = '\0'; - if (_MSPart == 1) { - if (!f.open(SUPERNOVA_DAT)) { - GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA_DAT); - return Common::kReadingFailed; - } - f.read(id, 3); - if (strncmp(id, "MSN", 3) != 0) { - GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA_DAT); - return Common::kReadingFailed; - } + if (!f.open(SUPERNOVA_DAT)) { + GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA_DAT); + return Common::kReadingFailed; + } + f.read(id, 3); + if (strncmp(id, "MSN", 3) != 0) { + GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA_DAT); + return Common::kReadingFailed; + } - int version = f.readByte(); - if (version != SUPERNOVA_DAT_VERSION) { - GUIErrorMessageFormat( - _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), - SUPERNOVA_DAT, SUPERNOVA_DAT_VERSION, version); - return Common::kReadingFailed; - } + int version = f.readByte(); + if (version != SUPERNOVA_DAT_VERSION) { + GUIErrorMessageFormat( + _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), + SUPERNOVA_DAT, SUPERNOVA_DAT_VERSION, version); + return Common::kReadingFailed; } - else if (_MSPart == 2) { - if (!f.open(SUPERNOVA2_DAT)) { - GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA2_DAT); - return Common::kReadingFailed; - } - f.read(id, 3); - if (strncmp(id, "MS2", 3) != 0) { - GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA2_DAT); - return Common::kReadingFailed; - } - int version = f.readByte(); - if (version != SUPERNOVA2_DAT_VERSION) { - GUIErrorMessageFormat( - _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), - SUPERNOVA2_DAT, SUPERNOVA2_DAT_VERSION, version); + int part; + uint32 gameBlockSize; + while (!f.eos()) { + part = f.readByte(); + gameBlockSize = f.readUint32LE(); + if (f.eos()){ + GUIErrorMessageFormat(_("Unable to find block for part %d"), _MSPart); return Common::kReadingFailed; } + if (part == _MSPart) { + break; + } else + f.skip(gameBlockSize); } + uint32 readSize = 0; - while (!f.eos()) { + while (readSize < gameBlockSize) { f.read(id, 4); f.read(lang, 4); uint32 size = f.readUint32LE(); @@ -253,8 +248,10 @@ Common::Error SupernovaEngine::loadGameStrings() { size -= s.size() + 1; } return Common::kNoError; - } else + } else { f.skip(size); + readSize += size; + } } Common::Language l = Common::parseLanguage(cur_lang); @@ -517,47 +514,42 @@ Common::SeekableReadStream *SupernovaEngine::getBlockFromDatFile(Common::String Common::File f; char id[5], lang[5]; id[4] = lang[4] = '\0'; - if (_MSPart == 1) { - if (!f.open(SUPERNOVA_DAT)) { - GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA_DAT); - return nullptr; - } - f.read(id, 3); - if (strncmp(id, "MSN", 3) != 0) { - GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA_DAT); - return nullptr; - } + if (!f.open(SUPERNOVA_DAT)) { + GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA_DAT); + return nullptr; + } + f.read(id, 3); + if (strncmp(id, "MSN", 3) != 0) { + GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA_DAT); + return nullptr; + } - int version = f.readByte(); - if (version != SUPERNOVA_DAT_VERSION) { - GUIErrorMessageFormat( - _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), - SUPERNOVA_DAT, SUPERNOVA_DAT_VERSION, version); - return nullptr; - } + int version = f.readByte(); + if (version != SUPERNOVA_DAT_VERSION) { + GUIErrorMessageFormat( + _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), + SUPERNOVA_DAT, SUPERNOVA_DAT_VERSION, version); + return nullptr; } - else if (_MSPart == 2) { - if (!f.open(SUPERNOVA2_DAT)) { - GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), SUPERNOVA2_DAT); - return nullptr; - } - f.read(id, 3); - if (strncmp(id, "MS2", 3) != 0) { - GUIErrorMessageFormat(_("The '%s' engine data file is corrupt."), SUPERNOVA2_DAT); - return nullptr; - } - int version = f.readByte(); - if (version != SUPERNOVA2_DAT_VERSION) { - GUIErrorMessageFormat( - _("Incorrect version of the '%s' engine data file found. Expected %d but got %d."), - SUPERNOVA2_DAT, SUPERNOVA2_DAT_VERSION, version); + int part; + uint32 gameBlockSize; + while (!f.eos()) { + part = f.readByte(); + gameBlockSize = f.readUint32LE(); + if (f.eos()){ + GUIErrorMessageFormat(_("Unable to find block for part %d"), _MSPart); return nullptr; } + if (part == _MSPart) { + break; + } else + f.skip(gameBlockSize); } + uint32 readSize = 0; - while (!f.eos()) { + while (readSize < gameBlockSize) { f.read(id, 4); f.read(lang, 4); uint32 size = f.readUint32LE(); @@ -565,8 +557,10 @@ Common::SeekableReadStream *SupernovaEngine::getBlockFromDatFile(Common::String break; if (name == id && cur_lang == lang) { return f.readStream(size); - } else + } else { f.skip(size); + readSize += size; + } } return nullptr; diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h index 8a6fe0f9c1..8139d5f00e 100644 --- a/engines/supernova/supernova.h +++ b/engines/supernova/supernova.h @@ -49,10 +49,7 @@ namespace Supernova { #define SAVEGAME_VERSION 10 #define SUPERNOVA_DAT "supernova.dat" -#define SUPERNOVA_DAT_VERSION 2 - -#define SUPERNOVA2_DAT "supernova2.dat" -#define SUPERNOVA2_DAT_VERSION 2 +#define SUPERNOVA_DAT_VERSION 3 class GuiElement; class ResourceManager; |