diff options
Diffstat (limited to 'script.cpp')
-rw-r--r-- | script.cpp | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/script.cpp b/script.cpp index bb639c1a6b..eec8d2b4d8 100644 --- a/script.cpp +++ b/script.cpp @@ -45,13 +45,13 @@ void Scumm::runScript(int script, int a, int b, int16 *lvarptr) { if (script < _numGlobalScripts) { scriptPtr = getResourceAddress(rtScript, script); scriptOffs = 8; - scriptType = 2; + scriptType = WIO_GLOBAL; } else { scriptOffs = _localScriptList[script - _numGlobalScripts]; if (scriptOffs == 0) error("Local script %d is not in room %d", script, _roomResource); scriptOffs += 9; - scriptType = 3; + scriptType = WIO_LOCAL; } slot = getScriptSlot(); @@ -60,7 +60,7 @@ void Scumm::runScript(int script, int a, int b, int16 *lvarptr) { s->number = script; s->offs = scriptOffs; s->status = 2; - s->type = scriptType; + s->where = scriptType; s->unk1 = a; s->unk2 = b; s->freezeCount = 0; @@ -81,7 +81,8 @@ void Scumm::stopScriptNr(int script) { ss = &vm.slot[1]; for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { - if (script!=ss->number || ss->type!=2 && ss->type!=3 || ss->status==0) + if (script!=ss->number || + ss->where!=WIO_GLOBAL && ss->where!=WIO_LOCAL || ss->status==0) continue; if (ss->cutsceneOverride) @@ -99,10 +100,10 @@ void Scumm::stopScriptNr(int script) { num = _numNestedScripts; do { - if (nest->number == script && (nest->type==2 || nest->type==3)) { + if (nest->number == script && (nest->where==WIO_GLOBAL || nest->where==WIO_LOCAL)) { nest->number = 0xFF; nest->slot = 0xFF; - nest->type = 0xFF; + nest->where = 0xFF; } } while(nest++,--num); } @@ -118,7 +119,8 @@ void Scumm::stopObjectScript(int script) { ss = &vm.slot[1]; for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { - if (script==ss->number && (ss->type==1 || ss->type==0 || ss->type==4) && ss->status!=0) { + if (script==ss->number && (ss->where==WIO_ROOM || + ss->where==WIO_INVENTORY || ss->where==WIO_FLOBJECT) && ss->status!=0) { if (ss->cutsceneOverride) error("Object %d stopped with active cutscene/override", script); ss->number = 0; @@ -135,10 +137,12 @@ void Scumm::stopObjectScript(int script) { num = _numNestedScripts; do { - if (nest->number == script && (nest->type==1 || nest->type==4 || nest->type==0)) { + if (nest->number == script && + (nest->where==WIO_ROOM || nest->where==WIO_FLOBJECT || + nest->where==WIO_INVENTORY)) { nest->number = 0xFF; nest->slot = 0xFF; - nest->type = 0xFF; + nest->where = 0xFF; } } while(nest++,--num); } @@ -165,11 +169,11 @@ void Scumm::runScriptNested(int script) { if (_currentScript==0xFF) { nest->number = 0xFF; - nest->type = 0xFF; + nest->where = 0xFF; } else { slot = &vm.slot[_currentScript]; nest->number = slot->number; - nest->type = slot->type; + nest->where = slot->where; nest->slot = _currentScript; } @@ -188,7 +192,7 @@ void Scumm::runScriptNested(int script) { if (nest->number != 0xFF) { slot = &vm.slot[nest->slot]; - if (slot->number == nest->number && slot->type==nest->type && + if (slot->number == nest->number && slot->where==nest->where && slot->status != 0 && slot->freezeCount==0) { _currentScript = nest->slot; getScriptBaseAddress(); @@ -214,25 +218,25 @@ void Scumm::getScriptBaseAddress() { return; ss = &vm.slot[_currentScript]; - switch(ss->type) { - case 0: /* inventory script **/ + switch(ss->where) { + case WIO_INVENTORY: /* inventory script **/ index = getObjectIndex(ss->number); _scriptOrgPointer = getResourceAddress(rtInventory, index); _lastCodePtr = &_baseInventoryItems[index]; break; case 3: - case 1: /* room script */ + case WIO_ROOM: /* room script */ _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); _lastCodePtr = &_baseRooms[_roomResource]; break; - case 2: /* global script */ + case WIO_GLOBAL: /* global script */ _scriptOrgPointer = getResourceAddress(rtScript, ss->number); _lastCodePtr = &_baseScripts[ss->number]; break; - case 4: /* flobject script */ + case WIO_FLOBJECT: /* flobject script */ index = getObjectIndex(ss->number); _scriptOrgPointer = getResourceAddress(rtFlObject,_objs[index].fl_object_index); _lastCodePtr = &_baseFLObject[ss->number]; @@ -419,7 +423,7 @@ void Scumm::stopObjectCode() { ss = &vm.slot[_currentScript]; - if (ss->type!=2 && ss->type!=3) { + if (ss->where!=WIO_GLOBAL && ss->where!=WIO_LOCAL) { if (ss->cutsceneOverride) error("Object %d ending with active cutscene/override", ss->number); @@ -515,7 +519,7 @@ void Scumm::runExitScript() { int slot = getScriptSlot(); vm.slot[slot].status = 2; vm.slot[slot].number = 10001; - vm.slot[slot].type = 1; + vm.slot[slot].where = WIO_ROOM; vm.slot[slot].offs = _EXCD_offs + 8; vm.slot[slot].unk1 = 0; vm.slot[slot].unk2 = 0; @@ -533,7 +537,7 @@ void Scumm::runEntryScript() { int slot = getScriptSlot(); vm.slot[slot].status = 2; vm.slot[slot].number = 10002; - vm.slot[slot].type = 1; + vm.slot[slot].where = WIO_ROOM; vm.slot[slot].offs = _ENCD_offs + 8; vm.slot[slot].unk1 = 0; vm.slot[slot].unk2 = 0; @@ -551,11 +555,11 @@ void Scumm::killScriptsAndResources() { ss = &vm.slot[1]; for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { - if (ss->type==1 || ss->type==4) { + if (ss->where==WIO_ROOM || ss->where==WIO_FLOBJECT) { if(ss->cutsceneOverride) error("Object %d stopped with active cutscene/override in exit", ss->number); ss->status = 0; - } else if (ss->type==3) { + } else if (ss->where==WIO_LOCAL) { if(ss->cutsceneOverride) error("Script %d stopped with active cutscene/override in exit", ss->number); ss->status = 0; @@ -573,7 +577,7 @@ void Scumm::killScriptsAndResources() { if (_newNames) { for (i=0; i<50; i++) { int j = _newNames[i]; - if (j && (getOwner(j)&0xF) == 0) { + if (j && (getOwner(j)&OF_OWNER_MASK) == 0) { _newNames[i] = 0; nukeResource(rtObjectName, i); } @@ -645,7 +649,7 @@ void Scumm::runVerbCode(int object, int entry, int a, int b, int16 *vars) { where = whereIsObject(object); - if (where == -1) { + if (where == WIO_NOT_FOUND) { error("Code for object %d not in room %d", object, _roomResource); } @@ -659,7 +663,7 @@ void Scumm::runVerbCode(int object, int entry, int a, int b, int16 *vars) { vm.slot[slot].number = object; vm.slot[slot].offs = obcd + offs; vm.slot[slot].status = 2; - vm.slot[slot].type = where; + vm.slot[slot].where = where; vm.slot[slot].unk1 = a; vm.slot[slot].unk2 = b; vm.slot[slot].freezeCount = 0; @@ -685,7 +689,7 @@ int Scumm::getVerbEntrypoint(int obj, int entry) { byte *objptr, *verbptr; int verboffs; - if (whereIsObject(obj)==-1) + if (whereIsObject(obj)==WIO_NOT_FOUND) return 0; objptr = getObjectAddress(obj); @@ -822,7 +826,8 @@ int Scumm::getScriptRunning(int script) { int i; ScriptSlot *ss = vm.slot; for (i=0; i<NUM_SCRIPT_SLOT; i++,ss++) - if (ss->number==script && (ss->type==2 || ss->type==3) && ss->status) + if (ss->number==script && (ss->where==WIO_GLOBAL || + ss->where==WIO_LOCAL) && ss->status) return 1; return 0; } |