aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--saga/events.cpp17
-rw-r--r--saga/gfx.cpp6
-rw-r--r--saga/gfx.h6
-rw-r--r--saga/interface.cpp13
-rw-r--r--saga/palanim.cpp5
-rw-r--r--saga/render.cpp3
-rw-r--r--saga/render.h3
-rw-r--r--saga/saveload.cpp3
-rw-r--r--saga/scene.cpp18
-rw-r--r--saga/scene.h3
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