[Scummvm-git-logs] scummvm master -> 52017e5748530843a6e9d4531f4e095ca842975d

dreammaster paulfgilbert at gmail.com
Sun May 10 05:13:54 UTC 2020


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

Summary:
5d5b864dfa ULTIMA4: Move DungeonView into views/
a2c72eeaa2 ULTIMA4: Dungeon monster fixes
b84ab126fb ULTIMA4: Refactored use of statics in DungeonView
52017e5748 ULTIMA4: Handle scaling up when rendering dungeon tiles


Commit: 5d5b864dfaca9f4640b52a2076ebaac1a321b725
    https://github.com/scummvm/scummvm/commit/5d5b864dfaca9f4640b52a2076ebaac1a321b725
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-05-09T22:11:29-07:00

Commit Message:
ULTIMA4: Move DungeonView into views/

Changed paths:
  A engines/ultima/ultima4/views/dungeonview.cpp
  A engines/ultima/ultima4/views/dungeonview.h
  R engines/ultima/ultima4/map/dungeonview.cpp
  R engines/ultima/ultima4/map/dungeonview.h
    engines/ultima/module.mk
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/game/game.cpp
    engines/ultima/ultima4/gfx/screen.cpp


diff --git a/engines/ultima/module.mk b/engines/ultima/module.mk
index 2f4f49fe1a..44b04a2278 100644
--- a/engines/ultima/module.mk
+++ b/engines/ultima/module.mk
@@ -199,7 +199,6 @@ MODULE_OBJS := \
 	ultima4/map/city.o \
 	ultima4/map/direction.o \
 	ultima4/map/dungeon.o \
-	ultima4/map/dungeonview.o \
 	ultima4/map/map_tile.o \
 	ultima4/map/movement.o \
 	ultima4/map/shrine.o \
@@ -213,6 +212,7 @@ MODULE_OBJS := \
 	ultima4/map/tileset.o \
 	ultima4/sound/music.o \
 	ultima4/sound/sound.o \
+	ultima4/views/dungeonview.o \
 	ultima4/views/imageview.o \
 	ultima4/views/menu.o \
 	ultima4/views/menuitem.o \
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 2d8ccbbe7c..2292f50696 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -34,13 +34,13 @@
 #include "ultima/ultima4/game/moongate.h"
 #include "ultima/ultima4/game/player.h"
 #include "ultima/ultima4/game/portal.h"
-#include "ultima/ultima4/views/stats.h"
 #include "ultima/ultima4/game/weapon.h"
 #include "ultima/ultima4/gfx/screen.h"
 #include "ultima/ultima4/map/annotation.h"
 #include "ultima/ultima4/map/city.h"
-#include "ultima/ultima4/map/dungeonview.h"
 #include "ultima/ultima4/map/mapmgr.h"
+#include "ultima/ultima4/views/dungeonview.h"
+#include "ultima/ultima4/views/stats.h"
 #include "ultima/ultima4/ultima4.h"
 #include "common/system.h"
 
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index 4c845e50b1..63a32b6dfc 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -64,9 +64,9 @@
 #include "ultima/ultima4/map/shrine.h"
 #include "ultima/ultima4/map/tilemap.h"
 #include "ultima/ultima4/map/tileset.h"
-#include "ultima/ultima4/map/dungeonview.h"
 #include "ultima/ultima4/sound/music.h"
 #include "ultima/ultima4/sound/sound.h"
+#include "ultima/ultima4/views/dungeonview.h"
 #include "ultima/ultima4/meta_engine.h"
 #include "common/savefile.h"
 #include "common/system.h"
diff --git a/engines/ultima/ultima4/gfx/screen.cpp b/engines/ultima/ultima4/gfx/screen.cpp
index a58e470488..3dc0811a25 100644
--- a/engines/ultima/ultima4/gfx/screen.cpp
+++ b/engines/ultima/ultima4/gfx/screen.cpp
@@ -33,10 +33,10 @@
 #include "ultima/ultima4/gfx/imagemgr.h"
 #include "ultima/ultima4/gfx/screen.h"
 #include "ultima/ultima4/gfx/textcolor.h"
-#include "ultima/ultima4/map/dungeonview.h"
 #include "ultima/ultima4/map/location.h"
 #include "ultima/ultima4/map/tileanim.h"
 #include "ultima/ultima4/map/tileset.h"
