From ceb36fe0d634f38200dad4e18b5c74464d3a0a13 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 14 Nov 2011 18:51:15 +0100 Subject: DREAMWEB: Move 'examineob' from dreamgen --- engines/dreamweb/object.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index e2da902465..a1d6e1da7c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -110,5 +110,81 @@ void DreamGenContext::obicons() { } } +void DreamGenContext::examineob() { + STACK_CHECK; + data.byte(kPointermode) = 0; + data.word(kTimecount) = 0; +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = offset_examlist; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = offset_invlist1; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = offset_withlist1; +notuseinv: + checkcoords(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto stopwaiting; + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; +stopwaiting: + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + + } /*namespace dreamgen */ -- cgit v1.2.3 From ae2c4bcaf0a0362e5eaba70c021e7a44a7a46b49 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 14 Nov 2011 20:22:45 +0100 Subject: DREAMWEB: Convert 'examineob' --- engines/dreamweb/object.cpp | 130 +++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 68 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a1d6e1da7c..1c58559dcd 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -110,77 +110,71 @@ void DreamGenContext::obicons() { } } -void DreamGenContext::examineob() { - STACK_CHECK; +void DreamGenContext::examineob(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; -examineagain: - data.byte(kInmaparea) = 0; - data.byte(kExamagain) = 0; - data.byte(kOpenedob) = 255; - data.byte(kOpenedtype) = 255; - data.byte(kInvopen) = 0; - al = data.byte(kCommandtype); - data.byte(kObjecttype) = al; - data.byte(kItemframe) = 0; - data.byte(kPointerframe) = 0; - createpanel(); - showpanel(); - showman(); - showexit(); - obicons(); - obpicture(); - describeob(); - undertextline(); - data.byte(kCommandtype) = 255; - readmouse(); - showpointer(); - worktoscreen(); - delpointer(); -waitexam: - readmouse(); - showpointer(); - vsync(); - dumppointer(); - dumptextline(); - delpointer(); - data.byte(kGetback) = 0; - bx = offset_examlist; - _cmp(data.byte(kInvopen), 0); - if (flags.z()) - goto notuseinv; - bx = offset_invlist1; - _cmp(data.byte(kInvopen), 1); - if (flags.z()) - goto notuseinv; - bx = offset_withlist1; -notuseinv: - checkcoords(); - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - goto stopwaiting; - _cmp(data.byte(kExamagain), 0); - if (flags.z()) - goto norex; - goto examineagain; -norex: - _cmp(data.byte(kGetback), 0); - if (flags.z()) - goto waitexam; -stopwaiting: + while (true) { + if (examineAgain) { + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + examineAgain = false; + } + + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + switch (data.byte(kInvopen)) { + case 0: + bx = offset_examlist; + checkcoords(); + break; + case 1: + bx = offset_invlist1; + checkcoords(); + break; + default: + bx = offset_withlist1; + checkcoords(); + break; + } + if (data.byte(kQuitrequested) != 0) + break; + if (data.byte(kExamagain) != 0) + examineAgain = true; + else if (data.byte(kGetback) != 0) + break; + } + data.byte(kPickup) = 0; - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - goto iswatching; - _cmp(data.byte(kNewlocation), 255); - if (!flags.z()) - goto justgetback; -iswatching: - makemainscreen(); - data.byte(kInvopen) = 0; - data.byte(kOpenedob) = 255; - return; -justgetback: + if (data.word(kWatchingtime) != 0 || data.byte(kNewlocation) == 255) { + // iswatching + makemainscreen(); + } + data.byte(kInvopen) = 0; data.byte(kOpenedob) = 255; } -- cgit v1.2.3 From 65e1eeb99051b4acfb88cf9fae352c83e34d9f67 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 14 Nov 2011 20:25:18 +0100 Subject: DREAMWEB: Move 'inventory' from dreamgen --- engines/dreamweb/object.cpp | 120 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 1c58559dcd..446278252c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -179,6 +179,126 @@ void DreamGenContext::examineob(bool examineAgain) { data.byte(kOpenedob) = 255; } +void DreamGenContext::inventory() { + STACK_CHECK; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto iswatchinv; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatchinv; +iswatchinv: + blank(); + return; +notwatchinv: + _cmp(data.byte(kCommandtype), 239); + if (flags.z()) + goto alreadyopinv; + data.byte(kCommandtype) = 239; + al = 32; + commandonly(); +alreadyopinv: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantopinv) */; + _and(ax, 1); + if (!flags.z()) + goto doopeninv; + return; +doopeninv: + data.word(kTimecount) = 0; + data.byte(kPointermode) = 0; + data.byte(kInmaparea) = 0; + animpointer(); + createpanel(); + showpanel(); + examicon(); + showman(); + showexit(); + undertextline(); + data.byte(kPickup) = 0; + data.byte(kInvopen) = 2; + openinv(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kOpenedob) = 255; + goto waitexam; + return; +/*continuing to unbounded code: examineagain from examineob:3-69*/ +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = offset_examlist; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = offset_invlist1; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = offset_withlist1; +notuseinv: + checkcoords(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto stopwaiting; + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; +stopwaiting: + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + } /*namespace dreamgen */ -- cgit v1.2.3 From d3a84d6e68fcbb87bb70a6e8a17fb540dee61326 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 14 Nov 2011 20:04:12 +0100 Subject: DREAMWEB: Convert 'inventory' --- engines/dreamweb/object.cpp | 117 +++++++------------------------------------- 1 file changed, 18 insertions(+), 99 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 446278252c..1e5646d340 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -180,33 +180,23 @@ void DreamGenContext::examineob(bool examineAgain) { } void DreamGenContext::inventory() { - STACK_CHECK; - _cmp(data.byte(kMandead), 1); - if (flags.z()) - goto iswatchinv; - _cmp(data.word(kWatchingtime), 0); - if (flags.z()) - goto notwatchinv; -iswatchinv: - blank(); - return; -notwatchinv: - _cmp(data.byte(kCommandtype), 239); - if (flags.z()) - goto alreadyopinv; - data.byte(kCommandtype) = 239; - al = 32; - commandonly(); -alreadyopinv: - ax = data.word(kMousebutton); - _cmp(ax, data.word(kOldbutton)); - if (flags.z()) - return /* (cantopinv) */; - _and(ax, 1); - if (!flags.z()) - goto doopeninv; - return; -doopeninv: + if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { + blank(); + return; + } + + if (data.byte(kCommandtype) != 239) { + data.byte(kCommandtype) = 239; + al = 32; + commandonly(); + } + + if (data.word(kMousebutton) == data.word(kOldbutton)) + return; + if (!(data.word(kMousebutton) & 1)) // only on left mouse button + return; + + data.word(kTimecount) = 0; data.byte(kPointermode) = 0; data.byte(kInmaparea) = 0; @@ -225,78 +215,7 @@ doopeninv: worktoscreen(); delpointer(); data.byte(kOpenedob) = 255; - goto waitexam; - return; -/*continuing to unbounded code: examineagain from examineob:3-69*/ -examineagain: - data.byte(kInmaparea) = 0; - data.byte(kExamagain) = 0; - data.byte(kOpenedob) = 255; - data.byte(kOpenedtype) = 255; - data.byte(kInvopen) = 0; - al = data.byte(kCommandtype); - data.byte(kObjecttype) = al; - data.byte(kItemframe) = 0; - data.byte(kPointerframe) = 0; - createpanel(); - showpanel(); - showman(); - showexit(); - obicons(); - obpicture(); - describeob(); - undertextline(); - data.byte(kCommandtype) = 255; - readmouse(); - showpointer(); - worktoscreen(); - delpointer(); -waitexam: - readmouse(); - showpointer(); - vsync(); - dumppointer(); - dumptextline(); - delpointer(); - data.byte(kGetback) = 0; - bx = offset_examlist; - _cmp(data.byte(kInvopen), 0); - if (flags.z()) - goto notuseinv; - bx = offset_invlist1; - _cmp(data.byte(kInvopen), 1); - if (flags.z()) - goto notuseinv; - bx = offset_withlist1; -notuseinv: - checkcoords(); - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - goto stopwaiting; - _cmp(data.byte(kExamagain), 0); - if (flags.z()) - goto norex; - goto examineagain; -norex: - _cmp(data.byte(kGetback), 0); - if (flags.z()) - goto waitexam; -stopwaiting: - data.byte(kPickup) = 0; - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - goto iswatching; - _cmp(data.byte(kNewlocation), 255); - if (!flags.z()) - goto justgetback; -iswatching: - makemainscreen(); - data.byte(kInvopen) = 0; - data.byte(kOpenedob) = 255; - return; -justgetback: - data.byte(kInvopen) = 0; - data.byte(kOpenedob) = 255; + examineob(false); } -- cgit v1.2.3 From b53a2997909d04ae3d3b87607f336d97d123eeb8 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 14 Nov 2011 21:38:40 +0100 Subject: DREAMWEB: Unhardcode checkcoords tables This patch makes __dispatch_call (even more) superfluous, but does not yet remove it. --- engines/dreamweb/object.cpp | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 1e5646d340..2712bc965b 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -148,19 +148,45 @@ void DreamGenContext::examineob(bool examineAgain) { delpointer(); data.byte(kGetback) = 0; switch (data.byte(kInvopen)) { - case 0: - bx = offset_examlist; - checkcoords(); + case 0: { + RectWithCallback examlist[] = { + { 273,320,157,198,&DreamGenContext::getbackfromob }, + { 260,300,0,44,&DreamGenContext::useobject }, + { 210,254,0,44,&DreamGenContext::selectopenob }, + { 144,176,64,96,&DreamGenContext::setpickup }, + { 0,50,50,200,&DreamGenContext::examinventory }, + { 0,320,0,200,&DreamGenContext::blank }, + { 0xFFFF,0,0,0,0 } + }; + checkcoords(examlist); break; - case 1: - bx = offset_invlist1; - checkcoords(); + } + case 1: { + // NB: 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, cs.word(offset_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 } + }; + checkcoords(invlist1); break; - default: - bx = offset_withlist1; - checkcoords(); + } + default: { + RectWithCallback withlist1[] = { + { 273,320,157,198,&DreamGenContext::getbackfromob }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incryanpage }, + { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectob }, + { 0,320,0,200,&DreamGenContext::blank }, + { 0xFFFF,0,0,0,0 } + }; + checkcoords(withlist1); break; } + } if (data.byte(kQuitrequested) != 0) break; if (data.byte(kExamagain) != 0) -- cgit v1.2.3 From c2ec2851753ad7c65308108cecc5f652915a990f Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 15 Nov 2011 10:23:35 +0100 Subject: DREAMWEB: Fix regression in obicons This fixes the 'use' icon on the winch controls. Regression from 1f531c6f7fc90d78a4d14cda377e5aed7c7f4eb0. Thanks to fuzzie for spotting it. --- engines/dreamweb/object.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 2712bc965b..277ad20927 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -103,11 +103,12 @@ void DreamGenContext::obpicture() { void DreamGenContext::obicons() { uint8 value1, value2; getanyad(&value1, &value2); - if (value1 == 0xff) { - showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); - } else { + if (value1 != 0xff) { + // can open it showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); } + + showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); } void DreamGenContext::examineob(bool examineAgain) { -- cgit v1.2.3 From 5adf8b4864e80b10070ad31819271a0af7588f64 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Tue, 15 Nov 2011 12:33:13 +0100 Subject: DREAWMEB: 'transfertext' ported to C++ --- engines/dreamweb/object.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 277ad20927..9bb5a7d0b3 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -245,6 +245,20 @@ void DreamGenContext::inventory() { examineob(false); } +void DreamGenContext::transfertext() { + segRef(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); + uint16 freeTextOffset = data.byte(kItemtotran) * 2; + uint16 srcOffset = segRef(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); + const uint8 *src = segRef(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); + uint8 *dst = segRef(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); + uint8 c; + do { + c = *src++; + *dst++ = c; + ++data.word(kExtextpos); + } while (c); +} + } /*namespace dreamgen */ -- cgit v1.2.3 From 46ec2c4d732797d300608cc04bf14dd0a699ebe8 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 15 Nov 2011 13:44:48 +0100 Subject: DREAMWEB: Use strcpy/strlen instead of manual loops --- engines/dreamweb/object.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9bb5a7d0b3..5e822cafba 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -249,14 +249,12 @@ void DreamGenContext::transfertext() { segRef(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); uint16 freeTextOffset = data.byte(kItemtotran) * 2; uint16 srcOffset = segRef(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); - const uint8 *src = segRef(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); - uint8 *dst = segRef(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); - uint8 c; - do { - c = *src++; - *dst++ = c; - ++data.word(kExtextpos); - } while (c); + const char *src = (const char *)segRef(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); + char *dst = (char *)segRef(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); + + strcpy(dst, src); + + data.word(kExtextpos) += strlen(src) + 1; } -- cgit v1.2.3 From 9c9b7e5a2c3016b5609cdfb4137108060eb95673 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Tue, 15 Nov 2011 15:57:54 +0100 Subject: DREAMWEB: crt functions --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 5e822cafba..d887f1c564 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -252,9 +252,9 @@ void DreamGenContext::transfertext() { const char *src = (const char *)segRef(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); char *dst = (char *)segRef(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); - strcpy(dst, src); - - data.word(kExtextpos) += strlen(src) + 1; + size_t len = strlen(src); + memcpy(dst, src, len + 1); + data.word(kExtextpos) += len + 1; } -- cgit v1.2.3 From 4192d1241a0dfd2ec8cdcda760969b552bb1515a Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Sat, 26 Nov 2011 16:56:11 +0100 Subject: DREAMWEB: 'getbackfromob' ported to C++ --- engines/dreamweb/object.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index d887f1c564..9378729665 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -257,6 +257,12 @@ void DreamGenContext::transfertext() { data.word(kExtextpos) += len + 1; } +void DreamGenContext::getbackfromob() { + if (data.byte(kPickup) != 1) + getback1(); + else + blank(); +} } /*namespace dreamgen */ -- cgit v1.2.3 From 349cbc527f33858b6275daaa8f770cd6f7fcd42d Mon Sep 17 00:00:00 2001 From: D G Turner Date: Thu, 1 Dec 2011 19:43:43 +0000 Subject: DREAMWEB: Fix compilation due to dreamgen.* function renaming. --- engines/dreamweb/object.cpp | 182 ++++++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 91 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9378729665..a01da08700 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -24,71 +24,71 @@ namespace DreamGen { -void DreamGenContext::fillryan() { +void DreamGenContext::fillRyan() { uint8 *inv = segRef(data.word(kBuffers)).ptr(kRyaninvlist, 60); - findallryan(inv); + findAllRyan(inv); inv += data.byte(kRyanpage) * 2 * 10; for (size_t i = 0; i < 2; ++i) { for (size_t j = 0; j < 5; ++j) { uint8 objIndex = *inv++; uint8 objType = *inv++; - obtoinv(objIndex, objType, kInventx + j * kItempicsize, kInventy + i * kItempicsize); + obToInv(objIndex, objType, kInventx + j * kItempicsize, kInventy + i * kItempicsize); } } - showryanpage(); + showRyanPage(); } -void DreamGenContext::isitworn() { - flags._z = isitworn((const DynObject *)es.ptr(bx, sizeof(DynObject))); +void DreamGenContext::isItWorn() { + flags._z = isItWorn((const DynObject *)es.ptr(bx, sizeof(DynObject))); } -bool DreamGenContext::isitworn(const DynObject *object) { +bool DreamGenContext::isItWorn(const DynObject *object) { return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); } -void DreamGenContext::wornerror() { +void DreamGenContext::wornError() { data.byte(kCommandtype) = 255; - delpointer(); - printmessage(76, 21, 57, 240, false); - worktoscreenm(); - hangonp(50); - showpanel(); - showman(); - examicon(); + delPointer(); + printMessage(76, 21, 57, 240, false); + workToScreenM(); + hangOnP(50); + showPanel(); + showMan(); + examIcon(); data.byte(kCommandtype) = 255; - worktoscreenm(); + workToScreenM(); } -void DreamGenContext::makeworn() { - makeworn((DynObject *)es.ptr(bx, sizeof(DynObject))); +void DreamGenContext::makeWorn() { + makeWorn((DynObject *)es.ptr(bx, sizeof(DynObject))); } -void DreamGenContext::makeworn(DynObject *object) { +void DreamGenContext::makeWorn(DynObject *object) { object->id[0] = 'W'-'A'; object->id[1] = 'E'-'A'; } -void DreamGenContext::obtoinv() { - obtoinv(al, ah, di, bx); +void DreamGenContext::obToInv() { + obToInv(al, ah, di, bx); } -void DreamGenContext::obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y) { +void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0); - showframe(icons1, x - 2, y - 1, 10, 0); + showFrame(icons1, x - 2, y - 1, 10, 0); if (index == 0xff) return; Frame *extras = (Frame *)segRef(data.word(kExtras)).ptr(0, 0); Frame *frees = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); Frame *frames = (flag == 4) ? extras : frees; - showframe(frames, x + 18, y + 19, 3 * index + 1, 128); - const DynObject *object = (const DynObject *)getanyaddir(index, flag); - bool worn = isitworn(object); + showFrame(frames, x + 18, y + 19, 3 * index + 1, 128); + const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); + bool worn = isItWorn(object); if (worn) - showframe(icons1, x - 3, y - 2, 7, 0); + showFrame(icons1, x - 3, y - 2, 7, 0); } -void DreamGenContext::obpicture() { +void DreamGenContext::obPicture() { if (data.byte(kObjecttype) == 1) return; Frame *frames; @@ -97,21 +97,21 @@ void DreamGenContext::obpicture() { else frames = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); uint8 frame = 3 * data.byte(kCommand) + 1; - showframe(frames, 160, 68, frame, 0x80); + showFrame(frames, 160, 68, frame, 0x80); } -void DreamGenContext::obicons() { +void DreamGenContext::obIcons() { uint8 value1, value2; - getanyad(&value1, &value2); + getAnyAd(&value1, &value2); if (value1 != 0xff) { // can open it - showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); + showFrame((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); } - showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); + showFrame((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); } -void DreamGenContext::examineob(bool examineAgain) { +void DreamGenContext::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; while (true) { @@ -125,66 +125,66 @@ void DreamGenContext::examineob(bool examineAgain) { data.byte(kObjecttype) = al; data.byte(kItemframe) = 0; data.byte(kPointerframe) = 0; - createpanel(); - showpanel(); - showman(); - showexit(); - obicons(); - obpicture(); - describeob(); - undertextline(); + createPanel(); + showPanel(); + showMan(); + showExit(); + obIcons(); + obPicture(); + describeOb(); + underTextLine(); data.byte(kCommandtype) = 255; - readmouse(); - showpointer(); - worktoscreen(); - delpointer(); + readMouse(); + showPointer(); + workToScreen(); + delPointer(); examineAgain = false; } - readmouse(); - showpointer(); - vsync(); - dumppointer(); - dumptextline(); - delpointer(); + readMouse(); + showPointer(); + vSync(); + dumpPointer(); + dumpTextLine(); + delPointer(); data.byte(kGetback) = 0; switch (data.byte(kInvopen)) { case 0: { - RectWithCallback examlist[] = { - { 273,320,157,198,&DreamGenContext::getbackfromob }, - { 260,300,0,44,&DreamGenContext::useobject }, - { 210,254,0,44,&DreamGenContext::selectopenob }, - { 144,176,64,96,&DreamGenContext::setpickup }, - { 0,50,50,200,&DreamGenContext::examinventory }, + RectWithCallback examList[] = { + { 273,320,157,198,&DreamGenContext::getBackFromOb }, + { 260,300,0,44,&DreamGenContext::useObject }, + { 210,254,0,44,&DreamGenContext::selectOpenOb }, + { 144,176,64,96,&DreamGenContext::setPickup }, + { 0,50,50,200,&DreamGenContext::examineInventory }, { 0,320,0,200,&DreamGenContext::blank }, { 0xFFFF,0,0,0,0 } }; - checkcoords(examlist); + checkCoords(examList); break; } case 1: { - // NB: 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, cs.word(offset_openchangesize),kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useopened }, - { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::intoinv }, + // NB: 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, cs.word(offset_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 } }; - checkcoords(invlist1); + checkCoords(invList1); break; } default: { - RectWithCallback withlist1[] = { - { 273,320,157,198,&DreamGenContext::getbackfromob }, - { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incryanpage }, - { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectob }, + RectWithCallback withList1[] = { + { 273,320,157,198,&DreamGenContext::getBackFromOb }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, + { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, { 0,320,0,200,&DreamGenContext::blank }, { 0xFFFF,0,0,0,0 } }; - checkcoords(withlist1); + checkCoords(withList1); break; } } @@ -198,8 +198,8 @@ void DreamGenContext::examineob(bool examineAgain) { data.byte(kPickup) = 0; if (data.word(kWatchingtime) != 0 || data.byte(kNewlocation) == 255) { - // iswatching - makemainscreen(); + // isWatching + makeMainScreen(); } data.byte(kInvopen) = 0; @@ -215,7 +215,7 @@ void DreamGenContext::inventory() { if (data.byte(kCommandtype) != 239) { data.byte(kCommandtype) = 239; al = 32; - commandonly(); + commandOnly(); } if (data.word(kMousebutton) == data.word(kOldbutton)) @@ -227,25 +227,25 @@ void DreamGenContext::inventory() { data.word(kTimecount) = 0; data.byte(kPointermode) = 0; data.byte(kInmaparea) = 0; - animpointer(); - createpanel(); - showpanel(); - examicon(); - showman(); - showexit(); - undertextline(); + animPointer(); + createPanel(); + showPanel(); + examIcon(); + showMan(); + showExit(); + underTextLine(); data.byte(kPickup) = 0; data.byte(kInvopen) = 2; - openinv(); - readmouse(); - showpointer(); - worktoscreen(); - delpointer(); + openInv(); + readMouse(); + showPointer(); + workToScreen(); + delPointer(); data.byte(kOpenedob) = 255; - examineob(false); + examineOb(false); } -void DreamGenContext::transfertext() { +void DreamGenContext::transferText() { segRef(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); uint16 freeTextOffset = data.byte(kItemtotran) * 2; uint16 srcOffset = segRef(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); @@ -257,9 +257,9 @@ void DreamGenContext::transfertext() { data.word(kExtextpos) += len + 1; } -void DreamGenContext::getbackfromob() { +void DreamGenContext::getBackFromOb() { if (data.byte(kPickup) != 1) - getback1(); + getBack1(); else blank(); } -- cgit v1.2.3 From 38ec14b15b19af5ae4ebcf3a6d6601351a7b2794 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Fri, 2 Dec 2011 16:29:16 +0100 Subject: DREAMWEB: 'segRef' was redundant with 'getSegment' (thanks to Max for noting this) --- engines/dreamweb/object.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a01da08700..f617bfb21d 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -25,7 +25,7 @@ namespace DreamGen { void DreamGenContext::fillRyan() { - uint8 *inv = segRef(data.word(kBuffers)).ptr(kRyaninvlist, 60); + uint8 *inv = getSegment(data.word(kBuffers)).ptr(kRyaninvlist, 60); findAllRyan(inv); inv += data.byte(kRyanpage) * 2 * 10; for (size_t i = 0; i < 2; ++i) { @@ -73,13 +73,13 @@ void DreamGenContext::obToInv() { } void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { - Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0); + Frame *icons1 = (Frame *)getSegment(data.word(kIcons1)).ptr(0, 0); showFrame(icons1, x - 2, y - 1, 10, 0); if (index == 0xff) return; - Frame *extras = (Frame *)segRef(data.word(kExtras)).ptr(0, 0); - Frame *frees = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); + Frame *extras = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); + Frame *frees = (Frame *)getSegment(data.word(kFreeframes)).ptr(0, 0); Frame *frames = (flag == 4) ? extras : frees; showFrame(frames, x + 18, y + 19, 3 * index + 1, 128); const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); @@ -93,9 +93,9 @@ void DreamGenContext::obPicture() { return; Frame *frames; if (data.byte(kObjecttype) == 4) - frames = (Frame *)segRef(data.word(kExtras)).ptr(0, 0); + frames = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); else - frames = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); + frames = (Frame *)getSegment(data.word(kFreeframes)).ptr(0, 0); uint8 frame = 3 * data.byte(kCommand) + 1; showFrame(frames, 160, 68, frame, 0x80); } @@ -105,10 +105,10 @@ void DreamGenContext::obIcons() { getAnyAd(&value1, &value2); if (value1 != 0xff) { // can open it - showFrame((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); + showFrame((Frame *)getSegment(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); } - showFrame((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); + showFrame((Frame *)getSegment(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); } void DreamGenContext::examineOb(bool examineAgain) { @@ -246,11 +246,11 @@ void DreamGenContext::inventory() { } void DreamGenContext::transferText() { - segRef(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); + getSegment(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); uint16 freeTextOffset = data.byte(kItemtotran) * 2; - uint16 srcOffset = segRef(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); - const char *src = (const char *)segRef(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); - char *dst = (char *)segRef(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); + uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); + const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); + char *dst = (char *)getSegment(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); size_t len = strlen(src); memcpy(dst, src, len + 1); -- cgit v1.2.3 From 22a7ab4424f4731a998b17725c89621070231380 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Sun, 4 Dec 2011 16:53:43 +0100 Subject: DREAMWEB: Minor warning fix (shadowing) --- engines/dreamweb/object.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index f617bfb21d..4877937060 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -73,8 +73,7 @@ void DreamGenContext::obToInv() { } void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { - Frame *icons1 = (Frame *)getSegment(data.word(kIcons1)).ptr(0, 0); - showFrame(icons1, x - 2, y - 1, 10, 0); + showFrame(icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) return; @@ -85,7 +84,7 @@ void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); bool worn = isItWorn(object); if (worn) - showFrame(icons1, x - 3, y - 2, 7, 0); + showFrame(icons1(), x - 3, y - 2, 7, 0); } void DreamGenContext::obPicture() { -- cgit v1.2.3 From 1f89c4e34100d5628809efd56edb024306667331 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Sun, 4 Dec 2011 17:11:42 +0100 Subject: DREAMWEB: Less direct references to kIcons1 and kIcons2 --- engines/dreamweb/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4877937060..4caeddfd1e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -104,10 +104,10 @@ void DreamGenContext::obIcons() { getAnyAd(&value1, &value2); if (value1 != 0xff) { // can open it - showFrame((Frame *)getSegment(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); + showFrame(icons2(), 210, 1, 4, 0); } - showFrame((Frame *)getSegment(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); + showFrame(icons2(), 260, 1, 1, 0); } void DreamGenContext::examineOb(bool examineAgain) { -- cgit v1.2.3 From 26889c12432732174bb306285515959c24c4d140 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Sun, 4 Dec 2011 18:32:55 +0100 Subject: DREAMWEB: Removed 'icons1' and 'icons2' stubs --- engines/dreamweb/object.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4caeddfd1e..845b5fb69c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -73,7 +73,7 @@ void DreamGenContext::obToInv() { } void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { - showFrame(icons1(), x - 2, y - 1, 10, 0); + showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) return; @@ -84,7 +84,7 @@ void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); bool worn = isItWorn(object); if (worn) - showFrame(icons1(), x - 3, y - 2, 7, 0); + showFrame(engine->icons1(), x - 3, y - 2, 7, 0); } void DreamGenContext::obPicture() { @@ -104,10 +104,10 @@ void DreamGenContext::obIcons() { getAnyAd(&value1, &value2); if (value1 != 0xff) { // can open it - showFrame(icons2(), 210, 1, 4, 0); + showFrame(engine->icons2(), 210, 1, 4, 0); } - showFrame(icons2(), 260, 1, 1, 0); + showFrame(engine->icons2(), 260, 1, 1, 0); } void DreamGenContext::examineOb(bool examineAgain) { -- cgit v1.2.3 From 0193ef590da121ca4053510d53aad0b3d6b7052a Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 6 Dec 2011 17:43:23 +0100 Subject: DREAMWEB: Cleanup end of namespace comments --- engines/dreamweb/object.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 845b5fb69c..02526b583d 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -263,5 +263,4 @@ void DreamGenContext::getBackFromOb() { blank(); } -} /*namespace dreamgen */ - +} // End of namespace DreamGen -- cgit v1.2.3 From bd71a3bcec6c4bda9906b1e5818713ab9d40ccae Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 7 Dec 2011 10:40:17 +0100 Subject: DREAMWEB: Replace cs by data (outside of dreamgen.cpp) --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 02526b583d..44be58c168 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -167,7 +167,7 @@ void DreamGenContext::examineOb(bool examineAgain) { { 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, cs.word(offset_openchangesize),kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened }, + { kInventx, data.word(offset_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 } -- cgit v1.2.3 From 447f0c664359f62330d91be20d49d66b9fb420fb Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 9 Dec 2011 18:18:32 +0200 Subject: DREAMWEB: Use the C++ version of workScreen() in C++ code --- engines/dreamweb/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 44be58c168..edc0b734ec 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -135,7 +135,7 @@ void DreamGenContext::examineOb(bool examineAgain) { data.byte(kCommandtype) = 255; readMouse(); showPointer(); - workToScreen(); + workToScreenCPP(); delPointer(); examineAgain = false; } @@ -238,7 +238,7 @@ void DreamGenContext::inventory() { openInv(); readMouse(); showPointer(); - workToScreen(); + workToScreenCPP(); delPointer(); data.byte(kOpenedob) = 255; examineOb(false); -- cgit v1.2.3 From 2ff147352c01045b7571c1d44c6ef942b1e64d98 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 12 Dec 2011 09:07:55 +0100 Subject: DREAMWEB: Cleanup and add FIXMEs --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index edc0b734ec..53d834e74c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -99,7 +99,7 @@ void DreamGenContext::obPicture() { showFrame(frames, 160, 68, frame, 0x80); } -void DreamGenContext::obIcons() { +void DreamBase::obIcons() { uint8 value1, value2; getAnyAd(&value1, &value2); if (value1 != 0xff) { -- cgit v1.2.3 From 719f3ec1789005186c4cb86b10effa9ceee93866 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 15 Dec 2011 10:54:28 +0100 Subject: 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. --- engines/dreamweb/object.cpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') 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 -- cgit v1.2.3 From 9ebcaa33e7080098e686c02ec03dff65a0a55174 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 15 Dec 2011 13:41:30 +0100 Subject: DREAMWEB: Move even more stuff to DreamBase --- engines/dreamweb/object.cpp | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8e5da2c90e..b430183cee 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -24,7 +24,27 @@ namespace DreamGen { -void DreamGenContext::fillRyan() { +void DreamBase::showRyanPage() { + showFrame(engine->icons1(), kInventx + 167, kInventy - 12, 12, 0); + showFrame(engine->icons1(), kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); +} + +void DreamBase::findAllRyan(uint8 *inv) { + memset(inv, 0xff, 60); + for (size_t i = 0; i < kNumexobjects; ++i) { + DynObject *extra = getExAd(i); + if (extra->mapad[0] != 4) + continue; + if (extra->mapad[1] != 0xff) + continue; + uint8 slot = extra->mapad[2]; + assert(slot < 30); + inv[2 * slot + 0] = i; + inv[2 * slot + 1] = 4; + } +} + +void DreamBase::fillRyan() { uint8 *inv = getSegment(data.word(kBuffers)).ptr(kRyaninvlist, 60); findAllRyan(inv); inv += data.byte(kRyanpage) * 2 * 10; @@ -42,7 +62,7 @@ void DreamGenContext::isItWorn() { flags._z = isItWorn((const DynObject *)es.ptr(bx, sizeof(DynObject))); } -bool DreamGenContext::isItWorn(const DynObject *object) { +bool DreamBase::isItWorn(const DynObject *object) { return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); } @@ -72,7 +92,7 @@ void DreamGenContext::obToInv() { obToInv(al, ah, di, bx); } -void DreamGenContext::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { +void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) return; @@ -154,8 +174,8 @@ void DreamGenContext::examineOb(bool examineAgain) { { 260,300,0,44,&DreamGenContext::useObject }, { 210,254,0,44,&DreamGenContext::selectOpenOb }, { 144,176,64,96,&DreamGenContext::setPickup }, - { 0,50,50,200,&DreamGenContext::examineInventory }, - { 0,320,0,200,&DreamGenContext::blank }, + { 0,50,50,200,&DreamBase::examineInventory }, + { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(examList); @@ -169,7 +189,7 @@ void DreamGenContext::examineOb(bool examineAgain) { { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { 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 }, + { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(invList1); @@ -180,7 +200,7 @@ void DreamGenContext::examineOb(bool examineAgain) { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, - { 0,320,0,200,&DreamGenContext::blank }, + { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(withList1); @@ -256,7 +276,7 @@ void DreamGenContext::transferText() { data.word(kExtextpos) += len + 1; } -void DreamGenContext::getBackFromOb() { +void DreamBase::getBackFromOb() { if (data.byte(kPickup) != 1) getBack1(); else -- cgit v1.2.3 From d1ed87beceb68a2b33db9989e6a480bbda6a73d1 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 15 Dec 2011 14:09:53 +0100 Subject: DREAMWEB: Convert notHeldError to C++, move stuff to DreamBase --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index b430183cee..5f326a5a03 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -107,7 +107,7 @@ void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 3, y - 2, 7, 0); } -void DreamGenContext::obPicture() { +void DreamBase::obPicture() { if (data.byte(kObjecttype) == 1) return; Frame *frames; -- cgit v1.2.3 From 984010faae5d7cac0cef8f74229f9761cf7dd934 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 16 Dec 2011 22:29:41 +0200 Subject: DREAMWEB: Port 'identifyob' to C++ --- engines/dreamweb/object.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 5f326a5a03..64f70ada98 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -312,4 +312,42 @@ void DreamGenContext::openOb() { _openChangeSize = getOpenedSizeCPP() * kItempicsize + kInventx; } +void DreamGenContext::identifyOb() { + if (data.word(kWatchingtime) != 0 || + data.word(kMousex) - data.word(kMapadx) >= 22 * 8 || + data.word(kMousey) - data.word(kMapady) >= 20 * 8) { + blank(); + return; + } + + data.byte(kInmaparea) = 1; + ah = bl; + push(ax); + findPathOfPoint(); + data.byte(kPointerspath) = dl; + ax = pop(); + push(ax); + findFirstPath(); + data.byte(kPointerfirstpath) = al; + ax = pop(); + + byte x = al; + byte y = ah; + + if (checkIfEx(x, y) || checkIfFree(x, y) || + checkIfPerson(x, y) || checkIfSet(x, y)) + return; // finishidentify + + x = (data.word(kMousex) - data.word(kMapadx)) & 0xFF; + y = (data.word(kMousey) - data.word(kMapady)) & 0xFF; + byte flag, flagEx, type, flagX, flagY; + + checkOne(x, y, &flag, &flagEx, &type, &flagX, &flagY); + + if (type != 0 && data.byte(kMandead) != 1) + obName(type, 3); + else + blank(); +} + } // End of namespace DreamGen -- cgit v1.2.3 From b289533e4d972c68391bd3d84c3b87ad20f08c52 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 01:39:29 +0200 Subject: DREAMWEB: Fix regression in identifyOb --- engines/dreamweb/object.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 64f70ada98..747b7934b4 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -313,9 +313,15 @@ void DreamGenContext::openOb() { } void DreamGenContext::identifyOb() { - if (data.word(kWatchingtime) != 0 || - data.word(kMousex) - data.word(kMapadx) >= 22 * 8 || - data.word(kMousey) - data.word(kMapady) >= 20 * 8) { + if (data.word(kWatchingtime) != 0) { + blank(); + return; + } + + ax = data.word(kMousex) - data.word(kMapadx); + bx = data.word(kMousey) - data.word(kMapady); + + if (ax >= 22 * 8 || bx >= 20 * 8) { blank(); return; } @@ -325,8 +331,6 @@ void DreamGenContext::identifyOb() { push(ax); findPathOfPoint(); data.byte(kPointerspath) = dl; - ax = pop(); - push(ax); findFirstPath(); data.byte(kPointerfirstpath) = al; ax = pop(); -- cgit v1.2.3 From 05c5e224b45f910d9db50e6c9ce451ede31452f2 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 13:47:42 +0200 Subject: DREAMWEB: Port 'findinvpos', 'selectob' to C++ and fix a regression in identifyOb() --- engines/dreamweb/object.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 747b7934b4..283e44b583 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -331,6 +331,8 @@ void DreamGenContext::identifyOb() { push(ax); findPathOfPoint(); data.byte(kPointerspath) = dl; + ax = pop(); + push(ax); findFirstPath(); data.byte(kPointerfirstpath) = al; ax = pop(); @@ -354,4 +356,43 @@ void DreamGenContext::identifyOb() { blank(); } +uint16 DreamGenContext::findInvPosCPP() { + uint16 x = data.word(kMousex) - kInventx; + uint16 y = data.word(kMousey) - kInventy; + uint16 pos = (x / kItempicsize) + (y / kItempicsize) * 5; + uint16 invPos = data.byte(kRyanpage) * 10 + pos; + data.byte(kLastinvpos) = invPos & 0xFF; + return invPos * 2 + kRyaninvlist; +} + +void DreamGenContext::findInvPos() { + bx = findInvPosCPP(); + es = data.word(kBuffers); +} + +void DreamGenContext::selectOb() { + es = data.word(kBuffers); + + uint16 objectId = es.word(findInvPosCPP()); + if ((objectId & 0xFF) == 255) { + blank(); + return; + } + + data.byte(kWithobject) = objectId & 0x00FF; + data.byte(kWithtype) = objectId & 0xFF00; + + if (objectId == data.word(kOldsubject) && data.byte(kCommandtype) != 221) + data.byte(kCommandtype) = 221; + + data.word(kOldsubject) = objectId; + commandWithOb(0, data.byte(kWithtype), data.byte(kWithobject)); + + if (data.word(kMousebutton) != data.word(kOldbutton) && (data.word(kMousebutton) & 1)) { + delPointer(); + data.byte(kInvopen) = 0; + useRoutine(); + } +} + } // End of namespace DreamGen -- cgit v1.2.3 From 710072c55bcdac525bea401a4c9fa260a95d79c5 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 14:33:17 +0200 Subject: DREAMWEB: Fix regression in getOpenedSize() --- engines/dreamweb/object.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 283e44b583..d376f915e5 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -284,7 +284,26 @@ void DreamBase::getBackFromOb() { } void DreamGenContext::getOpenedSize() { - ax = getOpenedSizeCPP(); + //ax = getOpenedSizeCPP(); + + // We need to call the ASM-style versions of get*Ad, as these also set + // bx and es + + al = data.byte(kOpenedob); + + switch (data.byte(kOpenedtype)) { + case 4: + getExAd(); + break; + case 2: + getFreeAd(); + break; + default: + getSetAd(); + break; + } + + ax = es.word(bx+7); } byte DreamGenContext::getOpenedSizeCPP() { -- cgit v1.2.3 From 956abddc5ce30bf29bb7df84f3eb3f74076d57e0 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 15:50:48 +0200 Subject: DREAMWEB: Fix regression in selectOb() (thanks wjp) --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index d376f915e5..3cea2a5c2f 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -399,7 +399,7 @@ void DreamGenContext::selectOb() { } data.byte(kWithobject) = objectId & 0x00FF; - data.byte(kWithtype) = objectId & 0xFF00; + data.byte(kWithtype) = objectId >> 8; if (objectId == data.word(kOldsubject) && data.byte(kCommandtype) != 221) data.byte(kCommandtype) = 221; -- cgit v1.2.3 From 400bda78d2ad98c7671c384e58cb6d74ba7579fd Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 16:21:32 +0200 Subject: DREAMWEB: Fix another regression in selectOb() (thanks wjp) --- engines/dreamweb/object.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 3cea2a5c2f..dbae7e2ba5 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -401,8 +401,19 @@ void DreamGenContext::selectOb() { data.byte(kWithobject) = objectId & 0x00FF; data.byte(kWithtype) = objectId >> 8; - if (objectId == data.word(kOldsubject) && data.byte(kCommandtype) != 221) - data.byte(kCommandtype) = 221; + if (objectId == data.word(kOldsubject)) { + if (data.byte(kCommandtype) == 221) { + // Object already selected + if (data.word(kMousebutton) != data.word(kOldbutton) && (data.word(kMousebutton) & 1)) { + delPointer(); + data.byte(kInvopen) = 0; + useRoutine(); + } + return; + } else { + data.byte(kCommandtype) = 221; + } + } data.word(kOldsubject) = objectId; commandWithOb(0, data.byte(kWithtype), data.byte(kWithobject)); -- cgit v1.2.3 From 9fdb38d39510d81de43c887e95bae5b6e6a91156 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 17 Dec 2011 16:32:12 +0200 Subject: DREAMWEB: Fix another regression in the ASM-style version of getOpenedSize() --- engines/dreamweb/object.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index dbae7e2ba5..29e6d52ba7 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -294,16 +294,17 @@ void DreamGenContext::getOpenedSize() { switch (data.byte(kOpenedtype)) { case 4: getExAd(); + ax = es.word(bx+7); break; case 2: getFreeAd(); + ax = es.word(bx+7); break; default: getSetAd(); + ax = es.word(bx+3); break; } - - ax = es.word(bx+7); } byte DreamGenContext::getOpenedSizeCPP() { -- cgit v1.2.3 From b8ab0e62177916f82131b884d118a23e1afb3407 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 17 Dec 2011 19:18:57 +0100 Subject: DREAMWEB: Fix regression in getOpenedSize --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 29e6d52ba7..5bdfc07496 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -311,11 +311,11 @@ byte DreamGenContext::getOpenedSizeCPP() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { case 4: - return getExAd(obj)->b7; + return getExAd(obj)->b8; case 2: - return getFreeAd(obj)->b7; + return getFreeAd(obj)->b8; default: - return getSetAd(obj)->b3; + return getSetAd(obj)->b4; } } -- cgit v1.2.3 From 5958d2d29af136a7adcbc4dc2abbb8ee5e0fcbba Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 17 Dec 2011 21:02:31 +0100 Subject: DREAMWEB: Name some DynObject/SetObject fields Also change getAnyAd() behaviour to be consistent between Free/Ex and Set objects, diverging from the original. --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 5bdfc07496..e4abac14f2 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -311,11 +311,11 @@ byte DreamGenContext::getOpenedSizeCPP() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { case 4: - return getExAd(obj)->b8; + return getExAd(obj)->slotCount; case 2: - return getFreeAd(obj)->b8; + return getFreeAd(obj)->slotCount; default: - return getSetAd(obj)->b4; + return getSetAd(obj)->slotCount; } } -- cgit v1.2.3 From 421c8cd2624a9e8ac2f0091ef1b51b42f99dae26 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 18 Dec 2011 11:25:49 +0200 Subject: DREAMWEB: Port 'setpickup' to C++ and added an enum for the object types --- engines/dreamweb/object.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index e4abac14f2..4daa5091a5 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -108,10 +108,10 @@ void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { } void DreamBase::obPicture() { - if (data.byte(kObjecttype) == 1) + if (data.byte(kObjecttype) == kSetObjectType1) return; Frame *frames; - if (data.byte(kObjecttype) == 4) + if (data.byte(kObjecttype) == kExObjectType) frames = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); else frames = (Frame *)getSegment(data.word(kFreeframes)).ptr(0, 0); @@ -133,6 +133,7 @@ void DreamBase::obIcons() { void DreamGenContext::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; + while (true) { if (examineAgain) { data.byte(kInmaparea) = 0; @@ -140,8 +141,7 @@ void DreamGenContext::examineOb(bool examineAgain) { data.byte(kOpenedob) = 255; data.byte(kOpenedtype) = 255; data.byte(kInvopen) = 0; - al = data.byte(kCommandtype); - data.byte(kObjecttype) = al; + data.byte(kObjecttype) = data.byte(kCommandtype); data.byte(kItemframe) = 0; data.byte(kPointerframe) = 0; createPanel(); @@ -167,6 +167,7 @@ void DreamGenContext::examineOb(bool examineAgain) { dumpTextLine(); delPointer(); data.byte(kGetback) = 0; + switch (data.byte(kInvopen)) { case 0: { RectWithCallback examList[] = { @@ -207,6 +208,7 @@ void DreamGenContext::examineOb(bool examineAgain) { break; } } + if (data.byte(kQuitrequested) != 0) break; if (data.byte(kExamagain) != 0) @@ -426,4 +428,53 @@ void DreamGenContext::selectOb() { } } +void DreamGenContext::setPickup() { + if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) { + // The original called getAnyAd() here. However, since object types + // 1 and 3 are excluded, the resulting object is a DynObject, so + // we can use getEitherAd() instead. + DynObject *object = getEitherAdCPP(); + if (object->mapad[0] == 4) { + blank(); + return; + } + } else { + blank(); + return; + } + + if (data.byte(kCommandtype) != 209) { + data.byte(kCommandtype) = 209; + commandWithOb(33, data.byte(kObjecttype), data.byte(kCommand)); + } + + if (data.word(kMousebutton) == 1 && data.word(kMousebutton) == data.word(kOldbutton)) + return; + + createPanel(); + showPanel(); + showMan(); + showExit(); + examIcon(); + data.byte(kPickup) = 1; + data.byte(kInvopen) = 2; + + if (data.byte(kObjecttype) != kExObjectType) { + data.byte(kItemframe) = data.byte(kCommand); + data.byte(kOpenedob) = 255; + transferToEx(); + data.byte(kItemframe) = data.byte(kCommand); + data.byte(kObjecttype) = kExObjectType; + DynObject *object = getEitherAdCPP(); + object->mapad[0] = 20; + object->mapad[1] = 255; + } else { + data.byte(kItemframe) = data.byte(kCommand); + data.byte(kOpenedob) = 255; + } + + openInv(); + workToScreenM(); +} + } // End of namespace DreamGen -- cgit v1.2.3 From feaf297c7500aaff8a68da0a47466e537f25db4b Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sun, 18 Dec 2011 13:06:05 +0100 Subject: DREAMWEB: Fix multiple regressions in setPickup --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4daa5091a5..473d876ce8 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -448,7 +448,7 @@ void DreamGenContext::setPickup() { commandWithOb(33, data.byte(kObjecttype), data.byte(kCommand)); } - if (data.word(kMousebutton) == 1 && data.word(kMousebutton) == data.word(kOldbutton)) + if (data.word(kMousebutton) != 1 || data.word(kMousebutton) == data.word(kOldbutton)) return; createPanel(); @@ -463,9 +463,9 @@ void DreamGenContext::setPickup() { data.byte(kItemframe) = data.byte(kCommand); data.byte(kOpenedob) = 255; transferToEx(); - data.byte(kItemframe) = data.byte(kCommand); + data.byte(kItemframe) = al; data.byte(kObjecttype) = kExObjectType; - DynObject *object = getEitherAdCPP(); + DynObject *object = getExAd(data.byte(kItemframe)); object->mapad[0] = 20; object->mapad[1] = 255; } else { -- cgit v1.2.3 From 133cfc3ae9de62daa3b3aa9cd7a9d0328b4043dc Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sun, 18 Dec 2011 15:55:27 +0100 Subject: DREAMWEB: Fix yet another regression in setPickup getAnyAd and getEitherAd have different inputs, so can't be interchanged... --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 473d876ce8..53ecc0c362 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -431,9 +431,9 @@ void DreamGenContext::selectOb() { void DreamGenContext::setPickup() { if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) { // The original called getAnyAd() here. However, since object types - // 1 and 3 are excluded, the resulting object is a DynObject, so - // we can use getEitherAd() instead. - DynObject *object = getEitherAdCPP(); + // 1 and 3 are excluded, the resulting object is a DynObject + uint8 dummy; + DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy); if (object->mapad[0] == 4) { blank(); return; -- cgit v1.2.3 From 8449493eff5ff26e8550dec6c50470521fc31947 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sun, 18 Dec 2011 15:32:25 +0100 Subject: DREAMWEB: Convert removeObFromInv, deleteExObject, deleteExFrame, deleteExText --- engines/dreamweb/object.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 53ecc0c362..384e001b5e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -477,4 +477,90 @@ void DreamGenContext::setPickup() { workToScreenM(); } +void DreamGenContext::deleteExFrame() { + deleteExFrame(al); +} + +void DreamBase::deleteExFrame(uint8 frameNum) { + Frame *frame = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata + sizeof(Frame)*frameNum, sizeof(Frame)); + + uint16 frameSize = frame->width * frame->height; + // Note: the original asm didn't subtract frameSize from remainder + uint16 remainder = kExframeslen - frame->ptr() - frameSize; + uint16 startOff = kExframes + frame->ptr(); + uint16 endOff = startOff + frameSize; + + // Shift frame data after this one down + memmove(getSegment(data.word(kExtras)).ptr(startOff, remainder), getSegment(data.word(kExtras)).ptr(endOff, remainder), remainder); + + // Combined frame data is now frameSize smaller + data.word(kExframepos) -= frameSize; + + // Adjust all frame pointers pointing into the shifted data + for (unsigned int i = 0; i < 3*kNumexobjects; ++i) { + frame = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata + sizeof(Frame)*i, sizeof(Frame)); + if (frame->ptr() >= startOff) + frame->setPtr(frame->ptr() - frameSize); + } +} + +void DreamGenContext::deleteExText() { + deleteExText(al); +} + +void DreamBase::deleteExText(uint8 textNum) { + uint16 offset = getSegment(data.word(kExtras)).word(kExtextdat + 2*textNum); + + uint16 startOff = kExtext + offset; + uint16 textSize = strlen((char *)getSegment(data.word(kExtras)).ptr(startOff, 0)) + 1; + uint16 endOff = startOff + textSize; + uint16 remainder = kExtextlen - offset - textSize; + + // Shift text data after this one down + memmove(getSegment(data.word(kExtras)).ptr(startOff, remainder), getSegment(data.word(kExtras)).ptr(endOff, remainder), remainder); + + // Combined text data is now frameSize smaller + data.word(kExtextpos) -= textSize; + + // Adjust all text pointers pointing into the shifted data + for (unsigned int i = 0; i < kNumexobjects; ++i) { + uint16 t = getSegment(data.word(kExtras)).word(kExtextdat + 2*i); + if (t >= offset + textSize) + getSegment(data.word(kExtras)).word(kExtextdat + 2*i) = t - textSize; + } +} + +// This takes es:di and cl as input, but es:di always points to getExAd(cl) +void DreamGenContext::deleteExObject() { + deleteExObject(cl); +} + +void DreamBase::deleteExObject(uint8 index) { + DynObject *obj = getExAd(index); + + memset(obj, 0xFF, sizeof(DynObject)); + + deleteExFrame(3*index); + deleteExFrame(3*index + 1); + + deleteExText(index); + + for (uint8 i = 0; i < kNumexobjects; ++i) { + DynObject *t = getExAd(index); + // Is this object contained in the one we've just deleted? + if (t->mapad[0] == 4 && t->mapad[1] == index) + deleteExObject(i); + } +} + +void DreamBase::removeObFromInv() { + if (data.byte(kCommand) == 100) + return; // object doesn't exit + + assert(data.byte(kObjecttype) == kExObjectType); + + deleteExObject(data.byte(kCommand)); +} + + } // End of namespace DreamGen -- cgit v1.2.3 From f0eee81d327957cddb85c5a1ffe7a308a377f636 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 19 Dec 2011 03:23:16 +0200 Subject: DREAMWEB: Port 'intoinv', 'outofinv' to C++ --- engines/dreamweb/object.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 384e001b5e..9fe94c4bd4 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -562,5 +562,87 @@ void DreamBase::removeObFromInv() { deleteExObject(data.byte(kCommand)); } +void DreamGenContext::inToInv() { + if (!data.byte(kPickup)) { + outOfInv(); + return; + } + + findInvPos(); + ax = es.word(bx); + + if (al != 255) { + swapWithInv(); + return; + } + + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + + if (ax == data.word(kOldsubject) && data.byte(kCommandtype) != 220) + data.byte(kCommandtype) = 220; + + data.word(kOldsubject) = ax; + commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; // notletgo2 + + delPointer(); + DynObject *object = getExAd(data.byte(kItemframe)); + object->mapad[0] = 4; + object->mapad[1] = 255; + object->mapad[2] = data.byte(kLastinvpos); + data.byte(kPickup) = 0; + fillRyan(); + readMouse(); + showPointer(); + outOfInv(); + workToScreen(); + delPointer(); +} + +void DreamGenContext::outOfInv() { + findInvPos(); + ax = es.word(bx); + + if (al == 255) { + blank(); + return; + } + + if (data.word(kMousebutton) == 2) { + reExFromInv(); + return; + } + + if (ax == data.word(kOldsubject) && data.byte(kCommandtype) != 221) + data.byte(kCommandtype) = 221; + + data.word(kOldsubject) = ax; + commandWithOb(36, ah, al); + + if (data.word(kMousebutton) == data.word(kOldbutton)) + return; // notletgo + + if (!(data.word(kMousebutton) & 1)) + return; + + delPointer(); + data.byte(kPickup) = 1; + findInvPos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + DynObject *object = getExAd(data.byte(kItemframe)); + object->mapad[0] = 20; + object->mapad[1] = 255; + fillRyan(); + readMouse(); + showPointer(); + inToInv(); + workToScreen(); + delPointer(); +} } // End of namespace DreamGen -- cgit v1.2.3 From 5a3deea58ebab2a443e48c91cfff7ca5ecab349c Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 19 Dec 2011 23:47:06 +0200 Subject: DREAMWEB: More work on inToInv and outOfInv --- engines/dreamweb/object.cpp | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9fe94c4bd4..1cdbca0907 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -568,21 +568,19 @@ void DreamGenContext::inToInv() { return; } - findInvPos(); - ax = es.word(bx); + uint16 subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - if (al != 255) { + if ((subject & 0xFF) != 255) { swapWithInv(); return; } - al = data.byte(kItemframe); - ah = data.byte(kObjecttype); + subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (ax == data.word(kOldsubject) && data.byte(kCommandtype) != 220) + if (subject == data.word(kOldsubject) && data.byte(kCommandtype) != 220) data.byte(kCommandtype) = 220; - data.word(kOldsubject) = ax; + data.word(kOldsubject) = subject; commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -603,10 +601,9 @@ void DreamGenContext::inToInv() { } void DreamGenContext::outOfInv() { - findInvPos(); - ax = es.word(bx); + uint16 subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - if (al == 255) { + if ((subject & 0xFF) == 255) { blank(); return; } @@ -616,11 +613,13 @@ void DreamGenContext::outOfInv() { return; } - if (ax == data.word(kOldsubject) && data.byte(kCommandtype) != 221) + if (subject == data.word(kOldsubject) && data.byte(kCommandtype) != 221) data.byte(kCommandtype) = 221; - data.word(kOldsubject) = ax; - commandWithOb(36, ah, al); + data.word(kOldsubject) = subject; + byte type = subject >> 8; + byte frame = subject & 0xFF; + commandWithOb(36, type, frame); if (data.word(kMousebutton) == data.word(kOldbutton)) return; // notletgo @@ -630,10 +629,9 @@ void DreamGenContext::outOfInv() { delPointer(); data.byte(kPickup) = 1; - findInvPos(); - ax = es.word(bx); - data.byte(kItemframe) = al; - data.byte(kObjecttype) = ah; + subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + data.byte(kObjecttype) = subject >> 8; + data.byte(kItemframe) = subject & 0xFF; DynObject *object = getExAd(data.byte(kItemframe)); object->mapad[0] = 20; object->mapad[1] = 255; -- cgit v1.2.3 From f5e8b3257e5c32c02561e4d26298775fa5547df2 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 20 Dec 2011 00:06:49 +0100 Subject: DREAMWEB: Fix regressions in intoInv, outOfInv; cleanup selectOb --- engines/dreamweb/object.cpp | 62 ++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 37 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 1cdbca0907..70481407f2 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -393,9 +393,7 @@ void DreamGenContext::findInvPos() { } void DreamGenContext::selectOb() { - es = data.word(kBuffers); - - uint16 objectId = es.word(findInvPosCPP()); + uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); if ((objectId & 0xFF) == 255) { blank(); return; @@ -404,28 +402,19 @@ void DreamGenContext::selectOb() { data.byte(kWithobject) = objectId & 0x00FF; data.byte(kWithtype) = objectId >> 8; - if (objectId == data.word(kOldsubject)) { - if (data.byte(kCommandtype) == 221) { - // Object already selected - if (data.word(kMousebutton) != data.word(kOldbutton) && (data.word(kMousebutton) & 1)) { - delPointer(); - data.byte(kInvopen) = 0; - useRoutine(); - } - return; - } else { + if (objectId != data.word(kOldsubject) || data.byte(kCommandtype) != 221) { + if (objectId == data.word(kOldsubject)) data.byte(kCommandtype) = 221; - } + data.word(kOldsubject) = objectId; + commandWithOb(0, data.byte(kWithtype), data.byte(kWithobject)); } - data.word(kOldsubject) = objectId; - commandWithOb(0, data.byte(kWithtype), data.byte(kWithobject)); + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; - if (data.word(kMousebutton) != data.word(kOldbutton) && (data.word(kMousebutton) & 1)) { - delPointer(); - data.byte(kInvopen) = 0; - useRoutine(); - } + delPointer(); + data.byte(kInvopen) = 0; + useRoutine(); } void DreamGenContext::setPickup() { @@ -577,11 +566,12 @@ void DreamGenContext::inToInv() { subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (subject == data.word(kOldsubject) && data.byte(kCommandtype) != 220) - data.byte(kCommandtype) = 220; - - data.word(kOldsubject) = subject; - commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + if (subject != data.word(kOldsubject) || data.byte(kCommandtype) != 220) { + if (subject == data.word(kOldsubject)) + data.byte(kCommandtype) = 220; + data.word(kOldsubject) = subject; + commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) return; // notletgo2 @@ -613,18 +603,16 @@ void DreamGenContext::outOfInv() { return; } - if (subject == data.word(kOldsubject) && data.byte(kCommandtype) != 221) - data.byte(kCommandtype) = 221; - - data.word(kOldsubject) = subject; - byte type = subject >> 8; - byte frame = subject & 0xFF; - commandWithOb(36, type, frame); - - if (data.word(kMousebutton) == data.word(kOldbutton)) - return; // notletgo + if (subject != data.word(kOldsubject) || data.byte(kCommandtype) != 221) { + if (subject == data.word(kOldsubject)) + data.byte(kCommandtype) = 221; + data.word(kOldsubject) = subject; + byte type = subject >> 8; + byte frame = subject & 0xFF; + commandWithOb(36, type, frame); + } - if (!(data.word(kMousebutton) & 1)) + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) return; delPointer(); -- cgit v1.2.3 From 341a2d68742d4c7dce9229c1da4c8e6b13e2087c Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 20 Dec 2011 13:58:26 +0100 Subject: DREAMWEB: Fix regression in deleteExObject (thanks to Fingolfin) --- engines/dreamweb/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 70481407f2..54979309f4 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -535,7 +535,7 @@ void DreamBase::deleteExObject(uint8 index) { deleteExText(index); for (uint8 i = 0; i < kNumexobjects; ++i) { - DynObject *t = getExAd(index); + DynObject *t = getExAd(i); // Is this object contained in the one we've just deleted? if (t->mapad[0] == 4 && t->mapad[1] == index) deleteExObject(i); @@ -544,7 +544,7 @@ void DreamBase::deleteExObject(uint8 index) { void DreamBase::removeObFromInv() { if (data.byte(kCommand) == 100) - return; // object doesn't exit + return; // object doesn't exist assert(data.byte(kObjecttype) == kExObjectType); -- cgit v1.2.3 From cdc6bc421bef6ed0119819a92fba1b2b9283ce17 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 20 Dec 2011 09:44:00 +0100 Subject: DREAMWEB: Turn RectWithCallback into template Also moves checkCoords to DreamBase, adding a nasty cast to it. This is a temporary HACK, which allows moving functions that use checkCoords to DreamBase one at a time, instead of all at once (and at the same time as checkCoords). This can be undone once everything using checkCoords has been moved to DreamBase. --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 54979309f4..1c1ae5b4a0 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -170,7 +170,7 @@ void DreamGenContext::examineOb(bool examineAgain) { switch (data.byte(kInvopen)) { case 0: { - RectWithCallback examList[] = { + RectWithCallback examList[] = { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { 260,300,0,44,&DreamGenContext::useObject }, { 210,254,0,44,&DreamGenContext::selectOpenOb }, @@ -184,7 +184,7 @@ void DreamGenContext::examineOb(bool examineAgain) { } case 1: { // Note: This table contains the non-constant _openChangeSize! - RectWithCallback invList1[] = { + 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 }, @@ -197,7 +197,7 @@ void DreamGenContext::examineOb(bool examineAgain) { break; } default: { - RectWithCallback withList1[] = { + RectWithCallback withList1[] = { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, -- cgit v1.2.3 From ef98df589563d77625928b69be79f7227e97d4a7 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 20 Dec 2011 10:27:02 +0100 Subject: DREAMWEB: cleanup --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 1c1ae5b4a0..8553f41ee8 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -171,7 +171,7 @@ void DreamGenContext::examineOb(bool examineAgain) { switch (data.byte(kInvopen)) { case 0: { RectWithCallback examList[] = { - { 273,320,157,198,&DreamGenContext::getBackFromOb }, + { 273,320,157,198,&DreamBase::getBackFromOb }, { 260,300,0,44,&DreamGenContext::useObject }, { 210,254,0,44,&DreamGenContext::selectOpenOb }, { 144,176,64,96,&DreamGenContext::setPickup }, @@ -185,7 +185,7 @@ void DreamGenContext::examineOb(bool examineAgain) { case 1: { // Note: This table contains the non-constant _openChangeSize! RectWithCallback invList1[] = { - { 273,320,157,198,&DreamGenContext::getBackFromOb }, + { 273,320,157,198,&DreamBase::getBackFromOb }, { 255,294,0,24,&DreamGenContext::dropObject }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened }, @@ -198,7 +198,7 @@ void DreamGenContext::examineOb(bool examineAgain) { } default: { RectWithCallback withList1[] = { - { 273,320,157,198,&DreamGenContext::getBackFromOb }, + { 273,320,157,198,&DreamBase::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, { 0,320,0,200,&DreamBase::blank }, -- cgit v1.2.3 From b6e139d112b08d9280c145ae40f6324be6707efe Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 20 Dec 2011 11:23:51 +0100 Subject: DREAMWEB: Convert resetLocation and purgeALocation to C++ --- engines/dreamweb/object.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8553f41ee8..6aa1364002 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -631,4 +631,39 @@ void DreamGenContext::outOfInv() { delPointer(); } +void DreamBase::resetLocation(uint8 index) { + if (index == 5) { + // delete hotel + purgeALocation(5); + purgeALocation(21); + purgeALocation(22); + purgeALocation(27); + } else if (index == 8) { + // delete TV studio + purgeALocation(8); + purgeALocation(28); + } else if (index == 6) { + // delete sarters + purgeALocation(6); + purgeALocation(20); + purgeALocation(25); + } else if (index == 13) { + // delete boathouse + purgeALocation(13); + purgeALocation(29); + } + + data.byte(kRoomscango + index) = 0; +} + +void DreamBase::purgeALocation(uint8 index) { + // index == al + for (uint8 i = 0; i < kNumexobjects; ++i) { + DynObject *t = getExAd(i); + if (t->currentLocation == index && t->mapad[0] == 0) { + deleteExObject(i); + } + } +} + } // End of namespace DreamGen -- cgit v1.2.3 From b2fcdd6c86fb341695d32afded114fecbe5d7590 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 20 Dec 2011 11:33:09 +0100 Subject: DREAMWEB: Move rest of saveload.cpp to DreamBase --- engines/dreamweb/object.cpp | 25 ------------------------- 1 file changed, 25 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 6aa1364002..207f4889db 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -631,31 +631,6 @@ void DreamGenContext::outOfInv() { delPointer(); } -void DreamBase::resetLocation(uint8 index) { - if (index == 5) { - // delete hotel - purgeALocation(5); - purgeALocation(21); - purgeALocation(22); - purgeALocation(27); - } else if (index == 8) { - // delete TV studio - purgeALocation(8); - purgeALocation(28); - } else if (index == 6) { - // delete sarters - purgeALocation(6); - purgeALocation(20); - purgeALocation(25); - } else if (index == 13) { - // delete boathouse - purgeALocation(13); - purgeALocation(29); - } - - data.byte(kRoomscango + index) = 0; -} - void DreamBase::purgeALocation(uint8 index) { // index == al for (uint8 i = 0; i < kNumexobjects; ++i) { -- cgit v1.2.3 From f6d63ae6a8adeb182d404274b856c03bb40bae4a Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 24 Dec 2011 00:34:56 +0200 Subject: DREAMWEB: Use the C++ versions of getAnyAd and makeWorn in some places This allows us to remove the ASM style version of makeWorn() --- engines/dreamweb/object.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 207f4889db..cdd612001f 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -79,10 +79,6 @@ void DreamGenContext::wornError() { workToScreenM(); } -void DreamGenContext::makeWorn() { - makeWorn((DynObject *)es.ptr(bx, sizeof(DynObject))); -} - void DreamGenContext::makeWorn(DynObject *object) { object->id[0] = 'W'-'A'; object->id[1] = 'E'-'A'; @@ -419,8 +415,7 @@ void DreamGenContext::selectOb() { void DreamGenContext::setPickup() { if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) { - // The original called getAnyAd() here. However, since object types - // 1 and 3 are excluded, the resulting object is a DynObject + // Object types 1 and 3 are excluded, so the resulting object is a DynObject uint8 dummy; DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy); if (object->mapad[0] == 4) { -- cgit v1.2.3 From b9839635eab502b640c29e23bdbb20240b2bf440 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 24 Dec 2011 12:23:24 +0100 Subject: DREAMWEB: Convert getObTextStart --- engines/dreamweb/object.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index cdd612001f..8e7ade4ffd 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -636,4 +636,73 @@ void DreamBase::purgeALocation(uint8 index) { } } +const uint8 *DreamBase::getObTextStart() { + uint16 textSeg, textDatOff, textOff; + if (data.byte(kObjecttype) == kFreeObjectType) { + textSeg = data.word(kFreedesc); + textDatOff = kFreetextdat; + textOff = kFreetext; + } else if (data.byte(kObjecttype) == kSetObjectType1) { + textSeg = data.word(kSetdesc); + textDatOff = kSettextdat; + textOff = kSettext; + } else { + textSeg = data.word(kExtras); + textDatOff = kExtextdat; + textOff = kExtext; + } + const uint8 *textBase = getSegment(textSeg).ptr(textOff, 0); + const uint8 *text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); + + if (data.byte(kObjecttype) != kSetObjectType1) + return text; + + const uint8 *obname = text; + while (true) { + const uint8 *start = text; + findNextColon(&text); + + // Not an empty description string? + if (*text != 0 && *text != ':') + return start; + + // If the description string (of a SetObjectType1 object) is empty, + // look for an object with the same name. + // Example: Eden's garage door outside has two parts. The right part + // has no description of its own but uses that of the left part. + + bool found = false; + do { + text++; + uint8 c = *obname; + + // scan for matching first character + while (*text != c) { + text++; + + // arbitrary give-up counter + if (text - (textBase - textOff) >= 8000) { + warning("Object description for %d/%d not found", data.byte(kObjecttype), data.byte(kCommand)); + return obname; + } + } + + // found matching first character, so match the rest + const uint8 *s1 = obname; + const uint8 *s2 = text; + do { + s1++; + s2++; + } while (*s1 != ':' && *s1 != 0 && *s1 == *s2); + + if (*s1 == ':' || *s1 == 0) + found = true; // (prefix) matched the entire object name + } while (!found); + + // We found an object with the same name. The next loop iteration + // will check if this one again has an empty description. + } +} + + } // End of namespace DreamGen -- cgit v1.2.3 From be1a4de2919e7a5fa26ee05d23792aacd0e33a7a Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 24 Dec 2011 13:27:09 +0200 Subject: DREAMWEB: Port 'dropobject' to C++ --- engines/dreamweb/object.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8e7ade4ffd..04081e2f0e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -704,5 +704,57 @@ const uint8 *DreamBase::getObTextStart() { } } +void DreamGenContext::dropObject() { + if (data.byte(kCommandtype) != 223) { + data.byte(kCommandtype) = 223; + if (!data.byte(kPickup)) { + blank(); + return; + } + commandWithOb(37, data.byte(kObjecttype), data.byte(kItemframe)); + } + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; + + if (isItWorn(getEitherAdCPP())) { + wornError(); + return; + } + + if (data.byte(kReallocation) != 47) { + byte flag, flagEx, type, flagX, flagY; + checkOne(data.byte(kRyanx) + 12, data.byte(kRyany) + 12, &flag, &flagEx, &type, &flagX, &flagY); + + if (flag >= 2) { + dropError(); + return; + } + } else { + dropError(); + return; + } + + if (data.byte(kMapxsize) == 64 && data.byte(kMapysize) == 64) { + // Inside lift + dropError(); + return; + } + + if (compare(data.byte(kItemframe), 4, "GUNA") || compare(data.byte(kItemframe), 4, "SHLD")) { + cantDrop(); + return; + } + + data.byte(kObjecttype) = 4; + DynObject *object = getExAd(data.byte(kItemframe)); + object->mapad[0] = 0; + object->mapad[1] = ((data.byte(kRyanx) + 4) >> 4) + data.byte(kMapx); + object->mapad[2] = (data.byte(kRyanx) + 4) & 0xF; + object->mapad[3] = ((data.byte(kRyany) + 8) >> 4) + data.byte(kMapy); + object->mapad[4] = (data.byte(kRyany) + 8) & 0xF; + data.byte(kPickup) = 0; + object->currentLocation = data.byte(kReallocation); +} } // End of namespace DreamGen -- cgit v1.2.3 From 42068065b57993c865823ff56e81bd7a87aa0278 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 24 Dec 2011 13:55:56 +0100 Subject: DREAMWEB: Move more functions to DreamBase --- engines/dreamweb/object.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 04081e2f0e..1245187a92 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -66,7 +66,7 @@ bool DreamBase::isItWorn(const DynObject *object) { return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); } -void DreamGenContext::wornError() { +void DreamBase::wornError() { data.byte(kCommandtype) = 255; delPointer(); printMessage(76, 21, 57, 240, false); @@ -79,7 +79,7 @@ void DreamGenContext::wornError() { workToScreenM(); } -void DreamGenContext::makeWorn(DynObject *object) { +void DreamBase::makeWorn(DynObject *object) { object->id[0] = 'W'-'A'; object->id[1] = 'E'-'A'; } @@ -461,10 +461,6 @@ void DreamGenContext::setPickup() { workToScreenM(); } -void DreamGenContext::deleteExFrame() { - deleteExFrame(al); -} - void DreamBase::deleteExFrame(uint8 frameNum) { Frame *frame = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata + sizeof(Frame)*frameNum, sizeof(Frame)); @@ -488,10 +484,6 @@ void DreamBase::deleteExFrame(uint8 frameNum) { } } -void DreamGenContext::deleteExText() { - deleteExText(al); -} - void DreamBase::deleteExText(uint8 textNum) { uint16 offset = getSegment(data.word(kExtras)).word(kExtextdat + 2*textNum); @@ -704,7 +696,7 @@ const uint8 *DreamBase::getObTextStart() { } } -void DreamGenContext::dropObject() { +void DreamBase::dropObject() { if (data.byte(kCommandtype) != 223) { data.byte(kCommandtype) = 223; if (!data.byte(kPickup)) { -- cgit v1.2.3 From 8e36de736e88f1b7a70ad04fc3d09b7807ff94f9 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 24 Dec 2011 14:27:24 +0100 Subject: DREAMWEB: Minor cleanup --- engines/dreamweb/object.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 1245187a92..ac5f3132b6 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -231,8 +231,7 @@ void DreamGenContext::inventory() { if (data.byte(kCommandtype) != 239) { data.byte(kCommandtype) = 239; - al = 32; - commandOnly(); + commandOnly(32); } if (data.word(kMousebutton) == data.word(kOldbutton)) -- cgit v1.2.3 From 652403021d7dbcceb672dd21b468d1667479fc8b Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 04:51:18 +0200 Subject: DREAMWEB: Convert 'checkobjectsize' to C++ Also, renamed getOpenedSizeCPP() to getSlotCount(). Special thanks to wjp for his help and for examining the behavior of a fallback case. --- engines/dreamweb/object.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index ac5f3132b6..7e1ba1c2a3 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -281,7 +281,7 @@ void DreamBase::getBackFromOb() { } void DreamGenContext::getOpenedSize() { - //ax = getOpenedSizeCPP(); + //ax = getOpenedSlotCount(); // We need to call the ASM-style versions of get*Ad, as these also set // bx and es @@ -304,7 +304,7 @@ void DreamGenContext::getOpenedSize() { } } -byte DreamGenContext::getOpenedSizeCPP() { +byte DreamGenContext::getOpenedSlotCount() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { case 4: @@ -316,6 +316,18 @@ byte DreamGenContext::getOpenedSizeCPP() { } } +byte DreamGenContext::getOpenedSlotSize() { + byte obj = data.byte(kOpenedob); + switch (data.byte(kOpenedtype)) { + case 4: + return getExAd(obj)->slotSize; + case 2: + return getFreeAd(obj)->slotSize; + default: + return getSetAd(obj)->slotSize; + } +} + void DreamGenContext::openOb() { uint8 commandLine[64] = "OBJECT NAME ONE "; @@ -326,7 +338,7 @@ void DreamGenContext::openOb() { al = printDirect(commandLine, data.word(kLastxpos) + 5, kInventy+86, 220, false); fillOpen(); - _openChangeSize = getOpenedSizeCPP() * kItempicsize + kInventx; + _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } void DreamGenContext::identifyOb() { @@ -748,4 +760,50 @@ void DreamBase::dropObject() { object->currentLocation = data.byte(kReallocation); } +void DreamGenContext::checkObjectSize() { + al = checkObjectSizeCPP() ? 0 : 1; +} + +bool DreamGenContext::checkObjectSizeCPP() { + byte containerSize = getOpenedSlotSize(); + DynObject *object = getEitherAdCPP(); + // If there is no size defined for the object in the editor, set its size + // to 6. This could be a bad idea, according to the original source. + byte objectSize = (object->objectSize != 255) ? object->objectSize : 6; + + if (objectSize >= 100) { + // Special case + if (containerSize >= 100) { + // Both objects are special + if (containerSize == objectSize) { + return true; + } else { + errorMessage3(); + return false; + } + } else { + if (containerSize >= (byte)(objectSize - 100)) { + return true; + } else { + errorMessage2(); + return false; + } + } + } else if (containerSize >= 100) { // The current object isn't special, but the container object is + errorMessage3(); + return false; + } else if (containerSize >= objectSize) { + return true; + } else { + // The original continues here to the special case above. It checks if + // cl (containerSize) < al (objectSize) and continues if this is so. + // However, in this case, the code subtracts 100 from objectSize, which + // was between 0 - 99, so it now is between 156 and 255. containerSize is + // smaller than 100, so comparing it with objectSize will always be true, + // thus this bit of code always falls through to the errorMessage2() case. + errorMessage2(); + return false; + } +} + } // End of namespace DreamGen -- cgit v1.2.3 From fb068a1dbc4471b22ccc088816343e92bd1a94b4 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sun, 25 Dec 2011 12:41:37 +0100 Subject: DREAMWEB: Simplify order of checkObjectSize checks --- engines/dreamweb/object.cpp | 47 ++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 7e1ba1c2a3..4addfc404e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -771,39 +771,26 @@ bool DreamGenContext::checkObjectSizeCPP() { // to 6. This could be a bad idea, according to the original source. byte objectSize = (object->objectSize != 255) ? object->objectSize : 6; - if (objectSize >= 100) { - // Special case - if (containerSize >= 100) { - // Both objects are special - if (containerSize == objectSize) { - return true; - } else { - errorMessage3(); - return false; - } - } else { - if (containerSize >= (byte)(objectSize - 100)) { - return true; - } else { - errorMessage2(); - return false; - } - } - } else if (containerSize >= 100) { // The current object isn't special, but the container object is + if (containerSize >= 100) { + // Special type of container: only objects of the same special type fit. + if (containerSize == objectSize) + return true; + errorMessage3(); return false; - } else if (containerSize >= objectSize) { - return true; - } else { - // The original continues here to the special case above. It checks if - // cl (containerSize) < al (objectSize) and continues if this is so. - // However, in this case, the code subtracts 100 from objectSize, which - // was between 0 - 99, so it now is between 156 and 255. containerSize is - // smaller than 100, so comparing it with objectSize will always be true, - // thus this bit of code always falls through to the errorMessage2() case. - errorMessage2(); - return false; } + + if (objectSize >= 100) { + // Special type of object, but a regular container. + // Subtract 100 from the size to get its regular size. + objectSize -= 100; + } + + if (containerSize >= objectSize) + return true; + + errorMessage2(); + return false; } } // End of namespace DreamGen -- cgit v1.2.3 From 3ac88c16ea63243a46444e5754a94e41302f2d64 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 14:30:00 +0200 Subject: DREAMWEB: Port 'selectopenob' to C++ --- engines/dreamweb/object.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4addfc404e..dff58050a5 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -793,4 +793,37 @@ bool DreamGenContext::checkObjectSizeCPP() { return false; } +void DreamGenContext::selectOpenOb() { + uint8 slotSize, slotCount; + getAnyAd(&slotSize, &slotCount); + if (slotCount == 255) { + // Can't open the object + blank(); + return; + } + + if (data.byte(kCommandtype) != 224) { + data.byte(kCommandtype) = 224; + commandWithOb(38, data.byte(kObjecttype), data.byte(kCommand)); + } + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; + + data.byte(kOpenedob) = data.byte(kCommand); + data.byte(kOpenedtype) = data.byte(kObjecttype); + createPanel(); + showPanel(); + showMan(); + examIcon(); + showExit(); + openInv(); + openOb(); + underTextLine(); + readMouse(); + showPointer(); + workToScreenCPP(); + delPointer(); +} + } // End of namespace DreamGen -- cgit v1.2.3 From e322d6257dae83761c86c9d5bfbc7d02c0a9988d Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 16:33:30 +0200 Subject: DREAMWEB: Port 'locationpic', 'reexfrominv' to C++ --- engines/dreamweb/object.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index dff58050a5..9d81825964 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -826,4 +826,12 @@ void DreamGenContext::selectOpenOb() { delPointer(); } +void DreamGenContext::reExFromInv() { + uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + data.byte(kCommandtype) = objectId >> 8; + data.byte(kCommand) = objectId & 0x00FF; + data.byte(kExamagain) = 1; + data.byte(kPointermode) = 0; +} + } // End of namespace DreamGen -- cgit v1.2.3 From 0fff97b4b023895256cb8cce9b30684d433bfae4 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 17:10:49 +0200 Subject: DREAMWEB: Port 'useopened' to C++ --- engines/dreamweb/object.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9d81825964..8399c6f26a 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -834,4 +834,72 @@ void DreamGenContext::reExFromInv() { data.byte(kPointermode) = 0; } +void DreamGenContext::useOpened() { + if (data.byte(kOpenedob) == 255) + return; // cannot use opened object + + if (!data.byte(kPickup)) { + outOfOpen(); + return; + } + + findOpenPos(); + ax = es.word(bx); + + if (al != 255) { + swapWithOpen(); + return; + } + + if (data.byte(kPickup) != 1) { + blank(); + return; + } + + uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + if (subject == data.word(kOldsubject)) { + if (data.byte(kCommandtype) != 227) { + data.byte(kCommandtype) = 227; + data.word(kOldsubject) = subject; + commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + } + } else { + data.word(kOldsubject) = subject; + commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + } + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; + + if (isItWorn(getEitherAdCPP())) { + wornError(); + return; + } + + delPointer(); + + if (data.byte(kItemframe) == data.byte(kOpenedob) && + data.byte(kObjecttype) == data.byte(kOpenedtype)) { + errorMessage1(); + return; + } + + if (!checkObjectSizeCPP()) + return; + + data.byte(kPickup) = 0; + DynObject *object = getEitherAdCPP(); + object->mapad[0] = data.byte(kOpenedtype); + object->mapad[1] = data.byte(kOpenedob); + object->mapad[2] = data.byte(kLastinvpos); + object->mapad[3] = data.byte(kReallocation); + fillOpen(); + underTextLine(); + readMouse(); + useOpened(); + showPointer(); + workToScreenCPP(); + delPointer(); +} + } // End of namespace DreamGen -- cgit v1.2.3 From c531c4c1eafbf66a3724df0f3cb7b9ad8da97a8d Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 17:32:56 +0200 Subject: DREAMWEB: Port 'swapwithinv' to C++ --- engines/dreamweb/object.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8399c6f26a..9eb31f438f 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -902,4 +902,47 @@ void DreamGenContext::useOpened() { delPointer(); } +void DreamGenContext::swapWithInv() { + uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + if (subject == data.word(kOldsubject)) { + if (data.byte(kCommandtype) != 243) { + data.byte(kCommandtype) = 243; + data.word(kOldsubject) = subject; + commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + } + } else { + data.word(kOldsubject) = subject; + commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + } + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; + + byte prevType = data.byte(kObjecttype); + byte prevFrame = data.byte(kItemframe); + uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + data.byte(kItemframe) = objectId & 0x00FF; + data.byte(kObjecttype) = objectId >> 8; + DynObject *object = getEitherAdCPP(); + object->mapad[0] = 20; + object->mapad[1] = 255; + byte prevType2 = data.byte(kObjecttype); + byte prevFrame2 = data.byte(kItemframe); + data.byte(kObjecttype) = prevType; + data.byte(kItemframe) = prevFrame; + //findInvPosCPP(); // found in the original source, but it seems to be useless + delPointer(); + object = getEitherAdCPP(); + object->mapad[0] = 4; + object->mapad[1] = 255; + object->mapad[2] = data.byte(kLastinvpos); + data.byte(kObjecttype) = prevType2; + data.byte(kItemframe) = prevFrame2; + fillRyan(); + readMouse(); + showPointer(); + workToScreenCPP(); + delPointer(); +} + } // End of namespace DreamGen -- cgit v1.2.3 From bf4271dfc116fa6f4b4245051e2d6a391f1d850c Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 17:54:22 +0200 Subject: DREAMWEB: Port 'swapwithopen' to C++ --- engines/dreamweb/object.cpp | 91 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 10 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9eb31f438f..6546f19da4 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -834,6 +834,49 @@ void DreamGenContext::reExFromInv() { data.byte(kPointermode) = 0; } +void DreamGenContext::swapWithInv() { + uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + if (subject == data.word(kOldsubject)) { + if (data.byte(kCommandtype) != 243) { + data.byte(kCommandtype) = 243; + data.word(kOldsubject) = subject; + commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + } + } else { + data.word(kOldsubject) = subject; + commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + } + + if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + return; + + byte prevType = data.byte(kObjecttype); + byte prevFrame = data.byte(kItemframe); + uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + data.byte(kItemframe) = objectId & 0x00FF; + data.byte(kObjecttype) = objectId >> 8; + DynObject *object = getEitherAdCPP(); + object->mapad[0] = 20; + object->mapad[1] = 255; + byte prevType2 = data.byte(kObjecttype); + byte prevFrame2 = data.byte(kItemframe); + data.byte(kObjecttype) = prevType; + data.byte(kItemframe) = prevFrame; + //findInvPosCPP(); // found in the original source, but it seems to be useless + delPointer(); + object = getEitherAdCPP(); + object->mapad[0] = 4; + object->mapad[1] = 255; + object->mapad[2] = data.byte(kLastinvpos); + data.byte(kObjecttype) = prevType2; + data.byte(kItemframe) = prevFrame2; + fillRyan(); + readMouse(); + showPointer(); + workToScreenCPP(); + delPointer(); +} + void DreamGenContext::useOpened() { if (data.byte(kOpenedob) == 255) return; // cannot use opened object @@ -902,11 +945,11 @@ void DreamGenContext::useOpened() { delPointer(); } -void DreamGenContext::swapWithInv() { +void DreamGenContext::swapWithOpen() { uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); if (subject == data.word(kOldsubject)) { - if (data.byte(kCommandtype) != 243) { - data.byte(kCommandtype) = 243; + if (data.byte(kCommandtype) != 242) { + data.byte(kCommandtype) = 242; data.word(kOldsubject) = subject; commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); } @@ -918,28 +961,56 @@ void DreamGenContext::swapWithInv() { if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) return; + if (isItWorn(getEitherAdCPP())) { + wornError(); + return; + } + + delPointer(); + + if (data.byte(kItemframe) == data.byte(kOpenedob) && + data.byte(kObjecttype) == data.byte(kOpenedtype)) { + errorMessage1(); + return; + } + + if (!checkObjectSizeCPP()) + return; + byte prevType = data.byte(kObjecttype); byte prevFrame = data.byte(kItemframe); - uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - data.byte(kItemframe) = objectId & 0x00FF; - data.byte(kObjecttype) = objectId >> 8; + findOpenPos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + + if (data.byte(kObjecttype) != 4) { + transferToEx(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + } + DynObject *object = getEitherAdCPP(); object->mapad[0] = 20; object->mapad[1] = 255; + byte prevType2 = data.byte(kObjecttype); byte prevFrame2 = data.byte(kItemframe); data.byte(kObjecttype) = prevType; data.byte(kItemframe) = prevFrame; - //findInvPosCPP(); // found in the original source, but it seems to be useless - delPointer(); + findOpenPos(); object = getEitherAdCPP(); - object->mapad[0] = 4; - object->mapad[1] = 255; + object->mapad[0] = data.byte(kOpenedtype); + object->mapad[1] = data.byte(kOpenedob); object->mapad[2] = data.byte(kLastinvpos); + object->mapad[3] = data.byte(kReallocation); data.byte(kObjecttype) = prevType2; data.byte(kItemframe) = prevFrame2; + fillOpen(); fillRyan(); + underTextLine(); readMouse(); + useOpened(); showPointer(); workToScreenCPP(); delPointer(); -- cgit v1.2.3 From 21a278bb630fc7bae6f152861900101a58836344 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 18:26:13 +0200 Subject: DREAMWEB: Port 'outofopen' to C++ --- engines/dreamweb/object.cpp | 72 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 6 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 6546f19da4..64b3d276bb 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -887,9 +887,9 @@ void DreamGenContext::useOpened() { } findOpenPos(); - ax = es.word(bx); + uint16 subject = es.word(bx); - if (al != 255) { + if ((subject & 0x00FF) != 255) { swapWithOpen(); return; } @@ -899,7 +899,7 @@ void DreamGenContext::useOpened() { return; } - uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); if (subject == data.word(kOldsubject)) { if (data.byte(kCommandtype) != 227) { data.byte(kCommandtype) = 227; @@ -945,6 +945,66 @@ void DreamGenContext::useOpened() { delPointer(); } +void DreamGenContext::outOfOpen() { + if (data.byte(kOpenedob) == 255) + return; // cannot use opened object + + findOpenPos(); + uint16 subject = es.word(bx); + + if ((subject & 0x00FF) == 255) { + blank(); + return; + } + + if (subject == data.word(kOldsubject)) { + if (data.byte(kCommandtype) != 228) { + data.byte(kCommandtype) = 228; + data.word(kOldsubject) = subject; + commandWithOb(36, subject >> 8, subject & 0x00FF); + } + } else { + data.word(kOldsubject) = subject; + commandWithOb(36, subject >> 8, subject & 0x00FF); + } + + if (data.word(kMousebutton) == data.word(kOldbutton)) + return; // notletgo4 + + if (data.word(kMousebutton) != 1) { + if (data.word(kMousebutton) != 2) + return; // notletgo4 + + reExFromOpen(); + return; + } + + delPointer(); + data.byte(kPickup) = 1; + findOpenPos(); + subject = es.word(bx); + data.byte(kObjecttype) = subject >> 8; + data.byte(kItemframe) = subject & 0xFF; + + if (data.byte(kObjecttype) != 4) { + transferToEx(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + } + + DynObject *object = getEitherAdCPP(); + object->mapad[0] = 20; + object->mapad[1] = 255; + + fillOpen(); + underTextLine(); + readMouse(); + useOpened(); + showPointer(); + workToScreenCPP(); + delPointer(); +} + void DreamGenContext::swapWithOpen() { uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); if (subject == data.word(kOldsubject)) { @@ -980,9 +1040,9 @@ void DreamGenContext::swapWithOpen() { byte prevType = data.byte(kObjecttype); byte prevFrame = data.byte(kItemframe); findOpenPos(); - ax = es.word(bx); - data.byte(kItemframe) = al; - data.byte(kObjecttype) = ah; + subject = es.word(bx); + data.byte(kObjecttype) = subject >> 8; + data.byte(kItemframe) = subject & 0xFF; if (data.byte(kObjecttype) != 4) { transferToEx(); -- cgit v1.2.3 From 95ffd7f4ce2e0274b8adf87f03bc705b1d3a1ebd Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 19:25:00 +0200 Subject: DREAMWEB: Port 'purgeanitem' to C++, some cleanup --- engines/dreamweb/object.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 64b3d276bb..f3e27d9a5b 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -517,11 +517,6 @@ void DreamBase::deleteExText(uint8 textNum) { } } -// This takes es:di and cl as input, but es:di always points to getExAd(cl) -void DreamGenContext::deleteExObject() { - deleteExObject(cl); -} - void DreamBase::deleteExObject(uint8 index) { DynObject *obj = getExAd(index); -- cgit v1.2.3 From 1f346baa92064388de2958110d93006ac96a5479 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 25 Dec 2011 22:31:07 +0200 Subject: DREAMWEB: Port 'findopenpos' to C++ --- engines/dreamweb/object.cpp | 51 ++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 24 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index f3e27d9a5b..c202ac765c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -881,10 +881,9 @@ void DreamGenContext::useOpened() { return; } - findOpenPos(); - uint16 subject = es.word(bx); + uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); - if ((subject & 0x00FF) != 255) { + if ((objectId & 0x00FF) != 255) { swapWithOpen(); return; } @@ -894,15 +893,15 @@ void DreamGenContext::useOpened() { return; } - subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (subject == data.word(kOldsubject)) { + objectId = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + if (objectId == data.word(kOldsubject)) { if (data.byte(kCommandtype) != 227) { data.byte(kCommandtype) = 227; - data.word(kOldsubject) = subject; + data.word(kOldsubject) = objectId; commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); } } else { - data.word(kOldsubject) = subject; + data.word(kOldsubject) = objectId; commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); } @@ -944,23 +943,22 @@ void DreamGenContext::outOfOpen() { if (data.byte(kOpenedob) == 255) return; // cannot use opened object - findOpenPos(); - uint16 subject = es.word(bx); + uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); - if ((subject & 0x00FF) == 255) { + if ((objectId & 0x00FF) == 255) { blank(); return; } - if (subject == data.word(kOldsubject)) { + if (objectId == data.word(kOldsubject)) { if (data.byte(kCommandtype) != 228) { data.byte(kCommandtype) = 228; - data.word(kOldsubject) = subject; - commandWithOb(36, subject >> 8, subject & 0x00FF); + data.word(kOldsubject) = objectId; + commandWithOb(36, objectId >> 8, objectId & 0x00FF); } } else { - data.word(kOldsubject) = subject; - commandWithOb(36, subject >> 8, subject & 0x00FF); + data.word(kOldsubject) = objectId; + commandWithOb(36, objectId >> 8, objectId & 0x00FF); } if (data.word(kMousebutton) == data.word(kOldbutton)) @@ -976,10 +974,9 @@ void DreamGenContext::outOfOpen() { delPointer(); data.byte(kPickup) = 1; - findOpenPos(); - subject = es.word(bx); - data.byte(kObjecttype) = subject >> 8; - data.byte(kItemframe) = subject & 0xFF; + objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); + data.byte(kObjecttype) = objectId >> 8; + data.byte(kItemframe) = objectId & 0xFF; if (data.byte(kObjecttype) != 4) { transferToEx(); @@ -1034,10 +1031,9 @@ void DreamGenContext::swapWithOpen() { byte prevType = data.byte(kObjecttype); byte prevFrame = data.byte(kItemframe); - findOpenPos(); - subject = es.word(bx); - data.byte(kObjecttype) = subject >> 8; - data.byte(kItemframe) = subject & 0xFF; + uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); + data.byte(kObjecttype) = objectId >> 8; + data.byte(kItemframe) = objectId & 0xFF; if (data.byte(kObjecttype) != 4) { transferToEx(); @@ -1053,7 +1049,7 @@ void DreamGenContext::swapWithOpen() { byte prevFrame2 = data.byte(kItemframe); data.byte(kObjecttype) = prevType; data.byte(kItemframe) = prevFrame; - findOpenPos(); + //findOpenPos(); // was in the original source, looks to be unused object = getEitherAdCPP(); object->mapad[0] = data.byte(kOpenedtype); object->mapad[1] = data.byte(kOpenedob); @@ -1071,4 +1067,11 @@ void DreamGenContext::swapWithOpen() { delPointer(); } +uint16 DreamBase::findOpenPos() { + uint16 pos = (data.word(kMousex) - kInventx) / kItempicsize; + data.byte(kLastinvpos) = pos & 0xFF; + + return pos * 2 + kOpeninvlist; // return the object position in the inventory data +} + } // End of namespace DreamGen -- cgit v1.2.3 From c7b1ec21980d622c138fa2dcac5a03f80aa415e1 Mon Sep 17 00:00:00 2001 From: D G Turner Date: Sun, 25 Dec 2011 23:33:11 +0000 Subject: DREAMWEB: Ported 'findfirstpath' to C++. This conversion could do with a bit more work to remove the es/ax/cx temp usage and clean up the code. --- engines/dreamweb/object.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index c202ac765c..84829bf440 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -341,6 +341,32 @@ void DreamGenContext::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } +uint8 DreamGenContext::findFirstPath(uint16 param) { + es = data.word(kReels); + uint16 ptr = 144 * data.byte(kRoomnum); + // TODO: Replace ax, cx usage with temporary uint8/16 variables... + cx = param; + + for (uint8 pathLoop = 0; pathLoop < 12; pathLoop++, ptr += 8) { + ax = es.word(ptr+2); + + if (ax == 0x0ffff) + continue; // "nofirst" + + if (cl < al || ch < ah) + continue; // "nofirst" + + ax = es.word(ptr+4); + + if (cl > al || ch > ah) + continue; // "nofirst" + + return es.byte(ptr+6); // "gotfirst" + } + + return 0; +} + void DreamGenContext::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); @@ -362,8 +388,7 @@ void DreamGenContext::identifyOb() { data.byte(kPointerspath) = dl; ax = pop(); push(ax); - findFirstPath(); - data.byte(kPointerfirstpath) = al; + data.byte(kPointerfirstpath) = findFirstPath(ax); ax = pop(); byte x = al; -- cgit v1.2.3 From d015f5d4465b971a2dc99d51a7e4c11cb23103a7 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 26 Dec 2011 00:58:37 +0100 Subject: DREAMWEB: Remove some dead code --- engines/dreamweb/object.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 84829bf440..0a278d11ee 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -58,10 +58,6 @@ void DreamBase::fillRyan() { showRyanPage(); } -void DreamGenContext::isItWorn() { - flags._z = isItWorn((const DynObject *)es.ptr(bx, sizeof(DynObject))); -} - bool DreamBase::isItWorn(const DynObject *object) { return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); } @@ -604,7 +600,7 @@ void DreamGenContext::inToInv() { readMouse(); showPointer(); outOfInv(); - workToScreen(); + workToScreenCPP(); delPointer(); } @@ -645,7 +641,7 @@ void DreamGenContext::outOfInv() { readMouse(); showPointer(); inToInv(); - workToScreen(); + workToScreenCPP(); delPointer(); } @@ -780,10 +776,6 @@ void DreamBase::dropObject() { object->currentLocation = data.byte(kReallocation); } -void DreamGenContext::checkObjectSize() { - al = checkObjectSizeCPP() ? 0 : 1; -} - bool DreamGenContext::checkObjectSizeCPP() { byte containerSize = getOpenedSlotSize(); DynObject *object = getEitherAdCPP(); -- cgit v1.2.3 From 04a147921f1259e8874c7f9b723e8b3a8158f8c8 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 26 Dec 2011 00:59:04 +0100 Subject: DREAMWEB: Rename workToScreenCPP to workToScreen --- engines/dreamweb/object.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 0a278d11ee..8c26956681 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -147,7 +147,7 @@ void DreamGenContext::examineOb(bool examineAgain) { data.byte(kCommandtype) = 255; readMouse(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); examineAgain = false; } @@ -251,7 +251,7 @@ void DreamGenContext::inventory() { openInv(); readMouse(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); data.byte(kOpenedob) = 255; examineOb(false); @@ -600,7 +600,7 @@ void DreamGenContext::inToInv() { readMouse(); showPointer(); outOfInv(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -641,7 +641,7 @@ void DreamGenContext::outOfInv() { readMouse(); showPointer(); inToInv(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -834,7 +834,7 @@ void DreamGenContext::selectOpenOb() { underTextLine(); readMouse(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -885,7 +885,7 @@ void DreamGenContext::swapWithInv() { fillRyan(); readMouse(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -952,7 +952,7 @@ void DreamGenContext::useOpened() { readMouse(); useOpened(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -1010,7 +1010,7 @@ void DreamGenContext::outOfOpen() { readMouse(); useOpened(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); } @@ -1080,7 +1080,7 @@ void DreamGenContext::swapWithOpen() { readMouse(); useOpened(); showPointer(); - workToScreenCPP(); + workToScreen(); delPointer(); } -- cgit v1.2.3 From 7945a0fbb0ee3ec89d2b4e51d130f47b9717bfd3 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 02:50:02 +0200 Subject: DREAMWEB: Cleaned up findFirstPath(), fixed a regression and moved it to DreamBase --- engines/dreamweb/object.cpp | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 84829bf440..8e202a0ed0 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -341,32 +341,6 @@ void DreamGenContext::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -uint8 DreamGenContext::findFirstPath(uint16 param) { - es = data.word(kReels); - uint16 ptr = 144 * data.byte(kRoomnum); - // TODO: Replace ax, cx usage with temporary uint8/16 variables... - cx = param; - - for (uint8 pathLoop = 0; pathLoop < 12; pathLoop++, ptr += 8) { - ax = es.word(ptr+2); - - if (ax == 0x0ffff) - continue; // "nofirst" - - if (cl < al || ch < ah) - continue; // "nofirst" - - ax = es.word(ptr+4); - - if (cl > al || ch > ah) - continue; // "nofirst" - - return es.byte(ptr+6); // "gotfirst" - } - - return 0; -} - void DreamGenContext::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); @@ -388,7 +362,7 @@ void DreamGenContext::identifyOb() { data.byte(kPointerspath) = dl; ax = pop(); push(ax); - data.byte(kPointerfirstpath) = findFirstPath(ax); + data.byte(kPointerfirstpath) = findFirstPath(al, ah); ax = pop(); byte x = al; -- cgit v1.2.3 From 389afc46660918409d69458bfbb096a6ba128f63 Mon Sep 17 00:00:00 2001 From: D G Turner Date: Mon, 26 Dec 2011 05:02:51 +0000 Subject: DREAMWEB: Port 'findpathofpoint' to C++ --- engines/dreamweb/object.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 7864b2aa25..9d5ea15fa3 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -354,8 +354,7 @@ void DreamGenContext::identifyOb() { data.byte(kInmaparea) = 1; ah = bl; push(ax); - findPathOfPoint(); - data.byte(kPointerspath) = dl; + data.byte(kPointerspath) = findPathOfPoint(al, ah); ax = pop(); push(ax); data.byte(kPointerfirstpath) = findFirstPath(al, ah); -- cgit v1.2.3 From 1b11f48a35b299633ad336fa6d9dcb723d16a92f Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 13:18:09 +0200 Subject: DREAMWEB: Cleanup identifyOb() --- engines/dreamweb/object.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9d5ea15fa3..10138acb78 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -343,25 +343,20 @@ void DreamGenContext::identifyOb() { return; } - ax = data.word(kMousex) - data.word(kMapadx); - bx = data.word(kMousey) - data.word(kMapady); + uint16 initialX = data.word(kMousex) - data.word(kMapadx); + uint16 initialY = data.word(kMousey) - data.word(kMapady); - if (ax >= 22 * 8 || bx >= 20 * 8) { + if (initialX >= 22 * 8 || initialY >= 20 * 8) { blank(); return; } + byte x = initialX & 0xFF; + byte y = initialY & 0xFF; + data.byte(kInmaparea) = 1; - ah = bl; - push(ax); - data.byte(kPointerspath) = findPathOfPoint(al, ah); - ax = pop(); - push(ax); - data.byte(kPointerfirstpath) = findFirstPath(al, ah); - ax = pop(); - - byte x = al; - byte y = ah; + data.byte(kPointerspath) = findPathOfPoint(x, y); + data.byte(kPointerfirstpath) = findFirstPath(x, y); if (checkIfEx(x, y) || checkIfFree(x, y) || checkIfPerson(x, y) || checkIfSet(x, y)) -- cgit v1.2.3 From 63ba3988fff08911d2fecbf4808f5514e2fd420f Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 16:10:28 +0200 Subject: DREAMWEB: Port 'transfertoex' to C++ --- engines/dreamweb/object.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 10138acb78..daa45e67eb 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -446,8 +446,7 @@ void DreamGenContext::setPickup() { if (data.byte(kObjecttype) != kExObjectType) { data.byte(kItemframe) = data.byte(kCommand); data.byte(kOpenedob) = 255; - transferToEx(); - data.byte(kItemframe) = al; + data.byte(kItemframe) = transferToEx(); data.byte(kObjecttype) = kExObjectType; DynObject *object = getExAd(data.byte(kItemframe)); object->mapad[0] = 20; @@ -964,8 +963,7 @@ void DreamGenContext::outOfOpen() { data.byte(kItemframe) = objectId & 0xFF; if (data.byte(kObjecttype) != 4) { - transferToEx(); - data.byte(kItemframe) = al; + data.byte(kItemframe) = transferToEx(); data.byte(kObjecttype) = 4; } @@ -1021,8 +1019,7 @@ void DreamGenContext::swapWithOpen() { data.byte(kItemframe) = objectId & 0xFF; if (data.byte(kObjecttype) != 4) { - transferToEx(); - data.byte(kItemframe) = al; + data.byte(kItemframe) = transferToEx(); data.byte(kObjecttype) = 4; } @@ -1059,4 +1056,29 @@ uint16 DreamBase::findOpenPos() { return pos * 2 + kOpeninvlist; // return the object position in the inventory data } +byte DreamGenContext::transferToEx() { + emergencyPurge(); + getExPos(); + byte pos = data.byte(kExpos); + DynObject *exObject = getExAd(pos); + DynObject *freeObject = getFreeAd(data.byte(kItemframe)); + memcpy(exObject, freeObject, sizeof(DynObject)); + exObject->currentLocation = data.byte(kReallocation); + exObject->initialLocation = data.byte(kReallocation); + exObject->index = data.byte(kItemframe); + exObject->mapad[0] = 4; + exObject->mapad[1] = 255; + exObject->mapad[2] = data.byte(kLastinvpos); + data.byte(kItemtotran) = data.byte(kItemframe); + transferMap(); + transferInv(); + transferText(); + freeObject = getFreeAd(data.byte(kItemframe)); + freeObject->mapad[0] = 254; + ds = data.word(kFreedat); + si = data.byte(kItemframe); + pickupConts(); + return pos; +} + } // End of namespace DreamGen -- cgit v1.2.3 From 1fef9d1f75948b3d6f10c221ce8289b44b288a7d Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 15:23:15 +0100 Subject: DREAMWEB: Convert findAllOpen, fillOpen --- engines/dreamweb/object.cpp | 59 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 5 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index daa45e67eb..c8127c345e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -277,7 +277,8 @@ void DreamBase::getBackFromOb() { } void DreamGenContext::getOpenedSize() { - //ax = getOpenedSlotCount(); + //ah = getOpenedSlotSize(); + //ah = getOpenedSlotCount(); // We need to call the ASM-style versions of get*Ad, as these also set // bx and es @@ -300,7 +301,7 @@ void DreamGenContext::getOpenedSize() { } } -byte DreamGenContext::getOpenedSlotCount() { +byte DreamBase::getOpenedSlotCount() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { case 4: @@ -312,7 +313,7 @@ byte DreamGenContext::getOpenedSlotCount() { } } -byte DreamGenContext::getOpenedSlotSize() { +byte DreamBase::getOpenedSlotSize() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { case 4: @@ -324,14 +325,14 @@ byte DreamGenContext::getOpenedSlotSize() { } } -void DreamGenContext::openOb() { +void DreamBase::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); + printDirect(commandLine, data.word(kLastxpos) + 5, kInventy+86, 220, false); fillOpen(); _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; @@ -1081,4 +1082,52 @@ byte DreamGenContext::transferToEx() { return pos; } +void DreamBase::fillOpen() { + delTextLine(); + uint8 size = getOpenedSlotCount(); + if (size > 4) + size = 4; + findAllOpen(); + uint8 *openInvList = getSegment(data.word(kBuffers)).ptr(kOpeninvlist, 32); + for (uint8 i = 0; i < size; ++i) { + uint8 index = openInvList[2*i]; + uint8 type = openInvList[2*i + 1]; + obToInv(index, type, kInventx + (i-1)*kItempicsize, kInventy + 96); + } + underTextLine(); +} + +void DreamBase::findAllOpen() { + uint8 *openInvList = getSegment(data.word(kBuffers)).ptr(kOpeninvlist, 32); + + memset(openInvList, 0xFF, 32); + + const DynObject *obj; + + obj = (const DynObject *)getSegment(data.word(kExtras)).ptr(kExdata, 0); + for (uint8 i = 0; i < kNumexobjects; ++i, ++obj) { + if (obj->mapad[1] != data.byte(kOpenedob)) + continue; + if (obj->mapad[0] != data.byte(kOpenedtype)) + continue; + if (data.byte(kOpenedtype) != kExObjectType && obj->mapad[3] != data.byte(kReallocation)) + continue; + uint8 slot = obj->mapad[2]; + assert(slot < 16); + openInvList[2*slot] = i; + openInvList[2*slot + 1] = kExObjectType; + } + + obj = (const DynObject *)getSegment(data.word(kFreedat)).ptr(0, 0); + for (uint8 i = 0; i < 80; ++i, ++obj) { + if (obj->mapad[1] != data.byte(kOpenedob)) + continue; + if (obj->mapad[0] != data.byte(kOpenedtype)) + continue; + uint8 index = obj->mapad[2]; + openInvList[2*index] = i; + openInvList[2*index + 1] = kFreeObjectType; + } +} + } // End of namespace DreamGen -- cgit v1.2.3 From 3b9b4cb6ba72a93359523a9b7c3c115db3d0aed2 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 16:52:31 +0200 Subject: DREAMWEB: Fix a regression in fillOpen() and remove the now unused getOpenedSize() --- engines/dreamweb/object.cpp | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index c8127c345e..a7a7814db3 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -276,31 +276,6 @@ void DreamBase::getBackFromOb() { blank(); } -void DreamGenContext::getOpenedSize() { - //ah = getOpenedSlotSize(); - //ah = getOpenedSlotCount(); - - // We need to call the ASM-style versions of get*Ad, as these also set - // bx and es - - al = data.byte(kOpenedob); - - switch (data.byte(kOpenedtype)) { - case 4: - getExAd(); - ax = es.word(bx+7); - break; - case 2: - getFreeAd(); - ax = es.word(bx+7); - break; - default: - getSetAd(); - ax = es.word(bx+3); - break; - } -} - byte DreamBase::getOpenedSlotCount() { byte obj = data.byte(kOpenedob); switch (data.byte(kOpenedtype)) { @@ -1092,7 +1067,7 @@ void DreamBase::fillOpen() { for (uint8 i = 0; i < size; ++i) { uint8 index = openInvList[2*i]; uint8 type = openInvList[2*i + 1]; - obToInv(index, type, kInventx + (i-1)*kItempicsize, kInventy + 96); + obToInv(index, type, kInventx + i * kItempicsize, kInventy + 96); } underTextLine(); } -- cgit v1.2.3 From c60ce59aa443471f22f9254dd6bc3810324cd672 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 17:26:35 +0100 Subject: DREAMWEB: Fix regression in transferToEx --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a7a7814db3..b246323e9d 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -1052,7 +1052,7 @@ byte DreamGenContext::transferToEx() { freeObject = getFreeAd(data.byte(kItemframe)); freeObject->mapad[0] = 254; ds = data.word(kFreedat); - si = data.byte(kItemframe); + si = data.byte(kItemframe) * sizeof(DynObject); pickupConts(); return pos; } -- cgit v1.2.3 From c86a830c4a299b45549ee3a6f242995790013853 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 16:57:27 +0100 Subject: DREAMWEB: Move openInvList, ryanInvList out of buffers --- engines/dreamweb/object.cpp | 221 +++++++++++++++++++++----------------------- 1 file changed, 106 insertions(+), 115 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index b246323e9d..2ca7305493 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -29,30 +29,28 @@ void DreamBase::showRyanPage() { showFrame(engine->icons1(), kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); } -void DreamBase::findAllRyan(uint8 *inv) { - memset(inv, 0xff, 60); +void DreamBase::findAllRyan() { + memset(_ryanInvList, 0xff, 60); for (size_t i = 0; i < kNumexobjects; ++i) { - DynObject *extra = getExAd(i); - if (extra->mapad[0] != 4) + const DynObject *extra = getExAd(i); + if (extra->mapad[0] != kExObjectType) continue; if (extra->mapad[1] != 0xff) continue; uint8 slot = extra->mapad[2]; assert(slot < 30); - inv[2 * slot + 0] = i; - inv[2 * slot + 1] = 4; + _ryanInvList[slot]._index = i; + _ryanInvList[slot]._type = kExObjectType; } } void DreamBase::fillRyan() { - uint8 *inv = getSegment(data.word(kBuffers)).ptr(kRyaninvlist, 60); - findAllRyan(inv); - inv += data.byte(kRyanpage) * 2 * 10; + ObjectRef *inv = &_ryanInvList[data.byte(kRyanpage) * 10]; + findAllRyan(); for (size_t i = 0; i < 2; ++i) { for (size_t j = 0; j < 5; ++j) { - uint8 objIndex = *inv++; - uint8 objType = *inv++; - obToInv(objIndex, objType, kInventx + j * kItempicsize, kInventy + i * kItempicsize); + obToInv(inv->_index, inv->_type, kInventx + j * kItempicsize, kInventy + i * kItempicsize); + ++inv; } } showRyanPage(); @@ -350,35 +348,30 @@ void DreamGenContext::identifyOb() { blank(); } -uint16 DreamGenContext::findInvPosCPP() { +ObjectRef DreamBase::findInvPos() { uint16 x = data.word(kMousex) - kInventx; uint16 y = data.word(kMousey) - kInventy; - uint16 pos = (x / kItempicsize) + (y / kItempicsize) * 5; - uint16 invPos = data.byte(kRyanpage) * 10 + pos; - data.byte(kLastinvpos) = invPos & 0xFF; - return invPos * 2 + kRyaninvlist; -} - -void DreamGenContext::findInvPos() { - bx = findInvPosCPP(); - es = data.word(kBuffers); + uint8 pos = (x / kItempicsize) + (y / kItempicsize) * 5; + uint8 invPos = data.byte(kRyanpage) * 10 + pos; + data.byte(kLastinvpos) = invPos; + return _ryanInvList[invPos]; } void DreamGenContext::selectOb() { - uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - if ((objectId & 0xFF) == 255) { + ObjectRef objectId = findInvPos(); + if (objectId._index == 255) { blank(); return; } - data.byte(kWithobject) = objectId & 0x00FF; - data.byte(kWithtype) = objectId >> 8; + data.byte(kWithobject) = objectId._index; + data.byte(kWithtype) = objectId._type; - if (objectId != data.word(kOldsubject) || data.byte(kCommandtype) != 221) { - if (objectId == data.word(kOldsubject)) + if (objectId != _oldSubject || data.byte(kCommandtype) != 221) { + if (objectId == _oldSubject) data.byte(kCommandtype) = 221; - data.word(kOldsubject) = objectId; - commandWithOb(0, data.byte(kWithtype), data.byte(kWithobject)); + _oldSubject = objectId; + commandWithOb(0, objectId._type, objectId._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -514,20 +507,21 @@ void DreamGenContext::inToInv() { return; } - uint16 subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + ObjectRef subject = findInvPos(); - if ((subject & 0xFF) != 255) { + if (subject._index != 255) { swapWithInv(); return; } - subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); + subject._type = data.byte(kObjecttype); + subject._index = data.byte(kItemframe); - if (subject != data.word(kOldsubject) || data.byte(kCommandtype) != 220) { - if (subject == data.word(kOldsubject)) + if (subject != _oldSubject || data.byte(kCommandtype) != 220) { + if (subject == _oldSubject) data.byte(kCommandtype) = 220; - data.word(kOldsubject) = subject; - commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = subject; + commandWithOb(35, subject._type, subject._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -548,9 +542,9 @@ void DreamGenContext::inToInv() { } void DreamGenContext::outOfInv() { - uint16 subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); + ObjectRef subject = findInvPos(); - if ((subject & 0xFF) == 255) { + if (subject._index == 255) { blank(); return; } @@ -560,13 +554,11 @@ void DreamGenContext::outOfInv() { return; } - if (subject != data.word(kOldsubject) || data.byte(kCommandtype) != 221) { - if (subject == data.word(kOldsubject)) + if (subject != _oldSubject || data.byte(kCommandtype) != 221) { + if (subject == _oldSubject) data.byte(kCommandtype) = 221; - data.word(kOldsubject) = subject; - byte type = subject >> 8; - byte frame = subject & 0xFF; - commandWithOb(36, type, frame); + _oldSubject = subject; + commandWithOb(36, subject._type, subject._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -574,10 +566,11 @@ void DreamGenContext::outOfInv() { delPointer(); data.byte(kPickup) = 1; - subject = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - data.byte(kObjecttype) = subject >> 8; - data.byte(kItemframe) = subject & 0xFF; - DynObject *object = getExAd(data.byte(kItemframe)); + subject = findInvPos(); + data.byte(kObjecttype) = subject._type; + data.byte(kItemframe) = subject._index; + assert(subject._type == kExObjectType); + DynObject *object = getExAd(subject._index); object->mapad[0] = 20; object->mapad[1] = 255; fillRyan(); @@ -782,24 +775,26 @@ void DreamGenContext::selectOpenOb() { } void DreamGenContext::reExFromInv() { - uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - data.byte(kCommandtype) = objectId >> 8; - data.byte(kCommand) = objectId & 0x00FF; + ObjectRef objectId = findInvPos(); + data.byte(kCommandtype) = objectId._type; + data.byte(kCommand) = objectId._index; data.byte(kExamagain) = 1; data.byte(kPointermode) = 0; } void DreamGenContext::swapWithInv() { - uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (subject == data.word(kOldsubject)) { + ObjectRef subject; + subject._type = data.byte(kObjecttype); + subject._index = data.byte(kItemframe); + if (subject == _oldSubject) { if (data.byte(kCommandtype) != 243) { data.byte(kCommandtype) = 243; - data.word(kOldsubject) = subject; - commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = subject; + commandWithOb(34, subject._type, subject._index); } } else { - data.word(kOldsubject) = subject; - commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = subject; + commandWithOb(34, subject._type, subject._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -807,9 +802,9 @@ void DreamGenContext::swapWithInv() { byte prevType = data.byte(kObjecttype); byte prevFrame = data.byte(kItemframe); - uint16 objectId = getSegment(data.word(kBuffers)).word(findInvPosCPP()); - data.byte(kItemframe) = objectId & 0x00FF; - data.byte(kObjecttype) = objectId >> 8; + ObjectRef objectId = findInvPos(); + data.byte(kItemframe) = objectId._index; + data.byte(kObjecttype) = objectId._type; DynObject *object = getEitherAdCPP(); object->mapad[0] = 20; object->mapad[1] = 255; @@ -817,7 +812,6 @@ void DreamGenContext::swapWithInv() { byte prevFrame2 = data.byte(kItemframe); data.byte(kObjecttype) = prevType; data.byte(kItemframe) = prevFrame; - //findInvPosCPP(); // found in the original source, but it seems to be useless delPointer(); object = getEitherAdCPP(); object->mapad[0] = 4; @@ -841,9 +835,9 @@ void DreamGenContext::useOpened() { return; } - uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); + ObjectRef objectId = findOpenPos(); - if ((objectId & 0x00FF) != 255) { + if (objectId._index != 255) { swapWithOpen(); return; } @@ -853,16 +847,17 @@ void DreamGenContext::useOpened() { return; } - objectId = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (objectId == data.word(kOldsubject)) { + objectId._type = data.byte(kObjecttype); + objectId._index = data.byte(kItemframe); + if (objectId == _oldSubject) { if (data.byte(kCommandtype) != 227) { data.byte(kCommandtype) = 227; - data.word(kOldsubject) = objectId; - commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = objectId; + commandWithOb(35, objectId._type, objectId._index); } } else { - data.word(kOldsubject) = objectId; - commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = objectId; + commandWithOb(35, objectId._type, objectId._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -903,22 +898,22 @@ void DreamGenContext::outOfOpen() { if (data.byte(kOpenedob) == 255) return; // cannot use opened object - uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); + ObjectRef objectId = findOpenPos(); - if ((objectId & 0x00FF) == 255) { + if (objectId._index == 255) { blank(); return; } - if (objectId == data.word(kOldsubject)) { + if (objectId == _oldSubject) { if (data.byte(kCommandtype) != 228) { data.byte(kCommandtype) = 228; - data.word(kOldsubject) = objectId; - commandWithOb(36, objectId >> 8, objectId & 0x00FF); + _oldSubject = objectId; + commandWithOb(36, objectId._type, objectId._index); } } else { - data.word(kOldsubject) = objectId; - commandWithOb(36, objectId >> 8, objectId & 0x00FF); + _oldSubject = objectId; + commandWithOb(36, objectId._type, objectId._index); } if (data.word(kMousebutton) == data.word(kOldbutton)) @@ -934,13 +929,13 @@ void DreamGenContext::outOfOpen() { delPointer(); data.byte(kPickup) = 1; - objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); - data.byte(kObjecttype) = objectId >> 8; - data.byte(kItemframe) = objectId & 0xFF; + objectId = findOpenPos(); + data.byte(kObjecttype) = objectId._type; + data.byte(kItemframe) = objectId._index; - if (data.byte(kObjecttype) != 4) { + if (data.byte(kObjecttype) != kExObjectType) { data.byte(kItemframe) = transferToEx(); - data.byte(kObjecttype) = 4; + data.byte(kObjecttype) = kExObjectType; } DynObject *object = getEitherAdCPP(); @@ -957,16 +952,18 @@ void DreamGenContext::outOfOpen() { } void DreamGenContext::swapWithOpen() { - uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe); - if (subject == data.word(kOldsubject)) { + ObjectRef subject; + subject._type = data.byte(kObjecttype); + subject._index = data.byte(kItemframe); + if (subject == _oldSubject) { if (data.byte(kCommandtype) != 242) { data.byte(kCommandtype) = 242; - data.word(kOldsubject) = subject; - commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = subject; + commandWithOb(34, subject._type, subject._index); } } else { - data.word(kOldsubject) = subject; - commandWithOb(34, data.byte(kObjecttype), data.byte(kItemframe)); + _oldSubject = subject; + commandWithOb(34, subject._type, subject._index); } if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) @@ -990,13 +987,13 @@ void DreamGenContext::swapWithOpen() { byte prevType = data.byte(kObjecttype); byte prevFrame = data.byte(kItemframe); - uint16 objectId = getSegment(data.word(kBuffers)).word(findOpenPos()); - data.byte(kObjecttype) = objectId >> 8; - data.byte(kItemframe) = objectId & 0xFF; + ObjectRef objectId = findOpenPos(); + data.byte(kObjecttype) = objectId._type; + data.byte(kItemframe) = objectId._index; - if (data.byte(kObjecttype) != 4) { + if (data.byte(kObjecttype) != kExObjectType) { data.byte(kItemframe) = transferToEx(); - data.byte(kObjecttype) = 4; + data.byte(kObjecttype) = kExObjectType; } DynObject *object = getEitherAdCPP(); @@ -1007,7 +1004,6 @@ void DreamGenContext::swapWithOpen() { byte prevFrame2 = data.byte(kItemframe); data.byte(kObjecttype) = prevType; data.byte(kItemframe) = prevFrame; - //findOpenPos(); // was in the original source, looks to be unused object = getEitherAdCPP(); object->mapad[0] = data.byte(kOpenedtype); object->mapad[1] = data.byte(kOpenedob); @@ -1025,11 +1021,11 @@ void DreamGenContext::swapWithOpen() { delPointer(); } -uint16 DreamBase::findOpenPos() { - uint16 pos = (data.word(kMousex) - kInventx) / kItempicsize; - data.byte(kLastinvpos) = pos & 0xFF; +ObjectRef DreamBase::findOpenPos() { + uint8 pos = (data.word(kMousex) - kInventx) / kItempicsize; + data.byte(kLastinvpos) = pos; - return pos * 2 + kOpeninvlist; // return the object position in the inventory data + return _openInvList[pos]; } byte DreamGenContext::transferToEx() { @@ -1063,24 +1059,19 @@ void DreamBase::fillOpen() { if (size > 4) size = 4; findAllOpen(); - uint8 *openInvList = getSegment(data.word(kBuffers)).ptr(kOpeninvlist, 32); for (uint8 i = 0; i < size; ++i) { - uint8 index = openInvList[2*i]; - uint8 type = openInvList[2*i + 1]; + uint8 index = _openInvList[i]._index; + uint8 type = _openInvList[i]._type; obToInv(index, type, kInventx + i * kItempicsize, kInventy + 96); } underTextLine(); } void DreamBase::findAllOpen() { - uint8 *openInvList = getSegment(data.word(kBuffers)).ptr(kOpeninvlist, 32); - - memset(openInvList, 0xFF, 32); - - const DynObject *obj; + memset(_openInvList, 0xFF, 32); - obj = (const DynObject *)getSegment(data.word(kExtras)).ptr(kExdata, 0); - for (uint8 i = 0; i < kNumexobjects; ++i, ++obj) { + for (uint8 i = 0; i < kNumexobjects; ++i) { + const DynObject *obj = getExAd(i); if (obj->mapad[1] != data.byte(kOpenedob)) continue; if (obj->mapad[0] != data.byte(kOpenedtype)) @@ -1089,19 +1080,19 @@ void DreamBase::findAllOpen() { continue; uint8 slot = obj->mapad[2]; assert(slot < 16); - openInvList[2*slot] = i; - openInvList[2*slot + 1] = kExObjectType; + _openInvList[slot]._index = i; + _openInvList[slot]._type = kExObjectType; } - obj = (const DynObject *)getSegment(data.word(kFreedat)).ptr(0, 0); - for (uint8 i = 0; i < 80; ++i, ++obj) { + for (uint8 i = 0; i < 80; ++i) { + const DynObject *obj = getFreeAd(i); if (obj->mapad[1] != data.byte(kOpenedob)) continue; if (obj->mapad[0] != data.byte(kOpenedtype)) continue; - uint8 index = obj->mapad[2]; - openInvList[2*index] = i; - openInvList[2*index + 1] = kFreeObjectType; + uint8 slot = obj->mapad[2]; + _openInvList[slot]._index = i; + _openInvList[slot]._type = kFreeObjectType; } } -- cgit v1.2.3 From 12370047567e5b1404aafe4c0f37d44bdba8c0b0 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 17:53:04 +0100 Subject: DREAMWEB: Minor cleanup --- engines/dreamweb/object.cpp | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 2ca7305493..5d0fbab7ee 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -786,13 +786,9 @@ void DreamGenContext::swapWithInv() { ObjectRef subject; subject._type = data.byte(kObjecttype); subject._index = data.byte(kItemframe); - if (subject == _oldSubject) { - if (data.byte(kCommandtype) != 243) { + if (subject != _oldSubject || data.byte(kCommandtype) != 243) { + if (subject == _oldSubject) data.byte(kCommandtype) = 243; - _oldSubject = subject; - commandWithOb(34, subject._type, subject._index); - } - } else { _oldSubject = subject; commandWithOb(34, subject._type, subject._index); } @@ -849,13 +845,9 @@ void DreamGenContext::useOpened() { objectId._type = data.byte(kObjecttype); objectId._index = data.byte(kItemframe); - if (objectId == _oldSubject) { - if (data.byte(kCommandtype) != 227) { + if (objectId != _oldSubject || data.byte(kCommandtype) != 227) { + if (objectId == _oldSubject) data.byte(kCommandtype) = 227; - _oldSubject = objectId; - commandWithOb(35, objectId._type, objectId._index); - } - } else { _oldSubject = objectId; commandWithOb(35, objectId._type, objectId._index); } @@ -905,13 +897,9 @@ void DreamGenContext::outOfOpen() { return; } - if (objectId == _oldSubject) { - if (data.byte(kCommandtype) != 228) { + if (objectId != _oldSubject || data.byte(kCommandtype) != 228) { + if (objectId == _oldSubject) data.byte(kCommandtype) = 228; - _oldSubject = objectId; - commandWithOb(36, objectId._type, objectId._index); - } - } else { _oldSubject = objectId; commandWithOb(36, objectId._type, objectId._index); } @@ -920,10 +908,8 @@ void DreamGenContext::outOfOpen() { return; // notletgo4 if (data.word(kMousebutton) != 1) { - if (data.word(kMousebutton) != 2) - return; // notletgo4 - - reExFromOpen(); + if (data.word(kMousebutton) == 2) + reExFromOpen(); return; } @@ -955,13 +941,9 @@ void DreamGenContext::swapWithOpen() { ObjectRef subject; subject._type = data.byte(kObjecttype); subject._index = data.byte(kItemframe); - if (subject == _oldSubject) { - if (data.byte(kCommandtype) != 242) { + if (subject != _oldSubject || data.byte(kCommandtype) != 242) { + if (subject == _oldSubject) data.byte(kCommandtype) = 242; - _oldSubject = subject; - commandWithOb(34, subject._type, subject._index); - } - } else { _oldSubject = subject; commandWithOb(34, subject._type, subject._index); } -- cgit v1.2.3 From c2a94132c8adf8bec5914ca6fa2e312248e1c2bd Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 18:42:28 +0100 Subject: DREAMWEB: Convert pickupConts --- engines/dreamweb/object.cpp | 50 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 5d0fbab7ee..9799ca4726 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -712,7 +712,7 @@ void DreamBase::dropObject() { object->currentLocation = data.byte(kReallocation); } -bool DreamGenContext::checkObjectSizeCPP() { +bool DreamGenContext::checkObjectSize() { byte containerSize = getOpenedSlotSize(); DynObject *object = getEitherAdCPP(); // If there is no size defined for the object in the editor, set its size @@ -774,7 +774,7 @@ void DreamGenContext::selectOpenOb() { delPointer(); } -void DreamGenContext::reExFromInv() { +void DreamBase::reExFromInv() { ObjectRef objectId = findInvPos(); data.byte(kCommandtype) = objectId._type; data.byte(kCommand) = objectId._index; @@ -782,7 +782,7 @@ void DreamGenContext::reExFromInv() { data.byte(kPointermode) = 0; } -void DreamGenContext::swapWithInv() { +void DreamBase::swapWithInv() { ObjectRef subject; subject._type = data.byte(kObjecttype); subject._index = data.byte(kItemframe); @@ -868,7 +868,7 @@ void DreamGenContext::useOpened() { return; } - if (!checkObjectSizeCPP()) + if (!checkObjectSize()) return; data.byte(kPickup) = 0; @@ -964,7 +964,7 @@ void DreamGenContext::swapWithOpen() { return; } - if (!checkObjectSizeCPP()) + if (!checkObjectSize()) return; byte prevType = data.byte(kObjecttype); @@ -1012,9 +1012,8 @@ ObjectRef DreamBase::findOpenPos() { byte DreamGenContext::transferToEx() { emergencyPurge(); - getExPos(); + DynObject *exObject = getExPos(); // Also sets es:di byte pos = data.byte(kExpos); - DynObject *exObject = getExAd(pos); DynObject *freeObject = getFreeAd(data.byte(kItemframe)); memcpy(exObject, freeObject, sizeof(DynObject)); exObject->currentLocation = data.byte(kReallocation); @@ -1029,8 +1028,6 @@ byte DreamGenContext::transferToEx() { transferText(); freeObject = getFreeAd(data.byte(kItemframe)); freeObject->mapad[0] = 254; - ds = data.word(kFreedat); - si = data.byte(kItemframe) * sizeof(DynObject); pickupConts(); return pos; } @@ -1078,4 +1075,39 @@ void DreamBase::findAllOpen() { } } +void DreamGenContext::pickupConts() { + assert(data.byte(kObjecttype) == kFreeObjectType); + const DynObject *obj = getFreeAd(data.byte(kItemframe)); + + if (obj->slotCount == 255) + return; // not openable + + uint8 expos = data.byte(kExpos); + + for (uint16 index = 0; index < 80; ++index) { + DynObject *freeObj = getFreeAd(index); + + if (freeObj->mapad[0] != data.byte(kObjecttype)) + continue; + if (freeObj->mapad[1] != data.byte(kItemframe)) + continue; + data.byte(kItemtotran) = index; + + DynObject *exObj = getExPos(); // Also sets es:di to exObj + + memcpy(exObj, freeObj, sizeof(DynObject)); + exObj->currentLocation = data.byte(kReallocation); + exObj->initialLocation = data.byte(kReallocation); + exObj->index = index; + exObj->mapad[0] = 4; // kExObjectType? + exObj->mapad[1] = expos; + + transferMap(); + transferInv(); + transferText(); + + freeObj->mapad[0] = 0xFF; + } +} + } // End of namespace DreamGen -- cgit v1.2.3 From 6f85de6b6e9b2af820d0294db16881d41368d693 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 19:35:47 +0100 Subject: DREAMWEB: Combine transferMap and transferInv --- engines/dreamweb/object.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 9799ca4726..0f0599b7f6 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -255,10 +255,11 @@ void DreamGenContext::inventory() { examineOb(false); } -void DreamGenContext::transferText() { - getSegment(data.word(kExtras)).word(kExtextdat + data.byte(kExpos) * 2) = data.word(kExtextpos); - uint16 freeTextOffset = data.byte(kItemtotran) * 2; +void DreamBase::transferText(uint8 from, uint8 to) { + getSegment(data.word(kExtras)).word(kExtextdat + 2*to) = data.word(kExtextpos); + uint16 freeTextOffset = 2*from; uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); + const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); char *dst = (char *)getSegment(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); @@ -1012,23 +1013,29 @@ ObjectRef DreamBase::findOpenPos() { byte DreamGenContext::transferToEx() { emergencyPurge(); + DynObject *exObject = getExPos(); // Also sets es:di byte pos = data.byte(kExpos); + DynObject *freeObject = getFreeAd(data.byte(kItemframe)); + memcpy(exObject, freeObject, sizeof(DynObject)); + exObject->currentLocation = data.byte(kReallocation); exObject->initialLocation = data.byte(kReallocation); exObject->index = data.byte(kItemframe); exObject->mapad[0] = 4; exObject->mapad[1] = 255; exObject->mapad[2] = data.byte(kLastinvpos); - data.byte(kItemtotran) = data.byte(kItemframe); - transferMap(); - transferInv(); - transferText(); - freeObject = getFreeAd(data.byte(kItemframe)); + + transferFrame(data.byte(kItemframe), pos, 0); + transferFrame(data.byte(kItemframe), pos, 1); + transferText(data.byte(kItemframe), pos); + freeObject->mapad[0] = 254; + pickupConts(); + return pos; } @@ -1084,14 +1091,13 @@ void DreamGenContext::pickupConts() { uint8 expos = data.byte(kExpos); - for (uint16 index = 0; index < 80; ++index) { + for (uint8 index = 0; index < 80; ++index) { DynObject *freeObj = getFreeAd(index); if (freeObj->mapad[0] != data.byte(kObjecttype)) continue; if (freeObj->mapad[1] != data.byte(kItemframe)) continue; - data.byte(kItemtotran) = index; DynObject *exObj = getExPos(); // Also sets es:di to exObj @@ -1102,9 +1108,9 @@ void DreamGenContext::pickupConts() { exObj->mapad[0] = 4; // kExObjectType? exObj->mapad[1] = expos; - transferMap(); - transferInv(); - transferText(); + transferFrame(index, data.byte(kExpos), 0); + transferFrame(index, data.byte(kExpos), 1); + transferText(index, data.byte(kExpos)); freeObj->mapad[0] = 0xFF; } -- cgit v1.2.3 From cb3eee86358e73251081d0d285ac2303db5aa775 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Mon, 26 Dec 2011 19:48:47 +0100 Subject: DREAMWEB: Reduce dependency on globals and move functions to DreamBase --- engines/dreamweb/object.cpp | 82 ++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 41 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 0f0599b7f6..4fa21e7618 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -163,8 +163,8 @@ void DreamGenContext::examineOb(bool examineAgain) { RectWithCallback examList[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, { 260,300,0,44,&DreamGenContext::useObject }, - { 210,254,0,44,&DreamGenContext::selectOpenOb }, - { 144,176,64,96,&DreamGenContext::setPickup }, + { 210,254,0,44,&DreamBase::selectOpenOb }, + { 144,176,64,96,&DreamBase::setPickup }, { 0,50,50,200,&DreamBase::examineInventory }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } @@ -174,12 +174,12 @@ void DreamGenContext::examineOb(bool examineAgain) { } case 1: { // Note: This table contains the non-constant _openChangeSize! - RectWithCallback invList1[] = { + RectWithCallback invList1[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, - { 255,294,0,24,&DreamGenContext::dropObject }, - { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, - { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamGenContext::useOpened }, - { kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamGenContext::inToInv }, + { 255,294,0,24,&DreamBase::dropObject }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage }, + { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamBase::useOpened }, + { kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamBase::inToInv }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } }; @@ -189,7 +189,7 @@ void DreamGenContext::examineOb(bool examineAgain) { default: { RectWithCallback withList1[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, - { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } @@ -383,7 +383,7 @@ void DreamGenContext::selectOb() { useRoutine(); } -void DreamGenContext::setPickup() { +void DreamBase::setPickup() { if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) { // Object types 1 and 3 are excluded, so the resulting object is a DynObject uint8 dummy; @@ -414,9 +414,9 @@ void DreamGenContext::setPickup() { data.byte(kInvopen) = 2; if (data.byte(kObjecttype) != kExObjectType) { - data.byte(kItemframe) = data.byte(kCommand); + assert(data.byte(kObjecttype) == kFreeObjectType); data.byte(kOpenedob) = 255; - data.byte(kItemframe) = transferToEx(); + data.byte(kItemframe) = transferToEx(data.byte(kCommand)); data.byte(kObjecttype) = kExObjectType; DynObject *object = getExAd(data.byte(kItemframe)); object->mapad[0] = 20; @@ -502,7 +502,7 @@ void DreamBase::removeObFromInv() { deleteExObject(data.byte(kCommand)); } -void DreamGenContext::inToInv() { +void DreamBase::inToInv() { if (!data.byte(kPickup)) { outOfInv(); return; @@ -542,7 +542,7 @@ void DreamGenContext::inToInv() { delPointer(); } -void DreamGenContext::outOfInv() { +void DreamBase::outOfInv() { ObjectRef subject = findInvPos(); if (subject._index == 255) { @@ -713,7 +713,7 @@ void DreamBase::dropObject() { object->currentLocation = data.byte(kReallocation); } -bool DreamGenContext::checkObjectSize() { +bool DreamBase::checkObjectSize() { byte containerSize = getOpenedSlotSize(); DynObject *object = getEitherAdCPP(); // If there is no size defined for the object in the editor, set its size @@ -742,7 +742,7 @@ bool DreamGenContext::checkObjectSize() { return false; } -void DreamGenContext::selectOpenOb() { +void DreamBase::selectOpenOb() { uint8 slotSize, slotCount; getAnyAd(&slotSize, &slotCount); if (slotCount == 255) { @@ -823,7 +823,7 @@ void DreamBase::swapWithInv() { delPointer(); } -void DreamGenContext::useOpened() { +void DreamBase::useOpened() { if (data.byte(kOpenedob) == 255) return; // cannot use opened object @@ -887,7 +887,7 @@ void DreamGenContext::useOpened() { delPointer(); } -void DreamGenContext::outOfOpen() { +void DreamBase::outOfOpen() { if (data.byte(kOpenedob) == 255) return; // cannot use opened object @@ -921,7 +921,8 @@ void DreamGenContext::outOfOpen() { data.byte(kItemframe) = objectId._index; if (data.byte(kObjecttype) != kExObjectType) { - data.byte(kItemframe) = transferToEx(); + assert(objectId._type == kFreeObjectType); + data.byte(kItemframe) = transferToEx(objectId._index); data.byte(kObjecttype) = kExObjectType; } @@ -938,7 +939,7 @@ void DreamGenContext::outOfOpen() { delPointer(); } -void DreamGenContext::swapWithOpen() { +void DreamBase::swapWithOpen() { ObjectRef subject; subject._type = data.byte(kObjecttype); subject._index = data.byte(kItemframe); @@ -975,7 +976,8 @@ void DreamGenContext::swapWithOpen() { data.byte(kItemframe) = objectId._index; if (data.byte(kObjecttype) != kExObjectType) { - data.byte(kItemframe) = transferToEx(); + assert(objectId._type == kFreeObjectType); + data.byte(kItemframe) = transferToEx(objectId._index); data.byte(kObjecttype) = kExObjectType; } @@ -1011,30 +1013,30 @@ ObjectRef DreamBase::findOpenPos() { return _openInvList[pos]; } -byte DreamGenContext::transferToEx() { +byte DreamBase::transferToEx(uint8 from) { emergencyPurge(); - DynObject *exObject = getExPos(); // Also sets es:di - byte pos = data.byte(kExpos); + byte pos = getExPos(); + DynObject *exObject = getExAd(pos); - DynObject *freeObject = getFreeAd(data.byte(kItemframe)); + DynObject *freeObject = getFreeAd(from); memcpy(exObject, freeObject, sizeof(DynObject)); exObject->currentLocation = data.byte(kReallocation); exObject->initialLocation = data.byte(kReallocation); - exObject->index = data.byte(kItemframe); + exObject->index = from; exObject->mapad[0] = 4; exObject->mapad[1] = 255; exObject->mapad[2] = data.byte(kLastinvpos); - transferFrame(data.byte(kItemframe), pos, 0); - transferFrame(data.byte(kItemframe), pos, 1); - transferText(data.byte(kItemframe), pos); + transferFrame(from, pos, 0); + transferFrame(from, pos, 1); + transferText(from, pos); freeObject->mapad[0] = 254; - pickupConts(); + pickupConts(from, pos); return pos; } @@ -1082,35 +1084,33 @@ void DreamBase::findAllOpen() { } } -void DreamGenContext::pickupConts() { - assert(data.byte(kObjecttype) == kFreeObjectType); - const DynObject *obj = getFreeAd(data.byte(kItemframe)); +void DreamBase::pickupConts(uint8 from, uint8 containerEx) { + const DynObject *obj = getFreeAd(from); if (obj->slotCount == 255) return; // not openable - uint8 expos = data.byte(kExpos); - for (uint8 index = 0; index < 80; ++index) { DynObject *freeObj = getFreeAd(index); - if (freeObj->mapad[0] != data.byte(kObjecttype)) + if (freeObj->mapad[0] != kFreeObjectType) continue; - if (freeObj->mapad[1] != data.byte(kItemframe)) + if (freeObj->mapad[1] != from) continue; - DynObject *exObj = getExPos(); // Also sets es:di to exObj + uint8 pos = getExPos(); + DynObject *exObj = getExAd(pos); memcpy(exObj, freeObj, sizeof(DynObject)); exObj->currentLocation = data.byte(kReallocation); exObj->initialLocation = data.byte(kReallocation); exObj->index = index; exObj->mapad[0] = 4; // kExObjectType? - exObj->mapad[1] = expos; + exObj->mapad[1] = containerEx; - transferFrame(index, data.byte(kExpos), 0); - transferFrame(index, data.byte(kExpos), 1); - transferText(index, data.byte(kExpos)); + transferFrame(index, pos, 0); + transferFrame(index, pos, 1); + transferText(index, pos); freeObj->mapad[0] = 0xFF; } -- cgit v1.2.3 From 4c66f74b58e9a2c191f22a37f485047dd19be131 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 22:09:47 +0200 Subject: DREAMWEB: Remove dead code and move most functions to DreamBase --- engines/dreamweb/object.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4fa21e7618..124a4f908d 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -78,10 +78,6 @@ void DreamBase::makeWorn(DynObject *object) { object->id[1] = 'E'-'A'; } -void DreamGenContext::obToInv() { - obToInv(al, ah, di, bx); -} - void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) @@ -120,7 +116,7 @@ void DreamBase::obIcons() { showFrame(engine->icons2(), 260, 1, 1, 0); } -void DreamGenContext::examineOb(bool examineAgain) { +void DreamBase::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; @@ -217,7 +213,7 @@ void DreamGenContext::examineOb(bool examineAgain) { data.byte(kOpenedob) = 255; } -void DreamGenContext::inventory() { +void DreamBase::inventory() { if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { blank(); return; @@ -312,7 +308,7 @@ void DreamBase::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -void DreamGenContext::identifyOb() { +void DreamBase::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); return; -- cgit v1.2.3 From 1ba4f0a1a8965ee141987693770d2bcd3b74c292 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 22:31:50 +0200 Subject: Revert "DREAMWEB: Remove dead code and move most functions to DreamBase" This reverts commit 4c66f74b58e9a2c191f22a37f485047dd19be131. These functions aren't ready to be moved yet till the remaining two are finished, and they're so crossreferenced that the safest thing to do is revert this commit and break it down to smaller chunks --- engines/dreamweb/object.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 124a4f908d..4fa21e7618 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -78,6 +78,10 @@ void DreamBase::makeWorn(DynObject *object) { object->id[1] = 'E'-'A'; } +void DreamGenContext::obToInv() { + obToInv(al, ah, di, bx); +} + void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) @@ -116,7 +120,7 @@ void DreamBase::obIcons() { showFrame(engine->icons2(), 260, 1, 1, 0); } -void DreamBase::examineOb(bool examineAgain) { +void DreamGenContext::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; @@ -213,7 +217,7 @@ void DreamBase::examineOb(bool examineAgain) { data.byte(kOpenedob) = 255; } -void DreamBase::inventory() { +void DreamGenContext::inventory() { if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { blank(); return; @@ -308,7 +312,7 @@ void DreamBase::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -void DreamBase::identifyOb() { +void DreamGenContext::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); return; -- cgit v1.2.3 From a75d39895b882a2bcc1b6469b1e75265bab2ac6c Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 26 Dec 2011 22:47:14 +0200 Subject: DREAMWEB: Move some functions to DreamBase, remove dead code --- engines/dreamweb/object.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4fa21e7618..31a5af0bb5 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -78,10 +78,6 @@ void DreamBase::makeWorn(DynObject *object) { object->id[1] = 'E'-'A'; } -void DreamGenContext::obToInv() { - obToInv(al, ah, di, bx); -} - void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) -- cgit v1.2.3 From 0be53a88d626b484b9db30f3d89534d5d237a073 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 27 Dec 2011 01:43:54 +0100 Subject: DREAMWEB: Move remaining use functions to DreamBase --- engines/dreamweb/object.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 31a5af0bb5..65f45bd499 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -116,7 +116,7 @@ void DreamBase::obIcons() { showFrame(engine->icons2(), 260, 1, 1, 0); } -void DreamGenContext::examineOb(bool examineAgain) { +void DreamBase::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; @@ -156,9 +156,9 @@ void DreamGenContext::examineOb(bool examineAgain) { switch (data.byte(kInvopen)) { case 0: { - RectWithCallback examList[] = { + RectWithCallback examList[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, - { 260,300,0,44,&DreamGenContext::useObject }, + { 260,300,0,44,&DreamBase::useObject }, { 210,254,0,44,&DreamBase::selectOpenOb }, { 144,176,64,96,&DreamBase::setPickup }, { 0,50,50,200,&DreamBase::examineInventory }, @@ -183,10 +183,10 @@ void DreamGenContext::examineOb(bool examineAgain) { break; } default: { - RectWithCallback withList1[] = { + RectWithCallback withList1[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage }, - { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, + { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamBase::selectOb }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } }; @@ -354,7 +354,7 @@ ObjectRef DreamBase::findInvPos() { return _ryanInvList[invPos]; } -void DreamGenContext::selectOb() { +void DreamBase::selectOb() { ObjectRef objectId = findInvPos(); if (objectId._index == 255) { blank(); -- cgit v1.2.3 From 3ff26ba84fd298886c6515407c61751984e05f68 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 27 Dec 2011 03:00:00 +0200 Subject: DREAMWEB: Move all of the functions to DreamBase and remove stubs.h --- engines/dreamweb/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 65f45bd499..8152394de0 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -213,7 +213,7 @@ void DreamBase::examineOb(bool examineAgain) { data.byte(kOpenedob) = 255; } -void DreamGenContext::inventory() { +void DreamBase::inventory() { if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { blank(); return; @@ -308,7 +308,7 @@ void DreamBase::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -void DreamGenContext::identifyOb() { +void DreamBase::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); return; -- cgit v1.2.3 From 5cfa1899bdea96a2e1dc505b4cfdbbe96ae13c02 Mon Sep 17 00:00:00 2001 From: D G Turner Date: Tue, 27 Dec 2011 03:08:43 +0000 Subject: DREAMWEB: Move kQuitRequested out of data blob. --- engines/dreamweb/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8152394de0..cb105c7798 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -195,7 +195,7 @@ void DreamBase::examineOb(bool examineAgain) { } } - if (data.byte(kQuitrequested) != 0) + if (_quitRequested) break; if (data.byte(kExamagain) != 0) examineAgain = true; -- cgit v1.2.3 From 90cb52b7f6364a0d4b83cdc91c76c7edf4fcf79d Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 27 Dec 2011 19:37:22 +0100 Subject: DREAMWEB: Streamline graphics file access --- engines/dreamweb/object.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index cb105c7798..4f9d091da6 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -25,8 +25,8 @@ namespace DreamGen { void DreamBase::showRyanPage() { - showFrame(engine->icons1(), kInventx + 167, kInventy - 12, 12, 0); - showFrame(engine->icons1(), kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); + showFrame(_icons1, kInventx + 167, kInventy - 12, 12, 0); + showFrame(_icons1, kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); } void DreamBase::findAllRyan() { @@ -79,30 +79,32 @@ void DreamBase::makeWorn(DynObject *object) { } void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { - showFrame(engine->icons1(), x - 2, y - 1, 10, 0); + showFrame(_icons1, x - 2, y - 1, 10, 0); if (index == 0xff) return; - Frame *extras = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); - Frame *frees = (Frame *)getSegment(data.word(kFreeframes)).ptr(0, 0); - Frame *frames = (flag == 4) ? extras : frees; - showFrame(frames, x + 18, y + 19, 3 * index + 1, 128); + if (flag == kExObjectType) { + Frame *extras = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); + showFrame(extras, x + 18, y + 19, 3 * index + 1, 128); + } else { + showFrame(_freeFrames, x + 18, y + 19, 3 * index + 1, 128); + } const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); bool worn = isItWorn(object); if (worn) - showFrame(engine->icons1(), x - 3, y - 2, 7, 0); + showFrame(_icons1, x - 3, y - 2, 7, 0); } void DreamBase::obPicture() { if (data.byte(kObjecttype) == kSetObjectType1) return; - Frame *frames; - if (data.byte(kObjecttype) == kExObjectType) - frames = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); - else - frames = (Frame *)getSegment(data.word(kFreeframes)).ptr(0, 0); uint8 frame = 3 * data.byte(kCommand) + 1; - showFrame(frames, 160, 68, frame, 0x80); + if (data.byte(kObjecttype) == kExObjectType) { + const Frame *frames = (const Frame *)getSegment(data.word(kExtras)).ptr(0, 0); + showFrame(frames, 160, 68, frame, 0x80); + } else { + showFrame(_freeFrames, 160, 68, frame, 0x80); + } } void DreamBase::obIcons() { @@ -110,10 +112,10 @@ void DreamBase::obIcons() { getAnyAd(&value1, &value2); if (value1 != 0xff) { // can open it - showFrame(engine->icons2(), 210, 1, 4, 0); + showFrame(_icons2, 210, 1, 4, 0); } - showFrame(engine->icons2(), 260, 1, 1, 0); + showFrame(_icons2, 260, 1, 1, 0); } void DreamBase::examineOb(bool examineAgain) { -- cgit v1.2.3 From e54196f37fbf918976f834680671c12bfce58d23 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 27 Dec 2011 21:28:37 +0100 Subject: DREAMWEB: Remove Extras segment --- engines/dreamweb/object.cpp | 64 +++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 31 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 4f9d091da6..3054a61d68 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -83,12 +83,11 @@ void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { if (index == 0xff) return; - if (flag == kExObjectType) { - Frame *extras = (Frame *)getSegment(data.word(kExtras)).ptr(0, 0); - showFrame(extras, x + 18, y + 19, 3 * index + 1, 128); - } else { + if (flag == kExObjectType) + showFrame(_exFrames, x + 18, y + 19, 3 * index + 1, 128); + else showFrame(_freeFrames, x + 18, y + 19, 3 * index + 1, 128); - } + const DynObject *object = (const DynObject *)getAnyAdDir(index, flag); bool worn = isItWorn(object); if (worn) @@ -99,12 +98,10 @@ void DreamBase::obPicture() { if (data.byte(kObjecttype) == kSetObjectType1) return; uint8 frame = 3 * data.byte(kCommand) + 1; - if (data.byte(kObjecttype) == kExObjectType) { - const Frame *frames = (const Frame *)getSegment(data.word(kExtras)).ptr(0, 0); - showFrame(frames, 160, 68, frame, 0x80); - } else { + if (data.byte(kObjecttype) == kExObjectType) + showFrame(_exFrames, 160, 68, frame, 0x80); + else showFrame(_freeFrames, 160, 68, frame, 0x80); - } } void DreamBase::obIcons() { @@ -254,12 +251,12 @@ void DreamBase::inventory() { } void DreamBase::transferText(uint8 from, uint8 to) { - getSegment(data.word(kExtras)).word(kExtextdat + 2*to) = data.word(kExtextpos); + WRITE_LE_UINT16(&_exTextdatLE[to], data.word(kExtextpos)); uint16 freeTextOffset = 2*from; uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); - char *dst = (char *)getSegment(data.word(kExtras)).ptr(kExtext + data.word(kExtextpos), 0); + char *dst = _exText + data.word(kExtextpos); size_t len = strlen(src); memcpy(dst, src, len + 1); @@ -429,47 +426,47 @@ void DreamBase::setPickup() { } void DreamBase::deleteExFrame(uint8 frameNum) { - Frame *frame = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata + sizeof(Frame)*frameNum, sizeof(Frame)); + Frame *frame = &_exFrames._frames[frameNum]; uint16 frameSize = frame->width * frame->height; // Note: the original asm didn't subtract frameSize from remainder uint16 remainder = kExframeslen - frame->ptr() - frameSize; - uint16 startOff = kExframes + frame->ptr(); + uint16 startOff = frame->ptr(); uint16 endOff = startOff + frameSize; // Shift frame data after this one down - memmove(getSegment(data.word(kExtras)).ptr(startOff, remainder), getSegment(data.word(kExtras)).ptr(endOff, remainder), remainder); + memmove(&_exFrames._data[startOff], &_exFrames._data[endOff], remainder); // Combined frame data is now frameSize smaller data.word(kExframepos) -= frameSize; // Adjust all frame pointers pointing into the shifted data for (unsigned int i = 0; i < 3*kNumexobjects; ++i) { - frame = (Frame *)getSegment(data.word(kExtras)).ptr(kExframedata + sizeof(Frame)*i, sizeof(Frame)); + frame = &_exFrames._frames[i]; if (frame->ptr() >= startOff) frame->setPtr(frame->ptr() - frameSize); } } void DreamBase::deleteExText(uint8 textNum) { - uint16 offset = getSegment(data.word(kExtras)).word(kExtextdat + 2*textNum); + uint16 offset = READ_LE_UINT16(&_exTextdatLE[textNum]); - uint16 startOff = kExtext + offset; - uint16 textSize = strlen((char *)getSegment(data.word(kExtras)).ptr(startOff, 0)) + 1; + uint16 startOff = offset; + uint16 textSize = strlen(&_exText[startOff]) + 1; uint16 endOff = startOff + textSize; uint16 remainder = kExtextlen - offset - textSize; // Shift text data after this one down - memmove(getSegment(data.word(kExtras)).ptr(startOff, remainder), getSegment(data.word(kExtras)).ptr(endOff, remainder), remainder); + memmove(&_exText[startOff], &_exText[endOff], remainder); // Combined text data is now frameSize smaller data.word(kExtextpos) -= textSize; // Adjust all text pointers pointing into the shifted data for (unsigned int i = 0; i < kNumexobjects; ++i) { - uint16 t = getSegment(data.word(kExtras)).word(kExtextdat + 2*i); + uint16 t = READ_LE_UINT16(&_exTextdatLE[i]); if (t >= offset + textSize) - getSegment(data.word(kExtras)).word(kExtextdat + 2*i) = t - textSize; + WRITE_LE_UINT16(&_exTextdatLE[i], t - textSize); } } @@ -591,22 +588,26 @@ void DreamBase::purgeALocation(uint8 index) { } const uint8 *DreamBase::getObTextStart() { - uint16 textSeg, textDatOff, textOff; + const uint8 *textBase; + const uint8 *text; + uint16 textOff; if (data.byte(kObjecttype) == kFreeObjectType) { - textSeg = data.word(kFreedesc); - textDatOff = kFreetextdat; + uint16 textSeg = data.word(kFreedesc); + uint16 textDatOff = kFreetextdat; textOff = kFreetext; + textBase = getSegment(textSeg).ptr(textOff, 0); + text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); } else if (data.byte(kObjecttype) == kSetObjectType1) { - textSeg = data.word(kSetdesc); - textDatOff = kSettextdat; + uint16 textSeg = data.word(kSetdesc); + uint16 textDatOff = kSettextdat; textOff = kSettext; + textBase = getSegment(textSeg).ptr(textOff, 0); + text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); } else { - textSeg = data.word(kExtras); - textDatOff = kExtextdat; + textBase = (const uint8 *)_exText; textOff = kExtext; + text = textBase + READ_LE_UINT16(&_exTextdatLE[data.byte(kCommand)]); } - const uint8 *textBase = getSegment(textSeg).ptr(textOff, 0); - const uint8 *text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); if (data.byte(kObjecttype) != kSetObjectType1) return text; @@ -635,6 +636,7 @@ const uint8 *DreamBase::getObTextStart() { text++; // arbitrary give-up counter + // FIXME: Make this more precise to avoid reading out of bounds if (text - (textBase - textOff) >= 8000) { warning("Object description for %d/%d not found", data.byte(kObjecttype), data.byte(kCommand)); return obname; -- cgit v1.2.3 From f729742f87648d6a5ebc1468e26e90ac1de1c2e0 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 27 Dec 2011 21:42:38 +0100 Subject: DREAMWEB: Convert exText into TextFile --- engines/dreamweb/object.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 3054a61d68..c78ec71561 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -251,12 +251,12 @@ void DreamBase::inventory() { } void DreamBase::transferText(uint8 from, uint8 to) { - WRITE_LE_UINT16(&_exTextdatLE[to], data.word(kExtextpos)); + _exText.setOffset(to, data.word(kExtextpos)); uint16 freeTextOffset = 2*from; uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); - char *dst = _exText + data.word(kExtextpos); + char *dst = _exText._text + data.word(kExtextpos); size_t len = strlen(src); memcpy(dst, src, len + 1); @@ -449,24 +449,24 @@ void DreamBase::deleteExFrame(uint8 frameNum) { } void DreamBase::deleteExText(uint8 textNum) { - uint16 offset = READ_LE_UINT16(&_exTextdatLE[textNum]); + uint16 offset = _exText.getOffset(textNum); uint16 startOff = offset; - uint16 textSize = strlen(&_exText[startOff]) + 1; + uint16 textSize = strlen(_exText.getString(textNum)) + 1; uint16 endOff = startOff + textSize; uint16 remainder = kExtextlen - offset - textSize; // Shift text data after this one down - memmove(&_exText[startOff], &_exText[endOff], remainder); + memmove(&_exText._text[startOff], &_exText._text[endOff], remainder); // Combined text data is now frameSize smaller data.word(kExtextpos) -= textSize; // Adjust all text pointers pointing into the shifted data for (unsigned int i = 0; i < kNumexobjects; ++i) { - uint16 t = READ_LE_UINT16(&_exTextdatLE[i]); + uint16 t = _exText.getOffset(i); if (t >= offset + textSize) - WRITE_LE_UINT16(&_exTextdatLE[i], t - textSize); + _exText.setOffset(i, t - textSize); } } @@ -604,9 +604,9 @@ const uint8 *DreamBase::getObTextStart() { textBase = getSegment(textSeg).ptr(textOff, 0); text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); } else { - textBase = (const uint8 *)_exText; + textBase = (const uint8 *)_exText._text; textOff = kExtext; - text = textBase + READ_LE_UINT16(&_exTextdatLE[data.byte(kCommand)]); + text = (const uint8 *)_exText.getString(data.byte(kCommand)); } if (data.byte(kObjecttype) != kSetObjectType1) -- cgit v1.2.3 From d9aed2e00bbb2dc54eb741affc1d978068175c04 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 27 Dec 2011 22:21:43 +0100 Subject: DREAMWEB: Convert room text into TextFiles --- engines/dreamweb/object.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index c78ec71561..6e5ae8a813 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -252,10 +252,7 @@ void DreamBase::inventory() { void DreamBase::transferText(uint8 from, uint8 to) { _exText.setOffset(to, data.word(kExtextpos)); - uint16 freeTextOffset = 2*from; - uint16 srcOffset = getSegment(data.word(kFreedesc)).word(kFreetextdat + freeTextOffset); - - const char *src = (const char *)getSegment(data.word(kFreedesc)).ptr(kFreetext + srcOffset, 0); + const char *src = _freeDesc.getString(from); char *dst = _exText._text + data.word(kExtextpos); size_t len = strlen(src); @@ -592,17 +589,13 @@ const uint8 *DreamBase::getObTextStart() { const uint8 *text; uint16 textOff; if (data.byte(kObjecttype) == kFreeObjectType) { - uint16 textSeg = data.word(kFreedesc); - uint16 textDatOff = kFreetextdat; + textBase = (const uint8 *)_freeDesc._text; textOff = kFreetext; - textBase = getSegment(textSeg).ptr(textOff, 0); - text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); + text = (const uint8 *)_freeDesc.getString(data.byte(kCommand)); } else if (data.byte(kObjecttype) == kSetObjectType1) { - uint16 textSeg = data.word(kSetdesc); - uint16 textDatOff = kSettextdat; + textBase = (const uint8 *)_setDesc._text; textOff = kSettext; - textBase = getSegment(textSeg).ptr(textOff, 0); - text = textBase + getSegment(textSeg).word(textDatOff + 2*data.byte(kCommand)); + text = (const uint8 *)_setDesc.getString(data.byte(kCommand)); } else { textBase = (const uint8 *)_exText._text; textOff = kExtext; -- cgit v1.2.3 From 4c2d2684ea54d98828d44b18fb7b17ed84c7bf22 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 28 Dec 2011 02:28:27 +0100 Subject: DREAMWEB: Mass-move variables out of data This has been done by an automated search/replace, culling unused variables in the process. The remaining variables in data are all stored in savegames. --- engines/dreamweb/object.cpp | 410 ++++++++++++++++++++++---------------------- 1 file changed, 205 insertions(+), 205 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 6e5ae8a813..57e9c9c10e 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -61,7 +61,7 @@ bool DreamBase::isItWorn(const DynObject *object) { } void DreamBase::wornError() { - data.byte(kCommandtype) = 255; + _commandType = 255; delPointer(); printMessage(76, 21, 57, 240, false); workToScreenM(); @@ -69,7 +69,7 @@ void DreamBase::wornError() { showPanel(); showMan(); examIcon(); - data.byte(kCommandtype) = 255; + _commandType = 255; workToScreenM(); } @@ -95,10 +95,10 @@ void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { } void DreamBase::obPicture() { - if (data.byte(kObjecttype) == kSetObjectType1) + if (_objectType == kSetObjectType1) return; - uint8 frame = 3 * data.byte(kCommand) + 1; - if (data.byte(kObjecttype) == kExObjectType) + uint8 frame = 3 * _command + 1; + if (_objectType == kExObjectType) showFrame(_exFrames, 160, 68, frame, 0x80); else showFrame(_freeFrames, 160, 68, frame, 0x80); @@ -116,19 +116,19 @@ void DreamBase::obIcons() { } void DreamBase::examineOb(bool examineAgain) { - data.byte(kPointermode) = 0; - data.word(kTimecount) = 0; + _pointerMode = 0; + _timeCount = 0; while (true) { if (examineAgain) { - data.byte(kInmaparea) = 0; - data.byte(kExamagain) = 0; - data.byte(kOpenedob) = 255; - data.byte(kOpenedtype) = 255; - data.byte(kInvopen) = 0; - data.byte(kObjecttype) = data.byte(kCommandtype); - data.byte(kItemframe) = 0; - data.byte(kPointerframe) = 0; + _inMapArea = 0; + _examAgain = 0; + _openedOb = 255; + _openedType = 255; + _invOpen = 0; + _objectType = _commandType; + _itemFrame = 0; + _pointerFrame = 0; createPanel(); showPanel(); showMan(); @@ -137,7 +137,7 @@ void DreamBase::examineOb(bool examineAgain) { obPicture(); describeOb(); underTextLine(); - data.byte(kCommandtype) = 255; + _commandType = 255; readMouse(); showPointer(); workToScreen(); @@ -151,9 +151,9 @@ void DreamBase::examineOb(bool examineAgain) { dumpPointer(); dumpTextLine(); delPointer(); - data.byte(kGetback) = 0; + _getBack = 0; - switch (data.byte(kInvopen)) { + switch (_invOpen) { case 0: { RectWithCallback examList[] = { { 273,320,157,198,&DreamBase::getBackFromOb }, @@ -196,20 +196,20 @@ void DreamBase::examineOb(bool examineAgain) { if (_quitRequested) break; - if (data.byte(kExamagain) != 0) + if (_examAgain != 0) examineAgain = true; - else if (data.byte(kGetback) != 0) + else if (_getBack != 0) break; } - data.byte(kPickup) = 0; - if (data.word(kWatchingtime) != 0 || data.byte(kNewlocation) == 255) { + _pickUp = 0; + if (data.word(kWatchingtime) != 0 || _newLocation == 255) { // isWatching makeMainScreen(); } - data.byte(kInvopen) = 0; - data.byte(kOpenedob) = 255; + _invOpen = 0; + _openedOb = 255; } void DreamBase::inventory() { @@ -218,20 +218,20 @@ void DreamBase::inventory() { return; } - if (data.byte(kCommandtype) != 239) { - data.byte(kCommandtype) = 239; + if (_commandType != 239) { + _commandType = 239; commandOnly(32); } - if (data.word(kMousebutton) == data.word(kOldbutton)) + if (_mouseButton == _oldButton) return; - if (!(data.word(kMousebutton) & 1)) // only on left mouse button + if (!(_mouseButton & 1)) // only on left mouse button return; - data.word(kTimecount) = 0; - data.byte(kPointermode) = 0; - data.byte(kInmaparea) = 0; + _timeCount = 0; + _pointerMode = 0; + _inMapArea = 0; animPointer(); createPanel(); showPanel(); @@ -239,14 +239,14 @@ void DreamBase::inventory() { showMan(); showExit(); underTextLine(); - data.byte(kPickup) = 0; - data.byte(kInvopen) = 2; + _pickUp = 0; + _invOpen = 2; openInv(); readMouse(); showPointer(); workToScreen(); delPointer(); - data.byte(kOpenedob) = 255; + _openedOb = 255; examineOb(false); } @@ -261,15 +261,15 @@ void DreamBase::transferText(uint8 from, uint8 to) { } void DreamBase::getBackFromOb() { - if (data.byte(kPickup) != 1) + if (_pickUp != 1) getBack1(); else blank(); } byte DreamBase::getOpenedSlotCount() { - byte obj = data.byte(kOpenedob); - switch (data.byte(kOpenedtype)) { + byte obj = _openedOb; + switch (_openedType) { case 4: return getExAd(obj)->slotCount; case 2: @@ -280,8 +280,8 @@ byte DreamBase::getOpenedSlotCount() { } byte DreamBase::getOpenedSlotSize() { - byte obj = data.byte(kOpenedob); - switch (data.byte(kOpenedtype)) { + byte obj = _openedOb; + switch (_openedType) { case 4: return getExAd(obj)->slotSize; case 2: @@ -294,11 +294,11 @@ byte DreamBase::getOpenedSlotSize() { void DreamBase::openOb() { uint8 commandLine[64] = "OBJECT NAME ONE "; - copyName(data.byte(kOpenedtype), data.byte(kOpenedob), commandLine); + copyName(_openedType, _openedOb, commandLine); printMessage(kInventx, kInventy+86, 62, 240, false); - printDirect(commandLine, data.word(kLastxpos) + 5, kInventy+86, 220, false); + printDirect(commandLine, _lastXPos + 5, kInventy+86, 220, false); fillOpen(); _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; @@ -310,8 +310,8 @@ void DreamBase::identifyOb() { return; } - uint16 initialX = data.word(kMousex) - data.word(kMapadx); - uint16 initialY = data.word(kMousey) - data.word(kMapady); + uint16 initialX = _mouseX - _mapAdX; + uint16 initialY = _mouseY - _mapAdY; if (initialX >= 22 * 8 || initialY >= 20 * 8) { blank(); @@ -321,16 +321,16 @@ void DreamBase::identifyOb() { byte x = initialX & 0xFF; byte y = initialY & 0xFF; - data.byte(kInmaparea) = 1; - data.byte(kPointerspath) = findPathOfPoint(x, y); - data.byte(kPointerfirstpath) = findFirstPath(x, y); + _inMapArea = 1; + _pointersPath = findPathOfPoint(x, y); + _pointerFirstPath = findFirstPath(x, y); if (checkIfEx(x, y) || checkIfFree(x, y) || checkIfPerson(x, y) || checkIfSet(x, y)) return; // finishidentify - x = (data.word(kMousex) - data.word(kMapadx)) & 0xFF; - y = (data.word(kMousey) - data.word(kMapady)) & 0xFF; + x = (_mouseX - _mapAdX) & 0xFF; + y = (_mouseY - _mapAdY) & 0xFF; byte flag, flagEx, type, flagX, flagY; checkOne(x, y, &flag, &flagEx, &type, &flagX, &flagY); @@ -342,11 +342,11 @@ void DreamBase::identifyOb() { } ObjectRef DreamBase::findInvPos() { - uint16 x = data.word(kMousex) - kInventx; - uint16 y = data.word(kMousey) - kInventy; + uint16 x = _mouseX - kInventx; + uint16 y = _mouseY - kInventy; uint8 pos = (x / kItempicsize) + (y / kItempicsize) * 5; uint8 invPos = data.byte(kRyanpage) * 10 + pos; - data.byte(kLastinvpos) = invPos; + _lastInvPos = invPos; return _ryanInvList[invPos]; } @@ -357,26 +357,26 @@ void DreamBase::selectOb() { return; } - data.byte(kWithobject) = objectId._index; - data.byte(kWithtype) = objectId._type; + _withObject = objectId._index; + _withType = objectId._type; - if (objectId != _oldSubject || data.byte(kCommandtype) != 221) { + if (objectId != _oldSubject || _commandType != 221) { if (objectId == _oldSubject) - data.byte(kCommandtype) = 221; + _commandType = 221; _oldSubject = objectId; commandWithOb(0, objectId._type, objectId._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; delPointer(); - data.byte(kInvopen) = 0; + _invOpen = 0; useRoutine(); } void DreamBase::setPickup() { - if (data.byte(kObjecttype) != kSetObjectType1 && data.byte(kObjecttype) != kSetObjectType3) { + if (_objectType != kSetObjectType1 && _objectType != kSetObjectType3) { // Object types 1 and 3 are excluded, so the resulting object is a DynObject uint8 dummy; DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy); @@ -389,12 +389,12 @@ void DreamBase::setPickup() { return; } - if (data.byte(kCommandtype) != 209) { - data.byte(kCommandtype) = 209; - commandWithOb(33, data.byte(kObjecttype), data.byte(kCommand)); + if (_commandType != 209) { + _commandType = 209; + commandWithOb(33, _objectType, _command); } - if (data.word(kMousebutton) != 1 || data.word(kMousebutton) == data.word(kOldbutton)) + if (_mouseButton != 1 || _mouseButton == _oldButton) return; createPanel(); @@ -402,20 +402,20 @@ void DreamBase::setPickup() { showMan(); showExit(); examIcon(); - data.byte(kPickup) = 1; - data.byte(kInvopen) = 2; - - if (data.byte(kObjecttype) != kExObjectType) { - assert(data.byte(kObjecttype) == kFreeObjectType); - data.byte(kOpenedob) = 255; - data.byte(kItemframe) = transferToEx(data.byte(kCommand)); - data.byte(kObjecttype) = kExObjectType; - DynObject *object = getExAd(data.byte(kItemframe)); + _pickUp = 1; + _invOpen = 2; + + if (_objectType != kExObjectType) { + assert(_objectType == kFreeObjectType); + _openedOb = 255; + _itemFrame = transferToEx(_command); + _objectType = kExObjectType; + DynObject *object = getExAd(_itemFrame); object->mapad[0] = 20; object->mapad[1] = 255; } else { - data.byte(kItemframe) = data.byte(kCommand); - data.byte(kOpenedob) = 255; + _itemFrame = _command; + _openedOb = 255; } openInv(); @@ -486,16 +486,16 @@ void DreamBase::deleteExObject(uint8 index) { } void DreamBase::removeObFromInv() { - if (data.byte(kCommand) == 100) + if (_command == 100) return; // object doesn't exist - assert(data.byte(kObjecttype) == kExObjectType); + assert(_objectType == kExObjectType); - deleteExObject(data.byte(kCommand)); + deleteExObject(_command); } void DreamBase::inToInv() { - if (!data.byte(kPickup)) { + if (!_pickUp) { outOfInv(); return; } @@ -507,25 +507,25 @@ void DreamBase::inToInv() { return; } - subject._type = data.byte(kObjecttype); - subject._index = data.byte(kItemframe); + subject._type = _objectType; + subject._index = _itemFrame; - if (subject != _oldSubject || data.byte(kCommandtype) != 220) { + if (subject != _oldSubject || _commandType != 220) { if (subject == _oldSubject) - data.byte(kCommandtype) = 220; + _commandType = 220; _oldSubject = subject; commandWithOb(35, subject._type, subject._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; // notletgo2 delPointer(); - DynObject *object = getExAd(data.byte(kItemframe)); + DynObject *object = getExAd(_itemFrame); object->mapad[0] = 4; object->mapad[1] = 255; - object->mapad[2] = data.byte(kLastinvpos); - data.byte(kPickup) = 0; + object->mapad[2] = _lastInvPos; + _pickUp = 0; fillRyan(); readMouse(); showPointer(); @@ -542,26 +542,26 @@ void DreamBase::outOfInv() { return; } - if (data.word(kMousebutton) == 2) { + if (_mouseButton == 2) { reExFromInv(); return; } - if (subject != _oldSubject || data.byte(kCommandtype) != 221) { + if (subject != _oldSubject || _commandType != 221) { if (subject == _oldSubject) - data.byte(kCommandtype) = 221; + _commandType = 221; _oldSubject = subject; commandWithOb(36, subject._type, subject._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; delPointer(); - data.byte(kPickup) = 1; + _pickUp = 1; subject = findInvPos(); - data.byte(kObjecttype) = subject._type; - data.byte(kItemframe) = subject._index; + _objectType = subject._type; + _itemFrame = subject._index; assert(subject._type == kExObjectType); DynObject *object = getExAd(subject._index); object->mapad[0] = 20; @@ -588,21 +588,21 @@ const uint8 *DreamBase::getObTextStart() { const uint8 *textBase; const uint8 *text; uint16 textOff; - if (data.byte(kObjecttype) == kFreeObjectType) { + if (_objectType == kFreeObjectType) { textBase = (const uint8 *)_freeDesc._text; textOff = kFreetext; - text = (const uint8 *)_freeDesc.getString(data.byte(kCommand)); - } else if (data.byte(kObjecttype) == kSetObjectType1) { + text = (const uint8 *)_freeDesc.getString(_command); + } else if (_objectType == kSetObjectType1) { textBase = (const uint8 *)_setDesc._text; textOff = kSettext; - text = (const uint8 *)_setDesc.getString(data.byte(kCommand)); + text = (const uint8 *)_setDesc.getString(_command); } else { textBase = (const uint8 *)_exText._text; textOff = kExtext; - text = (const uint8 *)_exText.getString(data.byte(kCommand)); + text = (const uint8 *)_exText.getString(_command); } - if (data.byte(kObjecttype) != kSetObjectType1) + if (_objectType != kSetObjectType1) return text; const uint8 *obname = text; @@ -631,7 +631,7 @@ const uint8 *DreamBase::getObTextStart() { // arbitrary give-up counter // FIXME: Make this more precise to avoid reading out of bounds if (text - (textBase - textOff) >= 8000) { - warning("Object description for %d/%d not found", data.byte(kObjecttype), data.byte(kCommand)); + warning("Object description for %d/%d not found", _objectType, _command); return obname; } } @@ -654,16 +654,16 @@ const uint8 *DreamBase::getObTextStart() { } void DreamBase::dropObject() { - if (data.byte(kCommandtype) != 223) { - data.byte(kCommandtype) = 223; - if (!data.byte(kPickup)) { + if (_commandType != 223) { + _commandType = 223; + if (!_pickUp) { blank(); return; } - commandWithOb(37, data.byte(kObjecttype), data.byte(kItemframe)); + commandWithOb(37, _objectType, _itemFrame); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; if (isItWorn(getEitherAdCPP())) { @@ -671,9 +671,9 @@ void DreamBase::dropObject() { return; } - if (data.byte(kReallocation) != 47) { + if (_realLocation != 47) { byte flag, flagEx, type, flagX, flagY; - checkOne(data.byte(kRyanx) + 12, data.byte(kRyany) + 12, &flag, &flagEx, &type, &flagX, &flagY); + checkOne(_ryanX + 12, _ryanY + 12, &flag, &flagEx, &type, &flagX, &flagY); if (flag >= 2) { dropError(); @@ -684,26 +684,26 @@ void DreamBase::dropObject() { return; } - if (data.byte(kMapxsize) == 64 && data.byte(kMapysize) == 64) { + if (_mapXSize == 64 && _mapYSize == 64) { // Inside lift dropError(); return; } - if (compare(data.byte(kItemframe), 4, "GUNA") || compare(data.byte(kItemframe), 4, "SHLD")) { + if (compare(_itemFrame, 4, "GUNA") || compare(_itemFrame, 4, "SHLD")) { cantDrop(); return; } - data.byte(kObjecttype) = 4; - DynObject *object = getExAd(data.byte(kItemframe)); + _objectType = 4; + DynObject *object = getExAd(_itemFrame); object->mapad[0] = 0; - object->mapad[1] = ((data.byte(kRyanx) + 4) >> 4) + data.byte(kMapx); - object->mapad[2] = (data.byte(kRyanx) + 4) & 0xF; - object->mapad[3] = ((data.byte(kRyany) + 8) >> 4) + data.byte(kMapy); - object->mapad[4] = (data.byte(kRyany) + 8) & 0xF; - data.byte(kPickup) = 0; - object->currentLocation = data.byte(kReallocation); + object->mapad[1] = ((_ryanX + 4) >> 4) + _mapX; + object->mapad[2] = (_ryanX + 4) & 0xF; + object->mapad[3] = ((_ryanY + 8) >> 4) + _mapY; + object->mapad[4] = (_ryanY + 8) & 0xF; + _pickUp = 0; + object->currentLocation = _realLocation; } bool DreamBase::checkObjectSize() { @@ -744,16 +744,16 @@ void DreamBase::selectOpenOb() { return; } - if (data.byte(kCommandtype) != 224) { - data.byte(kCommandtype) = 224; - commandWithOb(38, data.byte(kObjecttype), data.byte(kCommand)); + if (_commandType != 224) { + _commandType = 224; + commandWithOb(38, _objectType, _command); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - data.byte(kOpenedob) = data.byte(kCommand); - data.byte(kOpenedtype) = data.byte(kObjecttype); + _openedOb = _command; + _openedType = _objectType; createPanel(); showPanel(); showMan(); @@ -770,45 +770,45 @@ void DreamBase::selectOpenOb() { void DreamBase::reExFromInv() { ObjectRef objectId = findInvPos(); - data.byte(kCommandtype) = objectId._type; - data.byte(kCommand) = objectId._index; - data.byte(kExamagain) = 1; - data.byte(kPointermode) = 0; + _commandType = objectId._type; + _command = objectId._index; + _examAgain = 1; + _pointerMode = 0; } void DreamBase::swapWithInv() { ObjectRef subject; - subject._type = data.byte(kObjecttype); - subject._index = data.byte(kItemframe); - if (subject != _oldSubject || data.byte(kCommandtype) != 243) { + subject._type = _objectType; + subject._index = _itemFrame; + if (subject != _oldSubject || _commandType != 243) { if (subject == _oldSubject) - data.byte(kCommandtype) = 243; + _commandType = 243; _oldSubject = subject; commandWithOb(34, subject._type, subject._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - byte prevType = data.byte(kObjecttype); - byte prevFrame = data.byte(kItemframe); + byte prevType = _objectType; + byte prevFrame = _itemFrame; ObjectRef objectId = findInvPos(); - data.byte(kItemframe) = objectId._index; - data.byte(kObjecttype) = objectId._type; + _itemFrame = objectId._index; + _objectType = objectId._type; DynObject *object = getEitherAdCPP(); object->mapad[0] = 20; object->mapad[1] = 255; - byte prevType2 = data.byte(kObjecttype); - byte prevFrame2 = data.byte(kItemframe); - data.byte(kObjecttype) = prevType; - data.byte(kItemframe) = prevFrame; + byte prevType2 = _objectType; + byte prevFrame2 = _itemFrame; + _objectType = prevType; + _itemFrame = prevFrame; delPointer(); object = getEitherAdCPP(); object->mapad[0] = 4; object->mapad[1] = 255; - object->mapad[2] = data.byte(kLastinvpos); - data.byte(kObjecttype) = prevType2; - data.byte(kItemframe) = prevFrame2; + object->mapad[2] = _lastInvPos; + _objectType = prevType2; + _itemFrame = prevFrame2; fillRyan(); readMouse(); showPointer(); @@ -817,10 +817,10 @@ void DreamBase::swapWithInv() { } void DreamBase::useOpened() { - if (data.byte(kOpenedob) == 255) + if (_openedOb == 255) return; // cannot use opened object - if (!data.byte(kPickup)) { + if (!_pickUp) { outOfOpen(); return; } @@ -832,21 +832,21 @@ void DreamBase::useOpened() { return; } - if (data.byte(kPickup) != 1) { + if (_pickUp != 1) { blank(); return; } - objectId._type = data.byte(kObjecttype); - objectId._index = data.byte(kItemframe); - if (objectId != _oldSubject || data.byte(kCommandtype) != 227) { + objectId._type = _objectType; + objectId._index = _itemFrame; + if (objectId != _oldSubject || _commandType != 227) { if (objectId == _oldSubject) - data.byte(kCommandtype) = 227; + _commandType = 227; _oldSubject = objectId; commandWithOb(35, objectId._type, objectId._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; if (isItWorn(getEitherAdCPP())) { @@ -856,8 +856,8 @@ void DreamBase::useOpened() { delPointer(); - if (data.byte(kItemframe) == data.byte(kOpenedob) && - data.byte(kObjecttype) == data.byte(kOpenedtype)) { + if (_itemFrame == _openedOb && + _objectType == _openedType) { errorMessage1(); return; } @@ -865,12 +865,12 @@ void DreamBase::useOpened() { if (!checkObjectSize()) return; - data.byte(kPickup) = 0; + _pickUp = 0; DynObject *object = getEitherAdCPP(); - object->mapad[0] = data.byte(kOpenedtype); - object->mapad[1] = data.byte(kOpenedob); - object->mapad[2] = data.byte(kLastinvpos); - object->mapad[3] = data.byte(kReallocation); + object->mapad[0] = _openedType; + object->mapad[1] = _openedOb; + object->mapad[2] = _lastInvPos; + object->mapad[3] = _realLocation; fillOpen(); underTextLine(); readMouse(); @@ -881,7 +881,7 @@ void DreamBase::useOpened() { } void DreamBase::outOfOpen() { - if (data.byte(kOpenedob) == 255) + if (_openedOb == 255) return; // cannot use opened object ObjectRef objectId = findOpenPos(); @@ -891,32 +891,32 @@ void DreamBase::outOfOpen() { return; } - if (objectId != _oldSubject || data.byte(kCommandtype) != 228) { + if (objectId != _oldSubject || _commandType != 228) { if (objectId == _oldSubject) - data.byte(kCommandtype) = 228; + _commandType = 228; _oldSubject = objectId; commandWithOb(36, objectId._type, objectId._index); } - if (data.word(kMousebutton) == data.word(kOldbutton)) + if (_mouseButton == _oldButton) return; // notletgo4 - if (data.word(kMousebutton) != 1) { - if (data.word(kMousebutton) == 2) + if (_mouseButton != 1) { + if (_mouseButton == 2) reExFromOpen(); return; } delPointer(); - data.byte(kPickup) = 1; + _pickUp = 1; objectId = findOpenPos(); - data.byte(kObjecttype) = objectId._type; - data.byte(kItemframe) = objectId._index; + _objectType = objectId._type; + _itemFrame = objectId._index; - if (data.byte(kObjecttype) != kExObjectType) { + if (_objectType != kExObjectType) { assert(objectId._type == kFreeObjectType); - data.byte(kItemframe) = transferToEx(objectId._index); - data.byte(kObjecttype) = kExObjectType; + _itemFrame = transferToEx(objectId._index); + _objectType = kExObjectType; } DynObject *object = getEitherAdCPP(); @@ -934,16 +934,16 @@ void DreamBase::outOfOpen() { void DreamBase::swapWithOpen() { ObjectRef subject; - subject._type = data.byte(kObjecttype); - subject._index = data.byte(kItemframe); - if (subject != _oldSubject || data.byte(kCommandtype) != 242) { + subject._type = _objectType; + subject._index = _itemFrame; + if (subject != _oldSubject || _commandType != 242) { if (subject == _oldSubject) - data.byte(kCommandtype) = 242; + _commandType = 242; _oldSubject = subject; commandWithOb(34, subject._type, subject._index); } - if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1)) + if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; if (isItWorn(getEitherAdCPP())) { @@ -953,8 +953,8 @@ void DreamBase::swapWithOpen() { delPointer(); - if (data.byte(kItemframe) == data.byte(kOpenedob) && - data.byte(kObjecttype) == data.byte(kOpenedtype)) { + if (_itemFrame == _openedOb && + _objectType == _openedType) { errorMessage1(); return; } @@ -962,33 +962,33 @@ void DreamBase::swapWithOpen() { if (!checkObjectSize()) return; - byte prevType = data.byte(kObjecttype); - byte prevFrame = data.byte(kItemframe); + byte prevType = _objectType; + byte prevFrame = _itemFrame; ObjectRef objectId = findOpenPos(); - data.byte(kObjecttype) = objectId._type; - data.byte(kItemframe) = objectId._index; + _objectType = objectId._type; + _itemFrame = objectId._index; - if (data.byte(kObjecttype) != kExObjectType) { + if (_objectType != kExObjectType) { assert(objectId._type == kFreeObjectType); - data.byte(kItemframe) = transferToEx(objectId._index); - data.byte(kObjecttype) = kExObjectType; + _itemFrame = transferToEx(objectId._index); + _objectType = kExObjectType; } DynObject *object = getEitherAdCPP(); object->mapad[0] = 20; object->mapad[1] = 255; - byte prevType2 = data.byte(kObjecttype); - byte prevFrame2 = data.byte(kItemframe); - data.byte(kObjecttype) = prevType; - data.byte(kItemframe) = prevFrame; + byte prevType2 = _objectType; + byte prevFrame2 = _itemFrame; + _objectType = prevType; + _itemFrame = prevFrame; object = getEitherAdCPP(); - object->mapad[0] = data.byte(kOpenedtype); - object->mapad[1] = data.byte(kOpenedob); - object->mapad[2] = data.byte(kLastinvpos); - object->mapad[3] = data.byte(kReallocation); - data.byte(kObjecttype) = prevType2; - data.byte(kItemframe) = prevFrame2; + object->mapad[0] = _openedType; + object->mapad[1] = _openedOb; + object->mapad[2] = _lastInvPos; + object->mapad[3] = _realLocation; + _objectType = prevType2; + _itemFrame = prevFrame2; fillOpen(); fillRyan(); underTextLine(); @@ -1000,8 +1000,8 @@ void DreamBase::swapWithOpen() { } ObjectRef DreamBase::findOpenPos() { - uint8 pos = (data.word(kMousex) - kInventx) / kItempicsize; - data.byte(kLastinvpos) = pos; + uint8 pos = (_mouseX - kInventx) / kItempicsize; + _lastInvPos = pos; return _openInvList[pos]; } @@ -1016,12 +1016,12 @@ byte DreamBase::transferToEx(uint8 from) { memcpy(exObject, freeObject, sizeof(DynObject)); - exObject->currentLocation = data.byte(kReallocation); - exObject->initialLocation = data.byte(kReallocation); + exObject->currentLocation = _realLocation; + exObject->initialLocation = _realLocation; exObject->index = from; exObject->mapad[0] = 4; exObject->mapad[1] = 255; - exObject->mapad[2] = data.byte(kLastinvpos); + exObject->mapad[2] = _lastInvPos; transferFrame(from, pos, 0); transferFrame(from, pos, 1); @@ -1053,11 +1053,11 @@ void DreamBase::findAllOpen() { for (uint8 i = 0; i < kNumexobjects; ++i) { const DynObject *obj = getExAd(i); - if (obj->mapad[1] != data.byte(kOpenedob)) + if (obj->mapad[1] != _openedOb) continue; - if (obj->mapad[0] != data.byte(kOpenedtype)) + if (obj->mapad[0] != _openedType) continue; - if (data.byte(kOpenedtype) != kExObjectType && obj->mapad[3] != data.byte(kReallocation)) + if (_openedType != kExObjectType && obj->mapad[3] != _realLocation) continue; uint8 slot = obj->mapad[2]; assert(slot < 16); @@ -1067,9 +1067,9 @@ void DreamBase::findAllOpen() { for (uint8 i = 0; i < 80; ++i) { const DynObject *obj = getFreeAd(i); - if (obj->mapad[1] != data.byte(kOpenedob)) + if (obj->mapad[1] != _openedOb) continue; - if (obj->mapad[0] != data.byte(kOpenedtype)) + if (obj->mapad[0] != _openedType) continue; uint8 slot = obj->mapad[2]; _openInvList[slot]._index = i; @@ -1095,8 +1095,8 @@ void DreamBase::pickupConts(uint8 from, uint8 containerEx) { DynObject *exObj = getExAd(pos); memcpy(exObj, freeObj, sizeof(DynObject)); - exObj->currentLocation = data.byte(kReallocation); - exObj->initialLocation = data.byte(kReallocation); + exObj->currentLocation = _realLocation; + exObj->initialLocation = _realLocation; exObj->index = index; exObj->mapad[0] = 4; // kExObjectType? exObj->mapad[1] = containerEx; -- cgit v1.2.3 From ed72efe05bab195fcc9f637018c7b73316fb1a58 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Wed, 28 Dec 2011 05:47:09 +0200 Subject: DREAMWEB: Remove more global variables --- engines/dreamweb/object.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 57e9c9c10e..7dc605c032 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -585,6 +585,9 @@ void DreamBase::purgeALocation(uint8 index) { } const uint8 *DreamBase::getObTextStart() { + const uint16 kSettext = 130*2; + const uint16 kFreetext = 82*2; + const uint8 *textBase; const uint8 *text; uint16 textOff; -- cgit v1.2.3 From 57e940f67896e0f085de23088754fe1682cd49db Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 28 Dec 2011 13:10:22 +0100 Subject: DREAMWEB: Move all saved variables to a GameVars struct The data segment is now completely unused. --- engines/dreamweb/object.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 7dc605c032..555125e9e7 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -26,7 +26,7 @@ namespace DreamGen { void DreamBase::showRyanPage() { showFrame(_icons1, kInventx + 167, kInventy - 12, 12, 0); - showFrame(_icons1, kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); + showFrame(_icons1, kInventx + 167 + 18 * _vars._ryanPage, kInventy - 12, 13 + _vars._ryanPage, 0); } void DreamBase::findAllRyan() { @@ -45,7 +45,7 @@ void DreamBase::findAllRyan() { } void DreamBase::fillRyan() { - ObjectRef *inv = &_ryanInvList[data.byte(kRyanpage) * 10]; + ObjectRef *inv = &_ryanInvList[_vars._ryanPage * 10]; findAllRyan(); for (size_t i = 0; i < 2; ++i) { for (size_t j = 0; j < 5; ++j) { @@ -203,7 +203,7 @@ void DreamBase::examineOb(bool examineAgain) { } _pickUp = 0; - if (data.word(kWatchingtime) != 0 || _newLocation == 255) { + if (_vars._watchingTime != 0 || _newLocation == 255) { // isWatching makeMainScreen(); } @@ -213,7 +213,7 @@ void DreamBase::examineOb(bool examineAgain) { } void DreamBase::inventory() { - if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { + if (_vars._manDead == 1 || _vars._watchingTime != 0) { blank(); return; } @@ -251,13 +251,13 @@ void DreamBase::inventory() { } void DreamBase::transferText(uint8 from, uint8 to) { - _exText.setOffset(to, data.word(kExtextpos)); + _exText.setOffset(to, _vars._exTextPos); const char *src = _freeDesc.getString(from); - char *dst = _exText._text + data.word(kExtextpos); + char *dst = _exText._text + _vars._exTextPos; size_t len = strlen(src); memcpy(dst, src, len + 1); - data.word(kExtextpos) += len + 1; + _vars._exTextPos += len + 1; } void DreamBase::getBackFromOb() { @@ -305,7 +305,7 @@ void DreamBase::openOb() { } void DreamBase::identifyOb() { - if (data.word(kWatchingtime) != 0) { + if (_vars._watchingTime != 0) { blank(); return; } @@ -335,7 +335,7 @@ void DreamBase::identifyOb() { checkOne(x, y, &flag, &flagEx, &type, &flagX, &flagY); - if (type != 0 && data.byte(kMandead) != 1) + if (type != 0 && _vars._manDead != 1) obName(type, 3); else blank(); @@ -345,7 +345,7 @@ ObjectRef DreamBase::findInvPos() { uint16 x = _mouseX - kInventx; uint16 y = _mouseY - kInventy; uint8 pos = (x / kItempicsize) + (y / kItempicsize) * 5; - uint8 invPos = data.byte(kRyanpage) * 10 + pos; + uint8 invPos = _vars._ryanPage * 10 + pos; _lastInvPos = invPos; return _ryanInvList[invPos]; } @@ -435,7 +435,7 @@ void DreamBase::deleteExFrame(uint8 frameNum) { memmove(&_exFrames._data[startOff], &_exFrames._data[endOff], remainder); // Combined frame data is now frameSize smaller - data.word(kExframepos) -= frameSize; + _vars._exFramePos -= frameSize; // Adjust all frame pointers pointing into the shifted data for (unsigned int i = 0; i < 3*kNumexobjects; ++i) { @@ -457,7 +457,7 @@ void DreamBase::deleteExText(uint8 textNum) { memmove(&_exText._text[startOff], &_exText._text[endOff], remainder); // Combined text data is now frameSize smaller - data.word(kExtextpos) -= textSize; + _vars._exTextPos -= textSize; // Adjust all text pointers pointing into the shifted data for (unsigned int i = 0; i < kNumexobjects; ++i) { -- cgit v1.2.3 From 279746fcf0a3aac428e75bf7ca7e043cb0572aa6 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Wed, 28 Dec 2011 15:07:17 +0200 Subject: DREAMWEB: Completely remove all of the runtime, and move everything into DreamWebEngine Also, remove dead code (allocateMem/deallocateMem) --- engines/dreamweb/object.cpp | 124 ++++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 62 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 555125e9e7..a9cbadcc2c 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -22,14 +22,14 @@ #include "dreamweb/dreamweb.h" -namespace DreamGen { +namespace DreamWeb { -void DreamBase::showRyanPage() { +void DreamWebEngine::showRyanPage() { showFrame(_icons1, kInventx + 167, kInventy - 12, 12, 0); showFrame(_icons1, kInventx + 167 + 18 * _vars._ryanPage, kInventy - 12, 13 + _vars._ryanPage, 0); } -void DreamBase::findAllRyan() { +void DreamWebEngine::findAllRyan() { memset(_ryanInvList, 0xff, 60); for (size_t i = 0; i < kNumexobjects; ++i) { const DynObject *extra = getExAd(i); @@ -44,7 +44,7 @@ void DreamBase::findAllRyan() { } } -void DreamBase::fillRyan() { +void DreamWebEngine::fillRyan() { ObjectRef *inv = &_ryanInvList[_vars._ryanPage * 10]; findAllRyan(); for (size_t i = 0; i < 2; ++i) { @@ -56,11 +56,11 @@ void DreamBase::fillRyan() { showRyanPage(); } -bool DreamBase::isItWorn(const DynObject *object) { +bool DreamWebEngine::isItWorn(const DynObject *object) { return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); } -void DreamBase::wornError() { +void DreamWebEngine::wornError() { _commandType = 255; delPointer(); printMessage(76, 21, 57, 240, false); @@ -73,12 +73,12 @@ void DreamBase::wornError() { workToScreenM(); } -void DreamBase::makeWorn(DynObject *object) { +void DreamWebEngine::makeWorn(DynObject *object) { object->id[0] = 'W'-'A'; object->id[1] = 'E'-'A'; } -void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { +void DreamWebEngine::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(_icons1, x - 2, y - 1, 10, 0); if (index == 0xff) return; @@ -94,7 +94,7 @@ void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(_icons1, x - 3, y - 2, 7, 0); } -void DreamBase::obPicture() { +void DreamWebEngine::obPicture() { if (_objectType == kSetObjectType1) return; uint8 frame = 3 * _command + 1; @@ -104,7 +104,7 @@ void DreamBase::obPicture() { showFrame(_freeFrames, 160, 68, frame, 0x80); } -void DreamBase::obIcons() { +void DreamWebEngine::obIcons() { uint8 value1, value2; getAnyAd(&value1, &value2); if (value1 != 0xff) { @@ -115,7 +115,7 @@ void DreamBase::obIcons() { showFrame(_icons2, 260, 1, 1, 0); } -void DreamBase::examineOb(bool examineAgain) { +void DreamWebEngine::examineOb(bool examineAgain) { _pointerMode = 0; _timeCount = 0; @@ -155,13 +155,13 @@ void DreamBase::examineOb(bool examineAgain) { switch (_invOpen) { case 0: { - RectWithCallback examList[] = { - { 273,320,157,198,&DreamBase::getBackFromOb }, - { 260,300,0,44,&DreamBase::useObject }, - { 210,254,0,44,&DreamBase::selectOpenOb }, - { 144,176,64,96,&DreamBase::setPickup }, - { 0,50,50,200,&DreamBase::examineInventory }, - { 0,320,0,200,&DreamBase::blank }, + RectWithCallback examList[] = { + { 273,320,157,198,&DreamWebEngine::getBackFromOb }, + { 260,300,0,44,&DreamWebEngine::useObject }, + { 210,254,0,44,&DreamWebEngine::selectOpenOb }, + { 144,176,64,96,&DreamWebEngine::setPickup }, + { 0,50,50,200,&DreamWebEngine::examineInventory }, + { 0,320,0,200,&DreamWebEngine::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(examList); @@ -169,24 +169,24 @@ void DreamBase::examineOb(bool examineAgain) { } case 1: { // Note: This table contains the non-constant _openChangeSize! - RectWithCallback invList1[] = { - { 273,320,157,198,&DreamBase::getBackFromOb }, - { 255,294,0,24,&DreamBase::dropObject }, - { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage }, - { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamBase::useOpened }, - { kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamBase::inToInv }, - { 0,320,0,200,&DreamBase::blank }, + RectWithCallback invList1[] = { + { 273,320,157,198,&DreamWebEngine::getBackFromOb }, + { 255,294,0,24,&DreamWebEngine::dropObject }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamWebEngine::incRyanPage }, + { kInventx,_openChangeSize,kInventy+100,kInventy+100+kItempicsize,&DreamWebEngine::useOpened }, + { kInventx,kInventx+(5*kItempicsize),kInventy,kInventy+(2*kItempicsize),&DreamWebEngine::inToInv }, + { 0,320,0,200,&DreamWebEngine::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(invList1); break; } default: { - RectWithCallback withList1[] = { - { 273,320,157,198,&DreamBase::getBackFromOb }, - { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamBase::incRyanPage }, - { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamBase::selectOb }, - { 0,320,0,200,&DreamBase::blank }, + RectWithCallback withList1[] = { + { 273,320,157,198,&DreamWebEngine::getBackFromOb }, + { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamWebEngine::incRyanPage }, + { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamWebEngine::selectOb }, + { 0,320,0,200,&DreamWebEngine::blank }, { 0xFFFF,0,0,0,0 } }; checkCoords(withList1); @@ -212,7 +212,7 @@ void DreamBase::examineOb(bool examineAgain) { _openedOb = 255; } -void DreamBase::inventory() { +void DreamWebEngine::inventory() { if (_vars._manDead == 1 || _vars._watchingTime != 0) { blank(); return; @@ -250,7 +250,7 @@ void DreamBase::inventory() { examineOb(false); } -void DreamBase::transferText(uint8 from, uint8 to) { +void DreamWebEngine::transferText(uint8 from, uint8 to) { _exText.setOffset(to, _vars._exTextPos); const char *src = _freeDesc.getString(from); char *dst = _exText._text + _vars._exTextPos; @@ -260,14 +260,14 @@ void DreamBase::transferText(uint8 from, uint8 to) { _vars._exTextPos += len + 1; } -void DreamBase::getBackFromOb() { +void DreamWebEngine::getBackFromOb() { if (_pickUp != 1) getBack1(); else blank(); } -byte DreamBase::getOpenedSlotCount() { +byte DreamWebEngine::getOpenedSlotCount() { byte obj = _openedOb; switch (_openedType) { case 4: @@ -279,7 +279,7 @@ byte DreamBase::getOpenedSlotCount() { } } -byte DreamBase::getOpenedSlotSize() { +byte DreamWebEngine::getOpenedSlotSize() { byte obj = _openedOb; switch (_openedType) { case 4: @@ -291,7 +291,7 @@ byte DreamBase::getOpenedSlotSize() { } } -void DreamBase::openOb() { +void DreamWebEngine::openOb() { uint8 commandLine[64] = "OBJECT NAME ONE "; copyName(_openedType, _openedOb, commandLine); @@ -304,7 +304,7 @@ void DreamBase::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -void DreamBase::identifyOb() { +void DreamWebEngine::identifyOb() { if (_vars._watchingTime != 0) { blank(); return; @@ -341,7 +341,7 @@ void DreamBase::identifyOb() { blank(); } -ObjectRef DreamBase::findInvPos() { +ObjectRef DreamWebEngine::findInvPos() { uint16 x = _mouseX - kInventx; uint16 y = _mouseY - kInventy; uint8 pos = (x / kItempicsize) + (y / kItempicsize) * 5; @@ -350,7 +350,7 @@ ObjectRef DreamBase::findInvPos() { return _ryanInvList[invPos]; } -void DreamBase::selectOb() { +void DreamWebEngine::selectOb() { ObjectRef objectId = findInvPos(); if (objectId._index == 255) { blank(); @@ -375,7 +375,7 @@ void DreamBase::selectOb() { useRoutine(); } -void DreamBase::setPickup() { +void DreamWebEngine::setPickup() { if (_objectType != kSetObjectType1 && _objectType != kSetObjectType3) { // Object types 1 and 3 are excluded, so the resulting object is a DynObject uint8 dummy; @@ -422,7 +422,7 @@ void DreamBase::setPickup() { workToScreenM(); } -void DreamBase::deleteExFrame(uint8 frameNum) { +void DreamWebEngine::deleteExFrame(uint8 frameNum) { Frame *frame = &_exFrames._frames[frameNum]; uint16 frameSize = frame->width * frame->height; @@ -445,7 +445,7 @@ void DreamBase::deleteExFrame(uint8 frameNum) { } } -void DreamBase::deleteExText(uint8 textNum) { +void DreamWebEngine::deleteExText(uint8 textNum) { uint16 offset = _exText.getOffset(textNum); uint16 startOff = offset; @@ -467,7 +467,7 @@ void DreamBase::deleteExText(uint8 textNum) { } } -void DreamBase::deleteExObject(uint8 index) { +void DreamWebEngine::deleteExObject(uint8 index) { DynObject *obj = getExAd(index); memset(obj, 0xFF, sizeof(DynObject)); @@ -485,7 +485,7 @@ void DreamBase::deleteExObject(uint8 index) { } } -void DreamBase::removeObFromInv() { +void DreamWebEngine::removeObFromInv() { if (_command == 100) return; // object doesn't exist @@ -494,7 +494,7 @@ void DreamBase::removeObFromInv() { deleteExObject(_command); } -void DreamBase::inToInv() { +void DreamWebEngine::inToInv() { if (!_pickUp) { outOfInv(); return; @@ -534,7 +534,7 @@ void DreamBase::inToInv() { delPointer(); } -void DreamBase::outOfInv() { +void DreamWebEngine::outOfInv() { ObjectRef subject = findInvPos(); if (subject._index == 255) { @@ -574,7 +574,7 @@ void DreamBase::outOfInv() { delPointer(); } -void DreamBase::purgeALocation(uint8 index) { +void DreamWebEngine::purgeALocation(uint8 index) { // index == al for (uint8 i = 0; i < kNumexobjects; ++i) { DynObject *t = getExAd(i); @@ -584,7 +584,7 @@ void DreamBase::purgeALocation(uint8 index) { } } -const uint8 *DreamBase::getObTextStart() { +const uint8 *DreamWebEngine::getObTextStart() { const uint16 kSettext = 130*2; const uint16 kFreetext = 82*2; @@ -656,7 +656,7 @@ const uint8 *DreamBase::getObTextStart() { } } -void DreamBase::dropObject() { +void DreamWebEngine::dropObject() { if (_commandType != 223) { _commandType = 223; if (!_pickUp) { @@ -709,7 +709,7 @@ void DreamBase::dropObject() { object->currentLocation = _realLocation; } -bool DreamBase::checkObjectSize() { +bool DreamWebEngine::checkObjectSize() { byte containerSize = getOpenedSlotSize(); DynObject *object = getEitherAdCPP(); // If there is no size defined for the object in the editor, set its size @@ -738,7 +738,7 @@ bool DreamBase::checkObjectSize() { return false; } -void DreamBase::selectOpenOb() { +void DreamWebEngine::selectOpenOb() { uint8 slotSize, slotCount; getAnyAd(&slotSize, &slotCount); if (slotCount == 255) { @@ -771,7 +771,7 @@ void DreamBase::selectOpenOb() { delPointer(); } -void DreamBase::reExFromInv() { +void DreamWebEngine::reExFromInv() { ObjectRef objectId = findInvPos(); _commandType = objectId._type; _command = objectId._index; @@ -779,7 +779,7 @@ void DreamBase::reExFromInv() { _pointerMode = 0; } -void DreamBase::swapWithInv() { +void DreamWebEngine::swapWithInv() { ObjectRef subject; subject._type = _objectType; subject._index = _itemFrame; @@ -819,7 +819,7 @@ void DreamBase::swapWithInv() { delPointer(); } -void DreamBase::useOpened() { +void DreamWebEngine::useOpened() { if (_openedOb == 255) return; // cannot use opened object @@ -883,7 +883,7 @@ void DreamBase::useOpened() { delPointer(); } -void DreamBase::outOfOpen() { +void DreamWebEngine::outOfOpen() { if (_openedOb == 255) return; // cannot use opened object @@ -935,7 +935,7 @@ void DreamBase::outOfOpen() { delPointer(); } -void DreamBase::swapWithOpen() { +void DreamWebEngine::swapWithOpen() { ObjectRef subject; subject._type = _objectType; subject._index = _itemFrame; @@ -1002,14 +1002,14 @@ void DreamBase::swapWithOpen() { delPointer(); } -ObjectRef DreamBase::findOpenPos() { +ObjectRef DreamWebEngine::findOpenPos() { uint8 pos = (_mouseX - kInventx) / kItempicsize; _lastInvPos = pos; return _openInvList[pos]; } -byte DreamBase::transferToEx(uint8 from) { +byte DreamWebEngine::transferToEx(uint8 from) { emergencyPurge(); byte pos = getExPos(); @@ -1037,7 +1037,7 @@ byte DreamBase::transferToEx(uint8 from) { return pos; } -void DreamBase::fillOpen() { +void DreamWebEngine::fillOpen() { delTextLine(); uint8 size = getOpenedSlotCount(); if (size > 4) @@ -1051,7 +1051,7 @@ void DreamBase::fillOpen() { underTextLine(); } -void DreamBase::findAllOpen() { +void DreamWebEngine::findAllOpen() { memset(_openInvList, 0xFF, 32); for (uint8 i = 0; i < kNumexobjects; ++i) { @@ -1080,7 +1080,7 @@ void DreamBase::findAllOpen() { } } -void DreamBase::pickupConts(uint8 from, uint8 containerEx) { +void DreamWebEngine::pickupConts(uint8 from, uint8 containerEx) { const DynObject *obj = getFreeAd(from); if (obj->slotCount == 255) @@ -1112,4 +1112,4 @@ void DreamBase::pickupConts(uint8 from, uint8 containerEx) { } } -} // End of namespace DreamGen +} // End of namespace DreamWeb -- cgit v1.2.3 From c10ea611e8058958a606ff4478871e7909d882d9 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 15:55:47 +0100 Subject: DREAMWEB: Rename getEitherAdCPP to getEitherAd, use obj type enums --- engines/dreamweb/object.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a9cbadcc2c..8e6436c100 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -105,9 +105,9 @@ void DreamWebEngine::obPicture() { } void DreamWebEngine::obIcons() { - uint8 value1, value2; - getAnyAd(&value1, &value2); - if (value1 != 0xff) { + uint8 slotSize, slotCount; + getAnyAd(&slotSize, &slotCount); + if (slotSize != 0xff) { // can open it showFrame(_icons2, 210, 1, 4, 0); } @@ -270,9 +270,9 @@ void DreamWebEngine::getBackFromOb() { byte DreamWebEngine::getOpenedSlotCount() { byte obj = _openedOb; switch (_openedType) { - case 4: + case kExObjectType: return getExAd(obj)->slotCount; - case 2: + case kFreeObjectType: return getFreeAd(obj)->slotCount; default: return getSetAd(obj)->slotCount; @@ -282,9 +282,9 @@ byte DreamWebEngine::getOpenedSlotCount() { byte DreamWebEngine::getOpenedSlotSize() { byte obj = _openedOb; switch (_openedType) { - case 4: + case kExObjectType: return getExAd(obj)->slotSize; - case 2: + case kFreeObjectType: return getFreeAd(obj)->slotSize; default: return getSetAd(obj)->slotSize; @@ -669,7 +669,7 @@ void DreamWebEngine::dropObject() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -711,7 +711,7 @@ void DreamWebEngine::dropObject() { bool DreamWebEngine::checkObjectSize() { byte containerSize = getOpenedSlotSize(); - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); // If there is no size defined for the object in the editor, set its size // to 6. This could be a bad idea, according to the original source. byte objectSize = (object->objectSize != 255) ? object->objectSize : 6; @@ -798,7 +798,7 @@ void DreamWebEngine::swapWithInv() { ObjectRef objectId = findInvPos(); _itemFrame = objectId._index; _objectType = objectId._type; - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; byte prevType2 = _objectType; @@ -806,7 +806,7 @@ void DreamWebEngine::swapWithInv() { _objectType = prevType; _itemFrame = prevFrame; delPointer(); - object = getEitherAdCPP(); + object = getEitherAd(); object->mapad[0] = 4; object->mapad[1] = 255; object->mapad[2] = _lastInvPos; @@ -852,7 +852,7 @@ void DreamWebEngine::useOpened() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -869,7 +869,7 @@ void DreamWebEngine::useOpened() { return; _pickUp = 0; - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = _openedType; object->mapad[1] = _openedOb; object->mapad[2] = _lastInvPos; @@ -922,7 +922,7 @@ void DreamWebEngine::outOfOpen() { _objectType = kExObjectType; } - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; @@ -949,7 +949,7 @@ void DreamWebEngine::swapWithOpen() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -977,7 +977,7 @@ void DreamWebEngine::swapWithOpen() { _objectType = kExObjectType; } - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; @@ -985,7 +985,7 @@ void DreamWebEngine::swapWithOpen() { byte prevFrame2 = _itemFrame; _objectType = prevType; _itemFrame = prevFrame; - object = getEitherAdCPP(); + object = getEitherAd(); object->mapad[0] = _openedType; object->mapad[1] = _openedOb; object->mapad[2] = _lastInvPos; -- cgit v1.2.3 From ca7da4cffc7edacd90df408c441a6eca10cc0e55 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 16:21:30 +0100 Subject: DREAMWEB: Rename a member of SetObject & DynObject to objId SetObject::name and DynObject::id are stored at the exact same offset, and have the exact same meaning (see also objectMatches()). Now they also have the same name, objId. --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8e6436c100..8d4f9bf84a 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -57,7 +57,7 @@ void DreamWebEngine::fillRyan() { } bool DreamWebEngine::isItWorn(const DynObject *object) { - return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); + return (object->objId[0] == 'W'-'A') && (object->objId[1] == 'E'-'A'); } void DreamWebEngine::wornError() { @@ -74,8 +74,8 @@ void DreamWebEngine::wornError() { } void DreamWebEngine::makeWorn(DynObject *object) { - object->id[0] = 'W'-'A'; - object->id[1] = 'E'-'A'; + object->objId[0] = 'W'-'A'; + object->objId[1] = 'E'-'A'; } void DreamWebEngine::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { -- cgit v1.2.3 From 63da2ac271723a33839414827a2f01ef6185490e Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 28 Dec 2011 16:48:10 +0100 Subject: DREAMWEB: Clean up some constants --- engines/dreamweb/object.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a9cbadcc2c..b39be9cbe1 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -585,23 +585,16 @@ void DreamWebEngine::purgeALocation(uint8 index) { } const uint8 *DreamWebEngine::getObTextStart() { - const uint16 kSettext = 130*2; - const uint16 kFreetext = 82*2; - - const uint8 *textBase; + const uint8 *textBase = 0; const uint8 *text; - uint16 textOff; + uint16 textOff = 0; if (_objectType == kFreeObjectType) { - textBase = (const uint8 *)_freeDesc._text; - textOff = kFreetext; text = (const uint8 *)_freeDesc.getString(_command); } else if (_objectType == kSetObjectType1) { textBase = (const uint8 *)_setDesc._text; - textOff = kSettext; + textOff = kNumSetTexts * 2; text = (const uint8 *)_setDesc.getString(_command); } else { - textBase = (const uint8 *)_exText._text; - textOff = kExtext; text = (const uint8 *)_exText.getString(_command); } -- cgit v1.2.3 From ea6546ae25226a22b14cbb847f13ea17a22cd22a Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 28 Dec 2011 16:55:03 +0100 Subject: DREAMWEB: Clean up checkCoords --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 064e2cab4b..249c275a3f 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -155,7 +155,7 @@ void DreamWebEngine::examineOb(bool examineAgain) { switch (_invOpen) { case 0: { - RectWithCallback examList[] = { + RectWithCallback examList[] = { { 273,320,157,198,&DreamWebEngine::getBackFromOb }, { 260,300,0,44,&DreamWebEngine::useObject }, { 210,254,0,44,&DreamWebEngine::selectOpenOb }, @@ -169,7 +169,7 @@ void DreamWebEngine::examineOb(bool examineAgain) { } case 1: { // Note: This table contains the non-constant _openChangeSize! - RectWithCallback invList1[] = { + RectWithCallback invList1[] = { { 273,320,157,198,&DreamWebEngine::getBackFromOb }, { 255,294,0,24,&DreamWebEngine::dropObject }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamWebEngine::incRyanPage }, @@ -182,7 +182,7 @@ void DreamWebEngine::examineOb(bool examineAgain) { break; } default: { - RectWithCallback withList1[] = { + RectWithCallback withList1[] = { { 273,320,157,198,&DreamWebEngine::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamWebEngine::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamWebEngine::selectOb }, -- cgit v1.2.3 From dc4af2afc2013a0ab20955440221dc55332a0063 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 20:31:50 +0100 Subject: DREAMWEB: Added commandOnlyCond() method --- engines/dreamweb/object.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 249c275a3f..bcdf2e5eb9 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -218,10 +218,7 @@ void DreamWebEngine::inventory() { return; } - if (_commandType != 239) { - _commandType = 239; - commandOnly(32); - } + commandOnlyCond(32, 239); if (_mouseButton == _oldButton) return; -- cgit v1.2.3 From 9f99fb5f8a731adf9f1aa9d538029d18c78d99a8 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 23:06:22 +0100 Subject: DREAMWEB: Use ObjectType enums in more places --- engines/dreamweb/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/dreamweb/object.cpp') diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index bcdf2e5eb9..443366561a 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -30,7 +30,7 @@ void DreamWebEngine::showRyanPage() { } void DreamWebEngine::findAllRyan() { - memset(_ryanInvList, 0xff, 60); + memset(_ryanInvList, 0xff, sizeof(_ryanInvList)); for (size_t i = 0; i < kNumexobjects; ++i) { const DynObject *extra = getExAd(i); if (extra->mapad[0] != kExObjectType) @@ -683,12 +683,12 @@ void DreamWebEngine::dropObject() { return; } - if (compare(_itemFrame, 4, "GUNA") || compare(_itemFrame, 4, "SHLD")) { + if (compare(_itemFrame, kExObjectType, "GUNA") || compare(_itemFrame, kExObjectType, "SHLD")) { cantDrop(); return; } - _objectType = 4; + _objectType = kExObjectType; DynObject *object = getExAd(_itemFrame); object->mapad[0] = 0; object->mapad[1] = ((_ryanX + 4) >> 4) + _mapX; -- cgit v1.2.3