mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 06:08:35 +00:00
DREAMWEB: Convert greyscaleSum, allPalette, dumpCurrent
This commit is contained in:
parent
9a420d232f
commit
ef2096736d
@ -202,6 +202,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'allocateload',
|
||||
'allocatemem',
|
||||
'allocatework',
|
||||
'allpalette',
|
||||
'allpointer',
|
||||
'animpointer',
|
||||
'atmospheres',
|
||||
@ -320,6 +321,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'droperror',
|
||||
'drunk',
|
||||
'dumpblink',
|
||||
'dumpcurrent',
|
||||
'dumpeverything',
|
||||
'dumpkeypad',
|
||||
'dumpmap',
|
||||
@ -419,6 +421,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'getxad',
|
||||
'getyad',
|
||||
'grafittidoor',
|
||||
'greyscalesum',
|
||||
'handclap',
|
||||
'hangon',
|
||||
'hangoncurs',
|
||||
@ -837,7 +840,6 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'allocateload' : 'allocateLoad',
|
||||
'allocatemem' : 'allocateMem',
|
||||
'allocatework' : 'allocateWork',
|
||||
'allpalette' : 'allPalette',
|
||||
'allpointer' : 'allPointer',
|
||||
'animpointer' : 'animPointer',
|
||||
'atmospheres' : 'atmospheres',
|
||||
@ -969,7 +971,6 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'dropobject' : 'dropObject',
|
||||
'drunk' : 'drunk',
|
||||
'dumpblink' : 'dumpBlink',
|
||||
'dumpcurrent' : 'dumpCurrent',
|
||||
'dumpdiarykeys' : 'dumpDiaryKeys',
|
||||
'dumpeverything' : 'dumpEverything',
|
||||
'dumpkeypad' : 'dumpKeypad',
|
||||
@ -1099,7 +1100,6 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'getxad' : 'getXAd',
|
||||
'getyad' : 'getYAd',
|
||||
'grafittidoor' : 'grafittiDoor',
|
||||
'greyscalesum' : 'greyscaleSum',
|
||||
'handclap' : 'handClap',
|
||||
'hangon' : 'hangOn',
|
||||
'hangoncurs' : 'hangOnCurs',
|
||||
|
@ -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];
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -183,7 +183,7 @@ void DreamBase::vSync() {
|
||||
}
|
||||
|
||||
void DreamBase::setMode() {
|
||||
vSync();
|
||||
engine->waitForVSync();
|
||||
initGraphics(320, 200, false);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user