aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/graphics.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-05-29 20:35:36 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit1290b7ea0298dc6a565e2593ecb703710d051830 (patch)
treee87d6d9bda16385f19a12b1570f1af0c008ed5fe /engines/startrek/graphics.cpp
parente5a97d91373e20815c4f093803dc569112e0c922 (diff)
downloadscummvm-rg350-1290b7ea0298dc6a565e2593ecb703710d051830.tar.gz
scummvm-rg350-1290b7ea0298dc6a565e2593ecb703710d051830.tar.bz2
scummvm-rg350-1290b7ea0298dc6a565e2593ecb703710d051830.zip
STARTREK: Demon6, including the special case menu
Diffstat (limited to 'engines/startrek/graphics.cpp')
-rw-r--r--engines/startrek/graphics.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/engines/startrek/graphics.cpp b/engines/startrek/graphics.cpp
index a5b2b7bc71..145a156b1e 100644
--- a/engines/startrek/graphics.cpp
+++ b/engines/startrek/graphics.cpp
@@ -46,6 +46,7 @@ Graphics::Graphics(StarTrekEngine *vm) : _vm(vm), _egaMode(false) {
_font = new Font(_vm);
_numSprites = 0;
+ _pushedNumSprites = -1;
_palData = new byte[256 * 3];
_lutData = new byte[256 * 3];
@@ -160,7 +161,7 @@ void Graphics::decPaletteFadeLevel() {
void Graphics::loadPri(const Common::String &priFile) {
- SharedPtr<FileStream> priStream = _vm->loadFile(priFile);
+ SharedPtr<FileStream> priStream = _vm->loadFile(priFile + ".pri");
priStream->read(_priData, SCREEN_WIDTH * SCREEN_HEIGHT / 2);
}
@@ -555,6 +556,15 @@ void Graphics::drawAllSprites(bool updateScreen) {
}
/**
+ * Sets "bitmapChanged" to true on all sprites before calling drawAllSprites.
+ */
+void Graphics::forceDrawAllSprites(bool updateScreen) {
+ for (int i = 0; i < _numSprites; i++)
+ _sprites[i]->bitmapChanged = true;
+ drawAllSprites(updateScreen);
+}
+
+/**
* Returns the sprite at the given position (ignores mouse).
*/
Sprite *Graphics::getSpriteAt(int16 x, int16 y) {
@@ -613,6 +623,24 @@ void Graphics::delSprite(Sprite *sprite) {
error("delSprite: sprite not in list");
}
+void Graphics::pushSprites() {
+ if (_pushedNumSprites != -1)
+ error("Tried to push sprites more than once");
+ _pushedNumSprites = _numSprites;
+ memcpy(_pushedSprites, _sprites, sizeof(_sprites));
+
+ _numSprites = 0;
+}
+
+void Graphics::popSprites() {
+ if (_pushedNumSprites == -1)
+ error("Tried to pop sprites without a prior push");
+ _numSprites = _pushedNumSprites;
+ memcpy(_sprites, _pushedSprites, sizeof(_sprites));
+
+ _pushedNumSprites = -1;
+}
+
void Graphics::copyBackgroundScreen() {
drawDirectToScreen(_backgroundImage);