aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorlukaslw2014-07-18 22:40:01 +0200
committerlukaslw2014-07-18 22:40:01 +0200
commitd62a85c7859c83a2251e901ed1b235b205139016 (patch)
tree6f9522525e7f63b9f800dd09058b7762e081ccc8 /engines
parent40e1ddf88a191dfd15bd0644f89ef6b6bc4c9f7c (diff)
downloadscummvm-rg350-d62a85c7859c83a2251e901ed1b235b205139016.tar.gz
scummvm-rg350-d62a85c7859c83a2251e901ed1b235b205139016.tar.bz2
scummvm-rg350-d62a85c7859c83a2251e901ed1b235b205139016.zip
PRINCE: plotTracePoint() fix
Diffstat (limited to 'engines')
-rw-r--r--engines/prince/prince.cpp16
-rw-r--r--engines/prince/prince.h1
2 files changed, 12 insertions, 5 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index bbcb9bbb60..05db000869 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -93,7 +93,7 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc)
_fpFlag(0), _fpX(0), _fpY(0), _fpX1(0), _fpY1(0), _coordsBufEnd(nullptr), _coordsBuf(nullptr), _coords(nullptr),
_traceLineLen(0), _traceLineFlag(0), _rembBitmapTemp(nullptr), _rembBitmap(nullptr), _rembMask(0), _rembX(0), _rembY(0),
_checkBitmapTemp(nullptr), _checkBitmap(nullptr), _checkMask(0), _checkX(0), _checkY(0), _traceLineFirstPointFlag(false),
- _coordsBuf2(nullptr), _coords2(nullptr), _coordsBuf3(nullptr), _coords3(nullptr),
+ _tracePointFirstPointFlag(false), _coordsBuf2(nullptr), _coords2(nullptr), _coordsBuf3(nullptr), _coords3(nullptr),
_tracePointFlag(0), _shanLen1(0), _directionTable(nullptr) {
// Debug/console setup
@@ -3878,11 +3878,16 @@ void PrinceEngine::specialPlotInside2(int x, int y) {
void PrinceEngine::plotTracePoint(int x, int y, int color, void *data) {
PrinceEngine *tracePoint = (PrinceEngine *)data;
if (!tracePoint->_tracePointFlag) {
- if (tracePoint->getPixelAddr(tracePoint->_roomPathBitmap, x, y)) {
- tracePoint->specialPlotInside2(x, y);
- tracePoint->_tracePointFlag = 0;
+ if (!tracePoint->_tracePointFirstPointFlag) {
+ if (tracePoint->getPixelAddr(tracePoint->_roomPathBitmap, x, y)) {
+ tracePoint->specialPlotInside2(x, y);
+ tracePoint->_tracePointFlag = 0;
+ } else {
+ tracePoint->_tracePointFlag = -1;
+ }
} else {
- tracePoint->_tracePointFlag = -1;
+ tracePoint->_tracePointFirstPointFlag = false;
+ tracePoint->_tracePointFlag = 0;
}
}
}
@@ -3922,6 +3927,7 @@ void PrinceEngine::approxPath() {
}
//no_store_first
_tracePointFlag = 0;
+ _tracePointFirstPointFlag = true;
Graphics::drawLine(x1, y1, x2, y2, 0, &this->plotTracePoint, this);
if (!_tracePointFlag) {
tempCoords = tempCoordsBuf - 4;
diff --git a/engines/prince/prince.h b/engines/prince/prince.h
index 1f9244c58c..7715737b1e 100644
--- a/engines/prince/prince.h
+++ b/engines/prince/prince.h
@@ -462,6 +462,7 @@ public:
int _traceLineFlag; // return value of plotTraceLine
bool _traceLineFirstPointFlag; // if plotTraceLine after first point
int _tracePointFlag; // return value of plotTracePoint
+ bool _tracePointFirstPointFlag; // if plotTracePoint after first point
byte *_directionTable;
int _shanLen1;