aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/wage/script.cpp31
-rw-r--r--engines/wage/world.cpp11
-rw-r--r--engines/wage/world.h1
3 files changed, 42 insertions, 1 deletions
diff --git a/engines/wage/script.cpp b/engines/wage/script.cpp
index 740d8ec164..c08b06be22 100644
--- a/engines/wage/script.cpp
+++ b/engines/wage/script.cpp
@@ -925,8 +925,37 @@ void Script::appendText(String str) {
_callbacks->appendText(str);
}
+static const int directionsX[] = { 0, 0, 1, -1 };
+static const int directionsY[] = { -1, 1, 0, 0 };
+
void Script::handleMoveCommand(Scene::Directions dir, const char *dirName) {
- warning("STUB: handleMoveCommand");
+ Scene *playerScene = _world->_player->_currentScene;
+ Common::String msg(playerScene->_messages[dir]);
+
+ warning("Dir: %s msg: %s", dirName, msg.c_str());
+
+ if (!playerScene->_blocked[dir]) {
+ int destX = playerScene->_worldX + directionsX[dir];
+ int destY = playerScene->_worldY + directionsY[dir];
+
+ Scene *scene = _world->getSceneAt(destX, destY);
+
+ if (scene != NULL) {
+ if (msg.size() > 0) {
+ appendText(msg);
+ }
+ _world->move(_world->_player, scene);
+ return;
+ }
+ }
+ if (msg != NULL && msg.size() > 0) {
+ appendText(msg);
+ } else {
+ Common::String txt("You can't go ");
+ txt += dirName;
+ txt += ".";
+ appendText(txt);
+ }
}
void Script::handleLookCommand() {
diff --git a/engines/wage/world.cpp b/engines/wage/world.cpp
index e7c37c17d5..f0d7c974a8 100644
--- a/engines/wage/world.cpp
+++ b/engines/wage/world.cpp
@@ -434,4 +434,15 @@ Scene *World::getRandomScene() {
return _orderedScenes[1 + _engine->_rnd->getRandomNumber(_orderedScenes.size() - 1)];
}
+Scene *World::getSceneAt(int x, int y) {
+ for (int i = 0; i < _orderedScenes.size(); i++) {
+ Scene *scene = _orderedScenes[i];
+
+ if (scene != _storageScene && scene->_worldX == x && scene->_worldY == y) {
+ return scene;
+ }
+ }
+ return NULL;
+}
+
} // End of namespace Wage
diff --git a/engines/wage/world.h b/engines/wage/world.h
index ea003220f0..a4ca2fd66f 100644
--- a/engines/wage/world.h
+++ b/engines/wage/world.h
@@ -64,6 +64,7 @@ public:
void move(Obj *obj, Scene *scene, bool skipSort = false);
void move(Chr *chr, Scene *scene, bool skipSort = false);
Scene *getRandomScene();
+ Scene *getSceneAt(int x, int y);
WageEngine *_engine;