aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2011-12-15 10:54:28 +0100
committerMax Horn2011-12-15 13:44:40 +0100
commit719f3ec1789005186c4cb86b10effa9ceee93866 (patch)
treed33555eabf735e17b6931623cb913adb0aa1f6a2
parentee43bfed74f313115fc9cb537f614f26fa3d6fa2 (diff)
downloadscummvm-rg350-719f3ec1789005186c4cb86b10effa9ceee93866.tar.gz
scummvm-rg350-719f3ec1789005186c4cb86b10effa9ceee93866.tar.bz2
scummvm-rg350-719f3ec1789005186c4cb86b10effa9ceee93866.zip
DREAMWEB: Convert a bunch of stuff to C++
Specifically, I started with openOb() and withWhat() which allowed to remove offset_commandline and offset_openchangesize. A clean conversion of these required a conversion of printMessage2 and getOpenedSize.
-rwxr-xr-xdevtools/tasmrecover/tasm-recover8
-rw-r--r--engines/dreamweb/dreambase.h10
-rw-r--r--engines/dreamweb/dreamgen.cpp221
-rw-r--r--engines/dreamweb/dreamgen.h38
-rw-r--r--engines/dreamweb/dreamweb.cpp10
-rw-r--r--engines/dreamweb/object.cpp35
-rw-r--r--engines/dreamweb/stubs.cpp17
-rw-r--r--engines/dreamweb/stubs.h9
-rw-r--r--engines/dreamweb/use.cpp23
9 files changed, 163 insertions, 208 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 86414ddea0..64e7513f09 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -48,6 +48,8 @@ p = parser(skip_binary_data = [
'icongraphics1',
'savenames',
'volumetabname',
+ 'commandline',
+ 'openchangesize',
# keypad.asm
'keypadlist',
'symbollist',
@@ -438,6 +440,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'getnamepos',
'getnextword',
'getnumber',
+ 'getopenedsize',
'getpersframe',
'getreelframeax',
'getreelstart',
@@ -592,6 +595,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'openhoteldoor2',
'openinv',
'openlouis',
+ 'openob',
'openpoolboss',
'openryan',
'opensarters',
@@ -626,6 +630,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'printdirect',
'printlogo',
'printmessage',
+ 'printmessage2',
'printoutermon',
'printslow',
'printsprites',
@@ -871,6 +876,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'wheelsound',
'widedoor',
'width160',
+ 'withwhat',
'workoutframes',
'worktoscreen',
'worktoscreenm',
@@ -1349,7 +1355,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'printdirect' : 'printDirect',
'printlogo' : 'printLogo',
'printmessage' : 'printMessage',
- 'printmessage2' : 'printmessage2',
+ 'printmessage2' : 'printMessage2',
'printoutermon' : 'printOuterMon',
'printslow' : 'printSlow',
'printsprites' : 'printSprites',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index 1a730ac541..5f2d3d5e70 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -47,8 +47,14 @@ class DreamBase : public SegmentManager {
protected:
DreamWeb::DreamWebEngine *engine;
+ // from object.cpp
+ uint16 _openChangeSize;
+
+ // from pathfind.cpp
+ Common::Point _lineData[200]; // Output of Bresenham
+
public:
- DreamBase(DreamWeb::DreamWebEngine *en) : engine(en) { }
+ DreamBase(DreamWeb::DreamWebEngine *en);
public:
// from monitor.cpp
@@ -76,7 +82,6 @@ public:
void obIcons();
// from pathfind.cpp
- Common::Point _lineData[200]; // Output of Bresenham
void checkDest(const RoomPaths *roomsPaths);
RoomPaths *getRoomsPaths();
void faceRightWay();
@@ -126,6 +131,7 @@ public:
// from stubs.cpp
void crosshair();
+ void delTextLine();
void showBlink();
void dumpBlink();
void dumpPointer();
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 2ee3d512cd..afb537f387 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -950,37 +950,6 @@ findnewpage:
delPointer();
}
-void DreamGenContext::openOb() {
- STACK_CHECK;
- al = data.byte(kOpenedob);
- ah = data.byte(kOpenedtype);
- di = offset_commandline;
- copyName();
- di = (80);
- bx = (58)+86;
- al = 62;
- dl = 240;
- printMessage();
- di = data.word(kLastxpos);
- _add(di, 5);
- bx = (58)+86;
- es = cs;
- si = offset_commandline;
- dl = 220;
- al = 0;
- ah = 0;
- printDirect();
- fillOpen();
- getOpenedSize();
- al = ah;
- ah = 0;
- cx = (44);
- _mul(cx);
- _add(ax, (80));
- bx = offset_openchangesize;
- cs.word(bx) = ax;
-}
-
void DreamGenContext::getObTextStart() {
STACK_CHECK;
es = data.word(kFreedesc);
@@ -1475,29 +1444,6 @@ isex:
ax = es.word(bx+7);
}
-void DreamGenContext::getOpenedSize() {
- STACK_CHECK;
- _cmp(data.byte(kOpenedtype), 4);
- if (flags.z())
- goto isex2;
- _cmp(data.byte(kOpenedtype), 2);
- if (flags.z())
- goto isfree2;
- al = data.byte(kOpenedob);
- getSetAd();
- ax = es.word(bx+3);
- return;
-isfree2:
- al = data.byte(kOpenedob);
- getFreeAd();
- ax = es.word(bx+7);
- return;
-isex2:
- al = data.byte(kOpenedob);
- getExAd();
- ax = es.word(bx+7);
-}
-
void DreamGenContext::getSetAd() {
STACK_CHECK;
ah = 0;
@@ -2586,14 +2532,14 @@ void DreamGenContext::getDestInfo() {
push(ax);
dx = data;
es = dx;
- si = 1174;
+ si = 1131;
_add(si, ax);
cl = es.byte(si);
ax = pop();
push(cx);
dx = data;
es = dx;
- si = 1190;
+ si = 1147;
_add(si, ax);
ax = pop();
}
@@ -2645,7 +2591,7 @@ clearedlocations:
bx = ax;
dx = data;
es = dx;
- _add(bx, 1174);
+ _add(bx, 1131);
es.byte(bx) = 0;
}
@@ -2684,7 +2630,7 @@ dirroot:
si = offset_rootdir;
_inc(si);
es = cs;
- di = 1050;
+ di = 1048;
_inc(di);
cx = 12;
_movsb(cx, true);
@@ -2786,7 +2732,7 @@ notyetassigned:
push(bx);
_add(bx, 2);
ds = cs;
- si = 1208;
+ si = 1165;
checkpass:
_lodsw();
ah = es.byte(bx);
@@ -2857,7 +2803,7 @@ void DreamGenContext::read() {
return;
okcom:
es = cs;
- di = 1050;
+ di = 1048;
ax = data.word(kTextfile1);
data.word(kMonsource) = ax;
ds = ax;
@@ -2987,7 +2933,7 @@ keyok2:
ds = cs;
si = offset_operand1+1;
es = cs;
- di = 1050+1;
+ di = 1048+1;
cx = 12;
_movsb(cx, true);
monitorLogo();
@@ -3114,7 +3060,7 @@ void DreamGenContext::parser() {
al = '=';
_stosb();
ds = cs;
- si = 1208;
+ si = 1165;
notspace1:
_lodsw();
_cmp(al, 32);
@@ -3154,7 +3100,7 @@ void DreamGenContext::notHeldError() {
al = 63;
ah = 1;
dl = 201;
- printmessage2();
+ printMessage2();
workToScreenM();
cx = 50;
hangOnP();
@@ -3333,48 +3279,6 @@ stereoon:
putBackObStuff();
}
-void DreamGenContext::withWhat() {
- STACK_CHECK;
- createPanel();
- showPanel();
- showMan();
- showExit();
- al = data.byte(kCommand);
- ah = data.byte(kObjecttype);
- es = cs;
- di = offset_commandline;
- copyName();
- di = 100;
- bx = 21;
- dl = 200;
- al = 63;
- ah = 2;
- printmessage2();
- di = data.word(kLastxpos);
- _add(di, 5);
- bx = 21;
- es = cs;
- si = offset_commandline;
- dl = 220;
- al = 0;
- ah = 0;
- printDirect();
- di = data.word(kLastxpos);
- _add(di, 5);
- bx = 21;
- dl = 200;
- al = 63;
- ah = 3;
- printmessage2();
- fillRyan();
- data.byte(kCommandtype) = 255;
- readMouse();
- showPointer();
- workToScreen();
- delPointer();
- data.byte(kInvopen) = 2;
-}
-
void DreamGenContext::selectOb() {
STACK_CHECK;
findInvPos();
@@ -3795,7 +3699,7 @@ void DreamGenContext::clearChanges() {
di = 0;
_stosw(cx, true);
es = cs;
- di = 1174;
+ di = 1131;
al = 1;
_stosb(2);
al = 0;
@@ -3957,35 +3861,6 @@ gotfirst:
al = es.byte(bx+6);
}
-void DreamGenContext::printmessage2() {
- STACK_CHECK;
- push(dx);
- push(bx);
- push(di);
- push(ax);
- ah = 0;
- _add(ax, ax);
- bx = ax;
- es = data.word(kCommandtext);
- ax = es.word(bx);
- _add(ax, (66*2));
- si = ax;
- ax = pop();
-searchmess:
- push(ax);
- findNextColon();
- ax = pop();
- _dec(ah);
- if (!flags.z())
- goto searchmess;
- di = pop();
- bx = pop();
- dx = pop();
- al = 0;
- ah = 0;
- printDirect();
-}
-
void DreamGenContext::__start() {
static const uint8 src[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -4102,43 +3977,43 @@ void DreamGenContext::__start() {
//0x0370: .2.. .... .2.. .!(.
0x00, 0x32, 0x14, 0x00, 0xff, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39,
//0x0380: .2.. .DRE AMWE B.V9
- 0x39, 0x00, 0x00, 0x01, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20,
- //0x0390: 9... ..PU BLIC
- 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00,
- //0x03a0: PU BLIC ...
- 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e,
- //0x03b0: BLAC KDRA GON RYAN
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49,
- //0x03c0: . ..HE NDRI
- 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20,
- //0x03d0: X LO UIS
- 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20,
- //0x03e0: ... SEPT IMUS
- 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20,
- //0x03f0: BECK ETT . ..
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f,
- //0x0400: . "ROO
- 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
- //0x0410: T ."
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00,
- //0x0420: . 0000 .00.
- 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41, 0x4d, 0x45,
- //0x0430: .... $OBJ ECT NAME
- 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- //0x0440: ONE
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x10, 0x12,
- //0x0450: ...
- 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
- //0x0460: .... .... .... ....
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- //0x0470: .... ..D: .... ....
+ 0x39, 0x00, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x0390: 9... PUBL IC
+ 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x42, 0x4c,
+ //0x03a0: PUBL IC . ..BL
+ 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, 0x20, 0x20,
+ //0x03b0: ACKD RAGO N RY AN
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49, 0x58, 0x20,
+ //0x03c0: ... HEND RIX
+ 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
+ //0x03d0: LOUI S .
+ 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20, 0x42, 0x45,
+ //0x03e0: ..SE PTIM US BE
+ 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20, 0x20, 0x20,
+ //0x03f0: CKET T ...
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20,
+ //0x0400: ."R OOT
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ //0x0410: . "
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x0d, 0x0a,
+ //0x0420: .00 00.0 0...
+ 0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ //0x0430: ..$. .... .... ....
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00,
+ //0x0440: .... .... ...D :...
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ //0x0450: .... .... .... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00,
+ //0x0460: .... .... .... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04,
+ //0x0470: .... .... .... ....
+ 0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0480: .... .... .... ....
- 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x0490: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 0x01, 0x0a, 0x09, 0x08, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x04a0: .... .... .... ....
- 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, 0x00,
//0x04b0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x04c0: .... .... .... ....
@@ -4148,15 +4023,9 @@ void DreamGenContext::__start() {
//0x04e0: .... .... .... ....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x04f0: .... .... .... ....
- 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, 0x00, 0xff, 0xff, 0xff,
//0x0500: .... .... .... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- //0x0510: .... .... .... ....
- 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- //0x0530: .... .... .... ....
- 0x00, };
+ 0xff, 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 582caa712f..16a42d2e25 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -32,13 +32,11 @@
namespace DreamGen {
-static const uint16 offset_money2poke = 0x042d;
-static const uint16 offset_rootdir = 0x040c;
-static const uint16 offset_openchangesize = 0x0392;
-static const uint16 offset_keys = 0x0394;
-static const uint16 offset_commandline = 0x0435;
-static const uint16 offset_money1poke = 0x0428;
-static const uint16 offset_operand1 = 0x03fe;
+static const uint16 offset_money1poke = 0x0426;
+static const uint16 offset_operand1 = 0x03fc;
+static const uint16 offset_rootdir = 0x040a;
+static const uint16 offset_keys = 0x0392;
+static const uint16 offset_money2poke = 0x042b;
static const uint16 kStartvars = 0;
static const uint16 kProgresspoints = 1;
static const uint16 kWatchon = 2;
@@ -366,15 +364,15 @@ static const uint16 kCurrentsample = 442;
static const uint16 kRoomssample = 443;
static const uint16 kReelroutines = 444;
static const uint16 kBasicsample = 901;
-static const uint16 kCurrentfile = 1050;
-static const uint16 kRoomscango = 1174;
-static const uint16 kRoompics = 1190;
-static const uint16 kOplist = 1205;
-static const uint16 kInputline = 1208;
-static const uint16 kPresslist = 1336;
-static const uint16 kQuitrequested = 1342;
-static const uint16 kSubtitles = 1343;
-static const uint16 kForeignrelease = 1344;
+static const uint16 kCurrentfile = 1048;
+static const uint16 kRoomscango = 1131;
+static const uint16 kRoompics = 1147;
+static const uint16 kOplist = 1162;
+static const uint16 kInputline = 1165;
+static const uint16 kPresslist = 1293;
+static const uint16 kQuitrequested = 1299;
+static const uint16 kSubtitles = 1300;
+static const uint16 kForeignrelease = 1301;
static const uint16 kBlocktextdat = (0);
static const uint16 kPersonframes = (0);
static const uint16 kDebuglevel1 = (0);
@@ -478,6 +476,7 @@ public:
void fadeDownMon();
void identifyOb();
+ void getPersonText();
void clearBuffers();
void getObTextStart();
void checkObjectSize();
@@ -487,7 +486,6 @@ public:
void moneyPoke();
void doSomeTalk();
void resetLocation();
- void getOpenedSize();
void adjustUp();
void fadeScreenDownHalf();
void outOfOpen();
@@ -506,7 +504,6 @@ public:
void removeObFromInv();
void dirFile();
void pickupConts();
- void nextColon();
void findInvPos();
void getKeyAndLogo();
void selectOb();
@@ -520,7 +517,7 @@ public:
void notHeldError();
void getSetAd();
void showKeys();
- void printmessage2();
+ void nextColon();
void findOpenPos();
void deleteExFrame();
void searchForSame();
@@ -533,7 +530,6 @@ public:
void getEitherAd();
void setPickup();
void dropObject();
- void openOb();
void useStereo();
void showDiaryKeys();
void useOpened();
@@ -558,12 +554,10 @@ public:
void swapWithInv();
void adjustRight();
void transferToEx();
- void getPersonText();
void parser();
void emergencyPurge();
void transferConToEx();
void adjustDown();
- void withWhat();
};
} // End of namespace DreamGen
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index b4fc1b7b77..082b7d8ce7 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -410,3 +410,13 @@ uint8 DreamWebEngine::modifyChar(uint8 c) const {
}
} // End of namespace DreamWeb
+
+
+namespace DreamGen {
+
+// FIXME/TODO: Move this to a better place.
+DreamBase::DreamBase(DreamWeb::DreamWebEngine *en) : engine(en) {
+ _openChangeSize = kInventx+(4*kItempicsize);
+}
+
+} // End of namespace DreamGen
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 53d834e74c..8e5da2c90e 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -162,13 +162,13 @@ void DreamGenContext::examineOb(bool examineAgain) {
break;
}
case 1: {
- // NB: This table contains the non-constant openChangeSize!
+ // Note: This table contains the non-constant _openChangeSize!
RectWithCallback invList1[] = {
{ 273,320,157,198,&DreamGenContext::getBackFromOb },
{ 255,294,0,24,&DreamGenContext::dropObject },
{ kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage },
- { kInventx, data.word(offset_openchangesize),kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened },
- { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::inToInv },
+ { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened },
+ { kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamGenContext::inToInv },
{ 0,320,0,200,&DreamGenContext::blank },
{ 0xFFFF,0,0,0,0 }
};
@@ -263,4 +263,33 @@ void DreamGenContext::getBackFromOb() {
blank();
}
+void DreamGenContext::getOpenedSize() {
+ ax = getOpenedSizeCPP();
+}
+
+byte DreamGenContext::getOpenedSizeCPP() {
+ byte obj = data.byte(kOpenedob);
+ switch (data.byte(kOpenedtype)) {
+ case 4:
+ return getExAd(obj)->b7;
+ case 2:
+ return getFreeAd(obj)->b7;
+ default:
+ return getSetAd(obj)->b3;
+ }
+}
+
+void DreamGenContext::openOb() {
+ uint8 commandLine[64] = "OBJECT NAME ONE ";
+
+ copyName(data.byte(kOpenedtype), data.byte(kOpenedob), commandLine);
+
+ printMessage(kInventx, kInventy+86, 62, 240, false);
+
+ al = printDirect(commandLine, data.word(kLastxpos) + 5, kInventy+86, 220, false);
+
+ fillOpen();
+ _openChangeSize = getOpenedSizeCPP() * kItempicsize + kInventx;
+}
+
} // End of namespace DreamGen
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 0c57d0d767..1c66ac7681 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1191,7 +1191,7 @@ void DreamBase::crosshair() {
showFrame(engine->icons1(), kZoomx + 24, kZoomy + 19, frame, 0);
}
-void DreamGenContext::delTextLine() {
+void DreamBase::delTextLine() {
uint16 x = data.word(kTextaddressx);
uint16 y = data.word(kTextaddressy);
if (data.byte(kForeignrelease) != 0)
@@ -1752,7 +1752,20 @@ void DreamGenContext::printMessage() {
void DreamGenContext::printMessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered) {
uint16 offset = kTextstart + getSegment(data.word(kCommandtext)).word(index * 2);
const uint8 *string = getSegment(data.word(kCommandtext)).ptr(offset, 0);
- printDirect(&string, x, &y, maxWidth, centered);
+ printDirect(string, x, y, maxWidth, centered);
+}
+
+void DreamGenContext::printMessage2() {
+ printMessage2(di, bx, al, dl, (bool)(dl & 1), ah);
+}
+
+void DreamGenContext::printMessage2(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered, uint8 count) {
+ uint16 offset = kTextstart + getSegment(data.word(kCommandtext)).word(index * 2);
+ const uint8 *string = getSegment(data.word(kCommandtext)).ptr(offset, 0);
+ while (count--) {
+ findNextColon(&string);
+ }
+ printDirect(string, x, y, maxWidth, centered);
}
bool objectMatches(void *object, const char *id) {
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 8218a1ac0f..b7e477804c 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -58,8 +58,10 @@
uint8 printDirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) {
return DreamBase::printDirect(string, x, y, maxWidth, centered);
}
- void printMessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered);
void printMessage();
+ void printMessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered);
+ void printMessage2();
+ void printMessage2(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered, uint8 count);
void useTimedText();
void dumpTimedText();
void setupTimedTemp(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount);
@@ -111,7 +113,6 @@
void dealWithSpecial(uint8 firstParam, uint8 secondParam);
void zoom();
void showRain();
- void delTextLine();
void commandOnly();
void commandOnly(uint8 command);
void doBlocks();
@@ -590,5 +591,9 @@
void findExObject();
uint16 findExObject(const char *id);
void describeOb();
+ void getOpenedSize();
+ byte getOpenedSizeCPP();
+ void openOb();
+ void withWhat();
#endif
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
index 5306522c13..87b3640e03 100644
--- a/engines/dreamweb/use.cpp
+++ b/engines/dreamweb/use.cpp
@@ -1473,4 +1473,27 @@ void DreamGenContext::useAltar() {
}
}
+void DreamGenContext::withWhat() {
+ uint8 commandLine[64] = "OBJECT NAME ONE ";
+
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+
+ copyName(data.byte(kObjecttype), data.byte(kCommand), commandLine);
+ printMessage2(100, 21, 63, 200, false, 2);
+ printDirect(commandLine, data.word(kLastxpos) + 5, 21, 220, false);
+ printMessage2(data.word(kLastxpos) + 5, 21, 63, 200, false, 3);
+
+ fillRyan();
+ data.byte(kCommandtype) = 255;
+ readMouse();
+ showPointer();
+ workToScreen();
+ delPointer();
+ data.byte(kInvopen) = 2;
+}
+
+
} // End of namespace DreamGen