Skip to content

Commit

Permalink
AGI: Set the correct palette to use for each Amiga game
Browse files Browse the repository at this point in the history
The Amiga palettes were added in 16529e5, but were never used.
A new game-specific option has been added for the old Amiga palette
  • Loading branch information
bluegr committed Dec 7, 2014
1 parent c9e6db6 commit 6ec077e
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
1 change: 1 addition & 0 deletions engines/agi/agi.cpp
Expand Up @@ -500,6 +500,7 @@ static const GameSettings agiSettings[] = {
AgiBase::AgiBase(OSystem *syst, const AGIGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
// Assign default values to the config manager, in case settings are missing
ConfMan.registerDefault("originalsaveload", "false");
ConfMan.registerDefault("altamigapalette", "false");

_noSaveLoadAllowed = false;

Expand Down
9 changes: 9 additions & 0 deletions engines/agi/detection.cpp
Expand Up @@ -145,6 +145,13 @@ static const ExtraGuiOption agiExtraGuiOption = {
false
};

static const ExtraGuiOption agiExtraGuiOptionAmiga = {
_s("Use an alternative palette"),
_s("Use an alternative palette, common for all Amiga games. This was the old behavior"),
"altamigapalette",
false
};

#include "agi/detection_tables.h"

using namespace Agi;
Expand Down Expand Up @@ -230,6 +237,8 @@ bool AgiMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameD
const ExtraGuiOptions AgiMetaEngine::getExtraGuiOptions(const Common::String &target) const {
ExtraGuiOptions options;
options.push_back(agiExtraGuiOption);
if (target.contains("-amiga"))
options.push_back(agiExtraGuiOptionAmiga);
return options;
}

Expand Down
21 changes: 18 additions & 3 deletions engines/agi/graphics.cpp
Expand Up @@ -20,6 +20,7 @@
*
*/

#include "common/config-manager.h"
#include "common/file.h"
#include "common/textconsole.h"

Expand Down Expand Up @@ -220,7 +221,7 @@ static const uint8 amigaAgiPaletteV3[16 * 3] = {
/**
* 16 color amiga-ish palette.
*/
static const uint8 newPalette[16 * 3] = {
static const uint8 altAmigaPalette[16 * 3] = {
0x00, 0x00, 0x00,
0x00, 0x00, 0x3f,
0x00, 0x2A, 0x00,
Expand Down Expand Up @@ -1030,8 +1031,22 @@ int GfxMgr::initVideo() {
initPalette(vgaPalette, 256, 8);
else if (_vm->_renderMode == Common::kRenderEGA)
initPalette(egaPalette);
else
initPalette(newPalette);
else if (_vm->_renderMode == Common::kRenderAmiga) {
if (!ConfMan.getBool("altamigapalette")) {
// Set the correct Amiga palette
if (_vm->getVersion() < 0x2936)
// TODO: This palette isn't used for Apple IIGS games yet, as
// we don't set a separate render mode for them yet
initPalette(amigaAgiPaletteV1, 16, 4);
else if (_vm->getVersion() == 0x2936)
initPalette(amigaAgiPaletteV2, 16, 4);
else if (_vm->getVersion() > 0x2936)
initPalette(amigaAgiPaletteV3, 16, 4);
} else
// Set the old common alternative Amiga palette
initPalette(altAmigaPalette);
} else
error("initVideo: Unhandled render mode");

if ((_agiScreen = (uint8 *)calloc(GFX_WIDTH, GFX_HEIGHT)) == NULL)
return errNotEnoughMemory;
Expand Down

0 comments on commit 6ec077e

Please sign in to comment.