aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2011-11-16 23:27:14 +0100
committerWillem Jan Palenstijn2011-11-16 23:29:17 +0100
commit81c16d12c8f637890a3a122c31db17cbcb7ee910 (patch)
tree50a05a13625afb91ef529e77dbca9f4750ce168e /engines/dreamweb
parentbcf440aa3fc3f2a87410da6cef36f8fec2d27393 (diff)
downloadscummvm-rg350-81c16d12c8f637890a3a122c31db17cbcb7ee910.tar.gz
scummvm-rg350-81c16d12c8f637890a3a122c31db17cbcb7ee910.tar.bz2
scummvm-rg350-81c16d12c8f637890a3a122c31db17cbcb7ee910.zip
DREAMWEB: Clean up 'dodoor'
Diffstat (limited to 'engines/dreamweb')
-rw-r--r--engines/dreamweb/sprite.cpp107
-rw-r--r--engines/dreamweb/structs.h1
-rw-r--r--engines/dreamweb/stubs.h3
3 files changed, 48 insertions, 63 deletions
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index 1a1c8e9a13..7bbe2989f8 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -295,76 +295,61 @@ void DreamGenContext::random(Sprite *sprite, SetObject *objData) {
}
void DreamGenContext::doorway(Sprite *sprite, SetObject *objData) {
- data.byte(kDoorcheck1) = (uint8)-24;
- data.byte(kDoorcheck2) = 10;
- data.byte(kDoorcheck3) = (uint8)-30;
- data.byte(kDoorcheck4) = 10;
- dodoor(sprite, objData);
+ Common::Rect check(-24, -30, 10, 10);
+ dodoor(sprite, objData, check);
}
void DreamGenContext::widedoor(Sprite *sprite, SetObject *objData) {
- data.byte(kDoorcheck1) = (uint8)-24;
- data.byte(kDoorcheck2) = 24;
- data.byte(kDoorcheck3) = (uint8)-30;
- data.byte(kDoorcheck4) = 24;
- dodoor(sprite, objData);
+ Common::Rect check(-24, -30, 24, 24);
+ dodoor(sprite, objData, check);
}
-void DreamGenContext::dodoor() {
- Sprite *sprite = (Sprite *)es.ptr(bx, sizeof(Sprite));
- SetObject *objData = (SetObject *)ds.ptr(di, 0);
- dodoor(sprite, objData);
-}
+void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData, Common::Rect check) {
+
+ int ryanx = data.byte(kRyanx);
+ int ryany = data.byte(kRyany);
+
+ // Automatically opening doors: check if Ryan is in range
+
+ check.translate(sprite->x, sprite->y);
+ bool openDoor = check.contains(ryanx, ryany);
+
+ if (openDoor) {
+
+ if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0))
+ sprite->frame = 6;
+
+ ++sprite->frame;
+ if (sprite->frame == 1) { // doorsound2
+ if (data.byte(kReallocation) == 5) // hoteldoor2
+ al = 13;
+ else
+ al = 0;
+ playchannel1();
+ }
+ if (objData->b18[sprite->frame] == 255)
+ --sprite->frame;
+
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
+ data.byte(kThroughdoor) = 1;
-void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) {
- uint8 ryanx = data.byte(kRyanx);
- uint8 ryany = data.byte(kRyany);
- if (ryanx < sprite->x) {
- if (ryanx < sprite->x + (int8)data.byte(kDoorcheck1))
- goto shutdoor;
- } else {
- if (ryanx >= sprite->x + data.byte(kDoorcheck2))
- goto shutdoor;
- }
- if (ryany < sprite->y) {
- if (ryany < sprite->y + (int8)data.byte(kDoorcheck3))
- goto shutdoor;
} else {
- if (ryany >= sprite->y + data.byte(kDoorcheck4))
- goto shutdoor;
- }
-//opendoor:
- if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0))
- sprite->frame = 6;
+ // shut door
- ++sprite->frame;
- if (sprite->frame == 1) { //doorsound2
- if (data.byte(kReallocation) == 5) //hoteldoor2
- al = 13;
- else
- al = 0;
- playchannel1();
- }
- if (objData->b18[sprite->frame] == 255) {
- --sprite->frame;
- }
- sprite->b15 = objData->index = objData->b18[sprite->frame];
- data.byte(kThroughdoor) = 1;
- return;
-shutdoor:
- if (sprite->frame == 5) { //doorsound1;
- if (data.byte(kReallocation) == 5) //hoteldoor1
- al = 13;
- else
- al = 1;
- playchannel1();
- }
- if (sprite->frame != 0) {
- --sprite->frame;
+ if (sprite->frame == 5) { // doorsound1;
+ if (data.byte(kReallocation) == 5) // hoteldoor1
+ al = 13;
+ else
+ al = 1;
+ playchannel1();
+ }
+ if (sprite->frame != 0)
+ --sprite->frame;
+
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
+ if (sprite->frame == 5) // nearly
+ data.byte(kThroughdoor) = 0;
}
- sprite->b15 = objData->index = objData->b18[sprite->frame];
- if (sprite->frame == 5) //nearly
- data.byte(kThroughdoor) = 0;
}
void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index ceb30e3a4f..2775cf49c9 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -21,6 +21,7 @@
*/
#include "common/endian.h"
+#include "common/rect.h"
struct Sprite {
uint16 _updateCallback;
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 3fa764f526..405ae1f55d 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -90,8 +90,7 @@
void constant(Sprite *sprite, SetObject *objData);
void steady(Sprite *sprite, SetObject *objData);
void random(Sprite *sprite, SetObject *objData);
- void dodoor();
- void dodoor(Sprite *sprite, SetObject *objData);
+ void dodoor(Sprite *sprite, SetObject *objData, Common::Rect check);
void doorway(Sprite *sprite, SetObject *objData);
void widedoor(Sprite *sprite, SetObject *objData);
void lockeddoorway(Sprite *sprite, SetObject *objData);