aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb
diff options
context:
space:
mode:
authorBertrand Augereau2011-06-28 14:54:26 +0200
committerBertrand Augereau2011-07-18 22:59:15 +0200
commit3ce4f2654075a5bc1b2b93eda9064a5b79180936 (patch)
tree5f8ceccec918b2c5fe679bc233bb690c481f630a /engines/dreamweb
parent04d9db09022fdb2e9e747dfc8305a94fd64760ed (diff)
downloadscummvm-rg350-3ce4f2654075a5bc1b2b93eda9064a5b79180936.tar.gz
scummvm-rg350-3ce4f2654075a5bc1b2b93eda9064a5b79180936.tar.bz2
scummvm-rg350-3ce4f2654075a5bc1b2b93eda9064a5b79180936.zip
DREAMWEB: walking blacklisted
Diffstat (limited to 'engines/dreamweb')
-rw-r--r--engines/dreamweb/dreamgen.cpp53
-rw-r--r--engines/dreamweb/dreamgen.h3
-rw-r--r--engines/dreamweb/stubs.cpp31
-rw-r--r--engines/dreamweb/stubs.h1
4 files changed, 33 insertions, 55 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index ce978b223d..459be79cde 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2385,58 +2385,6 @@ decdir:
es.byte(bx+29) = 0;
}
-void DreamGenContext::walking() {
- STACK_CHECK;
- _cmp(data.byte(kLinedirection), 0);
- if (flags.z())
- goto normalwalk;
- al = data.byte(kLinepointer);
- _dec(al);
- data.byte(kLinepointer) = al;
- _cmp(al, 200);
- if (!flags.c())
- goto endofline;
- goto continuewalk;
-normalwalk:
- al = data.byte(kLinepointer);
- _inc(al);
- data.byte(kLinepointer) = al;
- _cmp(al, data.byte(kLinelength));
- if (!flags.c())
- goto endofline;
-continuewalk:
- ah = 0;
- _add(ax, ax);
- push(es);
- push(bx);
- dx = data;
- es = dx;
- bx = 8173;
- _add(bx, ax);
- ax = es.word(bx);
- bx = pop();
- es = pop();
- es.word(bx+10) = ax;
- return;
-endofline:
- data.byte(kLinepointer) = 254;
- al = data.byte(kDestination);
- data.byte(kManspath) = al;
- _cmp(al, data.byte(kFinaldest));
- if (flags.z())
- goto finishedwalk;
- al = data.byte(kFinaldest);
- data.byte(kDestination) = al;
- push(es);
- push(bx);
- autosetwalk();
- bx = pop();
- es = pop();
- return;
-finishedwalk:
- facerightway();
-}
-
void DreamGenContext::facerightway() {
STACK_CHECK;
push(es);
@@ -21582,7 +21530,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_initman: initman(); break;
case addr_mainman: mainman(); break;
case addr_aboutturn: aboutturn(); break;
- case addr_walking: walking(); break;
case addr_facerightway: facerightway(); break;
case addr_checkforexit: checkforexit(); break;
case addr_adjustdown: adjustdown(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index d924c62c3c..41154a4353 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -665,7 +665,6 @@ public:
static const uint16 addr_adjustdown = 0xc14c;
static const uint16 addr_checkforexit = 0xc148;
static const uint16 addr_facerightway = 0xc144;
- static const uint16 addr_walking = 0xc140;
static const uint16 addr_aboutturn = 0xc13c;
static const uint16 addr_mainman = 0xc138;
static const uint16 addr_initman = 0xc134;
@@ -1671,7 +1670,7 @@ public:
void zoom();
void outofinv();
void viewfolder();
- void walking();
+ //void walking();
void diarykeyp();
//void readabyte();
//void showframe();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index c643e8abb0..afbf65aafe 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -842,6 +842,37 @@ void DreamGenContext::mainmanCPP(Sprite* sprite) {
es = pop();
}
+void DreamGenContext::walking() {
+ Sprite *sprite = (Sprite*)es.ptr(bx, sizeof(Sprite));
+
+ uint8 comp;
+ if (data.byte(kLinedirection) != 0) {
+ --data.byte(kLinepointer);
+ comp = 200;
+ } else {
+ ++data.byte(kLinepointer);
+ comp = data.byte(kLinelength);
+ }
+ if (data.byte(kLinepointer) < comp) {
+ sprite->x = data.byte(kLinedata + data.byte(kLinepointer) * 2 + 0);
+ sprite->y = data.byte(kLinedata + data.byte(kLinepointer) * 2 + 1);
+ return;
+ }
+
+ data.byte(kLinepointer) = 254;
+ data.byte(kManspath) = data.byte(kDestination);
+ if (data.byte(kDestination) == data.byte(kFinaldest)) {
+ facerightway();
+ return;
+ }
+ data.byte(kDestination) = data.byte(kFinaldest);
+ push(es);
+ push(bx);
+ autosetwalk();
+ bx = pop();
+ es = pop();
+}
+
void DreamGenContext::backobject(Sprite* sprite) {
push(es);
push(ds);
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 461cef7419..fb38a1d5b1 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -26,6 +26,7 @@
Sprite* makesprite(uint8 x, uint8 y, uint16 updateCallback, uint16 somethingInDx, uint16 somethingInDi);
void spriteupdate();
void mainmanCPP(Sprite* sprite);
+ void walking();
void backobject(Sprite* sprite);
void constant(Sprite* sprite, ObjData* objData);
void steady(Sprite* sprite, ObjData* objData);