diff options
Diffstat (limited to 'engines/illusions/illusions_bbdou.cpp')
-rw-r--r-- | engines/illusions/illusions_bbdou.cpp | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/engines/illusions/illusions_bbdou.cpp b/engines/illusions/illusions_bbdou.cpp index 76d476aa50..84b3876e6c 100644 --- a/engines/illusions/illusions_bbdou.cpp +++ b/engines/illusions/illusions_bbdou.cpp @@ -172,7 +172,7 @@ bool ActiveScenes::isSceneActive(uint32 sceneId) { // IllusionsEngine_BBDOU -IllusionsEngine_BBDOU::IllusionsEngine_BBDOU(OSystem *syst, const ADGameDescription *gd) +IllusionsEngine_BBDOU::IllusionsEngine_BBDOU(OSystem *syst, const IllusionsGameDescription *gd) : IllusionsEngine(syst, gd) { } @@ -188,12 +188,9 @@ Common::Error IllusionsEngine_BBDOU::run() { SearchMan.addSubDirectoryMatching(gameDataDir, "video"); SearchMan.addSubDirectoryMatching(gameDataDir, "voice"); - Graphics::PixelFormat pixelFormat16(2, 5, 6, 5, 0, 11, 5, 0, 0); - initGraphics(640, 480, true, &pixelFormat16); - _dict = new Dictionary(); - _resSys = new ResourceSystem(); + _resSys = new ResourceSystem(this); _resSys->addResourceLoader(0x00060000, new ActorResourceLoader(this)); _resSys->addResourceLoader(0x00080000, new SoundGroupResourceLoader(this)); _resSys->addResourceLoader(0x000D0000, new ScriptResourceLoader(this)); @@ -203,7 +200,7 @@ Common::Error IllusionsEngine_BBDOU::run() { _resSys->addResourceLoader(0x00120000, new FontResourceLoader(this)); _resSys->addResourceLoader(0x00170000, new SpecialCodeLoader(this)); - _screen = new Screen(this); + _screen = new Screen(this, 640, 480, 16); _input = new Input(); _scriptMan = new ScriptMan(this); _actorItems = new ActorItems(this); @@ -281,12 +278,9 @@ bool IllusionsEngine_BBDOU::hasFeature(EngineFeature f) const { bool IllusionsEngine_BBDOU::causeIsDeclared(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) { uint32 codeOffs; - bool r = + return _triggerFunctions->find(sceneId, verbId, objectId2, objectId) || findTriggerCause(sceneId, verbId, objectId2, objectId, codeOffs); - debug(3, "causeIsDeclared() sceneId: %08X; verbId: %08X; objectId2: %08X; objectId: %08X -> %d", - sceneId, verbId, objectId2, objectId, r); - return r; } void IllusionsEngine_BBDOU::causeDeclare(uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback) { @@ -352,6 +346,45 @@ uint32 IllusionsEngine_BBDOU::getPrevScene() { return _prevSceneId; } +bool IllusionsEngine_BBDOU::isCursorObject(uint32 actorTypeId, uint32 objectId) { + return actorTypeId == 0x50001 && objectId == 0x40004; +} + +void IllusionsEngine_BBDOU::setCursorControlRoutine(Control *control) { + control->_actor->setControlRoutine(new Common::Functor2Mem<Control*, uint32, void, IllusionsEngine_BBDOU> + (this, &IllusionsEngine_BBDOU::cursorControlRoutine)); +} + +void IllusionsEngine_BBDOU::placeCursorControl(Control *control, uint32 sequenceId) { + _cursor->place(control, sequenceId); +} + +void IllusionsEngine_BBDOU::setCursorControl(Control *control) { + _cursor->setControl(control); +} + +void IllusionsEngine_BBDOU::showCursor() { + _cursor->show(); +} + +void IllusionsEngine_BBDOU::hideCursor() { + _cursor->hide(); +} + +void IllusionsEngine_BBDOU::cursorControlRoutine(Control *control, uint32 deltaTime) { + control->_actor->_seqCodeValue1 = 100 * deltaTime; + if (control->_actor->_flags & 1) { + switch (_cursor->_status) { + case 2: + // Unused nullsub_1(control); + break; + case 3: + // TODO _vm->_shellMgr->handleMouse(control); + break; + } + } +} + void IllusionsEngine_BBDOU::startScriptThreadSimple(uint32 threadId, uint32 callingThreadId) { startScriptThread(threadId, callingThreadId, 0, 0, 0); } |