aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actor.cpp2
-rw-r--r--costume.cpp2
-rw-r--r--gfx.cpp25
-rw-r--r--gui.cpp2
-rw-r--r--object.cpp2
-rw-r--r--script.cpp2
-rw-r--r--scumm.h7
-rw-r--r--string.cpp4
8 files changed, 28 insertions, 18 deletions
diff --git a/actor.cpp b/actor.cpp
index 8c6659a0f3..217f66ca6a 100644
--- a/actor.cpp
+++ b/actor.cpp
@@ -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;
diff --git a/gfx.cpp b/gfx.cpp
index 6203998c7a..7a18cf6902 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -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) {
diff --git a/gui.cpp b/gui.cpp
index 3182fc0216..5bc83ca893 100644
--- a/gui.cpp
+++ b/gui.cpp
@@ -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)
diff --git a/scumm.h b/scumm.h
index f7048f5f63..bbcf225d19 100644
--- a/scumm.h
+++ b/scumm.h
@@ -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)