diff options
author | Willem Jan Palenstijn | 2011-11-16 23:27:14 +0100 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-11-16 23:29:17 +0100 |
commit | 81c16d12c8f637890a3a122c31db17cbcb7ee910 (patch) | |
tree | 50a05a13625afb91ef529e77dbca9f4750ce168e /engines/dreamweb | |
parent | bcf440aa3fc3f2a87410da6cef36f8fec2d27393 (diff) | |
download | scummvm-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.cpp | 107 | ||||
-rw-r--r-- | engines/dreamweb/structs.h | 1 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 3 |
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); |