+#include "ultima/ultima4/views/dungeonview.h"
 #include "ultima/ultima4/views/tileview.h"
 #include "ultima/ultima4/map/annotation.h"
 #include "ultima/ultima4/ultima4.h"
diff --git a/engines/ultima/ultima4/map/dungeonview.cpp b/engines/ultima/ultima4/views/dungeonview.cpp
similarity index 99%
rename from engines/ultima/ultima4/map/dungeonview.cpp
rename to engines/ultima/ultima4/views/dungeonview.cpp
index f75e69e00b..af61c7dba0 100644
--- a/engines/ultima/ultima4/map/dungeonview.cpp
+++ b/engines/ultima/ultima4/views/dungeonview.cpp
@@ -21,13 +21,13 @@
  */
 
 #include "ultima/ultima4/core/config.h"
-#include "ultima/ultima4/map/dungeonview.h"
+#include "ultima/ultima4/core/settings.h"
 #include "ultima/ultima4/gfx/image.h"
 #include "ultima/ultima4/gfx/imagemgr.h"
-#include "ultima/ultima4/core/settings.h"
 #include "ultima/ultima4/gfx/screen.h"
 #include "ultima/ultima4/map/tileanim.h"
 #include "ultima/ultima4/map/tileset.h"
+#include "ultima/ultima4/views/dungeonview.h"
 #include "ultima/ultima4/ultima4.h"
 #include "ultima/shared/std/misc.h"
 
diff --git a/engines/ultima/ultima4/map/dungeonview.h b/engines/ultima/ultima4/views/dungeonview.h
similarity index 97%
rename from engines/ultima/ultima4/map/dungeonview.h
rename to engines/ultima/ultima4/views/dungeonview.h
index c339a5cb8f..98d6e946eb 100644
--- a/engines/ultima/ultima4/map/dungeonview.h
+++ b/engines/ultima/ultima4/views/dungeonview.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef ULTIMA4_MAP_DUNGEONVIEW_H
-#define ULTIMA4_MAP_DUNGEONVIEW_H
+#ifndef ULTIMA4_VIEWS_DUNGEONVIEW_H
+#define ULTIMA4_VIEWS_DUNGEONVIEW_H
 
 #include "ultima/ultima4/game/context.h"
 #include "ultima/ultima4/map/dungeon.h"


Commit: a2c72eeaa2e5516202d335b3432b3822a56f9914
    https://github.com/scummvm/scummvm/commit/a2c72eeaa2e5516202d335b3432b3822a56f9914
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-05-09T22:11:29-07:00

Commit Message:
ULTIMA4: Dungeon monster fixes

Changed paths:
    engines/ultima/ultima4/filesys/savegame.h
    engines/ultima/ultima4/map/map.cpp


diff --git a/engines/ultima/ultima4/filesys/savegame.h b/engines/ultima/ultima4/filesys/savegame.h
index 536ad5a49c..4fedf10a4a 100644
--- a/engines/ultima/ultima4/filesys/savegame.h
+++ b/engines/ultima/ultima4/filesys/savegame.h
@@ -220,8 +220,15 @@ struct SaveGameMonsterRecord {
 	byte _unused1;
 	byte _unused2;
 
-	SaveGameMonsterRecord() : _tile(0), _x(0), _y(0), _prevTile(0),
-		_prevX(0), _prevY(0), _unused1(0), _unused2(0) {}
+	SaveGameMonsterRecord() {
+		clear();
+	}
+
+	void clear() {
+		_tile = _x = _y = 0;
+		_prevTile = _prevX = _prevY = 0;
+		_unused1 = _unused2 = 0;
+	}
 
 	static void synchronize(SaveGameMonsterRecord *monsterTable, Common::Serializer &s);
 };
