DREAMWEB: Clean up 'dodoor'
This commit is contained in:
parent
bcf440aa3f
commit
81c16d12c8
3 changed files with 49 additions and 64 deletions
|
@ -295,45 +295,27 @@ void DreamGenContext::random(Sprite *sprite, SetObject *objData) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DreamGenContext::doorway(Sprite *sprite, SetObject *objData) {
|
void DreamGenContext::doorway(Sprite *sprite, SetObject *objData) {
|
||||||
data.byte(kDoorcheck1) = (uint8)-24;
|
Common::Rect check(-24, -30, 10, 10);
|
||||||
data.byte(kDoorcheck2) = 10;
|
dodoor(sprite, objData, check);
|
||||||
data.byte(kDoorcheck3) = (uint8)-30;
|
|
||||||
data.byte(kDoorcheck4) = 10;
|
|
||||||
dodoor(sprite, objData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DreamGenContext::widedoor(Sprite *sprite, SetObject *objData) {
|
void DreamGenContext::widedoor(Sprite *sprite, SetObject *objData) {
|
||||||
data.byte(kDoorcheck1) = (uint8)-24;
|
Common::Rect check(-24, -30, 24, 24);
|
||||||
data.byte(kDoorcheck2) = 24;
|
dodoor(sprite, objData, check);
|
||||||
data.byte(kDoorcheck3) = (uint8)-30;
|
|
||||||
data.byte(kDoorcheck4) = 24;
|
|
||||||
dodoor(sprite, objData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DreamGenContext::dodoor() {
|
void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData, Common::Rect check) {
|
||||||
Sprite *sprite = (Sprite *)es.ptr(bx, sizeof(Sprite));
|
|
||||||
SetObject *objData = (SetObject *)ds.ptr(di, 0);
|
int ryanx = data.byte(kRyanx);
|
||||||
dodoor(sprite, objData);
|
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) {
|
||||||
|
|
||||||
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))
|
if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0))
|
||||||
sprite->frame = 6;
|
sprite->frame = 6;
|
||||||
|
|
||||||
|
@ -345,13 +327,15 @@ void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) {
|
||||||
al = 0;
|
al = 0;
|
||||||
playchannel1();
|
playchannel1();
|
||||||
}
|
}
|
||||||
if (objData->b18[sprite->frame] == 255) {
|
if (objData->b18[sprite->frame] == 255)
|
||||||
--sprite->frame;
|
--sprite->frame;
|
||||||
}
|
|
||||||
sprite->b15 = objData->index = objData->b18[sprite->frame];
|
sprite->b15 = objData->index = objData->b18[sprite->frame];
|
||||||
data.byte(kThroughdoor) = 1;
|
data.byte(kThroughdoor) = 1;
|
||||||
return;
|
|
||||||
shutdoor:
|
} else {
|
||||||
|
// shut door
|
||||||
|
|
||||||
if (sprite->frame == 5) { // doorsound1;
|
if (sprite->frame == 5) { // doorsound1;
|
||||||
if (data.byte(kReallocation) == 5) // hoteldoor1
|
if (data.byte(kReallocation) == 5) // hoteldoor1
|
||||||
al = 13;
|
al = 13;
|
||||||
|
@ -359,13 +343,14 @@ shutdoor:
|
||||||
al = 1;
|
al = 1;
|
||||||
playchannel1();
|
playchannel1();
|
||||||
}
|
}
|
||||||
if (sprite->frame != 0) {
|
if (sprite->frame != 0)
|
||||||
--sprite->frame;
|
--sprite->frame;
|
||||||
}
|
|
||||||
sprite->b15 = objData->index = objData->b18[sprite->frame];
|
sprite->b15 = objData->index = objData->b18[sprite->frame];
|
||||||
if (sprite->frame == 5) // nearly
|
if (sprite->frame == 5) // nearly
|
||||||
data.byte(kThroughdoor) = 0;
|
data.byte(kThroughdoor) = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
|
void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
|
||||||
uint8 b18 = objData->b18[0];
|
uint8 b18 = objData->b18[0];
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "common/endian.h"
|
#include "common/endian.h"
|
||||||
|
#include "common/rect.h"
|
||||||
|
|
||||||
struct Sprite {
|
struct Sprite {
|
||||||
uint16 _updateCallback;
|
uint16 _updateCallback;
|
||||||
|
|
|
@ -90,8 +90,7 @@
|
||||||
void constant(Sprite *sprite, SetObject *objData);
|
void constant(Sprite *sprite, SetObject *objData);
|
||||||
void steady(Sprite *sprite, SetObject *objData);
|
void steady(Sprite *sprite, SetObject *objData);
|
||||||
void random(Sprite *sprite, SetObject *objData);
|
void random(Sprite *sprite, SetObject *objData);
|
||||||
void dodoor();
|
void dodoor(Sprite *sprite, SetObject *objData, Common::Rect check);
|
||||||
void dodoor(Sprite *sprite, SetObject *objData);
|
|
||||||
void doorway(Sprite *sprite, SetObject *objData);
|
void doorway(Sprite *sprite, SetObject *objData);
|
||||||
void widedoor(Sprite *sprite, SetObject *objData);
|
void widedoor(Sprite *sprite, SetObject *objData);
|
||||||
void lockeddoorway(Sprite *sprite, SetObject *objData);
|
void lockeddoorway(Sprite *sprite, SetObject *objData);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue