aboutsummaryrefslogtreecommitdiff
path: root/engines/teenagent
diff options
context:
space:
mode:
authorVladimir Menshakov2009-09-08 19:24:20 +0000
committerVladimir Menshakov2009-09-08 19:24:20 +0000
commita466f1dcfdbb7d6a5afab39d6016b01312ff25d1 (patch)
treeac2d7950eb47a136fcee1782be6cc46efc6abc03 /engines/teenagent
parent908e6b857df87ae9dc580487cfdffaacf19eb9f3 (diff)
downloadscummvm-rg350-a466f1dcfdbb7d6a5afab39d6016b01312ff25d1.tar.gz
scummvm-rg350-a466f1dcfdbb7d6a5afab39d6016b01312ff25d1.tar.bz2
scummvm-rg350-a466f1dcfdbb7d6a5afab39d6016b01312ff25d1.zip
added actor-walkbox position correction
svn-id: r44013
Diffstat (limited to 'engines/teenagent')
-rw-r--r--engines/teenagent/objects.cpp3
-rw-r--r--engines/teenagent/objects.h2
-rw-r--r--engines/teenagent/scene.cpp21
3 files changed, 22 insertions, 4 deletions
diff --git a/engines/teenagent/objects.cpp b/engines/teenagent/objects.cpp
index c6b64c8b9e..fd97b15891 100644
--- a/engines/teenagent/objects.cpp
+++ b/engines/teenagent/objects.cpp
@@ -35,7 +35,8 @@ void Rect::render(Graphics::Surface *surface, uint8 color) const {
}
void Walkbox::dump() {
- debug(0, "walkbox %02x %02x [%d, %d, %d, %d] %02x %02x %02x %02x ", unk00, unk01,
+ debug(0, "walkbox %02x %02x [%d, %d, %d, %d] %02x %02x %02x %02x ",
+ unk00, orientation,
rect.left, rect.right, rect.top, rect.bottom,
unk0a, unk0b, unk0c, unk0d);
}
diff --git a/engines/teenagent/objects.h b/engines/teenagent/objects.h
index 3aceaaf9e6..157d592064 100644
--- a/engines/teenagent/objects.h
+++ b/engines/teenagent/objects.h
@@ -92,7 +92,7 @@ struct UseObject {
struct Walkbox {
byte unk00;
- byte unk01;
+ byte orientation;
Rect rect;
byte unk0a;
byte unk0b;
diff --git a/engines/teenagent/scene.cpp b/engines/teenagent/scene.cpp
index eab6d62e6e..c9ebdcaf35 100644
--- a/engines/teenagent/scene.cpp
+++ b/engines/teenagent/scene.cpp
@@ -52,9 +52,26 @@ void Scene::moveTo(const Common::Point & _point, byte orient, bool validate) {
debug(0, "moveTo(%d, %d, %u)", point.x, point.y, orient);
if (validate) {
for (byte i = 0; i < walkboxes; ++i) {
- if (walkbox[i]->rect.in(point)) {
+ Walkbox * w = walkbox[i];
+ if (w->rect.in(point)) {
debug(0, "bumped into walkbox %u", i);
- return;
+ byte o = w->orientation;
+ switch(o) {
+ case 1:
+ point.y = w->rect.top - 1;
+ break;
+ case 2:
+ point.x = w->rect.right + 1;
+ break;
+ case 3:
+ point.y = w->rect.bottom + 1;
+ break;
+ case 4:
+ point.x = w->rect.left - 1;
+ break;
+ default:
+ return;
+ }
}
}
}