void Scene::endScene() { Rect rect; if (!_sceneLoaded) return; debug(3, "Ending scene..."); if (_sceneProc != NULL) { _sceneProc(SCENE_END, this); } // Stop showing actors till the next scene's background is drawn from loadScene _vm->_render->setFlag(RF_DISABLE_ACTORS); _vm->_script->abortAllThreads(); _vm->_script->_skipSpeeches = false; // WORKAROUND: Bug #2886151: "ITE: Mouse stops responding at Boar Castle" // This is bug in original engine if (_sceneNumber == 50) { _vm->_interface->activate(); } // Copy current screen to render buffer so inset rooms will get proper background if (!(_sceneDescription.flags & kSceneFlagISO) && !_vm->_scene->isInIntro()) { BGInfo bgInfo; _vm->_scene->getBGInfo(bgInfo); _vm->_render->getBackGroundSurface()->blit(bgInfo.bounds, bgInfo.buffer); _vm->_render->addDirtyRect(bgInfo.bounds); } else { _vm->_gfx->getBackBufferRect(rect); _vm->_render->getBackGroundSurface()->blit(rect, (const byte *)_vm->_gfx->getBackBufferPixels()); _vm->_render->addDirtyRect(rect); } // Free scene background if (_bg.loaded) { _bg.buffer.clear(); _bg.loaded = false; } // Free scene background mask if (_bgMask.loaded) { _bgMask.buffer.clear(); _bgMask.loaded = false; } // Free animation info list _vm->_anim->reset(); _vm->_palanim->clear(); _objectMap->clear(); _actionMap->clear(); _entryList.clear(); _sceneStrings.clear(); if (_vm->getGameId() == GID_ITE) _vm->_isoMap->clear(); _vm->_events->clearList(); _textList.clear(); _sceneLoaded = false; }
void Scene::endScene() { Rect rect; size_t i; if (!_sceneLoaded) return; debug(3, "Ending scene..."); if (_sceneProc != NULL) { _sceneProc(SCENE_END, this); } // Stop showing actors till the next scene's background is drawn from loadScene _vm->_render->setFlag(RF_DISABLE_ACTORS); _vm->_script->abortAllThreads(); _vm->_script->_skipSpeeches = false; // Copy current screen to render buffer so inset rooms will get proper background if (!(_sceneDescription.flags & kSceneFlagISO) && !_vm->_scene->isInIntro()) { BGInfo bgInfo; _vm->_scene->getBGInfo(bgInfo); _vm->_render->getBackGroundSurface()->blit(bgInfo.bounds, bgInfo.buffer); _vm->_render->addDirtyRect(bgInfo.bounds); } else { _vm->_gfx->getBackBufferRect(rect); _vm->_render->getBackGroundSurface()->blit(rect, (const byte *)_vm->_gfx->getBackBufferPixels()); _vm->_render->addDirtyRect(rect); } // Free scene background if (_bg.loaded) { free(_bg.buf); _bg.loaded = 0; } // Free scene background mask if (_bgMask.loaded) { free(_bgMask.buf); _bgMask.loaded = 0; } // Free scene resource list for (i = 0; i < _resourceListCount; i++) { free(_resourceList[i].buffer); } if (_loadDescription) { free(_resourceList); } // Free animation info list _vm->_anim->reset(); _vm->_palanim->freePalAnim(); _objectMap->freeMem(); _actionMap->freeMem(); _entryList.freeMem(); _sceneStrings.freeMem(); if (_vm->getGameId() == GID_ITE) _vm->_isoMap->freeMem(); _vm->_events->clearList(); _textList.clear(); _sceneLoaded = false; }