aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNipun Garg2019-08-05 11:49:03 +0530
committerEugene Sandulenko2019-09-03 17:17:32 +0200
commit9c2d639a35c4308d288399e8468fd4228da2b408 (patch)
tree8dd0fe3f281cd943c08baf0874a442cc857ee1de
parent1d1ace6ab51656c2d8b9cddf1a99f180ce6fd999 (diff)
downloadscummvm-rg350-9c2d639a35c4308d288399e8468fd4228da2b408.tar.gz
scummvm-rg350-9c2d639a35c4308d288399e8468fd4228da2b408.tar.bz2
scummvm-rg350-9c2d639a35c4308d288399e8468fd4228da2b408.zip
HDB: Adapt loadFont, Picture::load, Tile::load for
PPC
-rw-r--r--engines/hdb/gfx.cpp87
1 files changed, 67 insertions, 20 deletions
diff --git a/engines/hdb/gfx.cpp b/engines/hdb/gfx.cpp
index 7a086571c3..36ce3d941c 100644
--- a/engines/hdb/gfx.cpp
+++ b/engines/hdb/gfx.cpp
@@ -787,6 +787,7 @@ bool Gfx::loadFont(const char *string) {
// Position after _fontHeader
int startPos = stream->pos();
+ uint16 *ptr;
for (int i = 0; i < _fontHeader.numChars; i++) {
CharInfo *cInfo = new CharInfo;
cInfo->width = (int16)stream->readUint32LE();
@@ -797,16 +798,32 @@ bool Gfx::loadFont(const char *string) {
// Position after reading cInfo
int curPos = stream->pos();
- _fontSurfaces[i].create(cInfo->width, _fontHeader.height, g_hdb->_format);
+ if (g_hdb->isPPC())
+ _fontSurfaces[i].create(_fontHeader.height, cInfo->width, g_hdb->_format);
+ else
+ _fontSurfaces[i].create(cInfo->width, _fontHeader.height, g_hdb->_format);
// Go to character location
stream->seek(startPos+cInfo->offset);
- for (int y = 0; y < _fontHeader.height; y++) {
- uint16 *ptr = (uint16 *)_fontSurfaces[i].getBasePtr(0, y);
- for (int x = 0; x < cInfo->width; x++) {
- *ptr = TO_LE_16(stream->readUint16LE());
- ptr++;
+ if (g_hdb->isPPC()) {
+
+ for (int y = 0; y < _fontHeader.height; y++) {
+ for (int x = 0; x < cInfo->width; x++) {
+ int u, v;
+ u = y;
+ v = _fontHeader.height - x - 1;
+ ptr = (uint16 *)_fontSurfaces[i].getBasePtr(u, v);
+ *ptr = TO_LE_16(stream->readUint16LE());
+ }
+ }
+ } else {
+ for (int y = 0; y < _fontHeader.height; y++) {
+ ptr = (uint16 *)_fontSurfaces[i].getBasePtr(0, y);
+ for (int x = 0; x < cInfo->width; x++) {
+ *ptr = TO_LE_16(stream->readUint16LE());
+ ptr++;
+ }
}
}
@@ -1124,14 +1141,31 @@ Graphics::Surface Picture::load(Common::SeekableReadStream *stream) {
debug(8, "Picture: _width: %d, _height: %d", _width, _height);
debug(8, "Picture: _name: %s", _name);
- _surface.create(_width, _height, g_hdb->_format);
- stream->readUint32LE(); // Skip Win32 Surface
+ if (g_hdb->isPPC()) {
+ _surface.create(_height, _width, g_hdb->_format);
+
+ uint16 *ptr;
+
+ for (int y = 0; y < _height; y++) {
+ for (int x = 0; x < _width; x++) {
+ int u, v;
+ u = y;
+ v = _height - x - 1;
+ ptr = (uint16 *)_surface.getBasePtr(u, v);
+ *ptr = TO_LE_16(stream->readUint16LE());
+ }
+ }
+
+ } else {
+ _surface.create(_width, _height, g_hdb->_format);
+ stream->readUint32LE(); // Skip Win32 Surface
- for (int y = 0; y < _height; y++) {
- uint16 *ptr = (uint16 *)_surface.getBasePtr(0, y);
- for (int x = 0; x < _width; x++) {
- *ptr = TO_LE_16(stream->readUint16LE());
- ptr++;
+ for (int y = 0; y < _height; y++) {
+ uint16 *ptr = (uint16 *)_surface.getBasePtr(0, y);
+ for (int x = 0; x < _width; x++) {
+ *ptr = TO_LE_16(stream->readUint16LE());
+ ptr++;
+ }
}
}
@@ -1177,13 +1211,26 @@ Graphics::Surface Tile::load(Common::SeekableReadStream *stream) {
stream->read(_name, 64);
_surface.create(32, 32, g_hdb->_format);
- stream->readUint32LE(); // Skip Win32 Surface
-
- for (uint y = 0; y < 32; y++) {
- uint16 *ptr = (uint16 *)_surface.getBasePtr(0, y);
- for (uint x = 0; x < 32; x++) {
- *ptr = TO_LE_16(stream->readUint16LE());
- ptr++;
+ if (g_hdb->isPPC()) {
+ uint16 *ptr;
+
+ for (int y = 0; y < 32; y++) {
+ for (int x = 0; x < 32; x++) {
+ int u, v;
+ u = y;
+ v = 32 - x - 1;
+ ptr = (uint16 *)_surface.getBasePtr(u, v);
+ *ptr = TO_LE_16(stream->readUint16LE());
+ }
+ }
+ } else {
+ stream->readUint32LE(); // Skip Win32 Surface
+ for (uint y = 0; y < 32; y++) {
+ uint16 *ptr = (uint16 *)_surface.getBasePtr(0, y);
+ for (uint x = 0; x < 32; x++) {
+ *ptr = TO_LE_16(stream->readUint16LE());
+ ptr++;
+ }
}
}