MM NES fixes:

o Fixed crash when in-game GUI was displayed
  o Support for save/load
  o Savegame version bumped

svn-id: r17232
This commit is contained in:
Eugene Sandulenko 2005-03-25 22:11:08 +00:00
parent 9a4bc8ce16
commit a9c2e6ecbf
4 changed files with 17 additions and 4 deletions

View file

@ -83,7 +83,8 @@ void NewGui::updateScaleFactor() {
kDefaultGUIHeight = 200 kDefaultGUIHeight = 200
}; };
_scaleFactor = MIN(_system->getOverlayWidth() / kDefaultGUIWidth, _system->getOverlayHeight() / kDefaultGUIHeight); // NES has 256 pixels width which makes MIN() return 0 here.
_scaleFactor = MAX(MIN(_system->getOverlayWidth() / kDefaultGUIWidth, _system->getOverlayHeight() / kDefaultGUIHeight), 1);
} }
// Pick the font depending on the scale factor. // Pick the font depending on the scale factor.

View file

@ -272,7 +272,7 @@ void ScummEngine::initScreens(int b, int h) {
} }
} }
if (_features & GF_NES) { if ((_features & GF_NES) && (h != _screenHeight)) {
adj = 16; adj = 16;
initVirtScreen(kUnkVirtScreen, 0, 0, _screenWidth, adj, false, false); initVirtScreen(kUnkVirtScreen, 0, 0, _screenWidth, adj, false, false);
} }

View file

@ -248,6 +248,9 @@ bool ScummEngine::loadState(int slot, bool compat) {
// ever add options for using different 16-colour palettes. // ever add options for using different 16-colour palettes.
if (_version == 1) { if (_version == 1) {
if (_gameId == GID_MANIAC) if (_gameId == GID_MANIAC)
if (_features & GF_NES)
setupNESPalette();
else
setupV1ManiacPalette(); setupV1ManiacPalette();
else else
setupV1ZakPalette(); setupV1ZakPalette();
@ -296,6 +299,7 @@ bool ScummEngine::loadState(int slot, bool compat) {
// Restore the virtual screens and force a fade to black. // Restore the virtual screens and force a fade to black.
initScreens(kMainVirtScreen, _screenHeight); initScreens(kMainVirtScreen, _screenHeight);
VirtScreen *vs = &virtscr[kMainVirtScreen]; VirtScreen *vs = &virtscr[kMainVirtScreen];
memset(vs->getPixels(0, 0), 0, vs->pitch * vs->h); memset(vs->getPixels(0, 0), 0, vs->pitch * vs->h);
vs->setDirtyRange(0, vs->h); vs->setDirtyRange(0, vs->h);
@ -594,6 +598,8 @@ void ScummEngine::saveOrLoad(Serializer *s, uint32 savegameVersion) {
MKLINE(ScummEngine, _screenB, sleUint16, VER(8)), MKLINE(ScummEngine, _screenB, sleUint16, VER(8)),
MKLINE(ScummEngine, _screenH, sleUint16, VER(8)), MKLINE(ScummEngine, _screenH, sleUint16, VER(8)),
MKLINE(ScummEngine, _NESCostumeSet, sleUint16, VER(47)),
MK_OBSOLETE(ScummEngine, _cd_track, sleInt16, VER(9), VER(9)), MK_OBSOLETE(ScummEngine, _cd_track, sleInt16, VER(9), VER(9)),
MK_OBSOLETE(ScummEngine, _cd_loops, sleInt16, VER(9), VER(9)), MK_OBSOLETE(ScummEngine, _cd_loops, sleInt16, VER(9), VER(9)),
MK_OBSOLETE(ScummEngine, _cd_frame, sleInt16, VER(9), VER(9)), MK_OBSOLETE(ScummEngine, _cd_frame, sleInt16, VER(9), VER(9)),
@ -746,6 +752,12 @@ void ScummEngine::saveOrLoad(Serializer *s, uint32 savegameVersion) {
} }
} }
if (_features & GF_NES)
if (savegameVersion < VER(47))
NES_loadCostumeSet(_NESCostumeSet = 0);
else
NES_loadCostumeSet(_NESCostumeSet);
if (_heversion >= 71) { if (_heversion >= 71) {
Wiz *wiz = &((ScummEngine_v70he *)this)->_wiz; Wiz *wiz = &((ScummEngine_v70he *)this)->_wiz;
s->saveLoadArrayOf(wiz->_polygons, ARRAYSIZE(wiz->_polygons), sizeof(wiz->_polygons[0]), polygonEntries); s->saveLoadArrayOf(wiz->_polygons, ARRAYSIZE(wiz->_polygons), sizeof(wiz->_polygons[0]), polygonEntries);

View file

@ -32,7 +32,7 @@ namespace Scumm {
// Can be useful for other ports too :) // Can be useful for other ports too :)
#define VER(x) x #define VER(x) x
#define CURRENT_VER 46 #define CURRENT_VER 47
// To work around a warning in GCC 3.2 (and 3.1 ?) regarding non-POD types, // To work around a warning in GCC 3.2 (and 3.1 ?) regarding non-POD types,
// we use a small trick: instead of 0 we use 42. Why? Well, it seems newer GCC // we use a small trick: instead of 0 we use 42. Why? Well, it seems newer GCC