aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/stubs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb/stubs.cpp')
-rw-r--r--engines/dreamweb/stubs.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 5b42e37079..ff79a90088 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1738,11 +1738,11 @@ bool DreamGenContext::compare(uint8 index, uint8 flag, const char id[4]) {
}
void DreamGenContext::isitdescribed() {
- ObjPos *pos = (ObjPos *)es.ptr(bx, sizeof(ObjPos));
+ const ObjPos *pos = (const ObjPos *)es.ptr(bx, sizeof(ObjPos));
flags._z = !isitdescribed(pos);
}
-bool DreamGenContext::isitdescribed(ObjPos *pos) {
+bool DreamGenContext::isitdescribed(const ObjPos *pos) {
uint16 offset = segRef(data.word(kSetdesc)).word(kSettextdat + pos->index * 2);
uint8 result = segRef(data.word(kSetdesc)).byte(kSettext + offset);
return result != 0;
@@ -1755,5 +1755,34 @@ bool DreamGenContext::isCD() {
// Maybe detect the version during game id?
return (data.byte(kSpeechloaded) == 1);
}
+
+void DreamGenContext::checkifset() {
+ flags._z = !checkifset(al, ah);
+}
+
+bool DreamGenContext::checkifset(uint8 x, uint8 y) {
+ const ObjPos *setList = (const ObjPos *)segRef(data.word(kBuffers)).ptr(kSetlist, sizeof(ObjPos) * 128);
+ for (size_t i = 0; i < 128; ++i) {
+ const ObjPos *pos = setList + 127 - i;
+ if (pos->index == 0xff)
+ continue;
+ if (x < pos->xMin)
+ continue;
+ if (x >= pos->xMax)
+ continue;
+ if (y < pos->yMin)
+ continue;
+ if (y >= pos->yMax)
+ continue;
+ if (! pixelcheckset(pos, x, y))
+ continue;
+ if (! isitdescribed(pos))
+ continue;
+ obname(pos->index, 1);
+ return true;
+ }
+ return false;
+}
+
} /*namespace dreamgen */