[Scummvm-git-logs] scummvm master -> 586444a0c553d9d7885b4dfbb49bb3ae5bcdccbe

dreammaster dreammaster at scummvm.org
Wed Dec 6 04:24:22 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
586444a0c5 XEEN: Cleanup of the map dialog class


Commit: 586444a0c553d9d7885b4dfbb49bb3ae5bcdccbe
    https://github.com/scummvm/scummvm/commit/586444a0c553d9d7885b4dfbb49bb3ae5bcdccbe
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-12-05T22:24:15-05:00

Commit Message:
XEEN: Cleanup of the map dialog class

Changed paths:
  A engines/xeen/dialogs_map.cpp
  A engines/xeen/dialogs_map.h
  R engines/xeen/dialogs_automap.cpp
  R engines/xeen/dialogs_automap.h
    engines/xeen/interface.cpp
    engines/xeen/interface_minimap.cpp
    engines/xeen/module.mk


diff --git a/engines/xeen/dialogs_automap.cpp b/engines/xeen/dialogs_automap.cpp
deleted file mode 100644
index 93d70fe..0000000
--- a/engines/xeen/dialogs_automap.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/dialogs_automap.h"
-#include "xeen/resources.h"
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-
-void AutoMapDialog::show(XeenEngine *vm) {
-	AutoMapDialog *dlg = new AutoMapDialog(vm);
-	dlg->execute();
-	delete dlg;
-}
-
-void AutoMapDialog::execute() {
-	EventsManager &events = *_vm->_events;
-	Interface &intf = *_vm->_interface;
-	Map &map = *_vm->_map;
-	Party &party = *_vm->_party;
-	Windows &windows = *_vm->_windows;
-	int frame2 = intf._overallFrame * 2;
-	bool frameEndFlag = false;
-
-	Common::Point pt = party._mazePosition;
-	Common::Point arrowPt;
-	SpriteResource globalSprites;
-	globalSprites.load("global.icn");
-
-	if (pt.x < 8 && map.mazeData()._surroundingMazes._west == 0) {
-		arrowPt.x = pt.x * 10 + 4;
-	} else if (pt.x > 23) {
-		arrowPt.x = pt.x * 10 + 100;
-		pt.x = 23;
-	} else if (pt.x > 8 && map.mazeData()._surroundingMazes._east == 0) {
-		arrowPt.x = pt.x * 10 + 4;
-		pt.x = 7;
-	} else {
-		arrowPt.x = 74;
-	}
-
-	if (pt.y < 8 && map.mazeData()._surroundingMazes._south == 0) {
-		arrowPt.y = ((15 - pt.y) << 3) + 13;
-		pt.y = 8;
-	} else if (pt.y > 24) {
-		arrowPt.y = ((15 - (pt.y - 24)) << 3) + 13;
-		pt.y = 24;
-	} else if (pt.y >= 8 && map.mazeData()._surroundingMazes._north == 0) {
-		arrowPt.y = ((15 - pt.y) << 3) + 13;
-		pt.y = 8;
-	} else {
-		arrowPt.y = 69;
-	}
-
-	windows[5].open();
-//	MazeData &mazeData = map.mazeDataCurrent();
-	bool drawFlag = true;
-	int v;
-
-	events.updateGameCounter();
-	do {
-		if (drawFlag)
-			intf.draw3d(false, true);
-		windows[5].writeString("\r");
-
-		if (map._isOutdoors) {
-			// Draw outdoors map
-			for (int yp = 38, yDiff = pt.y + 7; yp < 166; --yDiff, yp += 8) {
-				for (int xp = 80, xDiff = pt.x - 7; xp < 240; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 0);
-
-					if (map._currentSteppedOn) {
-						map._tileSprites.draw(0, map.mazeDataCurrent()._surfaceTypes[v],
-							Common::Point(xp, yp));
-					}
-				}
-			}
-
-			for (int yp = 38, yDiff = pt.y + 7; yp < 166; --yDiff, yp += 8) {
-				for (int xp = 80, xDiff = pt.x - 7; xp < 240; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 4);
-					int wallType = map.mazeDataCurrent()._wallTypes[v];
-
-					if (wallType && map._currentSteppedOn)
-						map._tileSprites.draw(0, wallType, Common::Point(xp, yp));
-				}
-			}
-
-			for (int yp = 38, yDiff = pt.y + 7; yp < 166; yp += 8, --yDiff) {
-				for (int xp = 80, xDiff = -7; xp < 240; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 8);
-
-					if (v && map._currentSteppedOn)
-						map._tileSprites.draw(0, 1, Common::Point(xp, yp));
-				}
-			}
-		} else {
-			// Draw indoors map
-			frame2 = (frame2 + 2) % 8;
-
-			// Draw default ground for all the valid explored areas
-			for (int yp = 38, yDiff = pt.y + 7; yp < 166; yp += 8, --yDiff) {
-				for (int xp = 80, xDiff = pt.x - 7; xp < 240; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
-
-					if (v != INVALID_CELL && map._currentSteppedOn)
-						map._tileSprites.draw(0, 0, Common::Point(xp, yp));
-				}
-			}
-
-			// Draw thinner ground tiles on the left edge of the map
-			for (int yp = 43, yDiff = pt.y + 7; yp < 171; yp += 8, --yDiff) {
-				v = map.mazeLookup(Common::Point(pt.x - 8, yDiff), 0, 0xffff);
-
-				if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
-					map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
-						map._currentSurfaceId], Common::Point(75, yp));
-			}
-
-			// Draw thin tile portion on top-left corner of map
-			v = map.mazeLookup(Common::Point(pt.x - 8, pt.y + 8), 0, 0xffff);
-			if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
-				map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
-					map._currentSurfaceId], Common::Point(75, 35));
-
-			// Draw any thin tiles at the very top of the map
-			for (int xp = 85, xDiff = pt.x - 7; xp < 245; xp += 10, ++xDiff) {
-				v = map.mazeLookup(Common::Point(xDiff, pt.y + 8), 0, 0xffff);
-
-				if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
-					map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
-						map._currentSurfaceId], Common::Point(xp, 35));
-			}
-
-			// Draw the default ground tiles
-			for (int yp = 43, yDiff = pt.y + 7; yp < 171; yp += 8, --yDiff) {
-				for (int xp = 85, xDiff = pt.x - 7; xp < 245; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
-
-					if (v != INVALID_CELL && map._currentSurfaceId && map._currentSteppedOn)
-						map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
-							map._currentSurfaceId], Common::Point(xp, yp));
-				}
-			}
-
-			// Draw walls on left and top edges of map
-			for (int xp = 80, yp = 158, xDiff = pt.x - 7, yDiff = pt.y - 8; xp < 250;
-					xp += 10, yp -= 8, ++xDiff, ++yDiff) {
-				// Draw walls on left edge of map
-				v = map.mazeLookup(Common::Point(pt.x - 8, yDiff), 12);
-
-				int frame;
-				switch (v) {
-				case SURFTYPE_DIRT:
-					frame = 18;
-					break;
-				case SURFTYPE_SNOW:
-					frame = 22;
-					break;
-				case SURFTYPE_SWAMP:
-				case SURFTYPE_CLOUD:
-					frame = 16;
-					break;
-				case SURFTYPE_LAVA:
-				case SURFTYPE_DWATER:
-					frame = 2;
-					break;
-				case SURFTYPE_DESERT:
-					frame = 30;
-					break;
-				case SURFTYPE_ROAD:
-					frame = 32;
-					break;
-				case SURFTYPE_TFLR:
-					frame = 20;
-					break;
-				case SURFTYPE_SKY:
-					frame = 28;
-					break;
-				case SURFTYPE_CROAD:
-					frame = 14;
-					break;
-				case SURFTYPE_SEWER:
-					frame = frame2 + 4;
-					break;
-				case SURFTYPE_SCORCH:
-					frame = 24;
-					break;
-				case SURFTYPE_SPACE:
-					frame = 26;
-					break;
-				default:
-					frame = -1;
-					break;
-				}
-
-				if (frame != -1 && map._currentSteppedOn)
-					map._tileSprites.draw(0, frame, Common::Point(70, yp));
-
-				// Draw walls on top edge of map
-				v = map.mazeLookup(Common::Point(xDiff, pt.y + 8), 0);
-
-				switch (v) {
-				case SURFTYPE_DIRT:
-					frame = 19;
-					break;
-				case SURFTYPE_GRASS:
-					frame = 35;
-					break;
-				case SURFTYPE_SNOW:
-					frame = 23;
-					break;
-				case SURFTYPE_SWAMP:
-				case SURFTYPE_CLOUD:
-					frame = 17;
-					break;
-				case SURFTYPE_LAVA:
-				case SURFTYPE_DWATER:
-					frame = 3;
-					break;
-				case SURFTYPE_DESERT:
-					frame = 31;
-					break;
-				case SURFTYPE_ROAD:
-					frame = 33;
-					break;
-				case SURFTYPE_TFLR:
-					frame = 21;
-					break;
-				case SURFTYPE_SKY:
-					frame = 29;
-					break;
-				case SURFTYPE_CROAD:
-					frame = 15;
-					break;
-				case SURFTYPE_SEWER:
-					frame = frame2 + 5;
-					break;
-				case SURFTYPE_SCORCH:
-					frame = 25;
-					break;
-				case SURFTYPE_SPACE:
-					frame = 27;
-					break;
-				default:
-					frame = -1;
-					break;
-				}
-
-				if (frame != -1 && map._currentSteppedOn)
-					map._tileSprites.draw(0, frame, Common::Point(xp, 30));
-			}
-
-			// Draw the front/back walls of cells in the minimap
-			for (int yCtr = 0, yp = 38, yDiff = pt.y + 7; yCtr < 16; ++yCtr, yp += 8, --yDiff) {
-				for (int xCtr = 0, xp = 80, xDiff = pt.x - 7; xCtr < 16; ++xCtr, xp += 10, ++xDiff) {
-					// Draw the arrow if at the correct position
-					if ((arrowPt.x / 10) == xCtr && (14 - (arrowPt.y / 10)) == yCtr && frameEndFlag) {
-						globalSprites.draw(0, party._mazeDirection + 1,
-							Common::Point(arrowPt.x + 81, arrowPt.y + 29));
-					}
-
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 12);
-					int frame;
-					switch (v) {
-					case SURFTYPE_DIRT:
-						frame = 18;
-						break;
-					case SURFTYPE_GRASS:
-						frame = 34;
-						break;
-					case SURFTYPE_SNOW:
-						frame = 22;
-						break;
-					case SURFTYPE_SWAMP:
-					case SURFTYPE_CLOUD:
-						frame = 16;
-						break;
-					case SURFTYPE_LAVA:
-					case SURFTYPE_DWATER:
-						frame = 2;
-						break;
-					case SURFTYPE_DESERT:
-						frame = 30;
-						break;
-					case SURFTYPE_ROAD:
-						frame = 32;
-						break;
-					case SURFTYPE_TFLR:
-						frame = 20;
-						break;
-					case SURFTYPE_SKY:
-						frame = 28;
-						break;
-					case SURFTYPE_CROAD:
-						frame = 14;
-						break;
-					case SURFTYPE_SEWER:
-						frame = frame2 + 4;
-						break;
-					case SURFTYPE_SCORCH:
-						frame = 24;
-						break;
-					case SURFTYPE_SPACE:
-						frame = 26;
-						break;
-					default:
-						frame = -1;
-						break;
-					}
-
-					if (frame != -1 && map._currentSteppedOn)
-						map._tileSprites.draw(0, frame, Common::Point(xp, yp));
-
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 0);
-					switch (v) {
-					case SURFTYPE_DIRT:
-						frame = 19;
-						break;
-					case SURFTYPE_GRASS:
-						frame = 35;
-						break;
-					case SURFTYPE_SNOW:
-						frame = 23;
-						break;
-					case SURFTYPE_SWAMP:
-					case SURFTYPE_CLOUD:
-						frame = 17;
-						break;
-					case SURFTYPE_LAVA:
-					case SURFTYPE_DWATER:
-						frame = 3;
-						break;
-					case SURFTYPE_DESERT:
-						frame = 31;
-						break;
-					case SURFTYPE_ROAD:
-						frame = 33;
-						break;
-					case SURFTYPE_TFLR:
-						frame = 21;
-						break;
-					case SURFTYPE_SKY:
-						frame = 29;
-						break;
-					case SURFTYPE_CROAD:
-						frame = 15;
-						break;
-					case SURFTYPE_SEWER:
-						frame = frame2 + 5;
-						break;
-					case SURFTYPE_SCORCH:
-						frame = 25;
-						break;
-					case SURFTYPE_SPACE:
-						frame = 27;
-						break;
-					default:
-						frame = -1;
-						break;
-					}
-
-					if (frame != -1 && map._currentSteppedOn)
-						map._tileSprites.draw(0, frame, Common::Point(xp, yp));
-				}
-			}
-
-			// Draw overlay on cells that haven't been stepped on yet
-			for (int yDiff = pt.y + 7, yp = 38; yp < 166; --yDiff, yp += 8) {
-				for (int xp = 80, xDiff = pt.x - 7; xp < 240; xp += 10, ++xDiff) {
-					v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
-
-					if (v == INVALID_CELL || !map._currentSteppedOn)
-						map._tileSprites.draw(0, 1, Common::Point(xp, yp));
-				}
-			}
-		}
-
-		windows[5].frame();
-		if (!map._isOutdoors) {
-			map._tileSprites.draw(0, 52, Common::Point(76, 30));
-		} else if (frameEndFlag) {
-			globalSprites.draw(0, party._mazeDirection + 1,
-				Common::Point(arrowPt.x + 76, arrowPt.y + 25));
-		}
-
-		if (events.timeElapsed() > 5) {
-			// Set the flag to make the basic arrow blinking effect
-			frameEndFlag = !frameEndFlag;
-			events.updateGameCounter();
-		}
-
-		windows[5].writeString(Common::String::format(Res.MAP_TEXT,
-			map._mazeName.c_str(), party._mazePosition.x,
-			party._mazePosition.y, Res.DIRECTION_TEXT[party._mazeDirection]));
-		windows[5].update();
-		windows[3].update();
-
-		events.pollEvents();
-		drawFlag = false;
-	} while (!_vm->shouldQuit() && !events.isKeyMousePressed());
-
-	events.clearEvents();
-	windows[5].close();
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/dialogs_automap.h b/engines/xeen/dialogs_automap.h
deleted file mode 100644
index 239a73a..0000000
--- a/engines/xeen/dialogs_automap.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_DIALOGS_AUTOMAP_H
-#define XEEN_DIALOGS_AUTOMAP_H
-
-#include "xeen/dialogs.h"
-
-namespace Xeen {
-
-class XeenEngine;
-
-class AutoMapDialog: public ButtonContainer {
-private:
-	AutoMapDialog(XeenEngine *vm) : ButtonContainer(vm) {}
-
-	void execute();
-public:
-	static void show(XeenEngine *vm);
-};
-
-} // End of namespace Xeen
-
-#endif /* XEEN_DIALOGS_AUTOMAP_H */
diff --git a/engines/xeen/dialogs_map.cpp b/engines/xeen/dialogs_map.cpp
new file mode 100644
index 0000000..6f225d5
--- /dev/null
+++ b/engines/xeen/dialogs_map.cpp
@@ -0,0 +1,434 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/dialogs_map.h"
+#include "xeen/resources.h"
+#include "xeen/xeen.h"
+
+namespace Xeen {
+
+void MapDialog::show(XeenEngine *vm) {
+	MapDialog *dlg = new MapDialog(vm);
+	dlg->execute();
+	delete dlg;
+}
+
+void MapDialog::execute() {
+	EventsManager &events = *_vm->_events;
+	Interface &intf = *_vm->_interface;
+	Map &map = *_vm->_map;
+	Party &party = *_vm->_party;
+	Windows &windows = *_vm->_windows;
+
+	_pt = party._mazePosition;
+	_globalSprites.load("global.icn");
+
+	if (_pt.x < 8 && map.mazeData()._surroundingMazes._west == 0) {
+		_arrowPt.x = _pt.x * 10 + 4;
+	} else if (_pt.x > 23) {
+		_arrowPt.x = _pt.x * 10 + 100;
+		_pt.x = 23;
+	} else if (_pt.x > 8 && map.mazeData()._surroundingMazes._east == 0) {
+		_arrowPt.x = _pt.x * 10 + 4;
+		_pt.x = 7;
+	} else {
+		_arrowPt.x = 74;
+	}
+
+	if (_pt.y < 8 && map.mazeData()._surroundingMazes._south == 0) {
+		_arrowPt.y = ((15 - _pt.y) << 3) + 13;
+		_pt.y = 8;
+	} else if (_pt.y > 24) {
+		_arrowPt.y = ((15 - (_pt.y - 24)) << 3) + 13;
+		_pt.y = 24;
+	} else if (_pt.y >= 8 && map.mazeData()._surroundingMazes._north == 0) {
+		_arrowPt.y = ((15 - _pt.y) << 3) + 13;
+		_pt.y = 8;
+	} else {
+		_arrowPt.y = 69;
+	}
+
+	windows[5].open();
+	bool drawFlag = true;
+
+	events.updateGameCounter();
+	do {
+		if (drawFlag)
+			intf.draw3d(false, true);
+		windows[5].writeString("\r");
+
+		if (map._isOutdoors)
+			drawOutdoors();
+		else
+			drawIndoors();
+
+		windows[5].frame();
+		if (!map._isOutdoors) {
+			map._tileSprites.draw(0, 52, Common::Point(76, 30));
+		} else if (_frameEndFlag) {
+			_globalSprites.draw(0, party._mazeDirection + 1,
+				Common::Point(_arrowPt.x + 76, _arrowPt.y + 25));
+		}
+
+		if (events.timeElapsed() > 5) {
+			// Set the flag to make the basic arrow blinking effect
+			_frameEndFlag = !_frameEndFlag;
+			events.updateGameCounter();
+		}
+
+		windows[5].writeString(Common::String::format(Res.MAP_TEXT,
+			map._mazeName.c_str(), party._mazePosition.x,
+			party._mazePosition.y, Res.DIRECTION_TEXT[party._mazeDirection]));
+		windows[5].update();
+		windows[3].update();
+
+		events.pollEvents();
+		drawFlag = false;
+	} while (!_vm->shouldQuit() && !events.isKeyMousePressed());
+
+	events.clearEvents();
+	windows[5].close();
+}
+
+void MapDialog::drawOutdoors() {
+	Map &map = *g_vm->_map;
+	int v;
+
+	// Draw outdoors map
+	for (int yp = 38, yDiff = _pt.y + 7; yp < 166; --yDiff, yp += 8) {
+		for (int xp = 80, xDiff = _pt.x - 7; xp < 240; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 0);
+
+			if (map._currentSteppedOn) {
+				map._tileSprites.draw(0, map.mazeDataCurrent()._surfaceTypes[v],
+					Common::Point(xp, yp));
+			}
+		}
+	}
+
+	for (int yp = 38, yDiff = _pt.y + 7; yp < 166; --yDiff, yp += 8) {
+		for (int xp = 80, xDiff = _pt.x - 7; xp < 240; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 4);
+			int wallType = map.mazeDataCurrent()._wallTypes[v];
+
+			if (wallType && map._currentSteppedOn)
+				map._tileSprites.draw(0, wallType, Common::Point(xp, yp));
+		}
+	}
+
+	for (int yp = 38, yDiff = _pt.y + 7; yp < 166; yp += 8, --yDiff) {
+		for (int xp = 80, xDiff = -7; xp < 240; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 8);
+
+			if (v && map._currentSteppedOn)
+				map._tileSprites.draw(0, 1, Common::Point(xp, yp));
+		}
+	}
+}
+
+void MapDialog::drawIndoors() {
+	Map &map = *g_vm->_map;
+	Party &party = *g_vm->_party;
+	int v, frame;
+	int frame2 = _animFrame;
+	_animFrame = (_animFrame + 2) % 8;
+
+	// Draw indoors map
+	frame2 = (frame2 + 2) % 8;
+
+	// Draw default ground for all the valid explored areas
+	for (int yp = 38, yDiff = _pt.y + 7; yp < 166; yp += 8, --yDiff) {
+		for (int xp = 80, xDiff = _pt.x - 7; xp < 240; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
+
+			if (v != INVALID_CELL && map._currentSteppedOn)
+				map._tileSprites.draw(0, 0, Common::Point(xp, yp));
+		}
+	}
+
+	// Draw thinner ground tiles on the left edge of the map
+	for (int yp = 43, yDiff = _pt.y + 7; yp < 171; yp += 8, --yDiff) {
+		v = map.mazeLookup(Common::Point(_pt.x - 8, yDiff), 0, 0xffff);
+
+		if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
+			map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
+				map._currentSurfaceId], Common::Point(75, yp));
+	}
+
+	// Draw thin tile portion on top-left corner of map
+	v = map.mazeLookup(Common::Point(_pt.x - 8, _pt.y + 8), 0, 0xffff);
+	if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
+		map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
+			map._currentSurfaceId], Common::Point(75, 35));
+
+	// Draw any thin tiles at the very top of the map
+	for (int xp = 85, xDiff = _pt.x - 7; xp < 245; xp += 10, ++xDiff) {
+		v = map.mazeLookup(Common::Point(xDiff, _pt.y + 8), 0, 0xffff);
+
+		if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn)
+			map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
+				map._currentSurfaceId], Common::Point(xp, 35));
+	}
+
+	// Draw the default ground tiles
+	for (int yp = 43, yDiff = _pt.y + 7; yp < 171; yp += 8, --yDiff) {
+		for (int xp = 85, xDiff = _pt.x - 7; xp < 245; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
+
+			if (v != INVALID_CELL && map._currentSurfaceId && map._currentSteppedOn)
+				map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[
+					map._currentSurfaceId], Common::Point(xp, yp));
+		}
+	}
+
+	// Draw walls on left and top edges of map
+	for (int xp = 80, yp = 158, xDiff = _pt.x - 7, yDiff = _pt.y - 8; xp < 250;
+	xp += 10, yp -= 8, ++xDiff, ++yDiff) {
+		// Draw walls on left edge of map
+		v = map.mazeLookup(Common::Point(_pt.x - 8, yDiff), 12);
+
+		switch (v) {
+		case SURFTYPE_DIRT:
+			frame = 18;
+			break;
+		case SURFTYPE_SNOW:
+			frame = 22;
+			break;
+		case SURFTYPE_SWAMP:
+		case SURFTYPE_CLOUD:
+			frame = 16;
+			break;
+		case SURFTYPE_LAVA:
+		case SURFTYPE_DWATER:
+			frame = 2;
+			break;
+		case SURFTYPE_DESERT:
+			frame = 30;
+			break;
+		case SURFTYPE_ROAD:
+			frame = 32;
+			break;
+		case SURFTYPE_TFLR:
+			frame = 20;
+			break;
+		case SURFTYPE_SKY:
+			frame = 28;
+			break;
+		case SURFTYPE_CROAD:
+			frame = 14;
+			break;
+		case SURFTYPE_SEWER:
+			frame = frame2 + 4;
+			break;
+		case SURFTYPE_SCORCH:
+			frame = 24;
+			break;
+		case SURFTYPE_SPACE:
+			frame = 26;
+			break;
+		default:
+			frame = -1;
+			break;
+		}
+
+		if (frame != -1 && map._currentSteppedOn)
+			map._tileSprites.draw(0, frame, Common::Point(70, yp));
+
+		// Draw walls on top edge of map
+		v = map.mazeLookup(Common::Point(xDiff, _pt.y + 8), 0);
+
+		switch (v) {
+		case SURFTYPE_DIRT:
+			frame = 19;
+			break;
+		case SURFTYPE_GRASS:
+			frame = 35;
+			break;
+		case SURFTYPE_SNOW:
+			frame = 23;
+			break;
+		case SURFTYPE_SWAMP:
+		case SURFTYPE_CLOUD:
+			frame = 17;
+			break;
+		case SURFTYPE_LAVA:
+		case SURFTYPE_DWATER:
+			frame = 3;
+			break;
+		case SURFTYPE_DESERT:
+			frame = 31;
+			break;
+		case SURFTYPE_ROAD:
+			frame = 33;
+			break;
+		case SURFTYPE_TFLR:
+			frame = 21;
+			break;
+		case SURFTYPE_SKY:
+			frame = 29;
+			break;
+		case SURFTYPE_CROAD:
+			frame = 15;
+			break;
+		case SURFTYPE_SEWER:
+			frame = frame2 + 5;
+			break;
+		case SURFTYPE_SCORCH:
+			frame = 25;
+			break;
+		case SURFTYPE_SPACE:
+			frame = 27;
+			break;
+		default:
+			frame = -1;
+			break;
+		}
+
+		if (frame != -1 && map._currentSteppedOn)
+			map._tileSprites.draw(0, frame, Common::Point(xp, 30));
+	}
+
+	// Draw the walls for the remaining cells of the minimap
+	for (int yCtr = 0, yp = 38, yDiff = _pt.y + 7; yCtr < 16; ++yCtr, yp += 8, --yDiff) {
+		for (int xCtr = 0, xp = 80, xDiff = _pt.x - 7; xCtr < 16; ++xCtr, xp += 10, ++xDiff) {
+			// Draw the arrow if at the correct position
+			if ((_arrowPt.x / 10) == xCtr && (14 - (_arrowPt.y / 10)) == yCtr && _frameEndFlag) {
+				_globalSprites.draw(0, party._mazeDirection + 1,
+					Common::Point(_arrowPt.x + 81, _arrowPt.y + 29));
+			}
+
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 12);
+			switch (v) {
+			case SURFTYPE_DIRT:
+				frame = 18;
+				break;
+			case SURFTYPE_GRASS:
+				frame = 34;
+				break;
+			case SURFTYPE_SNOW:
+				frame = 22;
+				break;
+			case SURFTYPE_SWAMP:
+			case SURFTYPE_CLOUD:
+				frame = 16;
+				break;
+			case SURFTYPE_LAVA:
+			case SURFTYPE_DWATER:
+				frame = 2;
+				break;
+			case SURFTYPE_DESERT:
+				frame = 30;
+				break;
+			case SURFTYPE_ROAD:
+				frame = 32;
+				break;
+			case SURFTYPE_TFLR:
+				frame = 20;
+				break;
+			case SURFTYPE_SKY:
+				frame = 28;
+				break;
+			case SURFTYPE_CROAD:
+				frame = 14;
+				break;
+			case SURFTYPE_SEWER:
+				frame = frame2 + 4;
+				break;
+			case SURFTYPE_SCORCH:
+				frame = 24;
+				break;
+			case SURFTYPE_SPACE:
+				frame = 26;
+				break;
+			default:
+				frame = -1;
+				break;
+			}
+
+			if (frame != -1 && map._currentSteppedOn)
+				map._tileSprites.draw(0, frame, Common::Point(xp, yp));
+
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 0);
+			switch (v) {
+			case SURFTYPE_DIRT:
+				frame = 19;
+				break;
+			case SURFTYPE_GRASS:
+				frame = 35;
+				break;
+			case SURFTYPE_SNOW:
+				frame = 23;
+				break;
+			case SURFTYPE_SWAMP:
+			case SURFTYPE_CLOUD:
+				frame = 17;
+				break;
+			case SURFTYPE_LAVA:
+			case SURFTYPE_DWATER:
+				frame = 3;
+				break;
+			case SURFTYPE_DESERT:
+				frame = 31;
+				break;
+			case SURFTYPE_ROAD:
+				frame = 33;
+				break;
+			case SURFTYPE_TFLR:
+				frame = 21;
+				break;
+			case SURFTYPE_SKY:
+				frame = 29;
+				break;
+			case SURFTYPE_CROAD:
+				frame = 15;
+				break;
+			case SURFTYPE_SEWER:
+				frame = frame2 + 5;
+				break;
+			case SURFTYPE_SCORCH:
+				frame = 25;
+				break;
+			case SURFTYPE_SPACE:
+				frame = 27;
+				break;
+			default:
+				frame = -1;
+				break;
+			}
+
+			if (frame != -1 && map._currentSteppedOn)
+				map._tileSprites.draw(0, frame, Common::Point(xp, yp));
+		}
+	}
+
+	// Draw overlay on cells that haven't been stepped on yet
+	for (int yDiff = _pt.y + 7, yp = 38; yp < 166; --yDiff, yp += 8) {
+		for (int xp = 80, xDiff = _pt.x - 7; xp < 240; xp += 10, ++xDiff) {
+			v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff);
+
+			if (v == INVALID_CELL || !map._currentSteppedOn)
+				map._tileSprites.draw(0, 1, Common::Point(xp, yp));
+		}
+	}
+}
+
+} // End of namespace Xeen
diff --git a/engines/xeen/dialogs_map.h b/engines/xeen/dialogs_map.h
new file mode 100644
index 0000000..8ae24ee
--- /dev/null
+++ b/engines/xeen/dialogs_map.h
@@ -0,0 +1,61 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef XEEN_DIALOGS_MAP_H
+#define XEEN_DIALOGS_MAP_H
+
+#include "xeen/dialogs.h"
+
+namespace Xeen {
+
+class XeenEngine;
+
+class MapDialog: public ButtonContainer {
+private:
+	int _animFrame;
+	SpriteResource _globalSprites;
+	Common::Point _pt, _arrowPt;
+	bool _frameEndFlag;
+private:
+	MapDialog(XeenEngine *vm) : ButtonContainer(vm), _animFrame(0) {}
+
+	/**
+	 * Draws the map contents when outdoors
+	 */
+	void drawOutdoors();
+
+	/**
+	 * Draws the map contents when indoors
+	 */
+	void drawIndoors();
+
+	/**
+	 * Handles the display of the dialog
+	 */
+	void execute();
+public:
+	static void show(XeenEngine *vm);
+};
+
+} // End of namespace Xeen
+
+#endif /* XEEN_DIALOGS_AUTOMAP_H */
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index af555c8..b3df1f6 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -21,13 +21,13 @@
  */
 
 #include "xeen/interface.h"
