Ticket #8602: nut-ondemand.diff

File nut-ondemand.diff, 4.3 KB (added by eriktorbjorn, 17 years ago)

Patch against current SVN

  • engines/scumm/smush/smush_player.cpp

     
    574574        if ((!ConfMan.getBool("subtitles")) && ((flags & 8) == 8))
    575575                return;
    576576
    577         SmushFont *sf = _sf[0];
     577        SmushFont *sf = getFont(0);
    578578        int color = 15;
    579579        while (*str == '/') {
    580580                str++; // For Full Throttle text resources
     
    600600                        {
    601601                                int id = str[3] - '0';
    602602                                str += 4;
    603                                 sf = _sf[id];
     603                                sf = getFont(id);
    604604                        }
    605605                        break;
    606606                case 'c':
     
    10271027}
    10281028
    10291029void SmushPlayer::setupAnim(const char *file) {
    1030         int i;
    1031         char file_font[11];
    1032 
    10331030        if (_insanity) {
    10341031                if (!((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformPC)))
    10351032                        readString("mineroad.trs");
    10361033        } else
    10371034                readString(file);
     1035}
    10381036
     1037SmushFont *SmushPlayer::getFont(int font) {
     1038        char file_font[11];
     1039
     1040        if (_sf[font])
     1041                return _sf[font];
     1042
    10391043        if (_vm->_game.id == GID_FT) {
    10401044                if (!((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformPC))) {
    1041                         _sf[0] = new SmushFont(_vm, true, false);
    1042                         _sf[1] = new SmushFont(_vm, true, false);
    1043                         _sf[2] = new SmushFont(_vm, true, false);
    1044                         _sf[3] = new SmushFont(_vm, true, false);
    1045                         _sf[0]->loadFont("scummfnt.nut", false);
    1046                         _sf[1]->loadFont("techfnt.nut", false);
    1047                         _sf[2]->loadFont("titlfnt.nut", false);
    1048                         _sf[3]->loadFont("specfnt.nut", false);
     1045                        const char *ft_fonts[] = {
     1046                                "scummfnt.nut",
     1047                                "techfnt.nut",
     1048                                "titlfnt.nut",
     1049                                "specfnt.nut"
     1050                        };
     1051
     1052                        assert(font >= 0 && font < ARRAYSIZE(ft_fonts));
     1053
     1054                        _sf[font] = new SmushFont(_vm, true, false);
     1055                        _sf[font]->loadFont(ft_fonts[font], false);
    10491056                }
    10501057        } else if (_vm->_game.id == GID_DIG) {
    10511058                if (!(_vm->_game.features & GF_DEMO)) {
    1052                         for (i = 0; i < 4; i++) {
    1053                                 sprintf(file_font, "font%d.nut", i);
    1054                                 _sf[i] = new SmushFont(_vm, i != 0, false);
    1055                                 _sf[i]->loadFont(file_font, false);
    1056                         }
     1059                        assert(font >= 0 && font < 4);
     1060
     1061                        sprintf(file_font, "font%d.nut", font);
     1062                        _sf[font] = new SmushFont(_vm, font != 0, false);
     1063                        _sf[font]->loadFont(file_font, false);
    10571064                }
    10581065        } else if (_vm->_game.id == GID_CMI) {
    1059                 for (i = 0; i < 5; i++) {
    1060                         if ((_vm->_game.features & GF_DEMO) && (i == 4))
    1061                                 break;
    1062                         sprintf(file_font, "font%d.nut", i);
    1063                         _sf[i] = new SmushFont(_vm, false, true);
    1064                         _sf[i]->loadFont(file_font, false);
    1065                 }
     1066                int numFonts = (_vm->_game.features & GF_DEMO) ? 4 : 5;
     1067                assert(font >= 0 && font < numFonts);
     1068
     1069                sprintf(file_font, "font%d.nut", font);
     1070                _sf[font] = new SmushFont(_vm, false, true);
     1071                _sf[font]->loadFont(file_font, false);
    10661072        } else {
    1067                 error("SmushPlayer::setupAnim() Unknown font setup for game");
     1073                error("SmushPlayer::getFont() Unknown font setup for game");
    10681074        }
     1075
     1076        assert(_sf[font]);
     1077        return _sf[font];
    10691078}
    10701079
    10711080void SmushPlayer::parseNextFrame() {
  • engines/scumm/smush/smush_player.h

     
    122122        const char *getString(int id);
    123123
    124124private:
     125        SmushFont *getFont(int font);
    125126        void parseNextFrame();
    126127        void init(int32 spped);
    127128        void setupAnim(const char *file);
  • engines/scumm/charset.cpp

     
    16041604        _current = 0;
    16051605
    16061606        for (int i = 0; i < 5; i++) {
    1607                 char fontname[256];
    1608                 if ((_vm->_game.id == GID_CMI) && (_vm->_game.features & GF_DEMO) && (i == 4))
    1609                         break;
    1610                 sprintf(fontname, "font%d.nut", i);
    1611                 _fr[i] = new NutRenderer(_vm);
    1612                 if (!(_fr[i]->loadFont(fontname, true))) {
    1613                         delete _fr[i];
    1614                         _fr[i] = NULL;
    1615                 }
     1607                _fr[i] = NULL;
    16161608        }
    16171609}
    16181610
     
    16251617}
    16261618
    16271619void CharsetRendererNut::setCurID(byte id) {
    1628         assert(id < 5);
     1620        int numFonts = ((_vm->_game.id == GID_CMI) && (_vm->_game.features & GF_DEMO)) ? 4 : 5;
     1621        assert(id < numFonts);
    16291622        _curId = id;
     1623        if (!_fr[id]) {
     1624                _fr[id] = new NutRenderer(_vm);
     1625                char fontname[11];
     1626                sprintf(fontname, "font%d.nut", id);
     1627                _fr[id] = new NutRenderer(_vm);
     1628                _fr[id]->loadFont(fontname, true);
     1629        }
    16301630        _current = _fr[id];
    16311631        assert(_current);
    16321632}