From ef2096736d9b14c842094b94bff1b772de311e72 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 9 Dec 2011 18:41:45 +0100 Subject: DREAMWEB: Convert greyscaleSum, allPalette, dumpCurrent --- engines/dreamweb/dreambase.h | 3 ++ engines/dreamweb/dreamgen.cpp | 83 ------------------------------------------- engines/dreamweb/dreamgen.h | 3 -- engines/dreamweb/stubs.cpp | 9 ----- engines/dreamweb/vgafades.cpp | 58 ++++++++++++++++++++++++++++++ engines/dreamweb/vgagrafx.cpp | 2 +- 6 files changed, 62 insertions(+), 96 deletions(-) (limited to 'engines') diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h index 285c44b600..ad6748d021 100644 --- a/engines/dreamweb/dreambase.h +++ b/engines/dreamweb/dreambase.h @@ -170,6 +170,9 @@ public: void fadeScreenUpHalf(); void fadeScreenDown(); void fadeScreenDowns(); + void greyscaleSum(); + void allPalette(); + void dumpCurrent(); // from vgagrafx.cpp uint8 _workspace[(0x1000 + 2) * 16]; diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 8fd359ff12..94658a164b 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -1027,89 +1027,6 @@ endearly2: cx = pop(); } -void DreamGenContext::greyscaleSum() { - STACK_CHECK; - es = data.word(kBuffers); - si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); - di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768); - cx = 256; -greysumloop1: - push(cx); - bx = 0; - al = es.byte(si); - ah = 0; - cx = 20; - _mul(cx); - _add(bx, ax); - al = es.byte(si+1); - ah = 0; - cx = 59; - _mul(cx); - _add(bx, ax); - al = es.byte(si+2); - ah = 0; - cx = 11; - _mul(cx); - _add(bx, ax); - al = -1; -greysumloop2: - _inc(al); - _sub(bx, 100); - if (!flags.c()) - goto greysumloop2; - bl = al; - al = bl; - ah = data.byte(kAddtored); - _cmp(al, 0); - _add(al, ah); - _stosb(); - ah = data.byte(kAddtogreen); - al = bl; - _cmp(al, 0); - if (flags.z()) - goto noaddg; - _add(al, ah); -noaddg: - _stosb(); - ah = data.byte(kAddtoblue); - al = bl; - _cmp(al, 0); - if (flags.z()) - goto noaddb; - _add(al, ah); -noaddb: - _stosb(); - _add(si, 3); - cx = pop(); - if (--cx) - goto greysumloop1; -} - -void DreamGenContext::allPalette() { - STACK_CHECK; - es = data.word(kBuffers); - ds = data.word(kBuffers); - di = (0+(228*13)+32+60+(32*32)+(11*10*3)); - si = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768); - cx = 768/2; - _movsw(cx, true); - dumpCurrent(); -} - -void DreamGenContext::dumpCurrent() { - STACK_CHECK; - si = (0+(228*13)+32+60+(32*32)+(11*10*3)); - ds = data.word(kBuffers); - vSync(); - al = 0; - cx = 128; - showGroup(); - vSync(); - al = 128; - cx = 128; - showGroup(); -} - void DreamGenContext::fadeDownMon() { STACK_CHECK; palToStartPal(); diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index f537db7958..ef45dd5a97 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -517,7 +517,6 @@ public: void moneyPoke(); void doSomeTalk(); void resetLocation(); - void greyscaleSum(); void getOpenedSize(); void adjustUp(); void fadeScreenDownHalf(); @@ -547,7 +546,6 @@ public: void dirFile(); void pickupConts(); void nextColon(); - void allPalette(); void findInvPos(); void rollEndCredits(); void getKeyAndLogo(); @@ -589,7 +587,6 @@ public: void openOb(); void drawItAll(); void useStereo(); - void dumpCurrent(); void showDiaryKeys(); void rollEndCredits2(); void useOpened(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 409b235133..226c085a2b 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -995,15 +995,6 @@ void DreamGenContext::DOSReturn() { void DreamGenContext::set16ColPalette() { } -void DreamGenContext::showGroup() { - engine->processEvents(); - unsigned n = (uint16)cx; - uint8 *src = ds.ptr(si, n * 3); - engine->setPalette(src, al, n); - si += n * 3; - cx = 0; -} - void DreamGenContext::eraseOldObs() { if (data.byte(kNewobs) == 0) return; diff --git a/engines/dreamweb/vgafades.cpp b/engines/dreamweb/vgafades.cpp index ceb4178b59..6f5af573c4 100644 --- a/engines/dreamweb/vgafades.cpp +++ b/engines/dreamweb/vgafades.cpp @@ -190,4 +190,62 @@ void DreamGenContext::clearPalette() { dumpCurrent(); } +// Converts palette to grey scale, summed using formula +// .20xred + .59xGreen + .11xBlue +void DreamBase::greyscaleSum() { + byte *src = mainPalette(); + byte *dst = endPalette(); + + for (int i = 0; i < 256; ++i) { + const unsigned int r = 20 * *src++; + const unsigned int g = 59 * *src++; + const unsigned int b = 11 * *src++; + const byte grey = (r + b + g) / 100; + byte tmp; + + tmp = grey; + //if (tmp != 0) // FIXME: The assembler code has this check commented out. Bug or feature? + tmp += data.byte(kAddtored); + *dst++ = tmp; + + tmp = grey; + if (tmp != 0) + tmp += data.byte(kAddtogreen); + *dst++ = tmp; + + tmp = grey; + if (tmp != 0) + tmp += data.byte(kAddtoblue); + *dst++ = tmp; + } +} + +void DreamBase::allPalette() { + memcpy(startPalette(), mainPalette(), 3 * 256); + dumpCurrent(); +} + +void DreamBase::dumpCurrent() { + uint8 *pal = startPalette(); + + engine->waitForVSync(); + engine->processEvents(); + engine->setPalette(pal, 0, 128); + + pal += 128 * 3; + + engine->waitForVSync(); + engine->processEvents(); + engine->setPalette(pal, 128, 128); +} + +void DreamGenContext::showGroup() { + engine->processEvents(); + unsigned n = (uint16)cx; + uint8 *src = ds.ptr(si, n * 3); + engine->setPalette(src, al, n); + si += n * 3; + cx = 0; +} + } // End of namespace DreamGen diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp index c7d17c1012..cea9dbef8c 100644 --- a/engines/dreamweb/vgagrafx.cpp +++ b/engines/dreamweb/vgagrafx.cpp @@ -183,7 +183,7 @@ void DreamBase::vSync() { } void DreamBase::setMode() { - vSync(); + engine->waitForVSync(); initGraphics(320, 200, false); } -- cgit v1.2.3