[Scummvm-git-logs] scummvm master -> dbec7774b2ee99dad7567696ffff6461c66db8f3
dreammaster
paulfgilbert at gmail.com
Sat Feb 29 19:47:33 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
af7f8787f8 ULTIMA8: Fix rendering content of minimaps
dbec7774b2 ULTIMA8: Cleanup of minimap gump code
Commit: af7f8787f86687cc42dd5ebff8a294bcfbdd19c2
https://github.com/scummvm/scummvm/commit/af7f8787f86687cc42dd5ebff8a294bcfbdd19c2
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-29T11:43:38-08:00
Commit Message:
ULTIMA8: Fix rendering content of minimaps
Changed paths:
engines/ultima/ultima8/gumps/minimap_gump.cpp
engines/ultima/ultima8/gumps/minimap_gump.h
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 4f27a8265d..6e8e6db24f 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -43,7 +43,7 @@ MiniMapGump::MiniMapGump(int x_, int y_) :
FLAG_DRAGGABLE, LAYER_NORMAL), _minimap(), _lastMapNum(0) {
_minimap._format = TEX_FMT_NATIVE;
_minimap._width = _minimap._height = MAP_NUM_CHUNKS * MINMAPGUMP_SCALE;
- _minimap._buffer = _texBuffer[0];
+ _minimap._buffer = (uint32 *)_texBuffer;
}
MiniMapGump::MiniMapGump() : Gump() {
@@ -52,6 +52,26 @@ MiniMapGump::MiniMapGump() : Gump() {
MiniMapGump::~MiniMapGump(void) {
}
+void MiniMapGump::setPixelAt(int x, int y, uint32 pixel) {
+ if (RenderSurface::_format.s_bytes_per_pixel == 2) {
+ uint16 *buf = (uint16 *)_texBuffer + (y * _minimap._width) + x;
+ *buf = pixel;
+ } else {
+ uint32 *buf = (uint32 *)_texBuffer + (y * _minimap._width) + x;
+ *buf = pixel;
+ }
+}
+
+uint32 MiniMapGump::getPixelAt(int x, int y) {
+ if (RenderSurface::_format.s_bytes_per_pixel == 2) {
+ uint16 *buf = (uint16 *)_texBuffer + (y * _minimap._width) + x;
+ return *buf;
+ } else {
+ uint32 *buf = (uint32 *)_texBuffer + (y * _minimap._width) + x;
+ return *buf;
+ }
+}
+
void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
World *world = World::get_instance();
CurrentMap *currentmap = world->getCurrentMap();
@@ -71,11 +91,14 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
for (int xv = 0; xv < MAP_NUM_CHUNKS; xv++) {
if (currentmap->isChunkFast(xv, yv)) {
for (int j = 0; j < MINMAPGUMP_SCALE; j++) for (int i = 0; i < MINMAPGUMP_SCALE; i++) {
- if (_texBuffer[yv * MINMAPGUMP_SCALE + j][xv * MINMAPGUMP_SCALE + i] == 0)
- _texBuffer[yv * MINMAPGUMP_SCALE + j][xv * MINMAPGUMP_SCALE + i] = sampleAtPoint(
+ uint32 val = getPixelAt(xv * MINMAPGUMP_SCALE + i, yv * MINMAPGUMP_SCALE + j);
+ if (val == 0) {
+ val = sampleAtPoint(
xv * mapChunkSize + mapChunkSize / (MINMAPGUMP_SCALE * 2) + (mapChunkSize * i) / MINMAPGUMP_SCALE,
yv * mapChunkSize + mapChunkSize / (MINMAPGUMP_SCALE * 2) + (mapChunkSize * j) / MINMAPGUMP_SCALE,
currentmap);
+ setPixelAt(xv * MINMAPGUMP_SCALE + i, yv * MINMAPGUMP_SCALE + j, val);
+ }
}
}
}
@@ -147,7 +170,8 @@ uint32 MiniMapGump::sampleAtPoint(int x_, int y_, CurrentMap *currentmap) {
uint16 r = 0, g = 0, b = 0, c = 0;
- for (int j = 0; j < 2; j++) for (int i = 0; i < 2; i++) {
+ for (int j = 0; j < 2; j++) {
+ for (int i = 0; i < 2; i++) {
if (!frame->hasPoint(i - sx, j - sy)) continue;
uint16 r2, g2, b2;
@@ -157,10 +181,16 @@ uint32 MiniMapGump::sampleAtPoint(int x_, int y_, CurrentMap *currentmap) {
b += RenderSurface::_gamma22toGamma10[b2];
c++;
}
- if (!c) return 0;
+ }
- return PACK_RGB8(RenderSurface::_gamma10toGamma22[r / c], RenderSurface::_gamma10toGamma22[g / c], RenderSurface::_gamma10toGamma22[b / c]);
- } else return 0;
+ if (!c)
+ return 0;
+
+ uint32 v = PACK_RGB8(RenderSurface::_gamma10toGamma22[r / c], RenderSurface::_gamma10toGamma22[g / c], RenderSurface::_gamma10toGamma22[b / c]);
+ return v;
+ } else {
+ return 0;
+ }
}
void MiniMapGump::saveData(ODataSource *ods) {
@@ -173,7 +203,7 @@ bool MiniMapGump::loadData(IDataSource *ids, uint32 version) {
_lastMapNum = 0;
_minimap._format = TEX_FMT_NATIVE;
_minimap._width = _minimap._height = MAP_NUM_CHUNKS * MINMAPGUMP_SCALE;
- _minimap._buffer = _texBuffer[0];
+ _minimap._buffer = (uint32 *)_texBuffer[0];
return true;
}
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.h b/engines/ultima/ultima8/gumps/minimap_gump.h
index 5f30717e8a..08a3e1826f 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.h
+++ b/engines/ultima/ultima8/gumps/minimap_gump.h
@@ -34,12 +34,14 @@ namespace Ultima8 {
#define MINMAPGUMP_SCALE 8
class MiniMapGump : public Gump {
+private:
Texture _minimap;
unsigned int _lastMapNum;
- uint32 _texBuffer[MAP_NUM_CHUNKS * MINMAPGUMP_SCALE][MAP_NUM_CHUNKS * MINMAPGUMP_SCALE];
-
- uint32 sampleAtPoint(int x, int y, CurrentMap *map);
+ byte _texBuffer[(MAP_NUM_CHUNKS * MINMAPGUMP_SCALE) * (MAP_NUM_CHUNKS * MINMAPGUMP_SCALE) * 4];
+ uint32 getPixelAt(int x, int y);
+ void setPixelAt(int x, int y, uint32 pixel);
+ uint32 sampleAtPoint(int x, int y, CurrentMap *map);
public:
ENABLE_RUNTIME_CLASSTYPE()
Commit: dbec7774b2ee99dad7567696ffff6461c66db8f3
https://github.com/scummvm/scummvm/commit/dbec7774b2ee99dad7567696ffff6461c66db8f3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-29T11:47:05-08:00
Commit Message:
ULTIMA8: Cleanup of minimap gump code
Changed paths:
engines/ultima/ultima8/gumps/minimap_gump.cpp
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 6e8e6db24f..4d269af383 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -38,8 +38,8 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(MiniMapGump, Gump)
-MiniMapGump::MiniMapGump(int x_, int y_) :
- Gump(x_, y_, MAP_NUM_CHUNKS * 2 + 2, MAP_NUM_CHUNKS * 2 + 2, 0,
+MiniMapGump::MiniMapGump(int x, int y) :
+ Gump(x, y, MAP_NUM_CHUNKS * 2 + 2, MAP_NUM_CHUNKS * 2 + 2, 0,
FLAG_DRAGGABLE, LAYER_NORMAL), _minimap(), _lastMapNum(0) {
_minimap._format = TEX_FMT_NATIVE;
_minimap._width = _minimap._height = MAP_NUM_CHUNKS * MINMAPGUMP_SCALE;
@@ -143,25 +143,28 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
surf->Fill32(0xFFFFFF00, 1 + ax + 0, 1 + ay + 1, 1, 2);
}
-uint32 MiniMapGump::sampleAtPoint(int x_, int y_, CurrentMap *currentmap) {
- Item *item = currentmap->traceTopItem(x_, y_, 1 << 15, -1, 0, ShapeInfo::SI_ROOF | ShapeInfo::SI_OCCL | ShapeInfo::SI_LAND | ShapeInfo::SI_SEA);
+uint32 MiniMapGump::sampleAtPoint(int x, int y, CurrentMap *currentmap) {
+ Item *item = currentmap->traceTopItem(x, y, 1 << 15, -1, 0, ShapeInfo::SI_ROOF | ShapeInfo::SI_OCCL | ShapeInfo::SI_LAND | ShapeInfo::SI_SEA);
if (item) {
int32 ix, iy, iz, idx, idy, idz;
item->getLocation(ix, iy, iz);
item->getFootpadWorld(idx, idy, idz);
- ix -= x_;
- iy -= y_;
+ ix -= x;
+ iy -= y;
Shape *sh = item->getShapeObject();
- if (!sh) return 0;
+ if (!sh)
+ return 0;
ShapeFrame *frame = sh->getFrame(item->getFrame());
- if (!frame) return 0;
+ if (!frame)
+ return 0;
const Palette *pal = sh->getPalette();
- if (!pal) return 0;
+ if (!pal)
+ return 0;
// Screenspace bounding box bottom x_ coord (RNB x_ coord)
int sx = (ix - iy) / 4;
@@ -174,7 +177,7 @@ uint32 MiniMapGump::sampleAtPoint(int x_, int y_, CurrentMap *currentmap) {
for (int i = 0; i < 2; i++) {
if (!frame->hasPoint(i - sx, j - sy)) continue;
- uint16 r2, g2, b2;
+ byte r2, g2, b2;
UNPACK_RGB8(pal->_native_untransformed[frame->getPixelAtPoint(i - sx, j - sy)], r2, g2, b2);
r += RenderSurface::_gamma22toGamma10[r2];
g += RenderSurface::_gamma22toGamma10[g2];
@@ -186,8 +189,7 @@ uint32 MiniMapGump::sampleAtPoint(int x_, int y_, CurrentMap *currentmap) {
if (!c)
return 0;
- uint32 v = PACK_RGB8(RenderSurface::_gamma10toGamma22[r / c], RenderSurface::_gamma10toGamma22[g / c], RenderSurface::_gamma10toGamma22[b / c]);
- return v;
+ return PACK_RGB8(RenderSurface::_gamma10toGamma22[r / c], RenderSurface::_gamma10toGamma22[g / c], RenderSurface::_gamma10toGamma22[b / c]);
} else {
return 0;
}
@@ -198,7 +200,8 @@ void MiniMapGump::saveData(ODataSource *ods) {
}
bool MiniMapGump::loadData(IDataSource *ids, uint32 version) {
- if (!Gump::loadData(ids, version)) return false;
+ if (!Gump::loadData(ids, version))
+ return false;
_lastMapNum = 0;
_minimap._format = TEX_FMT_NATIVE;
More information about the Scummvm-git-logs
mailing list