Skip to content

Commit

Permalink
DREAMWEB: Convert greyscaleSum, allPalette, dumpCurrent
Browse files Browse the repository at this point in the history
  • Loading branch information
fingolfin authored and wjp committed Dec 12, 2011
1 parent 9a420d2 commit ef20967
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 99 deletions.
6 changes: 3 additions & 3 deletions devtools/tasmrecover/tasm-recover
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'allocateload',
'allocatemem',
'allocatework',
'allpalette',
'allpointer',
'animpointer',
'atmospheres',
Expand Down Expand Up @@ -320,6 +321,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'droperror',
'drunk',
'dumpblink',
'dumpcurrent',
'dumpeverything',
'dumpkeypad',
'dumpmap',
Expand Down Expand Up @@ -419,6 +421,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'getxad',
'getyad',
'grafittidoor',
'greyscalesum',
'handclap',
'hangon',
'hangoncurs',
Expand Down Expand Up @@ -837,7 +840,6 @@ generator = cpp(context, "DreamGen", blacklist = [
'allocateload' : 'allocateLoad',
'allocatemem' : 'allocateMem',
'allocatework' : 'allocateWork',
'allpalette' : 'allPalette',
'allpointer' : 'allPointer',
'animpointer' : 'animPointer',
'atmospheres' : 'atmospheres',
Expand Down Expand Up @@ -969,7 +971,6 @@ generator = cpp(context, "DreamGen", blacklist = [
'dropobject' : 'dropObject',
'drunk' : 'drunk',
'dumpblink' : 'dumpBlink',
'dumpcurrent' : 'dumpCurrent',
'dumpdiarykeys' : 'dumpDiaryKeys',
'dumpeverything' : 'dumpEverything',
'dumpkeypad' : 'dumpKeypad',
Expand Down Expand Up @@ -1099,7 +1100,6 @@ generator = cpp(context, "DreamGen", blacklist = [
'getxad' : 'getXAd',
'getyad' : 'getYAd',
'grafittidoor' : 'grafittiDoor',
'greyscalesum' : 'greyscaleSum',
'handclap' : 'handClap',
'hangon' : 'hangOn',
'hangoncurs' : 'hangOnCurs',
Expand Down
3 changes: 3 additions & 0 deletions engines/dreamweb/dreambase.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ class DreamBase : public SegmentManager {
void fadeScreenUpHalf();
void fadeScreenDown();
void fadeScreenDowns();
void greyscaleSum();
void allPalette();
void dumpCurrent();

// from vgagrafx.cpp
uint8 _workspace[(0x1000 + 2) * 16];
Expand Down
83 changes: 0 additions & 83 deletions engines/dreamweb/dreamgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1027,89 +1027,6 @@ void DreamGenContext::rollEm() {
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();
Expand Down
3 changes: 0 additions & 3 deletions engines/dreamweb/dreamgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,6 @@ class DreamGenContext : public DreamBase, public Context {
void moneyPoke();
void doSomeTalk();
void resetLocation();
void greyscaleSum();
void getOpenedSize();
void adjustUp();
void fadeScreenDownHalf();
Expand Down Expand Up @@ -547,7 +546,6 @@ class DreamGenContext : public DreamBase, public Context {
void dirFile();
void pickupConts();
void nextColon();
void allPalette();
void findInvPos();
void rollEndCredits();
void getKeyAndLogo();
Expand Down Expand Up @@ -589,7 +587,6 @@ class DreamGenContext : public DreamBase, public Context {
void openOb();
void drawItAll();
void useStereo();
void dumpCurrent();
void showDiaryKeys();
void rollEndCredits2();
void useOpened();
Expand Down
9 changes: 0 additions & 9 deletions engines/dreamweb/stubs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
58 changes: 58 additions & 0 deletions engines/dreamweb/vgafades.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion engines/dreamweb/vgagrafx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ void DreamBase::vSync() {
}

void DreamBase::setMode() {
vSync();
engine->waitForVSync();
initGraphics(320, 200, false);
}

Expand Down

0 comments on commit ef20967

Please sign in to comment.