aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)bin1567 -> 1567 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image0.bmp (renamed from devtools/create_supernova2/create_image/015/image0.bmp)bin45306 -> 45306 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image1.bmp (renamed from devtools/create_supernova2/create_image/015/image1.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image10.bmp (renamed from devtools/create_supernova2/create_image/015/image10.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image11.bmp (renamed from devtools/create_supernova2/create_image/015/image11.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image12.bmp (renamed from devtools/create_supernova2/create_image/015/image12.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image13.bmp (renamed from devtools/create_supernova2/create_image/015/image13.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image14.bmp (renamed from devtools/create_supernova2/create_image/015/image14.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image15.bmp (renamed from devtools/create_supernova2/create_image/015/image15.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image16.bmp (renamed from devtools/create_supernova2/create_image/015/image16.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image17.bmp (renamed from devtools/create_supernova2/create_image/015/image17.bmp)bin20298 -> 20298 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image18.bmp (renamed from devtools/create_supernova2/create_image/015/image18.bmp)bin15282 -> 15282 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image19.bmp (renamed from devtools/create_supernova2/create_image/015/image19.bmp)bin7074 -> 7074 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image2.bmp (renamed from devtools/create_supernova2/create_image/015/image2.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image3.bmp (renamed from devtools/create_supernova2/create_image/015/image3.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image4.bmp (renamed from devtools/create_supernova2/create_image/015/image4.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image5.bmp (renamed from devtools/create_supernova2/create_image/015/image5.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image6.bmp (renamed from devtools/create_supernova2/create_image/015/image6.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image7.bmp (renamed from devtools/create_supernova2/create_image/015/image7.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image8.bmp (renamed from devtools/create_supernova2/create_image/015/image8.bmp)bin1314 -> 1314 bytes
-rw-r--r--devtools/create_supernova/create_image/015/image9.bmp (renamed from devtools/create_supernova2/create_image/015/image9.bmp)bin1314 -> 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)bin64830 -> 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-xdevtools/create_supernova/create_image/create_ms2_data.015.sh (renamed from devtools/create_supernova2/create_image/create_ms2_data.015.sh)0
-rwxr-xr-xdevtools/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.cpp154
-rw-r--r--devtools/create_supernova/create_supernova.h2
-rw-r--r--devtools/create_supernova/gametext.h758
-rw-r--r--devtools/create_supernova/module.mk3
-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)bin87123 -> 87123 bytes
-rw-r--r--devtools/create_supernova/ms2_data.028-en (renamed from devtools/create_supernova2/ms2_data.028-en)bin64744 -> 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.cpp339
-rw-r--r--devtools/create_supernova2/create_supernova2.h33
-rw-r--r--devtools/create_supernova2/file.cpp66
-rw-r--r--devtools/create_supernova2/file.h59
-rw-r--r--devtools/create_supernova2/gametext.h793
-rw-r--r--devtools/create_supernova2/img1-en-original.jpgbin269133 -> 0 bytes
-rw-r--r--devtools/create_supernova2/img1-en.pbmbin38457 -> 0 bytes
-rw-r--r--devtools/create_supernova2/img1-en.xcfbin22946 -> 0 bytes
-rw-r--r--devtools/create_supernova2/module.mk15
-rw-r--r--devtools/create_supernova2/po_parser.cpp221
-rw-r--r--devtools/create_supernova2/po_parser.h78
-rw-r--r--engines/supernova/graphics.cpp92
-rw-r--r--engines/supernova/screen.cpp12
-rw-r--r--engines/supernova/screen.h4
-rw-r--r--engines/supernova/supernova.cpp130
-rw-r--r--engines/supernova/supernova.h5
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
index cae63117a5..cae63117a5 100644
--- a/devtools/create_supernova2/create_image/015/free_tile.xcf
+++ b/devtools/create_supernova/create_image/015/free_tile.xcf
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image0.bmp b/devtools/create_supernova/create_image/015/image0.bmp
index dbe9d249c2..dbe9d249c2 100644
--- a/devtools/create_supernova2/create_image/015/image0.bmp
+++ b/devtools/create_supernova/create_image/015/image0.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image1.bmp b/devtools/create_supernova/create_image/015/image1.bmp
index afee16bff8..afee16bff8 100644
--- a/devtools/create_supernova2/create_image/015/image1.bmp
+++ b/devtools/create_supernova/create_image/015/image1.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image10.bmp b/devtools/create_supernova/create_image/015/image10.bmp
index b7bd16f5ee..b7bd16f5ee 100644
--- a/devtools/create_supernova2/create_image/015/image10.bmp
+++ b/devtools/create_supernova/create_image/015/image10.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image11.bmp b/devtools/create_supernova/create_image/015/image11.bmp
index 7bc12dc3e5..7bc12dc3e5 100644
--- a/devtools/create_supernova2/create_image/015/image11.bmp
+++ b/devtools/create_supernova/create_image/015/image11.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image12.bmp b/devtools/create_supernova/create_image/015/image12.bmp
index 27c3822321..27c3822321 100644
--- a/devtools/create_supernova2/create_image/015/image12.bmp
+++ b/devtools/create_supernova/create_image/015/image12.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image13.bmp b/devtools/create_supernova/create_image/015/image13.bmp
index 4757b8c98b..4757b8c98b 100644
--- a/devtools/create_supernova2/create_image/015/image13.bmp
+++ b/devtools/create_supernova/create_image/015/image13.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image14.bmp b/devtools/create_supernova/create_image/015/image14.bmp
index 1f4ac7f2d1..1f4ac7f2d1 100644
--- a/devtools/create_supernova2/create_image/015/image14.bmp
+++ b/devtools/create_supernova/create_image/015/image14.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image15.bmp b/devtools/create_supernova/create_image/015/image15.bmp
index 784f3a175f..784f3a175f 100644
--- a/devtools/create_supernova2/create_image/015/image15.bmp
+++ b/devtools/create_supernova/create_image/015/image15.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image16.bmp b/devtools/create_supernova/create_image/015/image16.bmp
index 1f4ac7f2d1..1f4ac7f2d1 100644
--- a/devtools/create_supernova2/create_image/015/image16.bmp
+++ b/devtools/create_supernova/create_image/015/image16.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image17.bmp b/devtools/create_supernova/create_image/015/image17.bmp
index 01a0a9539a..01a0a9539a 100644
--- a/devtools/create_supernova2/create_image/015/image17.bmp
+++ b/devtools/create_supernova/create_image/015/image17.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image18.bmp b/devtools/create_supernova/create_image/015/image18.bmp
index 6989ef9e94..6989ef9e94 100644
--- a/devtools/create_supernova2/create_image/015/image18.bmp
+++ b/devtools/create_supernova/create_image/015/image18.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image19.bmp b/devtools/create_supernova/create_image/015/image19.bmp
index f5a5afdde7..f5a5afdde7 100644
--- a/devtools/create_supernova2/create_image/015/image19.bmp
+++ b/devtools/create_supernova/create_image/015/image19.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image2.bmp b/devtools/create_supernova/create_image/015/image2.bmp
index b7bd16f5ee..b7bd16f5ee 100644
--- a/devtools/create_supernova2/create_image/015/image2.bmp
+++ b/devtools/create_supernova/create_image/015/image2.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image3.bmp b/devtools/create_supernova/create_image/015/image3.bmp
index 2d646d9e5c..2d646d9e5c 100644
--- a/devtools/create_supernova2/create_image/015/image3.bmp
+++ b/devtools/create_supernova/create_image/015/image3.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image4.bmp b/devtools/create_supernova/create_image/015/image4.bmp
index 77493cb6e2..77493cb6e2 100644
--- a/devtools/create_supernova2/create_image/015/image4.bmp
+++ b/devtools/create_supernova/create_image/015/image4.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image5.bmp b/devtools/create_supernova/create_image/015/image5.bmp
index 784f3a175f..784f3a175f 100644
--- a/devtools/create_supernova2/create_image/015/image5.bmp
+++ b/devtools/create_supernova/create_image/015/image5.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image6.bmp b/devtools/create_supernova/create_image/015/image6.bmp
index 1f4ac7f2d1..1f4ac7f2d1 100644
--- a/devtools/create_supernova2/create_image/015/image6.bmp
+++ b/devtools/create_supernova/create_image/015/image6.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image7.bmp b/devtools/create_supernova/create_image/015/image7.bmp
index 77493cb6e2..77493cb6e2 100644
--- a/devtools/create_supernova2/create_image/015/image7.bmp
+++ b/devtools/create_supernova/create_image/015/image7.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image8.bmp b/devtools/create_supernova/create_image/015/image8.bmp
index e8047cbed4..e8047cbed4 100644
--- a/devtools/create_supernova2/create_image/015/image8.bmp
+++ b/devtools/create_supernova/create_image/015/image8.bmp
Binary files differ
diff --git a/devtools/create_supernova2/create_image/015/image9.bmp b/devtools/create_supernova/create_image/015/image9.bmp
index 693573601b..693573601b 100644
--- a/devtools/create_supernova2/create_image/015/image9.bmp
+++ b/devtools/create_supernova/create_image/015/image9.bmp
Binary files differ
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
index 9333191bc3..9333191bc3 100644
--- a/devtools/create_supernova2/create_image/028/image0.bmp
+++ b/devtools/create_supernova/create_image/028/image0.bmp
Binary files differ
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
index 20ab5307db..20ab5307db 100644
--- a/devtools/create_supernova2/ms2_data.015-en
+++ b/devtools/create_supernova/ms2_data.015-en
Binary files differ
diff --git a/devtools/create_supernova2/ms2_data.028-en b/devtools/create_supernova/ms2_data.028-en
index 88ab4c8ec1..88ab4c8ec1 100644
--- a/devtools/create_supernova2/ms2_data.028-en
+++ b/devtools/create_supernova/ms2_data.028-en
Binary files differ
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
deleted file mode 100644
index 6eb4fa73c7..0000000000
--- a/devtools/create_supernova2/img1-en-original.jpg
+++ /dev/null
Binary files differ
diff --git a/devtools/create_supernova2/img1-en.pbm b/devtools/create_supernova2/img1-en.pbm
deleted file mode 100644
index bc09a53ed7..0000000000
--- a/devtools/create_supernova2/img1-en.pbm
+++ /dev/null
Binary files differ
diff --git a/devtools/create_supernova2/img1-en.xcf b/devtools/create_supernova2/img1-en.xcf
deleted file mode 100644
index e621ada3e2..0000000000
--- a/devtools/create_supernova2/img1-en.xcf
+++ /dev/null
Binary files differ
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;