aboutsummaryrefslogtreecommitdiff
path: root/engines/agi
diff options
context:
space:
mode:
authorMartin Kiewitz2016-02-05 16:41:02 +0100
committerMartin Kiewitz2016-02-05 16:41:02 +0100
commitf09a15f27636149b267d0e0b23a9dcfa4bc8c854 (patch)
tree5ca958360f6ff0876dd522b8073bba1029c3f827 /engines/agi
parentf954603f8d0ab7442dded19acaec8e597cbe478e (diff)
downloadscummvm-rg350-f09a15f27636149b267d0e0b23a9dcfa4bc8c854.tar.gz
scummvm-rg350-f09a15f27636149b267d0e0b23a9dcfa4bc8c854.tar.bz2
scummvm-rg350-f09a15f27636149b267d0e0b23a9dcfa4bc8c854.zip
AGI: Render mode Macintosh added
Palette + mouse cursor + box frame color only atm Thanks to wjp for gamma correction Not sure, if our current color adjustment is correct Should be checked by using actual hardware
Diffstat (limited to 'engines/agi')
-rw-r--r--engines/agi/agi.cpp6
-rw-r--r--engines/agi/graphics.cpp27
-rw-r--r--engines/agi/graphics.h1
-rw-r--r--engines/agi/mouse_cursor.h23
-rw-r--r--engines/agi/palette.h22
5 files changed, 76 insertions, 3 deletions
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp
index 933aa50b1c..9eeca62acc 100644
--- a/engines/agi/agi.cpp
+++ b/engines/agi/agi.cpp
@@ -305,6 +305,9 @@ void AgiBase::initRenderMode() {
case Common::kPlatformAtariST:
_renderMode = Common::kRenderAtariST;
break;
+ case Common::kPlatformMacintosh:
+ _renderMode = Common::kRenderMacintosh;
+ break;
default:
break;
}
@@ -320,6 +323,9 @@ void AgiBase::initRenderMode() {
case Common::kRenderAtariST:
_renderMode = Common::kRenderAtariST;
break;
+ case Common::kRenderMacintosh:
+ _renderMode = Common::kRenderMacintosh;
+ break;
default:
break;
}
diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp
index 7f367a0685..cfe65993cd 100644
--- a/engines/agi/graphics.cpp
+++ b/engines/agi/graphics.cpp
@@ -92,6 +92,9 @@ int GfxMgr::initVideo() {
case Common::kRenderAtariST:
initPalette(_paletteGfxMode, PALETTE_ATARI_ST, 16, 3);
break;
+ case Common::kRenderMacintosh:
+ initPaletteCLUT(_paletteGfxMode, PALETTE_MACINTOSH_CLUT, 16);
+ break;
default:
error("initVideo: unsupported render mode");
break;
@@ -118,6 +121,12 @@ int GfxMgr::initVideo() {
initMouseCursor(&_mouseCursor, MOUSECURSOR_ATARI_ST, 11, 16, 1, 1);
initMouseCursor(&_mouseCursorBusy, MOUSECURSOR_SCI_BUSY, 15, 16, 7, 8);
break;
+ case Common::kRenderMacintosh:
+ // It looks like Atari ST + Macintosh used the same standard mouse cursor
+ // TODO: Verify by checking actual hardware
+ initMouseCursor(&_mouseCursor, MOUSECURSOR_ATARI_ST, 11, 16, 1, 1);
+ initMouseCursor(&_mouseCursorBusy, MOUSECURSOR_MACINTOSH_BUSY, 10, 14, 7, 8);
+ break;
default:
error("initVideo: unsupported render mode");
break;
@@ -813,9 +822,21 @@ int16 GfxMgr::priorityFromY(int16 yPos) {
void GfxMgr::initPalette(uint8 *destPalette, const uint8 *paletteData, uint colorCount, uint fromBits, uint toBits) {
const uint srcMax = (1 << fromBits) - 1;
const uint destMax = (1 << toBits) - 1;
- for (uint col = 0; col < colorCount; col++) {
- for (uint comp = 0; comp < 3; comp++) { // Convert RGB components
- destPalette[col * 3 + comp] = (paletteData[col * 3 + comp] * destMax) / srcMax;
+ for (uint colorNr = 0; colorNr < colorCount; colorNr++) {
+ for (uint componentNr = 0; componentNr < 3; componentNr++) { // Convert RGB components
+ destPalette[colorNr * 3 + componentNr] = (paletteData[colorNr * 3 + componentNr] * destMax) / srcMax;
+ }
+ }
+}
+
+// Converts CLUT data to a palette, that we can use
+void GfxMgr::initPaletteCLUT(uint8 *destPalette, const uint16 *paletteCLUTData, uint colorCount) {
+ for (uint colorNr = 0; colorNr < colorCount; colorNr++) {
+ for (uint componentNr = 0; componentNr < 3; componentNr++) { // RGB component
+ byte component = (paletteCLUTData[colorNr * 3 + componentNr] >> 8);
+ // Adjust gamma (1.8 to 2.2)
+ component = (byte)(255 * powf(component / 255.0f, 0.8181f));
+ destPalette[colorNr * 3 + componentNr] = component;
}
}
}
diff --git a/engines/agi/graphics.h b/engines/agi/graphics.h
index 7a7d340df6..fb596626c6 100644
--- a/engines/agi/graphics.h
+++ b/engines/agi/graphics.h
@@ -69,6 +69,7 @@ public:
int initVideo();
int deinitVideo();
void initPalette(uint8 *destPalette, const uint8 *paletteData, uint colorCount = 16, uint fromBits = 6, uint toBits = 8);
+ void initPaletteCLUT(uint8 *destPalette, const uint16 *paletteCLUTData, uint colorCount = 16);
void setAGIPal(int);
int getAGIPalFileNum();
void setPalette(bool GfxModePalette);
diff --git a/engines/agi/mouse_cursor.h b/engines/agi/mouse_cursor.h
index 381ad9fcb7..c086359b0f 100644
--- a/engines/agi/mouse_cursor.h
+++ b/engines/agi/mouse_cursor.h
@@ -178,6 +178,29 @@ static const byte MOUSECURSOR_AMIGA_BUSY[] = {
1,1,1,1,1,1,1,1,1,1,1,1,1
};
+/**
+ * A Macintosh-style busy cursor showing an hourglass (10x14).
+ * 0 = Transparent.
+ * 1 = Black (#000000 in 24-bit RGB).
+ * 2 = White (#FFFFFF in 24-bit RGB).
+ */
+static const byte MOUSECURSOR_MACINTOSH_BUSY[] = {
+ 0,0,1,1,1,1,1,1,0,0,
+ 0,0,1,1,1,1,1,1,0,0,
+ 0,0,1,1,1,1,1,1,0,0,
+ 0,1,2,2,2,2,2,2,1,0,
+ 1,2,2,2,2,1,2,2,2,1,
+ 1,2,2,2,2,1,2,2,2,1,
+ 1,2,2,2,2,1,2,2,2,1,
+ 1,2,2,1,1,1,2,2,2,1,
+ 1,2,2,2,2,2,2,2,2,1,
+ 1,2,2,2,2,2,2,2,2,1,
+ 0,1,2,2,2,2,2,2,1,0,
+ 0,0,1,1,1,1,1,1,0,0,
+ 0,0,1,1,1,1,1,1,0,0,
+ 0,0,1,1,1,1,1,1,0,0
+};
+
} // End of namespace Agi
#endif /* AGI_MOUSE_CURSOR_H */
diff --git a/engines/agi/palette.h b/engines/agi/palette.h
index 88ccce7441..4be29e4678 100644
--- a/engines/agi/palette.h
+++ b/engines/agi/palette.h
@@ -235,6 +235,28 @@ static const uint8 PALETTE_AMIGA_ALT[16 * 3] = {
};
/**
+ * 16 color Macintosh palette (CLUT format).
+ */
+static const uint16 PALETTE_MACINTOSH_CLUT[16 * 3] = {
+ 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xC000,
+ 0x0000, 0xA800, 0x0000,
+ 0x0000, 0xA000, 0xA000,
+ 0xCE50, 0x0000, 0x0000,
+ 0xC080, 0x0000, 0xFFFF,
+ 0xD000, 0x6130, 0x32D0,
+ 0xC000, 0xC000, 0xC000,
+ 0x6000, 0x6000, 0x6000,
+ 0x6800, 0x6800, 0xFFFF,
+ 0x0000, 0xFFFF, 0x0000,
+ 0x0000, 0xFFFF, 0xFFFF,
+ 0xFFFF, 0x5390, 0x64B0,
+ 0xFFFF, 0x8000, 0x0000,
+ 0xFFFF, 0xFFFF, 0x0000,
+ 0xFFFF, 0xFFFF, 0xFFFF
+};
+
+/**
* 256 color palette used with AGI256 and AGI256-2 games.
* Uses full 8 bits per color component.
* This is NOT the standard VGA palette.