aboutsummaryrefslogtreecommitdiff
path: root/engines/cine/msg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cine/msg.cpp')
-rw-r--r--engines/cine/msg.cpp39
1 files changed, 13 insertions, 26 deletions
diff --git a/engines/cine/msg.cpp b/engines/cine/msg.cpp
index 212b9ffd7c..55eb627309 100644
--- a/engines/cine/msg.cpp
+++ b/engines/cine/msg.cpp
@@ -31,45 +31,32 @@
namespace Cine {
-uint16 messageCount;
+Common::StringList messageTable;
void loadMsg(char *pMsgName) {
- uint16 i;
+ int i, count, len;
byte *ptr, *dataPtr;
+ const char *messagePtr;
checkDataDisk(-1);
- messageCount = 0;
-
- for (i = 0; i < NUM_MAX_MESSAGE; i++) {
- messageTable[i].len = 0;
- if (messageTable[i].ptr) {
- free(messageTable[i].ptr);
- messageTable[i].ptr = NULL;
- }
- }
+ messageTable.clear();
ptr = dataPtr = readBundleFile(findFileInBundle(pMsgName));
setMouseCursor(MOUSE_CURSOR_DISK);
- messageCount = READ_BE_UINT16(ptr); ptr += 2;
-
- assert(messageCount <= NUM_MAX_MESSAGE);
-
- for (i = 0; i < messageCount; i++) {
- messageTable[i].len = READ_BE_UINT16(ptr); ptr += 2;
- }
-
- for (i = 0; i < messageCount; i++) {
- if (messageTable[i].len) {
- messageTable[i].ptr = (byte *) malloc(messageTable[i].len);
+ count = READ_BE_UINT16(ptr);
+ ptr += 2;
- assert(messageTable[i].ptr);
+ messagePtr = (const char*)(ptr + 2 * count);
- memcpy(messageTable[i].ptr, ptr, messageTable[i].len);
- ptr += messageTable[i].len;
- }
+ for (i = 0; i < count; i++) {
+ len = READ_BE_UINT16(ptr);
+ ptr += 2;
+
+ messageTable.push_back(messagePtr);
+ messagePtr += len;
}
free(dataPtr);