Ticket #8050: old256sound.diff

File old256sound.diff, 17.8 KB (added by (none), 22 years ago)

against 15.9.2002 cvs

  • scummvm/common/gameDetector.cpp

    diff -u -r -w -N scummvm/scummvm/common/gameDetector.cpp myscummvm/scummvm/common/gameDetector.cpp
    old new  
    363363
    364364        /* Scumm Version 3 */
    365365        {"indy3", "Indiana Jones and the Last Crusade (256)", GID_INDY3_256, 3, 0, 22,
    366          GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_OLD256 | GF_NO_SCALLING},
     366         GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_OLD256 | GF_NO_SCALLING | GF_ADLIB_DEFAULT},
    367367        {"zak256", "Zak McKracken and the Alien Mindbenders (256)", GID_ZAK256, 3, 0, 0,
    368368         GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_OLD256 | GF_AUDIOTRACKS | GF_NO_SCALLING},
    369369        {"loom", "Loom", GID_LOOM, 3, 5, 40,
  • scummvm/scumm/resource.cpp

    diff -u -r -w -N scummvm/scummvm/scumm/resource.cpp myscummvm/scummvm/scumm/resource.cpp
    old new  
    549549                        size = _fileHandle.readDwordLE();
    550550                        tag = _fileHandle.readWordLE();
    551551                        _fileHandle.seek(-6, SEEK_CUR);
     552                        if (type == rtSound)
     553                                return readSoundResourceSmallHeader(type, idx);
    552554                } else {
    553555                        if (type == rtSound) {
    554556                                _fileHandle.readDwordLE();
     
    749751        return 0;
    750752}
    751753
     754// FIXME: some default MIDI instruments for INDY3/MI1
     755static char OLD256_MIDI_HACK[] =
     756                                        // 0
     757                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     758                                        "\x00\x00\x03"          // part/channel
     759                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     760                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     761                                        "\x00"                  // part/channel
     762                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     763                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     764                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     765                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     766                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     767                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     768                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     769                                        "\x04\x00\x00\xf7"
     770                                        "\x00\xb0\x07\x64"      // Controller 7 = 100
     771                                        // 1
     772                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     773                                        "\x01\x00\x03"          // part/channel
     774                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     775                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     776                                        "\x01"                  // part/channel
     777                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     778                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     779                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     780                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     781                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     782                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     783                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     784                                        "\x04\x00\x00\xf7"
     785                                        "\x00\xb1\x07\x64"      // Controller 7 = 100
     786                                        // 2
     787                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     788                                        "\x02\x00\x03"          // part/channel
     789                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     790                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     791                                        "\x02"                  // part/channel
     792                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     793                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     794                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     795                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     796                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     797                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     798                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     799                                        "\x04\x00\x00\xf7"
     800                                        "\x00\xb2\x07\x64"      // Controller 7 = 100
     801                                        // 3
     802                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     803                                        "\x03\x00\x03"          // part/channel
     804                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     805                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     806                                        "\x03"                  // part/channel
     807                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     808                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     809                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     810                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     811                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     812                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     813                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     814                                        "\x04\x00\x00\xf7"
     815                                        "\x00\xb3\x07\x64"      // Controller 7 = 100
     816                                        // 4
     817                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     818                                        "\x04\x00\x03"          // part/channel
     819                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     820                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     821                                        "\x04"                  // part/channel
     822                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     823                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     824                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     825                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     826                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     827                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     828                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     829                                        "\x04\x00\x00\xf7"
     830                                        "\x00\xb4\x07\x64"      // Controller 7 = 100
     831                                        // 5
     832                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     833                                        "\x05\x00\x03"          // part/channel
     834                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     835                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     836                                        "\x05"                  // part/channel
     837                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     838                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     839                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     840                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     841                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     842                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     843                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     844                                        "\x04\x00\x00\xf7"
     845                                        "\x00\xb5\x07\x64"      // Controller 7 = 100
     846                                        // 6
     847                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     848                                        "\x06\x00\x03"          // part/channel
     849                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     850                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     851                                        "\x06"                  // part/channel
     852                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     853                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     854                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     855                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     856                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     857                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     858                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     859                                        "\x04\x00\x00\xf7"
     860                                        "\x00\xb6\x07\x64"      // Controller 7 = 100
     861                                        // 7
     862                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     863                                        "\x07\x00\x03"          // part/channel
     864                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     865                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     866                                        "\x07"                  // part/channel
     867                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     868                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     869                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     870                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     871                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     872                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     873                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     874                                        "\x04\x00\x00\xf7"
     875                                        "\x00\xb7\x07\x64"      // Controller 7 = 100
     876                                        // 8
     877                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     878                                        "\x08\x00\x03"          // part/channel
     879                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     880                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     881                                        "\x08"                  // part/channel
     882                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     883                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     884                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     885                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     886                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     887                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     888                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     889                                        "\x04\x00\x00\xf7"
     890                                        "\x00\xb8\x07\x64"      // Controller 7 = 100
     891                                        // 9
     892                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     893                                        "\x09\x00\x03"          // part/channel
     894                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     895                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     896                                        "\x09"                  // part/channel
     897                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     898                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     899                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     900                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     901                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     902                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     903                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     904                                        "\x04\x00\x00\xf7"
     905                                        "\x00\xb9\x07\x64"      // Controller 7 = 100
     906                                        // Channels after 9 realy necessary ?!?
     907                                        // A
     908                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     909                                        "\x0A\x00\x03"          // part/channel
     910                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     911                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     912                                        "\x0A"                  // part/channel
     913                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     914                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     915                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     916                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     917                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     918                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     919                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     920                                        "\x04\x00\x00\xf7"
     921                                        "\x00\xbA\x07\x64"      // Controller 7 = 100
     922                                        // B
     923                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     924                                        "\x0B\x00\x03"          // part/channel
     925                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     926                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     927                                        "\x0B"                  // part/channel
     928                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     929                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     930                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     931                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     932                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     933                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     934                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     935                                        "\x04\x00\x00\xf7"
     936                                        "\x00\xbB\x07\x64"      // Controller 7 = 100
     937                                        // C
     938                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     939                                        "\x0C\x00\x03"          // part/channel
     940                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     941                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     942                                        "\x0C"                  // part/channel
     943                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     944                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     945                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     946                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     947                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     948                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     949                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     950                                        "\x04\x00\x00\xf7"
     951                                        "\x00\xbC\x07\x64"      // Controller 7 = 100
     952                                        // D
     953                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     954                                        "\x0D\x00\x03"          // part/channel
     955                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     956                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     957                                        "\x0D"                  // part/channel
     958                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     959                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     960                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     961                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     962                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     963                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     964                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     965                                        "\x04\x00\x00\xf7"
     966                                        "\x00\xbD\x07\x64"      // Controller 7 = 100
     967                                        // E
     968                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     969                                        "\x0E\x00\x03"          // part/channel
     970                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     971                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     972                                        "\x0E"                  // part/channel
     973                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     974                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     975                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     976                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     977                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     978                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     979                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     980                                        "\x04\x00\x00\xf7"
     981                                        "\x00\xbE\x07\x64"      // Controller 7 = 100
     982                                        // F
     983                                        "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
     984                                        "\x0F\x00\x03"          // part/channel
     985                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
     986                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
     987                                        "\x0F"                  // part/channel
     988                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     989                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
     990                                        "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     991                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
     992                                        "\x01\x00\x01\x00\x01\x02\x00\x0a"
     993                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
     994                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
     995                                        "\x04\x00\x00\xf7"
     996                                        "\x00\xbF\x07\x64";      // Controller 7 = 100
     997
     998int Scumm::readSoundResourceSmallHeader(int type, int idx)
     999{
     1000        uint32 pos, total_size, size, dw, tag;
     1001        uint32 best_size = 0, best_offs = 0;
     1002        byte *ptr, *track;
     1003        uint16 ticks, skip;
     1004
     1005        debug(4, "readSoundResourceSmallHeader(%s,%d)", resTypeFromId(type), idx);
     1006
     1007        //if (_rescache->readResource(roomNr, type, idx))
     1008        //              return 1;
     1009
     1010        total_size = size = _fileHandle.readDwordLE();
     1011        tag = _fileHandle.readWordLE();
     1012        debug(4, "  tag='%c%c', size=%d",
     1013                                        (char) (tag & 0xff),
     1014                                        (char) ((tag >> 8) & 0xff), size);
     1015
     1016        pos = 6;
     1017        while (pos < total_size) {
     1018                size = _fileHandle.readDwordLE();
     1019                tag = _fileHandle.readWordLE();
     1020        debug(4, "  tag='%c%c', size=%d",
     1021                                        (char) (tag & 0xff),
     1022                                        (char) ((tag >> 8) & 0xff), size);
     1023                pos += size;
     1024
     1025                // MI1 and Indy3 uses one or more nested SO resources, which contains AD and WA
     1026                // resources.
     1027                if ((tag == 0x4441) && !(best_offs)) { // AD
     1028                                best_size = size;
     1029                                best_offs = _fileHandle.pos();
     1030                } else { // other AD, WA and nested SO resources
     1031                        if (tag == 0x4F53) {
     1032                                pos -= size;
     1033                                size = 6;
     1034                                pos += 6;
     1035                        }
     1036                }
     1037                _fileHandle.seek(size - 6, SEEK_CUR);
     1038        }
     1039
     1040        // AD resources have a header, instrument definitions and one MIDI track.
     1041        // We build an 'ADL ' resource from that:
     1042        //   8 bytes resource header
     1043        //  16 bytes MDhd header
     1044        //  14 bytes MThd header
     1045        //   8 bytes MTrk header
     1046        //   7 MIDI speed event
     1047        //     + some default instruments
     1048        // TODO:  - make some real MIDI instrument definitions
     1049        //        - no sound looping
     1050        //        - proper handling of the short AD resources format
     1051        //        - check the LE/BE handling for platforms other than PC
     1052
     1053        if (best_offs != 0) {
     1054                _fileHandle.seek(best_offs - 6, SEEK_SET);
     1055
     1056                ptr = createResource(type, idx, best_size);
     1057                _fileHandle.read(ptr, best_size);
     1058
     1059                ticks = READ_BE_UINT16(ptr + 9);
     1060                size = best_size;
     1061                if (size < 0x98) {
     1062                                // FIXME: OLD256 music file w/o instruments
     1063                                // perhaps we should use then the other "WA" resource in the "SO" resource
     1064                                // and play it raw
     1065                        skip = 0x0a;    // let's give it a try
     1066                } else {
     1067                        skip = 0x98;
     1068                }
     1069                ptr  += skip;                     // size + instruments
     1070                size -= skip;                             // drop instruments for now
     1071                CHECK_HEAP track = (byte *)calloc(size, 1);
     1072                if (track == NULL) {
     1073                        error("Out of memory while allocating %d", size);
     1074                }
     1075                memcpy(track, ptr, size);         // saving MIDI track data
     1076                nukeResource(type, idx);
     1077
     1078                total_size = 8 + 16 + 14 + 8 + 7 + sizeof(OLD256_MIDI_HACK) - 1 + size;
     1079                ptr = createResource(type, idx, total_size);
     1080                memcpy(ptr, "ADL ", 4); ptr += 4;
     1081                dw = READ_BE_UINT32(&total_size);
     1082                memcpy(ptr, &dw, 4); ptr += 4;
     1083                memcpy(ptr, "MDhd", 4); ptr += 4;
     1084                ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 8;
     1085                ptr += 4;
     1086                dw = 0;
     1087                memcpy(ptr, &dw, 4); ptr += 4;
     1088                memcpy(ptr, &dw, 4); ptr += 4;
     1089                memcpy(ptr, "MThd", 4); ptr += 4;
     1090                ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 6;
     1091                ptr += 4;
     1092                ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 1; // MIDI format 0 with 1 track
     1093                ptr += 4;
     1094                memcpy(ptr, &ticks, 2); ptr += 2;  // FIXME: care of BE/LE needed ?
     1095                memcpy(ptr, "MTrk", 4); ptr += 4;
     1096                *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >> 24) & 0xFF;
     1097                *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >> 16) & 0xFF;
     1098                *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >>  8) & 0xFF;
     1099                *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7)      ) & 0xFF;
     1100                // speed hacks
     1101                dw = 1100000 - (ticks * 10);
     1102                if ((dw > 900000) || (dw < 200000))
     1103                        dw = 500000;  // for sanity
     1104                debug(4, "  ticks = %d, speed = %ld", ticks, dw);
     1105                memcpy(ptr, "\x00\xFF\x51\x03", 4); ptr += 4;
     1106                *ptr++ = (dw >> 16) & 0xFF;
     1107                *ptr++ = (dw >> 8) & 0xFF;
     1108                *ptr++ = dw & 0xFF;
     1109                memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1);
     1110                ptr += sizeof(OLD256_MIDI_HACK) - 1;
     1111                memcpy(ptr, track, size);
     1112                free(track);
     1113                //hexdump(ptr = getResourceAddress(type, idx), 32);
     1114                return 1;
     1115        }
     1116        res.roomoffs[type][idx] = 0xFFFFFFFF;
     1117        return 0;
     1118}
     1119
     1120
    7521121int Scumm::getResourceRoomNr(int type, int idx)
    7531122{
    7541123        if (type == rtRoom)
  • scummvm/scumm/scumm.h

    diff -u -r -w -N scummvm/scummvm/scumm/scumm.h myscummvm/scummvm/scumm/scumm.h
    old new  
    583583        int loadResource(int type, int i);
    584584        int getResourceRoomNr(int type, int index);
    585585        int readSoundResource(int type, int index);
     586        int readSoundResourceSmallHeader(int type, int index);
    586587        void setResourceCounter(int type, int index, byte flag);
    587588        void validateResource(const char *str, int type, int index);
    588589        void increaseResourceCounter();
  • scummvm/scumm/sound.cpp

    diff -u -r -w -N scummvm/scummvm/scumm/sound.cpp myscummvm/scummvm/scumm/sound.cpp
    old new  
    175175        int size;
    176176        int rate;
    177177       
     178        debug(3,"playSound #%d (room %d)",
     179                sound, _scumm->getResourceRoomNr(rtSound, sound));
    178180        ptr = _scumm->getResourceAddress(rtSound, sound);
    179181        if (ptr) {
    180182                if (READ_UINT32_UNALIGNED(ptr) == MKID('SOUN')) {
     
    228230                        }
    229231                        return;
    230232                }
     233                else if (READ_UINT32_UNALIGNED(ptr) == MKID('ADL ')) {
     234                        // played as MIDI, just to make perhaps the later use
     235                        // of WA possible (see "else if" with GF_OLD256 below)
     236                }
    231237                // Support for sampled sound effects in Monkey1 and Monkey2
    232238                else if (READ_UINT32_UNALIGNED(ptr) == MKID('SBL ')) {
    233239                        debug(2, "Using SBL sound effect");
     
    365371                        return;
    366372                }
    367373       
    368                 if (_scumm->_gameId == GID_MONKEY_VGA)
    369                         return;                                                                                 /* FIXME */
    370        
    371374        }
    372375
    373376        IMuse *se = _scumm->_imuse;