-#include "xeen/dialogs_automap.h"
 #include "xeen/dialogs_char_info.h"
 #include "xeen/dialogs_control_panel.h"
 #include "xeen/dialogs_error.h"
 #include "xeen/dialogs_fight_options.h"
 #include "xeen/dialogs_info.h"
 #include "xeen/dialogs_items.h"
+#include "xeen/dialogs_map.h"
 #include "xeen/dialogs_query.h"
 #include "xeen/dialogs_quests.h"
 #include "xeen/dialogs_quick_ref.h"
@@ -558,7 +558,7 @@ void Interface::perform() {
 
 	case Common::KEYCODE_m:
 		// Show map dialog
-		AutoMapDialog::show(_vm);
+		MapDialog::show(_vm);
 		break;
 
 	case Common::KEYCODE_q:
diff --git a/engines/xeen/interface_minimap.cpp b/engines/xeen/interface_minimap.cpp
index e2a787e..ef45d57 100644
--- a/engines/xeen/interface_minimap.cpp
+++ b/engines/xeen/interface_minimap.cpp
@@ -110,7 +110,6 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 	Party &party = *g_vm->_party;
 	Resources &res = *g_vm->_resources;
 	int v, frame;
-
 	int frame2 = _animFrame;
 	_animFrame = (_animFrame + 2) % 8;
 
@@ -143,7 +142,7 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 	}
 
 	// Draw thin tile portion on top-left corner of map
