diff options
author | Walter van Niftrik | 2009-04-25 23:31:03 +0000 |
---|---|---|
committer | Walter van Niftrik | 2009-04-25 23:31:03 +0000 |
commit | dfd02452739858c7bfd56d28f5b136f6c3aca9ff (patch) | |
tree | fe11f965b075f79c2db0a032761d53f64e5508b1 | |
parent | bac2239709d558b05b70624bf415b1fbeab62ed8 (diff) | |
download | scummvm-rg350-dfd02452739858c7bfd56d28f5b136f6c3aca9ff.tar.gz scummvm-rg350-dfd02452739858c7bfd56d28f5b136f6c3aca9ff.tar.bz2 scummvm-rg350-dfd02452739858c7bfd56d28f5b136f6c3aca9ff.zip |
SCI: DoSync should work now, but the lip-syncing mechanism also needs DoAudio
(currently stubbed), so it hasn't been tested yet.
so it hasn't been tested yet.
svn-id: r40147
-rw-r--r-- | engines/sci/engine/ksound.cpp | 11 | ||||
-rw-r--r-- | engines/sci/engine/script.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/vm.h | 3 | ||||
-rw-r--r-- | engines/sci/scicore/resource.cpp | 27 | ||||
-rw-r--r-- | engines/sci/scicore/resource.h | 6 |
5 files changed, 23 insertions, 26 deletions
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp index 4be6785e2e..e464f99794 100644 --- a/engines/sci/engine/ksound.cpp +++ b/engines/sci/engine/ksound.cpp @@ -1002,21 +1002,16 @@ reg_t kDoSync(EngineState *s, int funct_nr, int argc, reg_t *argv) { s->sound.soundSync = (ResourceSync *)s->resmgr->findResource(kResourceTypeSync, UKPV(2), 1); if (s->sound.soundSync) { - Object *obj = obj_get(s, argv[1]); - s->sound.soundSync->startSync(obj); + s->sound.soundSync->startSync(s, argv[1]); } else { // Notify the scripts to stop sound sync - //Object *obj = obj_get(s, argv[1]); - // TODO: Convert the following from Greg's code to SCI's code - //obj.setPropertyN(_objOfs[0x33], 0xFFFF); // Greg's - //obj->variables[s->game_obj.offset[0x33]] = 0xFFFF; // something like this? + PUT_SEL32V(argv[1], syncCue, -1); } break; case 1: // next sync //printf("kDoSync: next sync\n"); if (s->sound.soundSync) { - Object *obj = obj_get(s, argv[1]); - s->sound.soundSync->nextSync(obj); + s->sound.soundSync->nextSync(s, argv[1]); } break; case 2: // stop sync diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index b1a8601a30..4166594590 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -208,6 +208,8 @@ void script_map_selectors(EngineState *s, selector_map_t *map) { FIND_SELECTOR(nodePtr); FIND_SELECTOR(flags); FIND_SELECTOR(points); + FIND_SELECTOR(syncCue); + FIND_SELECTOR(syncTime); } int sci_hexdump(byte *data, int length, int offsetplus) { diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h index 6212abf423..848188d263 100644 --- a/engines/sci/engine/vm.h +++ b/engines/sci/engine/vm.h @@ -380,6 +380,9 @@ struct selector_map_t { Selector flags; Selector points; /* Used by AvoidPath() */ + + Selector syncCue; /* Used by DoSync() */ + Selector syncTime; /* Used by DoSync() */ }; /* Contains selector IDs for a few selected selectors */ struct ViewObject { diff --git a/engines/sci/scicore/resource.cpp b/engines/sci/scicore/resource.cpp index 6132e4bae5..488ed2e33b 100644 --- a/engines/sci/scicore/resource.cpp +++ b/engines/sci/scicore/resource.cpp @@ -28,6 +28,8 @@ #include "common/util.h" #include "common/debug.h" +#include "sci/engine/state.h" +#include "sci/engine/kernel.h" #include "sci/tools.h" #include "sci/sci_memory.h" #include "sci/scicore/resource.h" @@ -1167,35 +1169,30 @@ int ResourceManager::decompress(Resource *res, Common::File *file) { return error; } -void ResourceSync::startSync(Object *obj) { - _syncTime = _syncCue = 0xFFFF; - // TODO: Convert the following from Greg's code to SCI's code - //obj.setPropertyN(g_sci->_objOfs[0x33], 0); // Greg's - //obj->variables[s->game_obj.offset[0x33]] = 0; // something like this? +void ResourceSync::startSync(EngineState *s, reg_t obj) { + _syncTime = _syncCue = -1; + PUT_SEL32V(obj, syncCue, 0); _ptr = (uint16 *)data; //syncStarted = true; // not used } -void ResourceSync::nextSync(Object *obj) { +void ResourceSync::nextSync(EngineState *s, reg_t obj) { if (_ptr) { - _syncTime = READ_LE_UINT16(_ptr); - if (_syncTime == 0xFFFF) { + _syncTime = (int16)READ_LE_UINT16(_ptr); + if (_syncTime == -1) { stopSync(); } else { - _syncCue = READ_LE_UINT16(_ptr + 1); + _syncCue = (int16)READ_LE_UINT16(_ptr + 1); _ptr += 2; } - // TODO: Convert the following from Greg's code to SCI's code - //obj.setPropertyN(g_sci->_objOfs[0x32], _syncTime); // Greg's - //obj->variables[s->game_obj.offset[0x32]] = _syncTime; // something like this? - //obj.setPropertyN(g_sci->_objOfs[0x33], _syncCue); // Greg's - //obj->variables[s->game_obj.offset[0x33]] = _syncCue; // something like this? + PUT_SEL32V(obj, syncTime, _syncTime); + PUT_SEL32V(obj, syncCue, _syncCue); } } //-------------------------------- void ResourceSync::stopSync() { _ptr = 0; - _syncCue = 0xFFFF; + _syncCue = -1; //syncStarted = false; // not used } diff --git a/engines/sci/scicore/resource.h b/engines/sci/scicore/resource.h index f9d95205d1..a1636ad250 100644 --- a/engines/sci/scicore/resource.h +++ b/engines/sci/scicore/resource.h @@ -307,13 +307,13 @@ public: ResourceSync() {} ~ResourceSync() {} - void startSync(Object *obj); - void nextSync(Object *obj); + void startSync(EngineState *s, reg_t obj); + void nextSync(EngineState *s, reg_t obj); void stopSync(); protected: uint16 *_ptr; - uint16 _syncTime, _syncCue; + int16 _syncTime, _syncCue; //bool _syncStarted; // not used }; |