diff options
-rw-r--r-- | actor.cpp | 2 | ||||
-rw-r--r-- | costume.cpp | 2 | ||||
-rw-r--r-- | gfx.cpp | 25 | ||||
-rw-r--r-- | gui.cpp | 2 | ||||
-rw-r--r-- | object.cpp | 2 | ||||
-rw-r--r-- | script.cpp | 2 | ||||
-rw-r--r-- | scumm.h | 7 | ||||
-rw-r--r-- | string.cpp | 4 |
8 files changed, 28 insertions, 18 deletions
@@ -920,7 +920,7 @@ void Scumm::drawActorCostume(Actor *a) { } ar.charsetmask = _vars[VAR_CHARSET_MASK]!=0; - ar.outptr = getResourceAddress(rtBuffer, 1) + virtscr->xstart; + ar.outptr = virtscr->screenPtr + virtscr->xstart; ar.outwidth = virtscr->width; ar.outheight = virtscr->height; diff --git a/costume.cpp b/costume.cpp index 0a44774c15..10e8ff6dfd 100644 --- a/costume.cpp +++ b/costume.cpp @@ -271,7 +271,7 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame) { } _bgbak_ptr = _vm->getResourceAddress(rtBuffer, 5) + _vm->virtscr[0].xstart + _ypos*320 + _xpos; - _backbuff_ptr = _vm->getResourceAddress(rtBuffer, 1) + _vm->virtscr[0].xstart + _ypos*320 + _xpos; + _backbuff_ptr = _vm->virtscr[0].screenPtr + _vm->virtscr[0].xstart + _ypos*320 + _xpos; charsetmask = _vm->hasCharsetMask(_left, _top + _vm->virtscr[0].topline, _right, _vm->virtscr[0].topline + _bottom); masking = 0; @@ -48,7 +48,7 @@ void Scumm::initScreens(int a, int b, int w, int h) { int i; for (i=0; i<3; i++) { - nukeResource(rtBuffer, i+1); +// nukeResource(rtBuffer, i+1); nukeResource(rtBuffer, i+5); } @@ -81,10 +81,13 @@ void Scumm::initVirtScreen(int slot, int top, int height, bool twobufs, bool fou vs->xstart = 0; size = vs->width * vs->height; vs->size = size; + vs->backBuf = NULL; if (vs->scrollable) size += 320*4; - createResource(rtBuffer, slot+1, size); +// createResource(rtBuffer, slot+1, size); + + vs->screenPtr = _videoBuffer+320*top; if (twobufs) { createResource(rtBuffer, slot+5, size); @@ -125,7 +128,7 @@ void Scumm::drawDirtyScreenParts() { } else { vs = &virtscr[0]; - blitToScreen(this, getResourceAddress(rtBuffer, 1) + _screenStartStrip*8, + blitToScreen(this, vs->screenPtr + _screenStartStrip*8, 0, vs->topline, 320, vs->height); for (i = 0; i<40; i++) { @@ -210,7 +213,7 @@ void Gdi::drawStripToScreen(VirtScreen *vs, int x, int w, int t, int b) { if (b > vs->height) b = vs->height; - ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + (t*40+x)*8 + _readOffs; + ptr = vs->screenPtr + (t*40+x)*8 + _readOffs; blitToScreen(_vm, ptr, x*8, vs->topline+t, w, b-t); } @@ -522,7 +525,7 @@ void Scumm::unkVirtScreen4(int a) { return; vs = &virtscr[0]; - gdi._backbuff_ptr = getResourceAddress(rtBuffer, 1) + vs->xstart; + gdi._backbuff_ptr = vs->screenPtr + vs->xstart; memset(gdi._backbuff_ptr, 0, vs->size); switch(a) { @@ -663,7 +666,7 @@ void Gdi::drawBitmap(byte *ptr, VirtScreen *vs, int x, int y, int h, int stripnr if (bottom > vs->bdirty[sx]) vs->bdirty[sx] = bottom; - _backbuff_ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + (y*40+x)*8; + _backbuff_ptr = vs->screenPtr + (y*40+x)*8; _bgbak_ptr = _vm->getResourceAddress(rtBuffer, vs->number+5) + (y*40+x)*8; if (!twobufs) { _bgbak_ptr = _backbuff_ptr; @@ -1445,7 +1448,7 @@ void Scumm::restoreBG(int left, int top, int right, int bottom) { height = (top-topline) * 320 + vs->xstart + left; - backbuff = getResourceAddress(rtBuffer, vs->number+1) + height; + backbuff = vs->screenPtr + height; bgbak = getResourceAddress(rtBuffer, vs->number+5) + height; mask = getResourceAddress(rtBuffer, 9) + top * 40 + (left>>3) + _screenStartStrip; if (vs->number==0) { @@ -2021,7 +2024,7 @@ void Gdi::resetBackground(byte top, byte bottom, int strip) { offs = (top * 40 + _vm->_screenStartStrip + strip); _mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + offs; _bgbak_ptr = _vm->getResourceAddress(rtBuffer, 5) + (offs<<3); - _backbuff_ptr = _vm->getResourceAddress(rtBuffer, 1) + (offs<<3); + _backbuff_ptr = vs->screenPtr + (offs<<3); _numLinesToProcess = bottom - top; if (_numLinesToProcess) { @@ -2180,7 +2183,7 @@ void Scumm::grabCursor(int x, int y, int w, int h) { } grabCursor( - getResourceAddress(rtBuffer, vs->number+1) + (y-vs->topline)*320 + x, + vs->screenPtr + (y-vs->topline)*320 + x, w,h); } @@ -2244,9 +2247,9 @@ void Scumm::useIm01Cursor(byte *im, int w, int h) { vs->alloctwobuffers = true; gdi._disable_zbuffer = false; - grabCursor(getResourceAddress(rtBuffer, 1) + vs->xstart, w, h); + grabCursor(vs->screenPtr + vs->xstart, w, h); - blit(getResourceAddress(rtBuffer, 1) + vs->xstart, getResourceAddress(rtBuffer, 5) + vs->xstart, w, h); + blit(vs->screenPtr + vs->xstart, getResourceAddress(rtBuffer, 5) + vs->xstart, w, h); } void Scumm::useBompCursor(byte *im, int width, int height) { @@ -266,7 +266,7 @@ byte *Gui::getBasePtr(int x, int y) { if (_vs==NULL) return NULL; - return _s->getResourceAddress(rtBuffer, _vs->number+1) + x + (y-_vs->topline)*320 + _s->_screenStartStrip*8; + return _vs->screenPtr + x + (y-_vs->topline)*320 + _s->_screenStartStrip*8; } void Gui::lineto(int x, int y) { diff --git a/object.cpp b/object.cpp index 30b4f98afe..7c3ec7cd5c 100644 --- a/object.cpp +++ b/object.cpp @@ -1169,7 +1169,7 @@ void Scumm::drawEnqueuedObject(EnqueuedObject *eo) { bdd.srcwidth = READ_LE_UINT16(&((BompHeader*)bomp)->width); bdd.srcheight = READ_LE_UINT16(&((BompHeader*)bomp)->height); - bdd.out = getResourceAddress(rtBuffer, vs->number+1) + vs->xstart; + bdd.out = vs->screenPtr + vs->xstart; bdd.outwidth = 320; bdd.outheight = vs->height; bdd.dataptr = bomp + 10; diff --git a/script.cpp b/script.cpp index a6a67bea63..9a5f843cdf 100644 --- a/script.cpp +++ b/script.cpp @@ -414,7 +414,7 @@ void Scumm::drawBox(int x, int y, int x2, int y2, int color) { updateDirtyRect(vs->number, x, x2, y-top, y2-top, 0); - backbuff = getResourceAddress(rtBuffer, vs->number+1) + vs->xstart + (y-top)*320 + x; + backbuff = vs->screenPtr + vs->xstart + (y-top)*320 + x; if (color==-1) { if(vs->number!=0) @@ -325,6 +325,8 @@ struct VirtScreen { uint16 xstart; byte tdirty[40]; byte bdirty[40]; + byte *screenPtr; + byte *backBuf; }; struct ActorWalkData { @@ -919,6 +921,11 @@ public: byte _fastMode; char *getGameName(); + /* video buffer */ + + byte _videoBuffer[320*200]; + byte _svideoBuffer[320*200+4*320]; + void scummInit(); void scummMain(int argc, char **argv); int scummLoop(int delta); diff --git a/string.cpp b/string.cpp index 4151cbfc11..f07a9c5404 100644 --- a/string.cpp +++ b/string.cpp @@ -720,7 +720,7 @@ void CharsetRenderer::printCharOld(int chr) { // Loom3 / Zak256 _unk12 = 0; } char_ptr = _vm->getResourceAddress(rtCharset, _curId) + 224 + (chr + 1)*8; - dest_ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + vs->xstart + (_top - vs->topline) * 320 + _left; + dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * 320 + _left; _vm->updateDirtyRect(vs->number, _left, _left + 8, _top - vs->topline, _top - vs->topline + 8, 0); for(y=0;y<8;y++) { @@ -839,7 +839,7 @@ void CharsetRenderer::printChar(int chr) { _hasMask = true; #endif - _dest_ptr = _backbuff_ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + _dest_ptr = _backbuff_ptr = vs->screenPtr + vs->xstart + _drawTop * 320 + _left; #if !defined(OLD) |