-	v = map.mazeLookup(Common::Point(party._mazePosition.x - 4, party._mazePosition.y + 4), 0xffff, 0);
+	v = map.mazeLookup(Common::Point(party._mazePosition.x - 4, party._mazePosition.y + 4), 0, 0xffff);
 	if (v != INVALID_CELL && map._currentSurfaceId &&
 		(map._currentSteppedOn || party._wizardEyeActive)) {
 		map._tileSprites.draw(1,
@@ -182,6 +181,7 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 	// Draw walls on left and top edges of map
 	for (int idx = 0, xp = 237, yp = 60, xDiff = -3; idx < MINIMAP_SIZE;
 		++idx, ++xDiff, xp += 10, yp -= 8) {
+		// Left column
 		v = map.mazeLookup(
 			Common::Point(party._mazePosition.x - 4, party._mazePosition.y - 3 + idx),
 			12, 0xffff);
@@ -233,6 +233,7 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 		if (frame != -1 && (map._currentSteppedOn || party._wizardEyeActive))
 			map._tileSprites.draw(1, frame, Common::Point(222, yp));
 
+		// Top row
 		v = map.mazeLookup(
 			Common::Point(party._mazePosition.x - 3 + idx, party._mazePosition.y + 4),
 			0);
@@ -285,10 +286,10 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 		}
 
 		if (frame != -1 && (map._currentSteppedOn || party._wizardEyeActive))
-			map._tileSprites.draw(1, frame, Common::Point(xp, yp));
+			map._tileSprites.draw(1, frame, Common::Point(xp, 4));
 	}
 
-	// Draw the front/back walls of cells in the minimap
+	// Draw the walls for the remaining cells of the minimap
 	for (int rowNum = 0, yp = 12, yDiff = 3; rowNum < MINIMAP_SIZE;
 		++rowNum, --yDiff, yp += 8) {
 		for (int colNum = 0, xp = 237, xDiff = -3; colNum < MINIMAP_SIZE;
@@ -353,7 +354,7 @@ void InterfaceMinimap::drawIndoorsMinimap() {
 			}
 
 			v = map.mazeLookup(Common::Point(party._mazePosition.x + xDiff,
-				party._mazePosition.y + yDiff), 12, 0xffff);
+				party._mazePosition.y + yDiff), 0);
 			switch (v) {
 			case SURFTYPE_DIRT:
 				frame = 19;
diff --git a/engines/xeen/module.mk b/engines/xeen/module.mk
index 9890744..7a37447 100644
--- a/engines/xeen/module.mk
+++ b/engines/xeen/module.mk
@@ -12,7 +12,6 @@ MODULE_OBJS := \
 	debugger.o \
 	detection.o \
 	dialogs.o \
-	dialogs_automap.o \
 	dialogs_char_info.o \
 	dialogs_control_panel.o \
 	dialogs_dismiss.o \
@@ -22,6 +21,7 @@ MODULE_OBJS := \
 	dialogs_info.o \
 	dialogs_input.o \
 	dialogs_items.o \
+	dialogs_map.o \
 	dialogs_party.o \
 	dialogs_query.o \
 	dialogs_quests.o \





More information about the Scummvm-git-logs mailing list