aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb/sprite.cpp')
-rw-r--r--engines/dreamweb/sprite.cpp84
1 files changed, 49 insertions, 35 deletions
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index 17d4ddbbed..864bba1d8c 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -21,8 +21,6 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
-#include "graphics/surface.h"
namespace DreamGen {
@@ -90,17 +88,6 @@ Sprite *DreamGenContext::makesprite(uint8 x, uint8 y, uint16 updateCallback, uin
return sprite;
}
-void DreamGenContext::makesprite() { // NB: returns new sprite in es:bx
- Sprite *sprite = makesprite(si & 0xff, si >> 8, cx, dx, di);
-
- // Recover es:bx from sprite
- es = data.word(kBuffers);
- bx = kSpritetable;
- Sprite *sprites = (Sprite *)es.ptr(bx, sizeof(Sprite) * 16);
- bx += sizeof(Sprite) * (sprite - sprites);
- //
-}
-
void DreamGenContext::spriteupdate() {
Sprite *sprites = spritetable();
sprites[0].hidden = data.byte(kRyanon);
@@ -297,7 +284,7 @@ void DreamGenContext::constant(Sprite *sprite, SetObject *objData) {
sprite->frame = 0;
}
uint8 b18 = objData->b18[sprite->frame];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
@@ -361,7 +348,7 @@ void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) {
if (objData->b18[sprite->frame] == 255) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
data.byte(kThroughdoor) = 1;
return;
shutdoor:
@@ -375,14 +362,14 @@ shutdoor:
if (sprite->frame != 0) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5) //nearly
data.byte(kThroughdoor) = 0;
}
void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
uint8 b18 = objData->b18[0];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
@@ -414,7 +401,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, SetObject *objData) {
}
if (sprite->frame == 6) {
- turnpathonCPP(data.byte(kDoorpath));
+ turnpathon(data.byte(kDoorpath));
}
if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0)) {
@@ -426,7 +413,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, SetObject *objData) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5)
data.byte(kThroughdoor) = 1;
return;
@@ -442,10 +429,10 @@ shutdoor2:
}
data.byte(kThroughdoor) = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 0) {
- turnpathoffCPP(data.byte(kDoorpath));
+ turnpathoff(data.byte(kDoorpath));
data.byte(kLockstatus) = 1;
}
}
@@ -453,7 +440,7 @@ shutdoor2:
void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
uint8 liftFlag = data.byte(kLiftflag);
if (liftFlag == 0) { //liftclosed
- turnpathoffCPP(data.byte(kLiftpath));
+ turnpathoff(data.byte(kLiftpath));
if (data.byte(kCounttoopen) != 0) {
_dec(data.byte(kCounttoopen));
@@ -461,10 +448,10 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
data.byte(kLiftflag) = 3;
}
sprite->frame = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 1) { //liftopen
- turnpathonCPP(data.byte(kLiftpath));
+ turnpathon(data.byte(kLiftpath));
if (data.byte(kCounttoclose) != 0) {
_dec(data.byte(kCounttoclose));
@@ -472,7 +459,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
data.byte(kLiftflag) = 2;
}
sprite->frame = 12;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 3) { //openlift
if (sprite->frame == 12) {
@@ -484,7 +471,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
al = 2;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
} else { //closeLift
assert(liftFlag == 2);
if (sprite->frame == 0) {
@@ -496,13 +483,13 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
al = 3;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
}
void DreamGenContext::facerightway() {
- uint8 *paths = getroomspathsCPP();
- uint8 dir = paths[8 * data.byte(kManspath) + 7];
+ PathNode *paths = getroomspaths()->nodes;
+ uint8 dir = paths[data.byte(kManspath)].dir;
data.byte(kTurntoface) = dir;
data.byte(kLeavedirection) = dir;
}
@@ -549,16 +536,16 @@ void DreamGenContext::showreelframe(Reel *reel) {
}
void DreamGenContext::showgamereel() {
- uint16 reelpointer = es.word(bx+3);
+ showgamereel((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine)));
+}
+
+void DreamGenContext::showgamereel(ReelRoutine *routine) {
+ uint16 reelpointer = routine->reelPointer();
if (reelpointer >= 512)
return;
data.word(kReelpointer) = reelpointer;
- push(es);
- push(bx);
plotreel();
- bx = pop();
- es = pop();
- es.word(bx+3) = data.word(kReelpointer);
+ routine->setReelPointer(data.word(kReelpointer));
}
const Frame *DreamGenContext::getreelframeax(uint16 frame) {
@@ -889,5 +876,32 @@ void DreamGenContext::checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uin
*type = tileData[2];
}
+void DreamGenContext::getblockofpixel() {
+ al = getblockofpixel(cl, ch);
+}
+
+uint8 DreamGenContext::getblockofpixel(uint8 x, uint8 y) {
+ uint8 flag, flagEx, type, flagX, flagY;
+ checkone(x + data.word(kMapxstart), y + data.word(kMapystart), &flag, &flagEx, &type, &flagX, &flagY);
+ if (flag & 1)
+ return 0;
+ else
+ return type;
+}
+
+void DreamGenContext::addtopeoplelist() {
+ addtopeoplelist((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine)));
+}
+
+void DreamGenContext::addtopeoplelist(ReelRoutine *routine) {
+ uint16 routinePointer = (const uint8 *)routine - cs.ptr(0, 0);
+
+ People *people = (People *)segRef(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(People));
+ people->setReelPointer(routine->reelPointer());
+ people->setRoutinePointer(routinePointer);
+ people->b4 = routine->b7;
+ data.word(kListpos) += sizeof(People);
+}
+
} /*namespace dreamgen */