aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2011-12-12 04:50:33 -0800
committerWillem Jan Palenstijn2011-12-12 04:50:33 -0800
commita5992d9b9f41fcebac02aab8597bf78226c14aed (patch)
tree340eb1803c7e836ea054b3e2c8fccbe0e0482d57
parent83610d98b074d9661880167e9ab3ab23db12a181 (diff)
parentb699d5e81e899003561f9d3f6dd7098297d19162 (diff)
downloadscummvm-rg350-a5992d9b9f41fcebac02aab8597bf78226c14aed.tar.gz
scummvm-rg350-a5992d9b9f41fcebac02aab8597bf78226c14aed.tar.bz2
scummvm-rg350-a5992d9b9f41fcebac02aab8597bf78226c14aed.zip
Merge pull request #135 from fingolfin/dreamweb-cleanup
Dreamweb cleanup, convert DreamGenContext::rollEndCredits() to C++
-rwxr-xr-xdevtools/tasmrecover/tasm-recover3
-rw-r--r--engines/dreamweb/dreambase.h3
-rw-r--r--engines/dreamweb/dreamgen.cpp210
-rw-r--r--engines/dreamweb/dreamgen.h39
-rw-r--r--engines/dreamweb/print.cpp3
-rw-r--r--engines/dreamweb/sound.cpp19
-rw-r--r--engines/dreamweb/sprite.cpp44
-rw-r--r--engines/dreamweb/stubs.cpp31
-rw-r--r--engines/dreamweb/stubs.h9
-rw-r--r--engines/dreamweb/vgafades.cpp4
10 files changed, 150 insertions, 215 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index dac600a261..5558a93f7a 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -47,6 +47,7 @@ p = parser(skip_binary_data = [
'icongraphics0',
'icongraphics1',
'savenames',
+ 'volumetabname',
# keypad.asm
'keypadlist',
'symbollist',
@@ -624,6 +625,8 @@ generator = cpp(context, "DreamGen", blacklist = [
'restoreems',
'restorereels',
'rockstar',
+ 'rollendcredits',
+ 'rollendcredits2',
'roomname',
'runintroseq',
'saveems',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index ad6748d021..3d5c9ce88b 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -99,6 +99,7 @@ public:
void showNames();
// from sound.cpp
+ bool loadSpeech(byte type1, int idx1, byte type2, int idx2);
void volumeAdjust();
void cancelCh0();
void cancelCh1();
@@ -113,6 +114,7 @@ public:
void showReelFrame(Reel *reel);
const Frame *getReelFrameAX(uint16 frame);
void soundOnReels(uint16 reelPointer);
+ void rollEndCredits();
// from stubs.cpp
void crosshair();
@@ -147,6 +149,7 @@ public:
void panelIcons1();
SetObject *getSetAd(uint8 index);
void *getAnyAd(uint8 *value1, uint8 *value2);
+ const uint8 *getTextInFile1(uint16 index);
// from use.cpp
void placeFreeObject(uint8 index);
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 94658a164b..8d1eb4cec9 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -546,99 +546,6 @@ notendseq:
rollEndCredits();
}
-void DreamGenContext::rollEndCredits() {
- STACK_CHECK;
- al = 16;
- ah = 255;
- playChannel0();
- data.byte(kVolume) = 7;
- data.byte(kVolumeto) = 0;
- data.byte(kVolumedirection) = -1;
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- ds = data.word(kMapstore);
- si = 0;
- multiGet();
- es = data.word(kTextfile1);
- si = 3*2;
- ax = es.word(si);
- si = ax;
- _add(si, (66*2));
- cx = 254;
-endcredits1:
- push(cx);
- bx = 10;
- cx = data.word(kLinespacing);
-endcredits2:
- push(cx);
- push(si);
- push(di);
- push(es);
- push(bx);
- vSync();
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- ds = data.word(kMapstore);
- si = 0;
- multiPut();
- vSync();
- bx = pop();
- es = pop();
- di = pop();
- si = pop();
- push(si);
- push(di);
- push(es);
- push(bx);
- cx = 18;
-onelot:
- push(cx);
- di = 75;
- dx = 161;
- ax = 0;
- printDirect();
- _add(bx, data.word(kLinespacing));
- cx = pop();
- if (--cx)
- goto onelot;
- vSync();
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- multiDump();
- bx = pop();
- es = pop();
- di = pop();
- si = pop();
- cx = pop();
- _dec(bx);
- if (--cx)
- goto endcredits2;
- cx = pop();
-looknext:
- al = es.byte(si);
- _inc(si);
- _cmp(al, ':');
- if (flags.z())
- goto gotnext;
- _cmp(al, 0);
- if (flags.z())
- goto gotnext;
- goto looknext;
-gotnext:
- if (--cx)
- goto endcredits1;
- cx = 100;
- hangOn();
- panelToMap();
- fadeScreenUpHalf();
-}
-
void DreamGenContext::checkForExit() {
STACK_CHECK;
cl = data.byte(kRyanx);
@@ -928,11 +835,6 @@ halfend:
data.byte(kNumtofade) = 32;
}
-void DreamGenContext::rollEndCredits2() {
- STACK_CHECK;
- rollEm();
-}
-
void DreamGenContext::rollEm() {
STACK_CHECK;
cl = 160;
@@ -2996,14 +2898,14 @@ void DreamGenContext::getDestInfo() {
push(ax);
dx = data;
es = dx;
- si = 1287;
+ si = 1274;
_add(si, ax);
cl = es.byte(si);
ax = pop();
push(cx);
dx = data;
es = dx;
- si = 1303;
+ si = 1290;
_add(si, ax);
ax = pop();
}
@@ -3055,7 +2957,7 @@ clearedlocations:
bx = ax;
dx = data;
es = dx;
- _add(bx, 1287);
+ _add(bx, 1274);
es.byte(bx) = 0;
}
@@ -3091,7 +2993,7 @@ void DreamGenContext::execCommand() {
es = cs;
bx = offset_comlist;
ds = cs;
- si = 1321;
+ si = 1308;
al = ds.byte(si);
_cmp(al, 0);
if (!flags.z())
@@ -3184,7 +3086,7 @@ dirroot:
si = offset_rootdir;
_inc(si);
es = cs;
- di = 1163;
+ di = 1150;
_inc(di);
cx = 12;
_movsb(cx, true);
@@ -3286,7 +3188,7 @@ notyetassigned:
push(bx);
_add(bx, 2);
ds = cs;
- si = 1321;
+ si = 1308;
checkpass:
_lodsw();
ah = es.byte(bx);
@@ -3357,7 +3259,7 @@ void DreamGenContext::read() {
return;
okcom:
es = cs;
- di = 1163;
+ di = 1150;
ax = data.word(kTextfile1);
data.word(kMonsource) = ax;
ds = ax;
@@ -3487,7 +3389,7 @@ keyok2:
ds = cs;
si = offset_operand1+1;
es = cs;
- di = 1163+1;
+ di = 1150+1;
cx = 12;
_movsb(cx, true);
monitorLogo();
@@ -3614,7 +3516,7 @@ void DreamGenContext::parser() {
al = '=';
_stosb();
ds = cs;
- si = 1321;
+ si = 1308;
notspace1:
_lodsw();
_cmp(al, 32);
@@ -5582,7 +5484,7 @@ void DreamGenContext::clearChanges() {
di = 0;
_stosw(cx, true);
es = cs;
- di = 1287;
+ di = 1274;
al = 1;
_stosb(2);
al = 0;
@@ -5893,53 +5795,53 @@ void DreamGenContext::__start() {
//0x0390: .2.. .... .2.. ....
0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x44, 0x52, 0x45,
//0x03a0: .2.. .!(. .2.. .DRE
- 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57,
- //0x03b0: AMWE B.V9 9.DR EAMW
- 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x00, 0x01, 0x45, 0x58, 0x49, 0x54, 0x20, 0x20, 0x20,
- //0x03c0: EB.V OL.. .EXI T
- 0x20, 0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x49, 0x53,
- //0x03d0: H ELP LIS
- 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20,
- //0x03e0: T R EAD
- 0x20, 0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20,
- //0x03f0: LOG ON K EYS
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20,
- //0x0400: ..P UBLI C
- 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
- //0x0410: P UBLI C ..
- 0x00, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41,
- //0x0420: .BLA CKDR AGON RYA
- 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52,
- //0x0430: N ...H ENDR
- 0x49, 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20,
- //0x0440: IX L OUIS
- 0x20, 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20,
- //0x0450: .. .SEP TIMU S
- 0x20, 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20,
- //0x0460: BEC KETT ...
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f,
- //0x0470: ."RO
- 0x4f, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20,
- //0x0480: OT ."
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30,
- //0x0490: .000 0.00
- 0x00, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41, 0x4d,
- //0x04a0: .... .$OB JECT NAM
- 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- //0x04b0: E ON E
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x10,
- //0x04c0: ..
- 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
- //0x04d0: .... .... .... ....
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- //0x04e0: .... ...D :... ....
+ 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, 0x39, 0x00, 0x00, 0x01, 0x45, 0x58, 0x49, 0x54,
+ //0x03b0: AMWE B.V9 9... EXIT
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x03c0: HE LP
+ 0x4c, 0x49, 0x53, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20,
+ //0x03d0: LIST RE AD
+ 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45,
+ //0x03e0: LOGO N KE
+ 0x59, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43,
+ //0x03f0: YS ..PU BLIC
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20,
+ //0x0400: PU BLIC
+ 0x20, 0x00, 0x00, 0x00, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20,
+ //0x0410: ... BLAC KDRA GON
+ 0x52, 0x59, 0x41, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45,
+ //0x0420: RYAN . ..HE
+ 0x4e, 0x44, 0x52, 0x49, 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20,
+ //0x0430: NDRI X LO UIS
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53,
+ //0x0440: ... SEPT IMUS
+ 0x20, 0x20, 0x20, 0x20, 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00,
+ //0x0450: BECK ETT .
+ 0xff, 0xff, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
+ //0x0460: .. .
+ 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20,
+ //0x0470: "ROO T ."
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x30, 0x30, 0x30, 0x30,
+ //0x0480: . 0000
+ 0x00, 0x30, 0x30, 0x00, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20,
+ //0x0490: .00. .... $OBJ ECT
+ 0x4e, 0x41, 0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x04a0: NAME ONE
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x04b0:
+ 0x20, 0x00, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x04c0: ... .... .... ....
+ 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00,
+ //0x04d0: .... .... ..D: ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x04e0: .... .... .... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00,
//0x04f0: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 0x01,
//0x0500: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 0x01, 0x0a, 0x09, 0x08,
+ 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0510: .... .... .... ....
- 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0520: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0530: .... .... .... ....
@@ -5953,11 +5855,9 @@ void DreamGenContext::__start() {
//0x0570: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0580: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
//0x0590: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- //0x05a0: .... .... .... ....
- 0x00, 0x00, };
+ 0xff, 0xff, 0x00, 0x00, 0x00, };
ds.assign(src, src + sizeof(src));
dreamweb();
}
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index ef45dd5a97..04c5116b83 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -32,14 +32,14 @@
namespace DreamGen {
-static const uint16 offset_money1poke = 0x0499;
-static const uint16 offset_openchangesize = 0x03c7;
-static const uint16 offset_comlist = 0x03c9;
-static const uint16 offset_money2poke = 0x049e;
-static const uint16 offset_commandline = 0x04a6;
-static const uint16 offset_rootdir = 0x047d;
-static const uint16 offset_keys = 0x0405;
-static const uint16 offset_operand1 = 0x046f;
+static const uint16 offset_keys = 0x03f8;
+static const uint16 offset_money1poke = 0x048c;
+static const uint16 offset_commandline = 0x0499;
+static const uint16 offset_rootdir = 0x0470;
+static const uint16 offset_comlist = 0x03bc;
+static const uint16 offset_openchangesize = 0x03ba;
+static const uint16 offset_operand1 = 0x0462;
+static const uint16 offset_money2poke = 0x0491;
static const uint16 kStartvars = 0;
static const uint16 kProgresspoints = 1;
static const uint16 kWatchon = 2;
@@ -389,16 +389,15 @@ static const uint16 kCurrentsample = 482;
static const uint16 kRoomssample = 483;
static const uint16 kReelroutines = 484;
static const uint16 kBasicsample = 941;
-static const uint16 kVolumetabname = 954;
-static const uint16 kCurrentfile = 1163;
-static const uint16 kRoomscango = 1287;
-static const uint16 kRoompics = 1303;
-static const uint16 kOplist = 1318;
-static const uint16 kInputline = 1321;
-static const uint16 kPresslist = 1449;
-static const uint16 kQuitrequested = 1455;
-static const uint16 kSubtitles = 1456;
-static const uint16 kForeignrelease = 1457;
+static const uint16 kCurrentfile = 1150;
+static const uint16 kRoomscango = 1274;
+static const uint16 kRoompics = 1290;
+static const uint16 kOplist = 1305;
+static const uint16 kInputline = 1308;
+static const uint16 kPresslist = 1436;
+static const uint16 kQuitrequested = 1442;
+static const uint16 kSubtitles = 1443;
+static const uint16 kForeignrelease = 1444;
static const uint16 kBlocktextdat = (0);
static const uint16 kPersonframes = (0);
static const uint16 kDebuglevel1 = (0);
@@ -547,14 +546,12 @@ public:
void pickupConts();
void nextColon();
void findInvPos();
- void rollEndCredits();
void getKeyAndLogo();
void selectOb();
void receptionist();
void selectSlot();
void fadeUpMon();
void showDiaryPage();
- void transferToEx();
void reExFromInv();
void businessMan();
void outOfInv();
@@ -588,7 +585,6 @@ public:
void drawItAll();
void useStereo();
void showDiaryKeys();
- void rollEndCredits2();
void useOpened();
void signOn();
void locationPic();
@@ -621,6 +617,7 @@ public:
void swapWithInv();
void useControl();
void adjustRight();
+ void transferToEx();
void updateSymbolTop();
void getPersonText();
void parser();
diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp
index dc7ca8a2f7..0fd596ceac 100644
--- a/engines/dreamweb/print.cpp
+++ b/engines/dreamweb/print.cpp
@@ -122,11 +122,10 @@ uint8 DreamBase::printSlow(const uint8 *string, uint16 x, uint16 y, uint8 maxWid
void DreamGenContext::printDirect() {
uint16 y = bx;
- uint16 initialSi = si;
const uint8 *initialString = es.ptr(si, 0);
const uint8 *string = initialString;
al = DreamBase::printDirect(&string, di, &y, dl, (bool)(dl & 1));
- si = initialSi + (string - initialString);
+ si += (string - initialString);
bx = y;
}
diff --git a/engines/dreamweb/sound.cpp b/engines/dreamweb/sound.cpp
index f1837f313a..d09358eaf8 100644
--- a/engines/dreamweb/sound.cpp
+++ b/engines/dreamweb/sound.cpp
@@ -31,14 +31,21 @@
namespace DreamGen {
void DreamGenContext::loadSpeech() {
+ loadSpeech((uint8)dl, (uint8)dh, (uint8)cl, (uint16)ax);
+}
+
+bool DreamBase::loadSpeech(byte type1, int idx1, byte type2, int idx2) {
cancelCh1();
- data.byte(kSpeechloaded) = 0;
- Common::String name = Common::String::format("%c%02d%c%04d.RAW", (uint8)dl, (uint8)dh, (uint8)cl, (uint16)ax);
+
+ Common::String name = Common::String::format("%c%02d%c%04d.RAW", type1, idx1, type2, idx2);
//debug("name = %s", name.c_str());
- if (engine->loadSpeech(name))
- data.byte(kSpeechloaded) = 1;
+ bool result = engine->loadSpeech(name);
+
+ data.byte(kSpeechloaded) = result;
+ return result;
}
+
void DreamBase::volumeAdjust() {
if (data.byte(kVolumedirection) == 0)
return;
@@ -72,10 +79,6 @@ void DreamBase::playChannel0(uint8 index, uint8 repeat) {
}
}
-void DreamGenContext::playChannel0() {
- playChannel0(al, ah);
-}
-
void DreamBase::playChannel1(uint8 index) {
if (data.byte(kCh1playing) == 7)
return;
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index f1f3ff5e48..f8f11d8df8 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -759,6 +759,50 @@ void DreamGenContext::intro3Text() {
setupTimedTemp(46, 82, 36, 56, 100, 1);
}
+void DreamBase::rollEndCredits() {
+ playChannel0(16, 255);
+ data.byte(kVolume) = 7;
+ data.byte(kVolumeto) = 0;
+ data.byte(kVolumedirection) = -1;
+
+ multiGet(mapStore(), 75, 20, 160, 160);
+
+ const uint8 *string = getTextInFile1(3);
+ const int linespacing = data.word(kLinespacing);
+
+ for (int i = 0; i < 254; ++i) {
+ // Output the text, initially with an offset of 10 pixels,
+ // then move it up one pixel until we shifted it by a complete
+ // line of text.
+ for (int j = 0; j < linespacing; ++j) {
+ vSync();
+ multiPut(mapStore(), 75, 20, 160, 160);
+ vSync();
+
+ // Output up to 18 lines of text
+ uint16 y = 10 - j;
+ const uint8 *tmp_str = string;
+ for (int k = 0; k < 18; ++j) {
+ DreamBase::printDirect(&tmp_str, 75, &y, 160 + 1, true);
+ y += linespacing;
+ }
+
+ vSync();
+ multiDump(75, 20, 160, 160);
+ }
+
+ // Skip to the next text line
+ byte c;
+ do {
+ c = *string++;
+ } while (c != ':' && c != 0);
+ }
+ hangOn(100);
+ panelToMap();
+ fadeScreenUpHalf();
+}
+
+
void DreamGenContext::monks2text() {
bool isGermanCD = isCD() && engine->getLanguage() == Common::DE_DEU;
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 226c085a2b..0b3daa861e 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -888,23 +888,9 @@ void DreamGenContext::useTimedText() {
void DreamGenContext::setupTimedTemp(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount) {
#if 1 // if cd
if (voiceIndex != 0) {
- push(ax);
- push(bx);
- push(cx);
- push(dx);
- dl = 'T';
- dh = voiceIndex;
- cl = 'T';
- ah = 0;
- al = textIndex;
- loadSpeech();
- if (data.byte(kSpeechloaded) == 1) {
+ if (loadSpeech('T', voiceIndex, 'T', textIndex)) {
playChannel1(50+12);
}
- dx = pop();
- cx = pop();
- bx = pop();
- ax = pop();
// FIXME: This fallthrough does not properly support subtitles+speech
// mode. The parameters to setuptimedtemp() are sometimes different
@@ -2163,6 +2149,7 @@ void DreamGenContext::readSetData() {
data.word(kCommandtext) = standardLoad("DREAMWEB.T84");
useCharset1();
+ // FIXME: Why is this commented out?
//engine->openFile("DREAMWEB.VOL");
//uint8 *volumeTab = getSegment(data.word(kSoundbuffer)).ptr(16384, 0);
//engine->readFromFile(volumeTab, 2048-256);
@@ -2495,9 +2482,10 @@ void DreamGenContext::setLocation() {
setLocation(al);
}
-const uint8 *DreamGenContext::getTextInFile1(uint16 index) {
- uint16 offset = getSegment(data.word(kTextfile1)).word(index * 2) + kTextstart;
- const uint8 *string = getSegment(data.word(kTextfile1)).ptr(offset, 0);
+const uint8 *DreamBase::getTextInFile1(uint16 index) {
+ SegmentRef text = getSegment(data.word(kTextfile1));
+ uint16 offset = text.word(index * 2) + kTextstart;
+ const uint8 *string = text.ptr(offset, 0);
return string;
}
@@ -4238,12 +4226,7 @@ void DreamGenContext::monkSpeaking() {
hangOn(300);
for (int i = 40; i <= 48; i++) {
- dl = 'T';
- dh = 83;
- cl = 'T';
- ah = 0;
- al = i;
- loadSpeech();
+ loadSpeech('T', 83, 'T', i);
playChannel1(50 + 12);
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 950da21574..4e9dbb8448 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -275,10 +275,6 @@
void monMessage(uint8 index);
void monMessage();
void netError();
- void playChannel0();
- void playChannel0(uint8 index, uint8 repeat) {
- DreamBase::playChannel0(index, repeat);
- }
void playChannel1();
void playChannel1(uint8 index) {
DreamBase::playChannel1(index);
@@ -369,7 +365,6 @@
void getLocation();
void setLocation(uint8 index);
void setLocation();
- const uint8 *getTextInFile1(uint16 index);
void loadTempText();
void loadTempText(const char *fileName);
void loadTravelText();
@@ -528,6 +523,9 @@
void selectLocation();
void showGroup();
void loadSpeech();
+ bool loadSpeech(byte type1, int idx1, byte type2, int idx2) {
+ return DreamBase::loadSpeech(type1, idx1, type2, idx2);
+ }
void getTime();
void set16ColPalette();
void examineInventory();
@@ -565,5 +563,6 @@
void showPuzText(uint16 command, uint16 count);
void showPuzText();
void monkSpeaking();
+ void rollEndCredits2();
#endif
diff --git a/engines/dreamweb/vgafades.cpp b/engines/dreamweb/vgafades.cpp
index 6f5af573c4..ca63b7308c 100644
--- a/engines/dreamweb/vgafades.cpp
+++ b/engines/dreamweb/vgafades.cpp
@@ -248,4 +248,8 @@ void DreamGenContext::showGroup() {
cx = 0;
}
+void DreamGenContext::rollEndCredits2() {
+ rollEm();
+}
+
} // End of namespace DreamGen