Ticket #3194: 1722153-2.diff

File 1722153-2.diff, 2.5 KB (added by cyxx, 13 years ago)
  • scumm/charset.h

     
    2525#include "common/scummsys.h"
    2626#include "common/rect.h"
    2727#include "scumm/gfx.h"
     28#include "scumm/saveload.h"
    2829
    2930namespace Scumm {
    3031
     
    8485        virtual int getCharWidth(byte chr) = 0;
    8586
    8687        virtual void setColor(byte color) { _color = color; translateColor(); }
     88
     89        void saveLoadWithSerializer(Serializer *ser);
    8790};
    8891
    8992class CharsetRendererCommon : public CharsetRenderer {
  • scumm/charset.cpp

     
    13111311        }
    13121312}
    13131313
     1314void CharsetRenderer::saveLoadWithSerializer(Serializer *ser) {
     1315        static const SaveLoadEntry charsetRendererEntries[] = {
     1316                MKLINE(CharsetRenderer, _curId, sleByte, VER(73)),
     1317                MKLINE(CharsetRenderer, _color, sleByte, VER(73)),
     1318                MKEND()
     1319        };
    13141320
     1321        ser->saveLoadEntries(this, charsetRendererEntries);
     1322
     1323        if (ser->isLoading()) {
     1324                setCurID(_curId);
     1325                setColor(_color);
     1326        }
     1327}
     1328
    13151329void CharsetRendererClassic::printChar(int chr, bool ignoreCharsetMask) {
    13161330        int width, height, origWidth, origHeight;
    13171331        int offsX, offsY;
  • scumm/saveload.cpp

     
    11561156        //
    11571157        // Save/load the charset renderer state
    11581158        //
    1159         if (s->getVersion() >= VER(72)) {
    1160                 if (s->isSaving()) {
    1161                         s->saveByte(_charset->getCurID());
     1159        if (s->getVersion() >= VER(73)) {
     1160                _charset->saveLoadWithSerializer(s);
     1161        } else if (s->isLoading()) {
     1162                if (s->getVersion() == VER(72)) {
     1163                        _charset->setCurID(s->loadByte());
    11621164                } else {
    1163                         _charset->setCurID(s->loadByte());
     1165                        // Before V72, the charset id wasn't saved. This used to cause issues such
     1166                        // as the one described in the bug report #1722153. For these savegames,
     1167                        // we reinitialize the id using a, hopefully, sane value.
     1168                        _charset->setCurID(_string[0]._default.charset);
    11641169                }
    11651170        }
    11661171}
  • scumm/saveload.h

     
    4747 * only saves/loads those which are valid for the version of the savegame
    4848 * which is being loaded/saved currently.
    4949 */
    50 #define CURRENT_VER 72
     50#define CURRENT_VER 73
    5151
    5252/**
    5353 * An auxillary macro, used to specify savegame versions. We use this instead