[Scummvm-git-logs] scummvm master -> 3cd91d0a295eb3c804fd85abb53d93d32e87db09

a-yyg 76591232+a-yyg at users.noreply.github.com
Tue Jul 20 13:50:06 UTC 2021


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:
3cd91d0a29 SAGA2: Add command to dump map


Commit: 3cd91d0a295eb3c804fd85abb53d93d32e87db09
    https://github.com/scummvm/scummvm/commit/3cd91d0a295eb3c804fd85abb53d93d32e87db09
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-20T22:49:31+09:00

Commit Message:
SAGA2: Add command to dump map

Changed paths:
    engines/saga2/console.cpp
    engines/saga2/console.h
    engines/saga2/tile.cpp
    engines/saga2/tileload.cpp


diff --git a/engines/saga2/console.cpp b/engines/saga2/console.cpp
index 4dffb788be..252bfadd6e 100644
--- a/engines/saga2/console.cpp
+++ b/engines/saga2/console.cpp
@@ -20,10 +20,16 @@
  *
  */
 
+#include "common/file.h"
+#include "graphics/palette.h"
+#include "graphics/surface.h"
+#include "image/png.h"
+
 #include "saga2/saga2.h"
 #include "saga2/objects.h"
 #include "saga2/player.h"
 #include "saga2/mapfeatr.h"
+#include "saga2/tile.h"
 
 #include "saga2/console.h"
 
@@ -33,6 +39,10 @@ namespace Saga2 {
 
 extern pCMapFeature mapFeatures[];
 extern GameObject *objectList;
+extern WorldMapData *mapList;
+extern int16 currentMapNum;
+
+void drawMetaTiles(gPixelMap &drawMap);
 
 Console::Console(Saga2Engine *vm) : GUI::Debugger() {
 	_vm = vm;
@@ -60,6 +70,8 @@ Console::Console(Saga2Engine *vm) : GUI::Debugger() {
 	registerCmd("list_places", WRAP_METHOD(Console, cmdListPlaces));
 
 	registerCmd("stats", WRAP_METHOD(Console, cmdStats));
+
+	registerCmd("dump_map", WRAP_METHOD(Console, cmdDumpMap));
 }
 
 Console::~Console() {
@@ -224,4 +236,36 @@ bool Console::cmdListPlaces(int argc, const char **argv) {
 	return true;
 }
 
+bool Console::cmdDumpMap(int argc, const char **argv) {
+	if (argc != 2)
+		debugPrintf("Usage: %s <Map Size Multiplier>\n", argv[0]);
+	else {
+		gPixelMap drawMap;
+		drawMap.size = _vm->_tileDrawMap.size * atoi(argv[1]);
+		//drawMap.size.x = mapList[currentMapNum].mapHeight;
+		//drawMap.size.y = mapList[currentMapNum].mapHeight;
+		drawMap.data = new uint8[drawMap.bytes()]();
+		drawMetaTiles(drawMap);
+
+		Graphics::Surface sur;
+		sur.create(drawMap.size.x, drawMap.size.y, Graphics::PixelFormat::createFormatCLUT8());
+		sur.setPixels(drawMap.data);
+
+		Common::String pngFile = Common::String::format("%s-mapdump.png", _vm->getMetaEngine()->getName());
+		Common::DumpFile dump;
+		dump.open(pngFile);
+
+		byte palette[256 * 3];
+		g_system->getPaletteManager()->grabPalette(palette, 0, 256);
+
+		Image::writePNG(dump, sur, palette);
+
+		dump.close();
+
+		delete[] drawMap.data;
+	}
+
+	return true;
+}
+
 }
diff --git a/engines/saga2/console.h b/engines/saga2/console.h
index ee4a90e0f6..b2d01bfce9 100644
--- a/engines/saga2/console.h
+++ b/engines/saga2/console.h
@@ -60,6 +60,8 @@ private:
 	bool cmdGotoPlace(int argc, const char **argv);
 
 	bool cmdListPlaces(int argc, const char **argv);
+
+	bool cmdDumpMap(int argc, const char **argv);
 };
 
 }
