From b9443dfb60e533d614c4914dfabb4e75e45cdf38 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 15 Apr 2007 14:38:02 +0000 Subject: More cleanup. svn-id: r26502 --- engines/kyra/script.cpp | 55 ++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'engines/kyra/script.cpp') diff --git a/engines/kyra/script.cpp b/engines/kyra/script.cpp index 2e893ced9e..762288a8e0 100644 --- a/engines/kyra/script.cpp +++ b/engines/kyra/script.cpp @@ -71,7 +71,7 @@ ScriptHelper::ScriptHelper(KyraEngine *vm) : _vm(vm) { bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData) { uint32 size = 0; uint8 *data = _vm->resource()->fileData(filename, &size); - byte *curData = data; + const byte *curData = data; uint32 formBlockSize = getFORMBlockSize(curData); if (formBlockSize == (uint32)-1) { @@ -99,20 +99,19 @@ bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData) { error("No ORDR chunk found in file: '%s'", filename); return false; } + chunkSize >>= 1; - scriptData->ordr = new byte[chunkSize]; + scriptData->ordr = new uint16[chunkSize]; - if (!loadIFFBlock(data, curData, size, ORDR_CHUNK, scriptData->ordr, chunkSize)) { + if (!loadIFFBlock(data, curData, size, ORDR_CHUNK, scriptData->ordr, chunkSize << 1)) { delete [] data; unloadScript(scriptData); error("Couldn't load ORDR chunk from file: '%s'", filename); return false; } - chunkSize = chunkSize / 2; - while (chunkSize--) { - ((uint16*)scriptData->ordr)[chunkSize] = READ_BE_UINT16(&((uint16*)scriptData->ordr)[chunkSize]); - } + while (chunkSize--) + scriptData->ordr[chunkSize] = READ_BE_UINT16(&scriptData->ordr[chunkSize]); chunkSize = getIFFBlockSize(data, curData, size, DATA_CHUNK); if (chunkSize == (uint32)-1) { @@ -121,16 +120,20 @@ bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData) { error("No DATA chunk found in file: '%s'", filename); return false; } + chunkSize >>= 1; - scriptData->data = new byte[chunkSize]; + scriptData->data = new uint16[chunkSize]; - if (!loadIFFBlock(data, curData, size, DATA_CHUNK, scriptData->data, chunkSize)) { + if (!loadIFFBlock(data, curData, size, DATA_CHUNK, scriptData->data, chunkSize << 1)) { delete [] data; unloadScript(scriptData); error("Couldn't load DATA chunk from file: '%s'", filename); return false; } - scriptData->dataSize = chunkSize / 2; + scriptData->dataSize = chunkSize; + + while (chunkSize--) + scriptData->data[chunkSize] = READ_BE_UINT16(&scriptData->data[chunkSize]); delete [] data; return true; @@ -144,7 +147,8 @@ void ScriptHelper::unloadScript(ScriptData *data) { delete [] data->ordr; delete [] data->data; - data->text = data->ordr = data->data = 0; + data->text = 0; + data->ordr = data->data = 0; } void ScriptHelper::initScript(ScriptState *scriptStat, const ScriptData *data) { @@ -159,14 +163,14 @@ bool ScriptHelper::startScript(ScriptState *script, int function) { if (!script->dataPtr) return false; - uint16 functionOffset = ((uint16*)script->dataPtr->ordr)[function]; + uint16 functionOffset = script->dataPtr->ordr[function]; if (functionOffset == 0xFFFF) return false; if (_vm->gameFlags().platform == Common::kPlatformFMTowns) - script->ip = &script->dataPtr->data[functionOffset*2+2]; + script->ip = &script->dataPtr->data[functionOffset+1]; else - script->ip = &script->dataPtr->data[functionOffset*2]; + script->ip = &script->dataPtr->data[functionOffset]; return true; } @@ -184,7 +188,7 @@ bool ScriptHelper::runScript(ScriptState *script) { if (!script->ip) return false; - int16 code = READ_BE_UINT16(script->ip); script->ip += 2; + int16 code = *script->ip++; int16 opcode = (code >> 8) & 0x1F; if (code & 0x8000) { @@ -193,7 +197,7 @@ bool ScriptHelper::runScript(ScriptState *script) { } else if (code & 0x4000) { _parameter = (int8)(code); } else if (code & 0x2000) { - _parameter = READ_BE_UINT16(script->ip); script->ip += 2; + _parameter = *script->ip++; } else { _parameter = 0; } @@ -208,7 +212,7 @@ bool ScriptHelper::runScript(ScriptState *script) { return _continue; } -uint32 ScriptHelper::getFORMBlockSize(byte *&data) const { +uint32 ScriptHelper::getFORMBlockSize(const byte *&data) const { static const uint32 chunkName = FORM_CHUNK; if (READ_LE_UINT32(data) != chunkName) @@ -219,7 +223,7 @@ uint32 ScriptHelper::getFORMBlockSize(byte *&data) const { return retValue; } -uint32 ScriptHelper::getIFFBlockSize(byte *start, byte *&data, uint32 maxSize, const uint32 chunkName) const { +uint32 ScriptHelper::getIFFBlockSize(const byte *start, const byte *&data, uint32 maxSize, const uint32 chunkName) const { uint32 size = (uint32)-1; bool special = false; @@ -247,7 +251,7 @@ uint32 ScriptHelper::getIFFBlockSize(byte *start, byte *&data, uint32 maxSize, c return size; } -bool ScriptHelper::loadIFFBlock(byte *start, byte *&data, uint32 maxSize, const uint32 chunkName, byte *loadTo, uint32 ptrSize) const { +bool ScriptHelper::loadIFFBlock(const byte *start, const byte *&data, uint32 maxSize, const uint32 chunkName, void *loadTo, uint32 ptrSize) const { bool special = false; if (data == (start + maxSize)) @@ -271,9 +275,8 @@ bool ScriptHelper::loadIFFBlock(byte *start, byte *&data, uint32 maxSize, const loadSize = ptrSize; memcpy(loadTo, data, loadSize); chunkSize = (chunkSize + 1) & 0xFFFFFFFE; - if (chunkSize > loadSize) { + if (chunkSize > loadSize) data += (chunkSize - loadSize); - } return true; } } @@ -286,7 +289,7 @@ bool ScriptHelper::loadIFFBlock(byte *start, byte *&data, uint32 maxSize, const #pragma mark - void ScriptHelper::c1_jmpTo(ScriptState* script) { - script->ip = script->dataPtr->data + (_parameter << 1); + script->ip = script->dataPtr->data + _parameter; } void ScriptHelper::c1_setRetValue(ScriptState* script) { @@ -300,7 +303,7 @@ void ScriptHelper::c1_pushRetOrPos(ScriptState* script) { break; case 1: - script->stack[--script->sp] = (script->ip - script->dataPtr->data) / 2 + 1; + script->stack[--script->sp] = script->ip - script->dataPtr->data + 1; script->stack[--script->sp] = script->bp; script->bp = script->sp + 2; break; @@ -340,7 +343,7 @@ void ScriptHelper::c1_popRetOrPos(ScriptState* script) { script->ip = 0; } else { script->bp = script->stack[script->sp++]; - script->ip = script->dataPtr->data + (script->stack[script->sp++] << 1); + script->ip = script->dataPtr->data + script->stack[script->sp++]; } break; @@ -378,7 +381,7 @@ void ScriptHelper::c1_execOpcode(ScriptState* script) { void ScriptHelper::c1_ifNotJmp(ScriptState* script) { if (!script->stack[script->sp++]) { _parameter &= 0x7FFF; - script->ip = script->dataPtr->data + (_parameter << 1); + script->ip = script->dataPtr->data + _parameter; } } @@ -532,7 +535,7 @@ void ScriptHelper::c1_setRetAndJmp(ScriptState* script) { script->retValue = script->stack[script->sp++]; uint16 temp = script->stack[script->sp++]; script->stack[60] = 0; - script->ip = &script->dataPtr->data[temp*2]; + script->ip = &script->dataPtr->data[temp]; } } } // end of namespace Kyra -- cgit v1.2.3