aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/graphics.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-02-23 16:48:12 -0500
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit8cd5441959108b890d1433e70376c6cc1dd3bdb5 (patch)
tree61209cea20195b6199977d07def786288b9b896c /engines/startrek/graphics.cpp
parentcd45502501787c8003cfd86b7adf48a6f86d68de (diff)
downloadscummvm-rg350-8cd5441959108b890d1433e70376c6cc1dd3bdb5.tar.gz
scummvm-rg350-8cd5441959108b890d1433e70376c6cc1dd3bdb5.tar.bz2
scummvm-rg350-8cd5441959108b890d1433e70376c6cc1dd3bdb5.zip
STARTREK: Implement addSprite and delSprite
Diffstat (limited to 'engines/startrek/graphics.cpp')
-rwxr-xr-xengines/startrek/graphics.cpp135
1 files changed, 73 insertions, 62 deletions
diff --git a/engines/startrek/graphics.cpp b/engines/startrek/graphics.cpp
index c597568614..039f62ac4b 100755
--- a/engines/startrek/graphics.cpp
+++ b/engines/startrek/graphics.cpp
@@ -44,6 +44,8 @@ Graphics::Graphics(StarTrekEngine *vm) : _vm(vm), _egaMode(false) {
_backgroundImage = new Bitmap(_vm->openFile("DEMON0.BMP"));
_canvas = new Bitmap(SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ _numSprites = 0;
}
Graphics::~Graphics() {
@@ -56,6 +58,48 @@ Graphics::~Graphics() {
delete _canvas;
}
+
+void Graphics::loadEGAData(const char *filename) {
+ // Load EGA palette data
+ if (!_egaMode)
+ return;
+
+ if (!_egaData)
+ _egaData = new byte[256];
+
+ Common::SeekableReadStream *egaStream = _vm->openFile(filename);
+ egaStream->read(_egaData, 256);
+ delete egaStream;
+}
+
+void Graphics::drawBackgroundImage(const char *filename) {
+ // Draw an stjr BGD image (palette built-in)
+
+ Common::SeekableReadStream *imageStream = _vm->openFile(filename);
+ byte *palette = new byte[256 * 3];
+ imageStream->read(palette, 256 * 3);
+
+ // Expand color components
+ for (uint16 i = 0; i < 256 * 3; i++)
+ palette[i] <<= 2;
+
+ uint16 xoffset = imageStream->readUint16LE();
+ uint16 yoffset = imageStream->readUint16LE();
+ uint16 width = imageStream->readUint16LE();
+ uint16 height = imageStream->readUint16LE();
+
+ byte *pixels = new byte[width * height];
+ imageStream->read(pixels, width * height);
+
+ _vm->_system->getPaletteManager()->setPalette(palette, 0, 256);
+ _vm->_system->copyRectToScreen(pixels, width, xoffset, yoffset, width, height);
+ _vm->_system->updateScreen();
+
+ delete[] palette;
+ delete imageStream;
+}
+
+
void Graphics::loadPalette(const Common::String &paletteName) {
// Set the palette from a PAL file
Common::String palFile = paletteName + ".PAL";
@@ -97,37 +141,7 @@ void Graphics::redrawScreen() {
// TODO: get rid of _canvas for efficiency
memcpy(_canvas->pixels, _backgroundImage->pixels, SCREEN_WIDTH*SCREEN_HEIGHT);
- // drawSprite tests
-
- // Draw mode 0
- Sprite spr;
- memset(&spr,0,sizeof(Sprite));
- spr.bitmap = new Bitmap(_vm->openFile("MWALKE00.BMP"));
- spr.drawPriority = 1;
- spr.drawX = 150;
- spr.drawY = 30;
- spr.drawMode = 0;
- drawSprite(spr);
-
- // Draw mode 2 (translucent background)
- memset(&spr,0,sizeof(Sprite));
- spr.bitmap = new Bitmap(_vm->openFile("KWALKS00.BMP"));
- spr.drawPriority = 1;
- spr.drawX = 200;
- spr.drawY = 40;
- spr.drawMode = 2;
- drawSprite(spr);
-
- // Draw mode 3 (text)
- memset(&spr,0,sizeof(Sprite));
- spr.bitmap = new Bitmap(8*8,8*8);
- for (int i=0;i<8*8;i++)
- spr.bitmap->pixels[i] = 0x40+i;
- spr.drawX = 8*10;
- spr.drawY = 50;
- spr.textColor = 0xb3;
- spr.drawMode = 3;
- drawSprite(spr);
+ drawAllSprites();
drawBitmapToScreen(_canvas);
}
@@ -272,45 +286,42 @@ void Graphics::drawSprite(const Sprite &sprite, const Common::Rect &rect) {
}
}
-
-void Graphics::loadEGAData(const char *filename) {
- // Load EGA palette data
- if (!_egaMode)
- return;
-
- if (!_egaData)
- _egaData = new byte[256];
-
- Common::SeekableReadStream *egaStream = _vm->openFile(filename);
- egaStream->read(_egaData, 256);
- delete egaStream;
+void Graphics::drawAllSprites() {
+ // TODO: implement properly
+ for (int i=0; i<_numSprites; i++) {
+ Sprite *spr = _sprites[i];
+ drawSprite(*spr);
+ }
}
-void Graphics::drawBackgroundImage(const char *filename) {
- // Draw an stjr BGD image (palette built-in)
+void Graphics::addSprite(Sprite *sprite) {
+ if (_numSprites >= MAX_SPRITES)
+ error("addSprite: too many sprites");
- Common::SeekableReadStream *imageStream = _vm->openFile(filename);
- byte *palette = new byte[256 * 3];
- imageStream->read(palette, 256 * 3);
+ // Initialize some fields
+ sprite->drawMode = 0;
+ sprite->field8 = 0;
+ sprite->field16 = 0;
- // Expand color components
- for (uint16 i = 0; i < 256 * 3; i++)
- palette[i] <<= 2;
+ sprite->rectangle1.top = -1;
+ sprite->rectangle1.left = -1;
+ sprite->rectangle1.bottom = -2;
+ sprite->rectangle1.right = -2;
- uint16 xoffset = imageStream->readUint16LE();
- uint16 yoffset = imageStream->readUint16LE();
- uint16 width = imageStream->readUint16LE();
- uint16 height = imageStream->readUint16LE();
+ _sprites[_numSprites++] = sprite;
+}
- byte *pixels = new byte[width * height];
- imageStream->read(pixels, width * height);
+void Graphics::delSprite(Sprite *sprite) {
+ for (int i=0; i<_numSprites; i++) {
+ if (sprite != _sprites[i])
+ continue;
- _vm->_system->getPaletteManager()->setPalette(palette, 0, 256);
- _vm->_system->copyRectToScreen(pixels, width, xoffset, yoffset, width, height);
- _vm->_system->updateScreen();
+ _numSprites--;
+ _sprites[i] = _sprites[_numSprites];
+ return;
+ }
- delete[] palette;
- delete imageStream;
+ error("delSprite: sprite not in list");
}