aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/lure/strings.cpp117
-rw-r--r--engines/lure/strings.h2
2 files changed, 19 insertions, 100 deletions
diff --git a/engines/lure/strings.cpp b/engines/lure/strings.cpp
index 51840a7e9c..3c90af91c3 100644
--- a/engines/lure/strings.cpp
+++ b/engines/lure/strings.cpp
@@ -25,6 +25,7 @@
#include "lure/strings.h"
#include "lure/disk.h"
+#include "lure/lure.h"
#include "lure/res.h"
#include "lure/room.h"
#include "common/endian.h"
@@ -35,109 +36,26 @@ StringData *int_strings = NULL;
StringData::StringData() {
int_strings = this;
+ Disk &disk = Disk::getReference();
for (uint8 ctr = 0; ctr < MAX_NUM_CHARS; ++ctr) _chars[ctr] = NULL;
_numChars = 0;
_names = Disk::getReference().getEntry(NAMES_RESOURCE_ID);
- _strings[0] = Disk::getReference().getEntry(STRINGS_RESOURCE_ID);
- _strings[1] = Disk::getReference().getEntry(STRINGS_2_RESOURCE_ID);
- _strings[2] = Disk::getReference().getEntry(STRINGS_3_RESOURCE_ID);
+ _strings[0] = disk.getEntry(STRINGS_RESOURCE_ID);
+ _strings[1] = disk.getEntry(STRINGS_2_RESOURCE_ID);
+ _strings[2] = disk.getEntry(STRINGS_3_RESOURCE_ID);
// Add in the list of bit sequences, and what characters they represent
- add("00", ' ');
- add("0100", 'e');
- add("0101", 'o');
- add("0110", 't');
- add("01110", 'a');
- add("01111", 'n');
- add("1000", 's');
- add("1001", 'i');
- add("1010", 'r');
- add("10110", 'h');
- add("101110", 'u');
- add("1011110", 'l');
- add("1011111", 'd');
- add("11000", 'y');
- add("110010", 'g');
- add("110011", '\0');
- add("110100", 'w');
- add("110101", 'c');
- add("110110", 'f');
- add("1101110", '.');
- add("1101111", 'm');
- add("111000", 'p');
- add("111001", 'b');
- add("1110100", ',');
- add("1110101", 'k');
- add("1110110", '\'');
- add("11101110", 'I');
- add("11101111", 'v');
- add("1111000", '!');
- add("1111001", '\xb4');
- add("11110100", 'T');
- add("11110101", '\xb5');
- add("11110110", '?');
- add("111101110", '\xb2');
- add("111101111", '\xb3');
- add("11111000", 'W');
- add("111110010", 'H');
- add("111110011", 'A');
- add("111110100", '\xb1');
- add("111110101", 'S');
- add("111110110", 'Y');
- add("1111101110", 'G');
- add("11111011110", 'M');
- add("11111011111", 'N');
- add("111111000", 'O');
- add("1111110010", 'E');
- add("1111110011", 'L');
- add("1111110100", '-');
- add("1111110101", 'R');
- add("1111110110", 'B');
- add("11111101110", 'D');
- add("11111101111", '\xa6');
- add("1111111000", 'C');
- add("11111110010", 'x');
- add("11111110011", 'j');
- add("1111111010", '\xac');
- add("11111110110", '\xa3');
- add("111111101110", 'P');
- add("111111101111", 'U');
- add("11111111000", 'q');
- add("11111111001", '\xad');
- add("111111110100", 'F');
- add("111111110101", '1');
- add("111111110110", '\xaf');
- add("1111111101110", ';');
- add("1111111101111", 'z');
- add("111111111000", '\xa5');
- add("1111111110010", '2');
- add("1111111110011", '\xb0');
- add("111111111010", 'K');
- add("1111111110110", '%');
- add("11111111101110", '\xa2');
- add("11111111101111", '5');
- add("1111111111000", ':');
- add("1111111111001", 'J');
- add("1111111111010", 'V');
- add("11111111110110", '6');
- add("11111111110111", '3');
- add("1111111111100", '\xab');
- add("11111111111010", '\xae');
- add("111111111110110", '0');
- add("111111111110111", '4');
- add("11111111111100", '7');
- add("111111111111010", '9');
- add("111111111111011", '"');
- add("111111111111100", '8');
- add("111111111111101", '\xa7');
- add("1111111111111100", '/');
- add("1111111111111101", 'Q');
- add("11111111111111100", '\xa8');
- add("11111111111111101", '(');
- add("111111111111111100", ')');
- add("111111111111111101", '\x99');
- add("11111111111111111", '\xa9');
+ MemoryBlock *decoderList = disk.getEntry(STRING_DECODER_RESOURCE_ID);
+
+ const char *p = (const char *) decoderList->data();
+ while ((byte)*p != 0xff) {
+ char ascii = *p++;
+ add(p, ascii);
+ p += strlen(p) + 1;
+ }
+
+ delete decoderList;
}
StringData::~StringData() {
@@ -266,7 +184,7 @@ char StringData::readCharacter() {
void StringData::getString(uint16 stringId, char *dest, const char *hotspotName,
const char *characterName, int hotspotArticle, int characterArticle) {
- const char *articles[4] = {"the ", "a ", "an ", ""};
+ StringList &stringList = Resources::getReference().stringList();
char ch;
strcpy(dest, "");
char *destPos = dest;
@@ -284,7 +202,8 @@ void StringData::getString(uint16 stringId, char *dest, const char *hotspotName,
int article = !includeArticles ? 3 : ((ch == 1) ? hotspotArticle : characterArticle);
if (p != NULL) {
- strcpy(destPos, articles[article]);
+ if (article > 0)
+ strcpy(destPos, stringList.getString(S_ARTICLE_LIST + article - 1));
strcat(destPos, p);
destPos += strlen(destPos);
}
diff --git a/engines/lure/strings.h b/engines/lure/strings.h
index 29e851a641..554a665dc0 100644
--- a/engines/lure/strings.h
+++ b/engines/lure/strings.h
@@ -62,7 +62,7 @@ public:
static StringData &getReference();
void getString(uint16 stringId, char *dest, const char *hotspotName, const char *characterName,
- int hotspotArticle = 3, int characterArticle = 3);
+ int hotspotArticle = 0, int characterArticle = 0);
void getString(uint16 stringId, char *dest) {
getString(stringId, dest, NULL, NULL);
}