From 3ce4f2654075a5bc1b2b93eda9064a5b79180936 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Tue, 28 Jun 2011 14:54:26 +0200 Subject: DREAMWEB: walking blacklisted --- engines/dreamweb/dreamgen.cpp | 53 ------------------------------------------- engines/dreamweb/dreamgen.h | 3 +-- engines/dreamweb/stubs.cpp | 31 +++++++++++++++++++++++++ engines/dreamweb/stubs.h | 1 + 4 files changed, 33 insertions(+), 55 deletions(-) (limited to 'engines/dreamweb') 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); -- cgit v1.2.3