[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