mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-04 09:56:30 +00:00
FREESCAPE: added basic loading of Driller Amstrad CPC release (but without correct palette)
This commit is contained in:
parent
90d97edd63
commit
cd5dffdce8
@ -59,6 +59,18 @@ static const ADGameDescription gameDescriptions[] = {
|
||||
ADGF_ZX_MUSICAL | ADGF_TESTING,
|
||||
GUIO2(GUIO_NOMIDI, GAMEOPTION_AUTOMATIC_DRILLING)
|
||||
},
|
||||
{
|
||||
"driller",
|
||||
"",
|
||||
{
|
||||
{"DRILLER.CPC.EXTRACTED", 0, "4e4b2fa20f96cea9c19ea3940ae76956", 204032},
|
||||
AD_LISTEND
|
||||
},
|
||||
Common::EN_ANY,
|
||||
Common::kPlatformAmstradCPC,
|
||||
ADGF_TESTING,
|
||||
GUIO2(GUIO_NOMIDI, GAMEOPTION_AUTOMATIC_DRILLING)
|
||||
},
|
||||
{
|
||||
"driller",
|
||||
"",
|
||||
|
@ -49,6 +49,8 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
|
||||
_renderMode = Common::kRenderAmiga;
|
||||
} else if (isAtariST()) {
|
||||
_renderMode = Common::kRenderAtariST;
|
||||
} else if (isCPC()) {
|
||||
_renderMode = Common::kRenderCPC;
|
||||
} else if (isSpectrum()) {
|
||||
_renderMode = Common::kRenderZX;
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ public:
|
||||
bool isAtariST() { return _gameDescription->platform == Common::kPlatformAtariST; }
|
||||
bool isDOS() { return _gameDescription->platform == Common::kPlatformDOS; }
|
||||
bool isSpectrum() { return _gameDescription->platform == Common::kPlatformZX; }
|
||||
bool isCPC() { return _gameDescription->platform == Common::kPlatformAmstradCPC; }
|
||||
|
||||
Common::Error run() override;
|
||||
|
||||
|
@ -452,7 +452,18 @@ void DrillerEngine::loadAssetsFullGame() {
|
||||
load8bitBinary(&file, 0x5c0a, 4);
|
||||
else
|
||||
error("Unknown ZX spectrum variant");
|
||||
} else if (isCPC()) {
|
||||
file.open("driller.cpc.extracted");
|
||||
|
||||
if (!file.isOpen())
|
||||
error("Failed to open driller.cpc.extracted");
|
||||
|
||||
//loadMessagesFixedSize(&file, 0x20e4, 14, 20);
|
||||
|
||||
//loadFonts(&file, 0x62ca);
|
||||
//loadGlobalObjects(&file, 0x1c93);
|
||||
|
||||
load8bitBinary(&file, 0xec76, 4);
|
||||
} else if (_renderMode == Common::kRenderEGA) {
|
||||
loadBundledImages();
|
||||
file.open("DRILLE.EXE");
|
||||
|
@ -53,11 +53,43 @@ byte kDrillerZXPalette[9][3] = {
|
||||
{0x00, 0x00, 0x00},
|
||||
};
|
||||
|
||||
byte kDrillerCPCPalette[27][3] = {
|
||||
{0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x80},
|
||||
{0x00, 0x00, 0xff},
|
||||
{0x80, 0x00, 0x00},
|
||||
{0x80, 0x00, 0x80},
|
||||
{0x80, 0x00, 0xff},
|
||||
{0xff, 0x00, 0x00},
|
||||
{0xff, 0x00, 0x80},
|
||||
{0xff, 0x00, 0xff},
|
||||
{0x00, 0x80, 0x00},
|
||||
{0x00, 0x80, 0x80},
|
||||
{0x00, 0x88, 0xff},
|
||||
{0x80, 0x80, 0x00},
|
||||
{0x80, 0x80, 0x80},
|
||||
{0x80, 0x80, 0xff},
|
||||
{0xff, 0x80, 0x00},
|
||||
{0xff, 0x80, 0x80},
|
||||
{0xff, 0x80, 0xff},
|
||||
{0x00, 0xff, 0x00},
|
||||
{0x00, 0xff, 0x80},
|
||||
{0x00, 0xff, 0xff},
|
||||
{0x80, 0xff, 0x00},
|
||||
{0x80, 0xff, 0x80},
|
||||
{0x80, 0xff, 0xff},
|
||||
{0xff, 0xff, 0x00},
|
||||
{0xff, 0xff, 0x80},
|
||||
{0xff, 0xff, 0xff},
|
||||
};
|
||||
|
||||
void FreescapeEngine::loadColorPalette() {
|
||||
if (_renderMode == Common::kRenderEGA) {
|
||||
_gfx->_palette = (byte *)&dos_EGA_palette;
|
||||
} else if (_renderMode == Common::kRenderZX) {
|
||||
_gfx->_palette = (byte *)kDrillerZXPalette;
|
||||
} else if (_renderMode == Common::kRenderCPC) {
|
||||
_gfx->_palette = (byte *)kDrillerCPCPalette;
|
||||
} else if (_renderMode == Common::kRenderCGA) {
|
||||
_gfx->_palette = nullptr; // palette depends on the area
|
||||
} else if (_renderMode == Common::kRenderAmiga || _renderMode == Common::kRenderAtariST) {
|
||||
|
@ -121,6 +121,28 @@ bool Renderer::getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2) {
|
||||
if (index == _keyColor)
|
||||
return false;
|
||||
|
||||
assert (_renderMode == Common::kRenderCPC);
|
||||
if (index == 4) { // Solid colors
|
||||
readFromPalette(index - 1, r1, g1, b1);
|
||||
r2 = r1;
|
||||
g2 = g1;
|
||||
b2 = b1;
|
||||
return true;
|
||||
}
|
||||
|
||||
byte *entry = (*_colorMap)[index - 1];
|
||||
byte be = *(entry);
|
||||
readFromPalette((be >> 4), r1, g1, b1);
|
||||
entry++;
|
||||
be = *(entry);
|
||||
readFromPalette((be >> 4), r2, g2, b2);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Renderer::getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2) {
|
||||
// assert(index-1 < _colorMap->size());
|
||||
byte *entry = (*_colorMap)[index - 1];
|
||||
@ -175,6 +197,8 @@ bool Renderer::getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2,
|
||||
return getRGBAtEGA(index, r1, g1, b1, r2, g2, b2);
|
||||
else if (_renderMode == Common::kRenderCGA)
|
||||
return getRGBAtCGA(index, r1, g1, b1, r2, g2, b2);
|
||||
else if (_renderMode == Common::kRenderCPC)
|
||||
return getRGBAtCPC(index, r1, g1, b1, r2, g2, b2);
|
||||
else if (_renderMode == Common::kRenderZX)
|
||||
return getRGBAtZX(index, r1, g1, b1, r2, g2, b2, stipple);
|
||||
|
||||
|
@ -100,6 +100,7 @@ public:
|
||||
uint8 indexFromColor(uint8 r, uint8 g, uint8 b);
|
||||
bool getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
|
||||
bool getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
|
||||
bool getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
|
||||
bool getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
|
||||
bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
|
||||
|
||||
|
@ -285,7 +285,7 @@ void OpenGLRenderer::useStipple(bool enabled) {
|
||||
glEnable(GL_POLYGON_OFFSET_FILL);
|
||||
glPolygonOffset(-5.0f, 1.0f);
|
||||
glEnable(GL_POLYGON_STIPPLE);
|
||||
glPolygonStipple(_renderMode == Common::kRenderCGA ? _defaultStippleArray : _variableStippleArray);
|
||||
glPolygonStipple(_renderMode == Common::kRenderZX ? _variableStippleArray : _defaultStippleArray);
|
||||
} else {
|
||||
glPolygonOffset(0, 0);
|
||||
glDisable(GL_POLYGON_OFFSET_FILL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user