diff options
-rwxr-xr-x | devtools/tasmrecover/tasm-recover | 4 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 86 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 8 | ||||
-rw-r--r-- | engines/dreamweb/stubs.cpp | 41 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 2 |
5 files changed, 44 insertions, 97 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 95b42cf652..727bb41ebf 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -15,7 +15,9 @@ generator = cpp(context, "DreamGen", blacklist = [ 'multiget', 'multiput', 'multidump', - 'frameoutnm', + 'frameoutnm', + 'frameoutbh', + 'frameoutfx', 'cls', 'printundermon', 'worktoscreen', diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index c96ce3f4f2..23027ef6d2 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -4090,90 +4090,6 @@ zeroblock: goto loop120; } -void DreamGenContext::frameoutbh() { - STACK_CHECK; - push(dx); - ax = bx; - bx = dx; - _mul(bx); - _add(di, ax); - dx = pop(); - push(cx); - ch = 0; - _sub(dx, cx); - cx = pop(); -bhloop2: - push(cx); - ch = 0; - ah = 255; -bhloop1: - _cmp(es.byte(di), ah); - if (!flags.z()) - goto nofill; - _movsb(); - if (--cx) - goto bhloop1; - goto nextline; -nofill: - _inc(di); - _inc(si); - if (--cx) - goto bhloop1; -nextline: - _add(di, dx); - cx = pop(); - _dec(ch); - if (!flags.z()) - goto bhloop2; -} - -void DreamGenContext::frameoutfx() { - STACK_CHECK; - push(dx); - ax = bx; - bx = dx; - _mul(bx); - _add(di, ax); - dx = pop(); - push(cx); - ch = 0; - _add(dx, cx); - cx = pop(); -frameloopfx1: - push(cx); - ch = 0; -frameloopfx2: - _lodsb(); - _cmp(al, 0); - if (!flags.z()) - goto backtosolidfx; -backtootherfx: - _dec(di); - if (--cx) - goto frameloopfx2; - cx = pop(); - _add(di, dx); - _dec(ch); - if (!flags.z()) - goto frameloopfx1; - return; -frameloopfx3: - _lodsb(); - _cmp(al, 0); - if (flags.z()) - goto backtootherfx; -backtosolidfx: - es.byte(di) = al; - _dec(di); - if (--cx) - goto frameloopfx3; - cx = pop(); - _add(di, dx); - _dec(ch); - if (!flags.z()) - goto frameloopfx1; -} - void DreamGenContext::transferinv() { STACK_CHECK; di = data.word(kExframepos); @@ -21912,8 +21828,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_zoom: zoom(); break; case addr_delthisone: delthisone(); break; case addr_doblocks: doblocks(); break; - case addr_frameoutbh: frameoutbh(); break; - case addr_frameoutfx: frameoutfx(); break; case addr_transferinv: transferinv(); break; case addr_transfermap: transfermap(); break; case addr_fadedos: fadedos(); break; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index a52e142973..354a3464e8 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -618,8 +618,6 @@ public: static const uint16 addr_fadedos = 0xc248; static const uint16 addr_transfermap = 0xc244; static const uint16 addr_transferinv = 0xc240; - static const uint16 addr_frameoutfx = 0xc23c; - static const uint16 addr_frameoutbh = 0xc238; static const uint16 addr_doblocks = 0xc228; static const uint16 addr_delthisone = 0xc214; static const uint16 addr_zoom = 0xc210; @@ -1341,7 +1339,7 @@ public: void channel0only(); void worktoscreenm(); void removeemm(); - void mansatstill(); + //void frameoutbh(); void getobtextstart(); void loadfolder(); void decide(); @@ -1589,7 +1587,7 @@ public: void openhoteldoor(); void removesetobject(); void checkifperson(); - void frameoutfx(); + //void frameoutfx(); void blank(); void drinker(); void nextcolon(); @@ -1681,7 +1679,7 @@ public: //void showframe(); void random(); void obicons(); - void frameoutbh(); + void mansatstill(); void channel1only(); void playguitar(); void lastfolder(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 512732a87a..fb7d79275b 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -93,6 +93,39 @@ void DreamGenContext::frameoutnm(uint8* dst, const uint8* src, uint16 pitch, uin } } +void DreamGenContext::frameoutbh(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y) { + uint16 stride = pitch - width; + dst += y * pitch + x; + + for (uint16 i = 0; i < height; ++i) { + for (uint16 j = 0; j < width; ++j) { + if (*dst == 0xff) { + *dst = *src; + } + ++src; + ++dst; + } + dst += stride; + } +} + +void DreamGenContext::frameoutfx(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y) { + uint16 stride = pitch - width; + dst += y * pitch + x; + dst -= width; + + for (uint16 j = 0; j < height; ++j) { + for (uint16 i = 0; i < width; ++i) { + uint8 pixel = src[width - i - 1]; + if (pixel) + *dst = pixel; + ++dst; + } + src += width; + dst += stride; + } +} + void DreamGenContext::seecommandtail() { data.word(kSoundbaseadd) = 0x220; data.byte(kSoundint) = 5; @@ -595,7 +628,7 @@ uint16 DreamGenContext::showframeCPP(uint16 dst, uint16 src, uint16 x, uint16 y, bx -= height / 2; } if (effectsFlag & 64) { //diffdest - frameoutfx(); + frameoutfx(es.ptr(0, dx * height), ds.ptr(si, width * height), dx, width, height, di, bx); return written; } if (effectsFlag & 8) { //printlist @@ -609,9 +642,8 @@ uint16 DreamGenContext::showframeCPP(uint16 dst, uint16 src, uint16 x, uint16 y, ax = pop(); } if (effectsFlag & 4) { //flippedx - dx = (320); es = data.word(kWorkspace); - frameoutfx(); + frameoutfx(es.ptr(0, 320 * height), ds.ptr(si, width * height), 320, width, height, di, bx); return written; } if (effectsFlag & 2) { //nomask @@ -620,9 +652,8 @@ uint16 DreamGenContext::showframeCPP(uint16 dst, uint16 src, uint16 x, uint16 y, return written; } if (effectsFlag & 32) { - dx = (320); es = data.word(kWorkspace); - frameoutbh(); + frameoutbh(es.ptr(0, 320 * height), ds.ptr(si, width * height), 320, width, height, di, bx); return written; } } diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index 0b48c2d363..46250fc414 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -1,6 +1,8 @@ void multidump(); void frameoutv(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); void frameoutnm(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); + void frameoutbh(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); + void frameoutfx(uint8* dst, const uint8* src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); void worktoscreen(); void multiget(); void convertkey(); |