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