aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kurushin2005-04-03 15:32:04 +0000
committerAndrew Kurushin2005-04-03 15:32:04 +0000
commit8ea88c95d663fac08a1492c2d3c7138e7392dbbc (patch)
tree60869aa13063d9dcff93ade2a4f7fd3992d4fef8
parentb507231f7135f0af2a27b047f1982685736e0e7b (diff)
downloadscummvm-rg350-8ea88c95d663fac08a1492c2d3c7138e7392dbbc.tar.gz
scummvm-rg350-8ea88c95d663fac08a1492c2d3c7138e7392dbbc.tar.bz2
scummvm-rg350-8ea88c95d663fac08a1492c2d3c7138e7392dbbc.zip
- fixed tile doors drawing
- right mouse action fixed svn-id: r17347
-rw-r--r--saga/isomap.cpp23
-rw-r--r--saga/isomap.h3
-rw-r--r--saga/music.cpp2
-rw-r--r--saga/objectmap.cpp21
-rw-r--r--saga/render.cpp6
-rw-r--r--saga/saga.cpp2
-rw-r--r--saga/script.cpp10
-rw-r--r--saga/sfuncs.cpp7
-rw-r--r--saga/sthread.cpp2
9 files changed, 54 insertions, 22 deletions
diff --git a/saga/isomap.cpp b/saga/isomap.cpp
index 63d77a7cbe..484ee5ef3b 100644
--- a/saga/isomap.cpp
+++ b/saga/isomap.cpp
@@ -230,7 +230,7 @@ void IsoMap::loadMulti(const byte * resourcePointer, size_t resourceLength) {
if (_multiTable == NULL) {
memoryError("IsoMap::loadMulti");
}
- debug(0,"resourceLength=%d but should be %d",resourceLength, 14*_multiCount + 2);
+
for (i = 0; i < _multiCount; i++) {
multiTileEntryData = &_multiTable[i];
readS.readUint32();//skip
@@ -370,7 +370,6 @@ int16 IsoMap::findMulti(int16 tileIndex, int16 absU, int16 absV, int16 absH) {
warning("something terrible happened");
return 1;
}
-
return tileIndex;
}
}
@@ -606,7 +605,7 @@ void IsoMap::drawSpritePlatform(SURFACE *ds, uint16 platformIndex, const Point &
int16 u, v;
Point s;
Point s0;
- int16 tileIndex;
+ uint16 tileIndex;
Location copyLocation(location);
if (_tilePlatformsCount <= platformIndex) {
@@ -646,7 +645,7 @@ void IsoMap::drawSpritePlatform(SURFACE *ds, uint16 platformIndex, const Point &
tileIndex = tilePlatform->tiles[u][v];
if (tileIndex != 0) {
if (tileIndex & SAGA_MULTI_TILE) {
- tileIndex = findMulti(tileIndex, absU + u, absU + v, absH);
+ tileIndex = findMulti(tileIndex, absU + u, absV + v, absH);
}
drawTile(ds, tileIndex, s, &copyLocation);
@@ -661,7 +660,7 @@ void IsoMap::drawPlatform(SURFACE *ds, uint16 platformIndex, const Point &point,
int16 u, v;
Point s;
Point s0;
- int16 tileIndex;
+ uint16 tileIndex;
if (_tilePlatformsCount <= platformIndex) {
error("IsoMap::drawPlatform wrong platformIndex");
@@ -698,7 +697,7 @@ void IsoMap::drawPlatform(SURFACE *ds, uint16 platformIndex, const Point &point,
tileIndex = tilePlatform->tiles[u][v];
if (tileIndex > 1) {
if (tileIndex & SAGA_MULTI_TILE) {
- tileIndex = findMulti(tileIndex, absU + u, absU + v, absH);
+ tileIndex = findMulti(tileIndex, absU + u, absV + v, absH);
}
drawTile(ds, tileIndex, s, NULL);
@@ -1342,6 +1341,17 @@ void IsoMap::findTilePath(ActorData* actor, const Location &start, const Locatio
}
}
+void IsoMap::setTileDoorState(int doorNumber, int doorState) {
+ MultiTileEntryData *multiTileEntryData;
+
+ if ((doorNumber < 0) || (doorNumber >= _multiCount)) {
+ error("setTileDoorState: doorNumber >= _multiCount");
+ }
+
+ multiTileEntryData = &_multiTable[doorNumber];
+ multiTileEntryData->currentState = doorState;
+}
+
static const int16 directions[8][2] = {
{ 16, 16},
{ 16, 0},
@@ -1354,6 +1364,7 @@ static const int16 directions[8][2] = {
};
+
bool IsoMap::nextTileTarget(ActorData* actor) {
uint16 dir;
diff --git a/saga/isomap.h b/saga/isomap.h
index ebb8aa083c..971d53ba52 100644
--- a/saga/isomap.h
+++ b/saga/isomap.h
@@ -166,7 +166,8 @@ public:
void placeOnTileMap(const Location &start, Location &result, int16 distance, uint16 direction);
void findTilePath(ActorData* actor, const Location &start, const Location &end);
bool nextTileTarget(ActorData* actor);
-
+ void setTileDoorState(int doorNumber, int doorState);
+
private:
void drawTiles(SURFACE *ds, const Location *location);
void drawMetaTile(SURFACE *ds, uint16 metaTileIndex, const Point &point, int16 absU, int16 absV);
diff --git a/saga/music.cpp b/saga/music.cpp
index 0e239fa81c..70fe3b0c8f 100644
--- a/saga/music.cpp
+++ b/saga/music.cpp
@@ -268,7 +268,7 @@ void MusicPlayer::metaEvent(byte type, byte *data, uint16 length) {
stopMusic();
break;
default:
- warning("Unhandled meta event: %02x", type);
+ //warning("Unhandled meta event: %02x", type);
break;
}
}
diff --git a/saga/objectmap.cpp b/saga/objectmap.cpp
index 4a037e98c0..0ba295ce35 100644
--- a/saga/objectmap.cpp
+++ b/saga/objectmap.cpp
@@ -133,13 +133,26 @@ bool HitZone::hitTest(const Point &testPoint) {
}
void HitZone::draw(SURFACE *ds, int color) {
- int i, pointsCount;
+ int i, pointsCount, j;
+ Location location;
HitZone::ClickArea *clickArea;
Point *points;
for (i = 0; i < _clickAreasCount; i++) {
clickArea = &_clickAreas[i];
pointsCount = clickArea->pointsCount;
- points = clickArea->points;
+ if (_vm->_scene->getFlags() & kSceneFlagISO) {
+ points = (Point*)malloc(sizeof(Point) * pointsCount);
+ for (j = 0; j < pointsCount; j++) {
+ location.u() = clickArea->points[j].x;
+ location.v() = clickArea->points[j].y;
+ location.z = 0;
+ _vm->_isoMap->tileCoordsToScreenPoint(location, points[j]);
+ }
+ //
+ } else {
+ points = clickArea->points;
+ }
+
if (pointsCount == 2) {
// 2 points represent a box
drawFrame(ds, &points[0], &points[1], color);
@@ -149,6 +162,10 @@ void HitZone::draw(SURFACE *ds, int color) {
drawPolyLine(ds, points, pointsCount, color);
}
}
+ if (_vm->_scene->getFlags() & kSceneFlagISO) {
+ free(points);
+ }
+
}
}
diff --git a/saga/render.cpp b/saga/render.cpp
index 457168ca28..d10c9e8671 100644
--- a/saga/render.cpp
+++ b/saga/render.cpp
@@ -124,15 +124,15 @@ int Render::drawScene() {
if (_vm->_interface->getMode() != kPanelFade) {
// Display scene maps, if applicable
+
+ // Draw queued actors
+ _vm->_actor->drawActors();
if (getFlags() & RF_OBJECTMAP_TEST) {
if (_vm->_scene->_objectMap)
_vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, kITEColorBrightWhite, kITEColorBlack);
if (_vm->_scene->_actionMap)
_vm->_scene->_actionMap->draw(backbuf_surface, mouse_pt, kITEColorRed, kITEColorBlack);
}
-
- // Draw queued actors
- _vm->_actor->drawActors();
if (getFlags() & RF_ACTOR_PATH_TEST) {
_vm->_actor->drawPathTest();
}
diff --git a/saga/saga.cpp b/saga/saga.cpp
index 52882b2df5..9aeba8cd8a 100644
--- a/saga/saga.cpp
+++ b/saga/saga.cpp
@@ -390,7 +390,7 @@ void SagaEngine::loadStrings(StringsTable &stringsTable, const byte *stringsPoin
error("SagaEngine::loadStrings wrong strings table");
}
stringsTable.strings[i] = (const char *)stringsTable.stringsPointer + offset;
- debug(9, "string[%i]=%s", i, stringsTable.strings[i]);
+ //debug(9, "string[%i]=%s", i, stringsTable.strings[i]);
i++;
}
stringsTable.stringsCount = stringsCount;
diff --git a/saga/script.cpp b/saga/script.cpp
index 7f65c8c696..f1f6e13734 100644
--- a/saga/script.cpp
+++ b/saga/script.cpp
@@ -743,10 +743,12 @@ void Script::whichObject(const Point& mousePoint) {
newRightButtonVerb = _leftButtonVerb = kVerbWalkTo;
}
} else {
- if (_firstObjectSet) {
- objectId = ID_NOTHING;
- } else {
- newRightButtonVerb = _leftButtonVerb = kVerbLookAt;
+ if (newRightButtonVerb == kVerbLookOnly) {
+ if (_firstObjectSet) {
+ objectId = ID_NOTHING;
+ } else {
+ newRightButtonVerb = _leftButtonVerb = kVerbLookAt;
+ }
}
}
diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp
index cd97643057..53bb5077e8 100644
--- a/saga/sfuncs.cpp
+++ b/saga/sfuncs.cpp
@@ -42,6 +42,7 @@
#include "saga/objectmap.h"
#include "saga/scene.h"
+#include "saga/isomap.h"
namespace Saga {
@@ -583,7 +584,7 @@ void Script::sfScriptOpenDoor(SCRIPTFUNC_PARAMS) {
doorNumber = thread->pop();
if (_vm->_scene->getFlags() & kSceneFlagISO) {
- //todo: it
+ _vm->_isoMap->setTileDoorState(doorNumber, 1);
} else {
_vm->_scene->setDoorState(doorNumber, 0);
}
@@ -596,7 +597,7 @@ void Script::sfScriptCloseDoor(SCRIPTFUNC_PARAMS) {
doorNumber = thread->pop();
if (_vm->_scene->getFlags() & kSceneFlagISO) {
- //todo: it
+ _vm->_isoMap->setTileDoorState(doorNumber, 0);
} else {
_vm->_scene->setDoorState(doorNumber, 0xff);
}
@@ -1319,7 +1320,7 @@ void Script::sfSetDoorState(SCRIPTFUNC_PARAMS) {
doorState = thread->pop();
if (_vm->_scene->getFlags() & kSceneFlagISO) {
- //todo: it
+ _vm->_isoMap->setTileDoorState(doorNumber, doorState);
} else {
_vm->_scene->setDoorState(doorNumber, doorState);
}
diff --git a/saga/sthread.cpp b/saga/sthread.cpp
index 244546f29e..dc759be65c 100644
--- a/saga/sthread.cpp
+++ b/saga/sthread.cpp
@@ -228,7 +228,7 @@ bool Script::runThread(ScriptThread *thread, uint instructionLimit) {
operandName = #opName; \
}
- debug(8, "Executing thread offset: %lu (%x) stack: %d", thread->_instructionOffset, operandChar, thread->pushedSize());
+// debug(8, "Executing thread offset: %lu (%x) stack: %d", thread->_instructionOffset, operandChar, thread->pushedSize());
operandName="";
switch (operandChar) {
CASEOP(opNextBlock)