diff --git a/engines/ultima/ultima4/map/map.cpp b/engines/ultima/ultima4/map/map.cpp
index 9f9eb92d80..e01678e91f 100644
--- a/engines/ultima/ultima4/map/map.cpp
+++ b/engines/ultima/ultima4/map/map.cpp
@@ -695,7 +695,8 @@ bool Map::fillMonsterTable() {
 	int nObjects = 0;
 	int i;
 
-	memset(_monsterTable, 0, MONSTERTABLE_SIZE * sizeof(SaveGameMonsterRecord));
+	for (int idx = 0; idx < MONSTERTABLE_SIZE; ++idx)
+		_monsterTable[idx].clear();
 
 	/**
 	 * First, categorize all the objects we have


Commit: b84ab126fb043a0e9a069d6de908b92a2cdabab9
    https://github.com/scummvm/scummvm/commit/b84ab126fb043a0e9a069d6de908b92a2cdabab9
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-05-09T22:11:29-07:00

Commit Message:
ULTIMA4: Refactored use of statics in DungeonView

Changed paths:
    engines/ultima/ultima4/views/dungeonview.cpp
    engines/ultima/ultima4/views/dungeonview.h


diff --git a/engines/ultima/ultima4/views/dungeonview.cpp b/engines/ultima/ultima4/views/dungeonview.cpp
index af61c7dba0..8896956ae4 100644
--- a/engines/ultima/ultima4/views/dungeonview.cpp
+++ b/engines/ultima/ultima4/views/dungeonview.cpp
@@ -37,7 +37,7 @@ namespace Ultima4 {
 DungeonView *DungeonView::_instance = nullptr;
 
 DungeonView::DungeonView(int x, int y, int columns, int rows) : TileView(x, y, rows, columns)
-	, screen3dDungeonViewEnabled(true) {
+	, _screen3dDungeonViewEnabled(true) {
 }
 
 DungeonView *DungeonView::getInstance() {
@@ -51,7 +51,7 @@ void DungeonView::display(Context *c, TileView *view) {
 	int x, y;
 
 	// 1st-person perspective
-	if (screen3dDungeonViewEnabled) {
+	if (_screen3dDungeonViewEnabled) {
 		// Note: This shouldn't go above 4, unless we check opaque tiles each step of the way.
 		const int farthest_non_wall_tile_visibility = 4;
 
@@ -270,23 +270,27 @@ Std::vector<MapTile> DungeonView::getTiles(int fwd, int side) {
 DungeonGraphicType DungeonView::tilesToGraphic(const Std::vector<MapTile> &tiles) {
 	MapTile tile = tiles.front();
 
-	static const MapTile corridor = g_context->_location->_map->_tileSet->getByName("brick_floor")->getId();
-	static const MapTile up_ladder = g_context->_location->_map->_tileSet->getByName("up_ladder")->getId();
-	static const MapTile down_ladder = g_context->_location->_map->_tileSet->getByName("down_ladder")->getId();
-	static const MapTile updown_ladder = g_context->_location->_map->_tileSet->getByName("up_down_ladder")->getId();
+	if (!_tiles._loaded) {
+		_tiles._corridor = g_context->_location->_map->_tileSet->getByName("brick_floor")->getId();
+		_tiles._upLadder = g_context->_location->_map->_tileSet->getByName("up_ladder")->getId();
+		_tiles._downLadder = g_context->_location->_map->_tileSet->getByName("down_ladder")->getId();
+		_tiles._upDownLadder = g_context->_location->_map->_tileSet->getByName("up_down_ladder")->getId();
+		_tiles._loaded = true;
+	}
+
 
 	/*
 	 * check if the dungeon tile has an annotation or object on top
 	 * (always displayed as a tile, unless a ladder)
 	 */
 	if (tiles.size() > 1) {
-		if (tile._id == up_ladder._id)
+		if (tile._id == _tiles._upLadder._id)
 			return DNGGRAPHIC_LADDERUP;
-		else if (tile._id == down_ladder._id)
+		else if (tile._id == _tiles._downLadder._id)
 			return DNGGRAPHIC_LADDERDOWN;
-		else if (tile._id == updown_ladder._id)
+		else if (tile._id == _tiles._upDownLadder._id)
 			return DNGGRAPHIC_LADDERUPDOWN;
-		else if (tile._id == corridor._id)
+		else if (tile._id == _tiles._corridor._id)
 			return DNGGRAPHIC_NONE;
 		else
 			return DNGGRAPHIC_BASETILE;
diff --git a/engines/ultima/ultima4/views/dungeonview.h b/engines/ultima/ultima4/views/dungeonview.h
index 98d6e946eb..5754f89ef8 100644
--- a/engines/ultima/ultima4/views/dungeonview.h
+++ b/engines/ultima/ultima4/views/dungeonview.h
@@ -58,9 +58,21 @@ DungeonGraphicType dungeonViewTilesToGraphic(const Std::vector<MapTile> &tiles);
  * </ul>
  */
 class DungeonView : public TileView {
+	struct MapTiles {
+		MapTile _corridor;
+		MapTile _upLadder;
+		MapTile _downLadder;
+		MapTile _upDownLadder;
+		bool _loaded;
+
+		MapTiles() : _loaded(false) {
+		}
+	};
+private:
+	bool _screen3dDungeonViewEnabled;
+	MapTiles _tiles;
 private:
 	DungeonView(int x, int y, int columns, int rows);
-	bool screen3dDungeonViewEnabled;
 public:
 	static DungeonView *_instance;
 	static DungeonView *getInstance();
@@ -74,7 +86,7 @@ public:
 	DungeonGraphicType tilesToGraphic(const Std::vector<MapTile> &tiles);
 
 	bool toggle3DDungeonView() {
-		return screen3dDungeonViewEnabled = !screen3dDungeonViewEnabled;
+		return _screen3dDungeonViewEnabled = !_screen3dDungeonViewEnabled;
 	}
 
 	Std::vector<MapTile> getTiles(int fwd, int side);


Commit: 52017e5748530843a6e9d4531f4e095ca842975d
    https://github.com/scummvm/scummvm/commit/52017e5748530843a6e9d4531f4e095ca842975d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-05-09T22:11:29-07:00

Commit Message:
ULTIMA4: Handle scaling up when rendering dungeon tiles

Changed paths:
    engines/ultima/ultima4/gfx/image.cpp
    engines/ultima/ultima4/views/dungeonview.cpp


diff --git a/engines/ultima/ultima4/gfx/image.cpp b/engines/ultima/ultima4/gfx/image.cpp
index efbb43b924..585277b99e 100644
--- a/engines/ultima/ultima4/gfx/image.cpp
+++ b/engines/ultima/ultima4/gfx/image.cpp
@@ -432,7 +432,22 @@ void Image::drawOn(Image *d, int x, int y) const {
 
 void Image::drawSubRectOn(Image *d, int x, int y, int rx, int ry, int rw, int rh) const {
 	Graphics::ManagedSurface *destSurface = getSurface(d);
-	destSurface->blitFrom(*_surface, Common::Rect(rx, ry, rx + rw, ry + rh), Common::Point(x, y));
+
+	if (rw > _surface->w || rh > _surface->h) {
+		// Blitting entire surface with stretching
+		assert(rx == 0 && ry == 0);
+
+		Graphics::ManagedSurface *destSurface = getSurface(d);
+		destSurface->transBlitFrom(*_surface,
+			Common::Rect(0, 0, _surface->w, _surface->h),
+			Common::Rect(x, y, x + rw, y + rh),
+			(uint)-1
+		);
+
+	} else {
+		// Blitting all or part of source surface
+		destSurface->blitFrom(*_surface, Common::Rect(rx, ry, rx + rw, ry + rh), Common::Point(x, y));
+	}
 }
 
 void Image::drawSubRectInvertedOn(Image *d, int x, int y, int rx, int ry, int rw, int rh) const {
diff --git a/engines/ultima/ultima4/views/dungeonview.cpp b/engines/ultima/ultima4/views/dungeonview.cpp
index 8896956ae4..57fbbf13ca 100644
--- a/engines/ultima/ultima4/views/dungeonview.cpp
+++ b/engines/ultima/ultima4/views/dungeonview.cpp
@@ -181,8 +181,7 @@ void DungeonView::drawInDungeon(Tile *tile, int x_offset, int distance, Directio
 		int y = SCALED((VIEWPORT_H * _tileHeight / 2) + _bounds.top + y_offset) - (scaled->height() / 8);
 
 		scaled->drawSubRectOn(this->_screen, x, y, 0, 0,
-			SCALED(_tileWidth * VIEWPORT_W + _bounds.left) - x ,
-			SCALED(_tileHeight * VIEWPORT_H + _bounds.top) - y);
+			scaled->width(), scaled->height());
 	}
 
 	delete scaled;




More information about the Scummvm-git-logs mailing list