Ticket #9100: fbear-dos-piano.diff

File fbear-dos-piano.diff, 4.4 KB (added by eriktorbjorn, 15 years ago)

Patch against current SVN (trunk)

  • engines/scumm/imuse/imuse_player.cpp

     
    7373        _transpose(0),
    7474        _detune(0),
    7575        _vol_eff(0),
     76        _base_note(0),
    7677        _track_index(0),
    7778        _loop_to_beat(0),
    7879        _loop_from_beat(0),
     
    252253                break;
    253254
    254255        case 0x9: // Key On
     256                param1 += _base_note;
    255257                if (!_scanning) {
    256258                        if (_isMT32 && !_se->isNativeMT32())
    257259                                param2 = (((param2 * 3) >> 2) + 32) & 0x7F;
     
    562564        part->set_transpose(b);
    563565}
    564566
     567void Player::setBaseNote(int baseNote) {
     568        _base_note = baseNote;
     569}
     570
    565571bool Player::jump(uint track, uint beat, uint tick) {
    566572        if (!_parser)
    567573                return false;
  • engines/scumm/imuse/imuse.cpp

     
    443443                        _tempoFactor = value;
    444444                break;
    445445
     446        case IMuse::PROP_NOTE_BASE:
     447                _noteBase = value;
     448                break;
     449
    446450        case IMuse::PROP_NATIVE_MT32:
    447451                _native_mt32 = (value > 0);
    448452                Instrument::nativeMT32(_native_mt32);
     
    603607        if (!player)
    604608                return false;
    605609
     610        player->setBaseNote(_noteBase);
     611        _noteBase = 0;
     612
    606613        // WORKAROUND: This is to work around a problem at the Dino Bungie
    607614        // Memorial.
    608615        //
  • engines/scumm/imuse/imuse_internal.h

     
    186186        int8 _transpose;
    187187        int8 _detune;
    188188        byte _vol_eff;
     189        int _base_note;
    189190
    190191        uint _track_index;
    191192        uint _loop_to_beat;
     
    275276        void setPriority(int pri);
    276277        void setSpeed(byte speed);
    277278        int setTranspose(byte relative, int b);
     279        void setBaseNote(int baseNote);
    278280        int setVolume(byte vol);
    279281        bool startSound(int sound, MidiDriver *midi, bool passThrough);
    280282        int getMusicTimer() const;
     
    419421        bool _initialized;
    420422
    421423        int _tempoFactor;
     424        int _noteBase;
    422425
    423426        int  _player_limit;       // Limits how many simultaneous music tracks are played
    424427        bool _recycle_players;    // Can we stop a player in order to start another one?
  • engines/scumm/imuse/imuse.h

     
    5959                PROP_LIMIT_PLAYERS,
    6060                PROP_RECYCLE_PLAYERS,
    6161                PROP_DIRECT_PASSTHROUGH,
    62                 PROP_GAME_ID
     62                PROP_GAME_ID,
     63                PROP_NOTE_BASE
    6364        };
    6465
    6566public:
  • engines/scumm/scumm.h

     
    13831383
    13841384        // Exists both in V7 and in V72HE:
    13851385        byte VAR_NUM_GLOBAL_OBJS;
     1386        byte VAR_MIDI_NOTE;                     // Fatty Bear's Birthday Surprise
    13861387};
    13871388
    13881389} // End of namespace Scumm
  • engines/scumm/he/sound_he.cpp

     
    741741        }
    742742        else if (READ_BE_UINT32(ptr) == MKID_BE('MIDI')) {
    743743                if (_vm->_imuse) {
     744                        int noteBase = _vm->VAR(_vm->VAR_MIDI_NOTE);
     745                        if (noteBase)
     746                                noteBase -= 442;
    744747                        _vm->_imuse->stopSound(_currentMusic);
    745748                        _currentMusic = soundID;
     749                        _vm->_imuse->property(IMuse::PROP_NOTE_BASE, noteBase);
    746750                        _vm->_imuse->startSound(soundID);
    747751                }
    748752        }
  • engines/scumm/he/intern_he.h

     
    6868protected:
    6969        virtual void setupOpcodes();
    7070
     71        virtual void setupScummVars();
     72
    7173        virtual void saveOrLoad(Serializer *s);
    7274
    7375        void localizeArray(int slot, byte scriptSlot);
  • engines/scumm/vars.cpp

     
    206206        }
    207207}
    208208
    209 void ScummEngine_v70he::setupScummVars() {
     209void ScummEngine_v60he::setupScummVars() {
    210210        ScummEngine_v6::setupScummVars();
    211211
     212        VAR_MIDI_NOTE = 173;
     213}
     214
     215void ScummEngine_v70he::setupScummVars() {
     216        ScummEngine_v60he::setupScummVars();
     217
    212218        VAR_CURRENTDRIVE = 0xFF;
    213219        VAR_MUSIC_TIMER = 0xFF;
    214220