Ticket #8624: dialog_save_alternative-1.patch

File dialog_save_alternative-1.patch, 2.3 KB (added by Kirben, 14 years ago)

Patch for current SVN

  • engines/scumm/scumm.h

     
    330330
    331331enum ResIds {
    332332        RESID_IQ_EPISODE = 7,
    333         RESID_IQ_SERIES = 9
     333        RESID_IQ_SERIES = 9,
     334        RESID_SAVENAME1 = 10,
     335        RESID_SAVENAME1_LOOM = 9
    334336};
    335337
    336338
  • engines/scumm/script_v5.cpp

     
    12221222                result = 100;
    12231223                break;
    12241224        case 0x20: // drive
    1225                 if (_game.id == GID_INDY3) {
    1226                         // 0 = hard drive
    1227                         // 1 = disk drive
    1228                         result = 0;
     1225                if (_game.version <= 3) {
     1226                        // 0 = ???
     1227                        // [1,2] = disk drive [A:,B:]
     1228                        // 3 = hard drive
     1229                        result = 3;
    12291230                } else {
    12301231                        // set current drive
    12311232                        result = 1;
     
    12381239                        result = 5; // failed to load
    12391240                break;
    12401241        case 0x80: // save
    1241                 //if (saveState(slot, _saveTemporaryState))
    1242                 //      result = 0; // sucess
    1243                 //else
     1242                // Save dialogs of old SCUMM games except Loom are cutscene, hence
     1243                // we can easily break the cutscene and save the state after the cutscene
     1244                // has terminated. Loom doesn't use cutscene so we would run inside an endless
     1245                // loop.
     1246                if (_game.version <= 3 && _game.id != GID_LOOM) {
     1247                        char name[32];
     1248                        if (_game.version <= 2) {
     1249                                // use generic name
     1250                                sprintf(name, "Game %c", 'A'+slot-1);
     1251                        } else {
     1252                                // use name entered by the user
     1253                                char* ptr;
     1254                                int firstSlot = (_game.id == GID_LOOM) ? RESID_SAVENAME1_LOOM : RESID_SAVENAME1;
     1255                                ptr = (char*)getStringAddress(slot + firstSlot - 1);
     1256                                strncpy(name, ptr, sizeof(name));
     1257                        }
     1258                        // HACK: works without a temporary savegame but does not behave
     1259                        // like the original SAVE-dialog (does not work with LOOM)
     1260                        if (_game.id == GID_INDY3)
     1261                                saveIQPoints();
     1262                        abortCutscene();
     1263                        getScriptEntryPoint();
     1264                        requestSave(slot, name, false);
     1265                        // we do not have to return a result actually because we have already
     1266                        // jumped to the end of the cutscene.
     1267                } else {
     1268                        //if (saveState(slot, _saveTemporaryState))
     1269                        //      result = 0; // sucess
     1270                        //else
    12441271                        result = 2; // failed to save
     1272                }
    12451273                break;
    12461274        case 0xC0: // test if save exists
    12471275                Common::InSaveFile *file;