[Scummvm-cvs-logs] scummvm master -> 76db28dafb8afa84a196526e28a529905e62d151
tramboi
bertrand_augereau at yahoo.fr
Tue Aug 23 13:26:29 CEST 2011
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e04761549d DREAMWEB: 'getflagunderp' ported to C++
f6670e9f1f DREAMWEB: 'walkandexamine' ported to C++
76db28dafb DREAMWEB: 'obname' ported to C++
Commit: e04761549d1c4e02be306a2862cbcd6712f24a40
https://github.com/scummvm/scummvm/commit/e04761549d1c4e02be306a2862cbcd6712f24a40
Author: Bertrand Augereau (bertrand_augereau at yahoo.fr)
Date: 2011-08-23T04:22:14-07:00
Commit Message:
DREAMWEB: 'getflagunderp' ported to C++
Changed paths:
devtools/tasmrecover/tasm-recover
engines/dreamweb/dreamgen.cpp
engines/dreamweb/dreamgen.h
engines/dreamweb/stubs.cpp
engines/dreamweb/stubs.h
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 8e37b4e..c884e4a 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -145,6 +145,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'adjustlen',
'finishedwalking',
'checkone',
+ 'getflagunderp',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 0ee8c50..288a7a5 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -15976,18 +15976,6 @@ searchmess:
printdirect();
}
-void DreamGenContext::getflagunderp() {
- STACK_CHECK;
- cx = data.word(kMousex);
- _sub(cx, data.word(kMapadx));
- ax = data.word(kMousey);
- _sub(ax, data.word(kMapady));
- ch = al;
- checkone();
- data.byte(kLastflag) = cl;
- data.byte(kLastflagex) = ch;
-}
-
void DreamGenContext::setwalk() {
STACK_CHECK;
_cmp(data.byte(kLinepointer), 254);
@@ -18582,7 +18570,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_examineobtext: examineobtext(); break;
case addr_printmessage: printmessage(); break;
case addr_printmessage2: printmessage2(); break;
- case addr_getflagunderp: getflagunderp(); break;
case addr_setwalk: setwalk(); break;
case addr_bresenhams: bresenhams(); break;
case addr_workoutframes: workoutframes(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 7ed079c..eb15b18 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -115,7 +115,6 @@ public:
static const uint16 addr_workoutframes = 0xca54;
static const uint16 addr_bresenhams = 0xca50;
static const uint16 addr_setwalk = 0xca44;
- static const uint16 addr_getflagunderp = 0xca40;
static const uint16 addr_printmessage2 = 0xca30;
static const uint16 addr_printmessage = 0xca2c;
static const uint16 addr_examineobtext = 0xca20;
@@ -1843,7 +1842,7 @@ public:
void louischair();
void saveems();
void locationpic();
- void getflagunderp();
+ //void getflagunderp();
void dolook();
void opentvdoor();
void triggermessage();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index f0938ea..7cf1a30 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1163,6 +1163,20 @@ bool DreamGenContext::finishedwalkingCPP() {
return (data.byte(kLinepointer) == 254) && (data.byte(kFacing) == data.byte(kTurntoface));
}
+void DreamGenContext::getflagunderp() {
+ uint8 flag, flagEx;
+ getflagunderp(&flag, &flagEx);
+ cl = flag;
+ ch = flagEx;
+}
+
+void DreamGenContext::getflagunderp(uint8 *flag, uint8 *flagEx) {
+ uint8 type, flagX, flagY;
+ checkone(data.word(kMousex) - data.word(kMapadx), data.word(kMousey) - data.word(kMapady), flag, flagEx, &type, &flagX, &flagY);
+ cl = data.byte(kLastflag) = *flag;
+ ch = data.byte(kLastflagex) = *flagEx;
+}
+
bool DreamGenContext::isCD() {
// The original sources has two codepaths depending if the game is 'if cd' or not
// This is a hack to guess which version to use with the assumption that if we have a cd version
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 9d5550b..80bee35 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -171,4 +171,6 @@
void finishedwalking();
void checkone();
void checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY);
+ void getflagunderp();
+ void getflagunderp(uint8 *flag, uint8 *flagEx);
Commit: f6670e9f1f0f86103e77293f14562ee2c93ecc40
https://github.com/scummvm/scummvm/commit/f6670e9f1f0f86103e77293f14562ee2c93ecc40
Author: Bertrand Augereau (bertrand_augereau at yahoo.fr)
Date: 2011-08-23T04:22:15-07:00
Commit Message:
DREAMWEB: 'walkandexamine' ported to C++
Changed paths:
devtools/tasmrecover/tasm-recover
engines/dreamweb/dreamgen.cpp
engines/dreamweb/dreamgen.h
engines/dreamweb/stubs.cpp
engines/dreamweb/stubs.h
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index c884e4a..1680d4f 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -146,6 +146,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'finishedwalking',
'checkone',
'getflagunderp',
+ 'walkandexamine',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 288a7a5..596fbf1 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -15109,88 +15109,6 @@ notzeronum:
ch = 1;
}
-void DreamGenContext::walkandexamine() {
- STACK_CHECK;
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- al = data.byte(kWalkexamtype);
- data.byte(kCommandtype) = al;
- al = data.byte(kWalkexamnum);
- data.byte(kCommand) = al;
- data.byte(kWalkandexam) = 0;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstowalk:
- setwalk();
- data.byte(kReasseschanges) = 1;
- return;
-diff:
- data.byte(kCommand) = al;
- data.byte(kCommandtype) = ah;
- _cmp(data.byte(kLinepointer), 254);
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- goto middleofwalk;
- al = data.byte(kFacing);
- _cmp(al, data.byte(kTurntoface));
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto notblock;
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto dontcheck;
- cl = data.byte(kRyanx);
- _add(cl, 12);
- ch = data.byte(kRyany);
- _add(ch, 12);
- checkone();
- _cmp(cl, 2);
- if (flags.c())
- goto isblock;
-dontcheck:
- getflagunderp();
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- goto isblock;
- _cmp(data.byte(kLastflag), 128);
- if (!flags.c())
- goto isblock;
- goto toofaraway;
-notblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto toofaraway;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto isblock;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto isaperson;
- examineobtext();
- return;
-middleofwalk:
- blocknametext();
- return;
-isblock:
- blocknametext();
- return;
-isaperson:
- personnametext();
- return;
-toofaraway:
- walktotext();
-}
-
void DreamGenContext::mainscreen() {
STACK_CHECK;
data.byte(kInmaparea) = 0;
@@ -15803,7 +15721,7 @@ notdiffob:
goto diff;
_cmp(data.byte(kWalkandexam), 1);
if (flags.z())
- goto walkandexamine;
+ { walkandexamine(); return; };
_cmp(data.word(kMousebutton), 0);
if (flags.z())
return /* (noobselect) */;
@@ -18646,7 +18564,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_setkeyboardint: setkeyboardint(); break;
case addr_resetkeyboard: resetkeyboard(); break;
case addr_keyboardread: keyboardread(); break;
- case addr_walkandexamine: walkandexamine(); break;
case addr_doload: doload(); break;
case addr_generalerror: generalerror(); break;
default: ::error("invalid call to %04x dispatched", (uint16)ax);
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index eb15b18..9f2774f 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -137,7 +137,6 @@ public:
static const uint16 addr_checkcoords = 0xc9d0;
static const uint16 addr_madmanrun = 0xc9cc;
static const uint16 addr_mainscreen = 0xc9c8;
- static const uint16 addr_walkandexamine = 0xcbb8;
static const uint16 addr_convnum = 0xc9c4;
static const uint16 addr_showword = 0xc9c0;
static const uint16 addr_twodigitnum = 0xc9bc;
@@ -194,7 +193,7 @@ public:
static const uint16 addr_createname = 0xc8cc;
static const uint16 addr_loadspeech = 0xc8c8;
static const uint16 addr_loadold = 0xc8c4;
- static const uint16 addr_doload = 0xcbbc;
+ static const uint16 addr_doload = 0xcbb8;
static const uint16 addr_newgame = 0xc8c0;
static const uint16 addr_showdecisions = 0xc8bc;
static const uint16 addr_decide = 0xc8b8;
@@ -210,7 +209,7 @@ public:
static const uint16 addr_oldtonames = 0xc88c;
static const uint16 addr_namestoold = 0xc888;
static const uint16 addr_error = 0xc884;
- static const uint16 addr_generalerror = 0xcbc0;
+ static const uint16 addr_generalerror = 0xcbbc;
static const uint16 addr_dosreturn = 0xc880;
static const uint16 addr_shownames = 0xc87c;
static const uint16 addr_showslots = 0xc878;
@@ -1811,7 +1810,7 @@ public:
void usetrainer();
//void allocatework();
void addtopresslist();
- void walkandexamine();
+ //void walkandexamine();
void dmaend();
//void quickquit2();
void twodigitnum();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 7cf1a30..82e66ba 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1177,6 +1177,16 @@ void DreamGenContext::getflagunderp(uint8 *flag, uint8 *flagEx) {
ch = data.byte(kLastflagex) = *flagEx;
}
+void DreamGenContext::walkandexamine() {
+ if (! finishedwalkingCPP())
+ return;
+ data.byte(kCommandtype) = data.byte(kWalkexamtype);
+ data.byte(kCommand) = data.byte(kWalkexamnum);
+ data.byte(kWalkandexam) = 0;
+ if (data.byte(kCommandtype) != 5)
+ examineob();
+}
+
bool DreamGenContext::isCD() {
// The original sources has two codepaths depending if the game is 'if cd' or not
// This is a hack to guess which version to use with the assumption that if we have a cd version
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 80bee35..036e812 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -173,4 +173,5 @@
void checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY);
void getflagunderp();
void getflagunderp(uint8 *flag, uint8 *flagEx);
+ void walkandexamine();
Commit: 76db28dafb8afa84a196526e28a529905e62d151
https://github.com/scummvm/scummvm/commit/76db28dafb8afa84a196526e28a529905e62d151
Author: Bertrand Augereau (bertrand_augereau at yahoo.fr)
Date: 2011-08-23T04:22:15-07:00
Commit Message:
DREAMWEB: 'obname' ported to C++
Changed paths:
devtools/tasmrecover/tasm-recover
engines/dreamweb/dreamgen.cpp
engines/dreamweb/dreamgen.h
engines/dreamweb/stubs.cpp
engines/dreamweb/stubs.h
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 1680d4f..91270aa 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -147,6 +147,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'checkone',
'getflagunderp',
'walkandexamine',
+ 'obname',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 596fbf1..026299a 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -15703,140 +15703,6 @@ void DreamGenContext::afterintroroom() {
data.byte(kNowinnewroom) = 0;
}
-void DreamGenContext::obname() {
- STACK_CHECK;
- _cmp(data.byte(kReasseschanges), 0);
- if (flags.z())
- goto notnewpath;
- data.byte(kReasseschanges) = 0;
- goto diff;
-notnewpath:
- _cmp(ah, data.byte(kCommandtype));
- if (flags.z())
- goto notdiffob;
- goto diff;
-notdiffob:
- _cmp(al, data.byte(kCommand));
- if (!flags.z())
- goto diff;
- _cmp(data.byte(kWalkandexam), 1);
- if (flags.z())
- { walkandexamine(); return; };
- _cmp(data.word(kMousebutton), 0);
- if (flags.z())
- return /* (noobselect) */;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto isntblock;
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- return /* (noobselect) */;
-isntblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto wantstowalk;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto wantstowalk;
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto wantstotalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstotalk:
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- return /* (noobselect) */;
- talk();
- return;
-walkandexamine:
- finishedwalking();
- if (!flags.z())
- return /* (noobselect) */;
- al = data.byte(kWalkexamtype);
- data.byte(kCommandtype) = al;
- al = data.byte(kWalkexamnum);
- data.byte(kCommand) = al;
- data.byte(kWalkandexam) = 0;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- return /* (noobselect) */;
- examineob();
- return;
-wantstowalk:
- setwalk();
- data.byte(kReasseschanges) = 1;
- return;
-diff:
- data.byte(kCommand) = al;
- data.byte(kCommandtype) = ah;
- _cmp(data.byte(kLinepointer), 254);
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.word(kWatchingtime), 0);
- if (!flags.z())
- goto middleofwalk;
- al = data.byte(kFacing);
- _cmp(al, data.byte(kTurntoface));
- if (!flags.z())
- goto middleofwalk;
- _cmp(data.byte(kCommandtype), 3);
- if (!flags.z())
- goto notblock;
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto dontcheck;
- cl = data.byte(kRyanx);
- _add(cl, 12);
- ch = data.byte(kRyany);
- _add(ch, 12);
- checkone();
- _cmp(cl, 2);
- if (flags.c())
- goto isblock;
-dontcheck:
- getflagunderp();
- _cmp(data.byte(kLastflag), 2);
- if (flags.c())
- goto isblock;
- _cmp(data.byte(kLastflag), 128);
- if (!flags.c())
- goto isblock;
- goto toofaraway;
-notblock:
- bl = data.byte(kManspath);
- _cmp(bl, data.byte(kPointerspath));
- if (!flags.z())
- goto toofaraway;
- _cmp(data.byte(kCommandtype), 3);
- if (flags.z())
- goto isblock;
- _cmp(data.byte(kCommandtype), 5);
- if (flags.z())
- goto isaperson;
- examineobtext();
- return;
-middleofwalk:
- blocknametext();
- return;
-isblock:
- blocknametext();
- return;
-isaperson:
- personnametext();
- return;
-toofaraway:
- walktotext();
-}
-
void DreamGenContext::examineobtext() {
STACK_CHECK;
bl = data.byte(kCommand);
@@ -18484,7 +18350,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_atmospheres: atmospheres(); break;
case addr_walkintoroom: walkintoroom(); break;
case addr_afterintroroom: afterintroroom(); break;
- case addr_obname: obname(); break;
case addr_examineobtext: examineobtext(); break;
case addr_printmessage: printmessage(); break;
case addr_printmessage2: printmessage2(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 9f2774f..520c269 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -118,7 +118,6 @@ public:
static const uint16 addr_printmessage2 = 0xca30;
static const uint16 addr_printmessage = 0xca2c;
static const uint16 addr_examineobtext = 0xca20;
- static const uint16 addr_obname = 0xca18;
static const uint16 addr_afterintroroom = 0xca14;
static const uint16 addr_walkintoroom = 0xca10;
static const uint16 addr_atmospheres = 0xca0c;
@@ -1477,7 +1476,7 @@ public:
//void domix();
void priesttext();
void paneltomap();
- void obname();
+ //void obname();
void getridoftemp3();
void getridoftemp2();
void usebalcony();
@@ -1606,7 +1605,7 @@ public:
void dumpmenu();
void chewy();
void accesslighton();
- void dosreturn();
+ void useplinth();
//void adjustlen();
//void quickquit();
void showpointer();
@@ -1715,7 +1714,7 @@ public:
void describeob();
void deleteexframe();
void folderexit();
- void useplinth();
+ void dosreturn();
void wheelsound();
void actualsave();
void autolook();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 82e66ba..576bfac 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -947,9 +947,7 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) {
if (y >= ymax)
continue;
data.word(kPersondata) = people->w2();
- al = people->b4;
- ah = 5;
- obname();
+ obname(people->b4, 5);
return true;
}
return false;
@@ -973,9 +971,7 @@ bool DreamGenContext::checkiffree(uint8 x, uint8 y) {
continue;
if (y >= objPos->yMax)
continue;
- al = objPos->index;
- ah = 2;
- obname();
+ obname(objPos->index, 2);
return true;
}
return false;
@@ -1187,6 +1183,81 @@ void DreamGenContext::walkandexamine() {
examineob();
}
+void DreamGenContext::obname() {
+ obname(al, ah);
+}
+
+void DreamGenContext::obname(uint8 command, uint8 commandType) {
+ if (data.byte(kReasseschanges) == 0) {
+ if ((commandType == data.byte(kCommandtype)) && (command == data.byte(kCommand))) {
+ if (data.byte(kWalkandexam) == 1) {
+ walkandexamine();
+ return;
+ } else if (data.word(kMousebutton) == 0)
+ return;
+ else if ((data.byte(kCommandtype) == 3) && (data.byte(kLastflag) < 2))
+ return;
+ else if ((data.byte(kManspath) != data.byte(kPointerspath)) || (data.byte(kCommandtype) == 3)) {
+ setwalk();
+ data.byte(kReasseschanges) = 1;
+ return;
+ } else if (! finishedwalkingCPP())
+ return;
+ else if (data.byte(kCommandtype) == 5) {
+ if (data.word(kWatchingtime) == 0)
+ talk();
+ return;
+ } else {
+ if (data.word(kWatchingtime) == 0)
+ examineob();
+ return;
+ }
+ }
+ } else
+ data.byte(kReasseschanges) = 0;
+
+ data.byte(kCommand) = command;
+ data.byte(kCommandtype) = commandType;
+ if ((data.byte(kLinepointer) != 254) || (data.word(kWatchingtime) != 0) || (data.byte(kFacing) != data.byte(kTurntoface))) {
+ blocknametext();
+ return;
+ } else if (data.byte(kCommandtype) != 3) {
+ if (data.byte(kManspath) != data.byte(kPointerspath)) {
+ walktotext();
+ return;
+ } else if (data.byte(kCommandtype) == 3) {
+ blocknametext();
+ return;
+ } else if (data.byte(kCommandtype) == 5) {
+ personnametext();
+ return;
+ } else {
+ examineobtext();
+ return;
+ }
+ }
+ if (data.byte(kManspath) == data.byte(kPointerspath)) {
+ uint8 flag, flagEx, type, flagX, flagY;
+ checkone(data.byte(kRyanx) + 12, data.byte(kRyany) + 12, &flag, &flagEx, &type, &flagX, &flagY);
+ if (flag < 2) {
+ blocknametext();
+ return;
+ }
+ }
+
+ getflagunderp();
+ if (data.byte(kLastflag) < 2) {
+ blocknametext();
+ return;
+ } else if (data.byte(kLastflag) >= 128) {
+ blocknametext();
+ return;
+ } else {
+ walktotext();
+ return;
+ }
+}
+
bool DreamGenContext::isCD() {
// The original sources has two codepaths depending if the game is 'if cd' or not
// This is a hack to guess which version to use with the assumption that if we have a cd version
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 036e812..3b5225d 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -174,4 +174,6 @@
void getflagunderp();
void getflagunderp(uint8 *flag, uint8 *flagEx);
void walkandexamine();
+ void obname();
+ void obname(uint8 command, uint8 commandType);
More information about the Scummvm-git-logs
mailing list