diff options
-rw-r--r-- | saga/events.cpp | 17 | ||||
-rw-r--r-- | saga/gfx.cpp | 6 | ||||
-rw-r--r-- | saga/gfx.h | 6 | ||||
-rw-r--r-- | saga/interface.cpp | 13 | ||||
-rw-r--r-- | saga/palanim.cpp | 5 | ||||
-rw-r--r-- | saga/render.cpp | 3 | ||||
-rw-r--r-- | saga/render.h | 3 | ||||
-rw-r--r-- | saga/saveload.cpp | 3 | ||||
-rw-r--r-- | saga/scene.cpp | 18 | ||||
-rw-r--r-- | saga/scene.h | 3 |
10 files changed, 42 insertions, 35 deletions
diff --git a/saga/events.cpp b/saga/events.cpp index 89373fc605..088caf90f5 100644 --- a/saga/events.cpp +++ b/saga/events.cpp @@ -126,7 +126,6 @@ int Events::handleContinuous(EVENT *event) { BUFFER_INFO buf_info; SCENE_BGINFO bg_info; - SURFACE *back_buf; event_pc = ((double)event->duration - event->time) / event->duration; @@ -149,13 +148,11 @@ int Events::handleContinuous(EVENT *event) { case PAL_EVENT: switch (event->op) { case EVENT_BLACKTOPAL: - back_buf = _vm->_gfx->getBackBuffer(); - _vm->_gfx->blackToPal(back_buf, (PALENTRY *)event->data, event_pc); + _vm->_gfx->blackToPal((PALENTRY *)event->data, event_pc); break; case EVENT_PALTOBLACK: - back_buf = _vm->_gfx->getBackBuffer(); - _vm->_gfx->palToBlack(back_buf, (PALENTRY *)event->data, event_pc); + _vm->_gfx->palToBlack((PALENTRY *)event->data, event_pc); break; default: break; @@ -203,8 +200,6 @@ int Events::handleImmediate(EVENT *event) { double event_pc = 0.0; // Event completion percentage bool event_done = false; - SURFACE *back_buf; - event_pc = ((double)event->duration - event->time) / event->duration; if (event_pc >= 1.0) { @@ -226,13 +221,11 @@ int Events::handleImmediate(EVENT *event) { case PAL_EVENT: switch (event->op) { case EVENT_BLACKTOPAL: - back_buf = _vm->_gfx->getBackBuffer(); - _vm->_gfx->blackToPal(back_buf, (PALENTRY *)event->data, event_pc); + _vm->_gfx->blackToPal((PALENTRY *)event->data, event_pc); break; case EVENT_PALTOBLACK: - back_buf = _vm->_gfx->getBackBuffer(); - _vm->_gfx->palToBlack(back_buf, (PALENTRY *)event->data, event_pc); + _vm->_gfx->palToBlack((PALENTRY *)event->data, event_pc); break; default: break; @@ -341,7 +334,7 @@ int Events::handleOneShot(EVENT *event) { if (event->param == SET_PALETTE) { PALENTRY *pal_p; _vm->_scene->getBGPal(&pal_p); - _vm->_gfx->setPalette(back_buf, pal_p); + _vm->_gfx->setPalette(pal_p); } } } diff --git a/saga/gfx.cpp b/saga/gfx.cpp index 8189f6f070..2d15259d53 100644 --- a/saga/gfx.cpp +++ b/saga/gfx.cpp @@ -455,7 +455,7 @@ SURFACE *Gfx::getBackBuffer() { return &_back_buf; } -int Gfx::setPalette(SURFACE *surface, PALENTRY *pal) { +int Gfx::setPalette(PALENTRY *pal) { int i; byte *ppal; @@ -484,7 +484,7 @@ int Gfx::getCurrentPal(PALENTRY *src_pal) { return SUCCESS; } -int Gfx::palToBlack(SURFACE *surface, PALENTRY *src_pal, double percent) { +int Gfx::palToBlack(PALENTRY *src_pal, double percent) { int i; //int fade_max = 255; int new_entry; @@ -534,7 +534,7 @@ int Gfx::palToBlack(SURFACE *surface, PALENTRY *src_pal, double percent) { return SUCCESS; } -int Gfx::blackToPal(SURFACE *surface, PALENTRY *src_pal, double percent) { +int Gfx::blackToPal(PALENTRY *src_pal, double percent) { int new_entry; double fpercent; int color_delta; diff --git a/saga/gfx.h b/saga/gfx.h index 825b175b31..1cd0ba25f1 100644 --- a/saga/gfx.h +++ b/saga/gfx.h @@ -90,10 +90,10 @@ public: Gfx(OSystem *system, int width, int height, GameDetector &detector); SURFACE *getBackBuffer(); - int setPalette(SURFACE *surface, PALENTRY *pal); + int setPalette(PALENTRY *pal); int getCurrentPal(PALENTRY *src_pal); - int palToBlack(SURFACE *surface, PALENTRY *src_pal, double percent); - int blackToPal(SURFACE *surface, PALENTRY *src_pal, double percent); + int palToBlack(PALENTRY *src_pal, double percent); + int blackToPal(PALENTRY *src_pal, double percent); void updateCursor() { setCursor(); } void showCursor(bool state); diff --git a/saga/interface.cpp b/saga/interface.cpp index e0ef3c5232..379d7a59c1 100644 --- a/saga/interface.cpp +++ b/saga/interface.cpp @@ -1162,8 +1162,8 @@ void Interface::setOption(PanelButton *panelButton) { if (_vm->getSaveFilesCount() > 0) { if (_vm->isSaveListFull() || (_optionSaveFileTitleNumber > 0)) { fileName = _vm->calcSaveFileName(_vm->getSaveFile(_optionSaveFileTitleNumber)->slotNumber); + setMode(kPanelMain); _vm->load(fileName); - setMode(kPanelLoad); } } break; @@ -2045,7 +2045,7 @@ void Interface::mapPanelShow() { _vm->_gfx->getCurrentPal(_mapSavedPal); for (int i = 0; i < 6 ; i++) { - _vm->_gfx->palToBlack(backBuffer, _mapSavedPal, 0.2 * i); + _vm->_gfx->palToBlack(_mapSavedPal, 0.2 * i); _vm->_render->drawScene(); _vm->_system->delayMillis(5); } @@ -2065,7 +2065,7 @@ void Interface::mapPanelShow() { // Evil Evil for (int i = 0; i < 6 ; i++) { - _vm->_gfx->blackToPal(backBuffer, cPal, 0.2 * i); + _vm->_gfx->blackToPal(cPal, 0.2 * i); _vm->_render->drawScene(); _vm->_system->delayMillis(5); } @@ -2079,15 +2079,12 @@ void Interface::mapPanelShow() { } void Interface::mapPanelClean() { - SURFACE *backBuffer; PALENTRY pal[PAL_ENTRIES]; - backBuffer = _vm->_gfx->getBackBuffer(); - _vm->_gfx->getCurrentPal(pal); for (int i = 0; i < 6 ; i++) { - _vm->_gfx->palToBlack(backBuffer, pal, 0.2 * i); + _vm->_gfx->palToBlack(pal, 0.2 * i); _vm->_render->drawScene(); _vm->_system->delayMillis(5); } @@ -2099,7 +2096,7 @@ void Interface::mapPanelClean() { _vm->_render->drawScene(); for (int i = 0; i < 6 ; i++) { - _vm->_gfx->blackToPal(backBuffer, _mapSavedPal, 0.2 * i); + _vm->_gfx->blackToPal(_mapSavedPal, 0.2 * i); _vm->_render->drawScene(); _vm->_system->delayMillis(5); } diff --git a/saga/palanim.cpp b/saga/palanim.cpp index 4070b2d8b8..1294789c64 100644 --- a/saga/palanim.cpp +++ b/saga/palanim.cpp @@ -136,8 +136,6 @@ int PalAnim::cycleStart() { } int PalAnim::cycleStep(int vectortime) { - SURFACE *back_buf; - static PALENTRY pal[256]; uint16 pal_index; uint16 col_index; @@ -153,7 +151,6 @@ int PalAnim::cycleStep(int vectortime) { } _vm->_gfx->getCurrentPal(pal); - back_buf = _vm->_gfx->getBackBuffer(); for (i = 0; i < _entryCount; i++) { cycle = _entries[i].cycle; @@ -173,7 +170,7 @@ int PalAnim::cycleStep(int vectortime) { } } - _vm->_gfx->setPalette(back_buf, pal); + _vm->_gfx->setPalette(pal); event.type = ONESHOT_EVENT; event.code = PALANIM_EVENT; diff --git a/saga/render.cpp b/saga/render.cpp index f93dadbf72..5ebf1f842a 100644 --- a/saga/render.cpp +++ b/saga/render.cpp @@ -121,7 +121,8 @@ int Render::drawScene() { _vm->_actor->drawSpeech(); } else { // Draw queued actors - _vm->_actor->drawActors(); + if (!(_flags & RF_DISABLE_ACTORS)) + _vm->_actor->drawActors(); } if (getFlags() & RF_OBJECTMAP_TEST) { diff --git a/saga/render.h b/saga/render.h index 939e4bf9ea..460ffabd4f 100644 --- a/saga/render.h +++ b/saga/render.h @@ -40,7 +40,8 @@ enum RENDER_FLAGS { RF_GAMEPAUSE = (1 << 5), RF_PLACARD = (1 << 6), RF_ACTOR_PATH_TEST = (1 << 7), - RF_MAP = (1 << 8) + RF_MAP = (1 << 8), + RF_DISABLE_ACTORS = (1 << 9) }; struct BUFFER_INFO { diff --git a/saga/saveload.cpp b/saga/saveload.cpp index 88227e43ff..6ac05797ea 100644 --- a/saga/saveload.cpp +++ b/saga/saveload.cpp @@ -229,8 +229,9 @@ void SagaEngine::load(const char *fileName) { _events->handleEvents(0); //dissolve back grounds if (insetSceneNumber != sceneNumber) { + _render->setFlag(RF_DISABLE_ACTORS); _render->drawScene(); - _scene->clearSceneQueue(); + _render->clearFlag(RF_DISABLE_ACTORS); _scene->changeScene(insetSceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade); } } diff --git a/saga/scene.cpp b/saga/scene.cpp index a4244a6b5f..1a852b65e2 100644 --- a/saga/scene.cpp +++ b/saga/scene.cpp @@ -730,7 +730,7 @@ int Scene::loadSceneResourceList(uint32 reslist_rn) { int Scene::processSceneResources() { byte *resourceData; - size_t resourceDataLength; + uint16 resourceDataLength; const byte *pal_p; int i; @@ -863,6 +863,22 @@ int Scene::processSceneResources() { case SAGA_FACES: _vm->_interface->loadScenePortraits(_resList[i].res_number); break; + case SAGA_PALETTE: + { + PALENTRY pal[PAL_ENTRIES]; + byte *palPtr = resourceData; + + if (resourceDataLength < 3 * PAL_ENTRIES) + error("Too small scene palette: %d", resourceDataLength); + + for (uint16 c = 0; c < PAL_ENTRIES; c++) { + pal[c].red = *palPtr++; + pal[c].green = *palPtr++; + pal[c].blue = *palPtr++; + } + _vm->_gfx->setPalette(pal); + } + break; default: warning("Scene::ProcessSceneResources(): Encountered unknown resource type: %d", _resList[i].res_type); break; diff --git a/saga/scene.h b/saga/scene.h index cf0dc19c85..a67acb4fd9 100644 --- a/saga/scene.h +++ b/saga/scene.h @@ -82,7 +82,8 @@ enum SAGAResourceTypes { SAGA_ANIM_7, SAGA_ISO_MULTI = 22, SAGA_PAL_ANIM = 23, - SAGA_FACES = 24 + SAGA_FACES = 24, + SAGA_PALETTE = 25 }; #define SAGA_RESLIST_ENTRY_LEN 4 |