diff --git a/engines/saga2/tile.cpp b/engines/saga2/tile.cpp
index b00f31b7ae..97ddd4f378 100644
--- a/engines/saga2/tile.cpp
+++ b/engines/saga2/tile.cpp
@@ -107,6 +107,7 @@ void updateFrameCount(void);
 hResContext         *tileRes;       // tile resource handle
 
 void drawPlatform(
+	gPixelMap &drawMap,
     Platform        **pList,                // platforms to draw
     Point16         screenPos,              // screen position
     int16           uOrg,                   // for TAG search
@@ -2482,7 +2483,7 @@ TileInfo *TileIterator::next(TilePoint *loc, StandingTileInfo *stiResult) {
    Map drawing functions
  * ============================================================================ */
 
-inline void drawMetaRow(TilePoint coords, Point16 pos) {
+inline void drawMetaRow(gPixelMap &drawMap, TilePoint coords, Point16 pos) {
 	WorldMapData    *curMap = &mapList[currentMapNum];
 
 	int16           uOrg = coords.u * kPlatformWidth,
@@ -2500,7 +2501,7 @@ inline void drawMetaRow(TilePoint coords, Point16 pos) {
 	int16           layerLimit;
 
 	for (;
-	        pos.x < g_vm->_tileDrawMap.size.x + kMetaDX;
+	        pos.x < drawMap.size.x + kMetaDX;
 	        coords.u++,
 	        coords.v--,
 	        uOrg += kPlatformWidth,
@@ -2567,7 +2568,7 @@ inline void drawMetaRow(TilePoint coords, Point16 pos) {
 				p->highestPixel = kTileHeight * (kPlatformWidth - 1) + kMaxTileHeight * 2 + 64;
 
 				if (pos.y <= 0
-				        || pos.y - p->highestPixel >= g_vm->_tileDrawMap.size.y)
+				        || pos.y - p->highestPixel >= drawMap.size.y)
 					continue;
 
 				*put++ = p;
@@ -2576,7 +2577,7 @@ inline void drawMetaRow(TilePoint coords, Point16 pos) {
 		*put++ = nullptr;
 
 		if (drawList[0] != nullptr) {
-			drawPlatform(drawList, pos, uOrg, vOrg);
+			drawPlatform(drawMap, drawList, pos, uOrg, vOrg);
 		}
 		//  gThread::yield();
 	}
@@ -2758,7 +2759,7 @@ void buildRoofTable(void) {
 
 //  Draw all visible metatiles
 
-inline void drawMetaTiles(void) {
+inline void drawMetaTiles(gPixelMap &drawMap) {
 	Point32     viewPos;
 	Point16     metaPos;
 	TilePoint   baseCoords;
@@ -2803,16 +2804,16 @@ inline void drawMetaTiles(void) {
 	//      (replace 256 constant with better value)
 
 	for (;
-	        metaPos.y < g_vm->_tileDrawMap.size.y + kMetaTileHeight * 4 ;
+	        metaPos.y < drawMap.size.y + kMetaTileHeight * 4 ;
 	        baseCoords.u--,
 	        baseCoords.v--
 	    ) {
-		drawMetaRow(baseCoords, metaPos);
+		drawMetaRow(drawMap, baseCoords, metaPos);
 
 		metaPos.y += kMetaDY;
 		metaPos.x -= kMetaDX;
 
-		drawMetaRow(TilePoint(baseCoords.u - 1, baseCoords.v, 0), metaPos);
+		drawMetaRow(drawMap, TilePoint(baseCoords.u - 1, baseCoords.v, 0), metaPos);
 
 		metaPos.y += kMetaDY;
 		metaPos.x += kMetaDX;
@@ -4402,7 +4403,7 @@ void drawMainDisplay(void) {
 
 
 	// draws tiles to g_vm->_tileDrawMap.data
-	drawMetaTiles();
+	drawMetaTiles(g_vm->_tileDrawMap);
 
 	//  Draw sprites onto back buffer
 	drawDisplayList();
diff --git a/engines/saga2/tileload.cpp b/engines/saga2/tileload.cpp
index 698c95cd25..827320cbd4 100644
--- a/engines/saga2/tileload.cpp
+++ b/engines/saga2/tileload.cpp
@@ -64,13 +64,14 @@ void initTileBanks(void) {
 }
 
 void drawPlatform(
+	gPixelMap &drawMap,
     Platform        **pList,                // platforms to draw
     Point16         screenPos,              // screen position
     int16           uOrg,                   // for TAG search
     int16           vOrg) {                 // for TAG search
 
-	int16           right = g_vm->_tileDrawMap.size.x,
-	                bottom = g_vm->_tileDrawMap.size.y;
+	int16           right = drawMap.size.x,
+	                bottom = drawMap.size.y;
 
 	Point16         tilePos;
 
@@ -127,7 +128,7 @@ void drawPlatform(
 					int16 y = tilePos.y - h;
 
 					if (ti->attrs.height > 0 && y < bottom + ti->attrs.height - 1) {
-						drawTile(&g_vm->_tileDrawMap, tilePos.x, y, ti->attrs.height, imageData);
+						drawTile(&drawMap, tilePos.x, y, ti->attrs.height, imageData);
 					}
 				}
 			}




More information about the Scummvm-git-logs mailing list