Skip to content

Commit

Permalink
DREAMWEB: Clean up 'dodoor'
Browse files Browse the repository at this point in the history
  • Loading branch information
wjp committed Nov 16, 2011
1 parent bcf440a commit 81c16d1
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 63 deletions.
107 changes: 46 additions & 61 deletions engines/dreamweb/sprite.cpp
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions engines/dreamweb/structs.h
Expand Up @@ -21,6 +21,7 @@
*/

#include "common/endian.h"
#include "common/rect.h"

struct Sprite {
uint16 _updateCallback;
Expand Down
3 changes: 1 addition & 2 deletions engines/dreamweb/stubs.h
Expand Up @@ -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);
Expand Down

0 comments on commit 81c16d1

Please sign in to comment.