Ticket #8072: monkey1_instr3.diff

File monkey1_instr3.diff, 4.0 KB (added by SF/roever, 22 years ago)

changes in resource.cpp

  • scumm/resource.cpp

    old new  
    928928                        skip = 0x98;
    929929                }
    930930
    931                 /* copy the instrument data in another memory area */
    932                 instr = (byte *)calloc(8 * 16, 1);
    933                 memcpy(instr, ptr + 0x19, 8*16);
     931                /* copy the instrument data in another memory area */
     932                if (size >= 0x19 + 8*16) {
     933                        instr = (byte *)calloc(8 * 16, 1);
     934                        if (instr)
     935                                memcpy(instr, ptr + 0x19, 8*16);
     936                } else {
     937                        instr = 0;
     938                }
    934939
    935940                ptr  += skip;                     // size + instruments
    936941                size -= skip;                     // drop instruments for now
     
    974979                *ptr++ = (byte)((dw >> 16) & 0xFF);
    975980                *ptr++ = (byte)((dw >> 8) & 0xFF);
    976981                *ptr++ = (byte)(dw & 0xFF);
    977                 memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1);
     982                memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1);
    978983
    979                 /* now fill in the instruments */
    980                 for (int i = 0; i < 8; i++) {
     984                if (instr) {
    981985
    982                         /* flags_1 */
    983                         ptr[95 * i + 30 + 0] = (instr[i * 16 + 3] >> 4) & 0xf;
    984                         ptr[95 * i + 30 + 1] = instr[i * 16 + 3] & 0xf;
    985 
    986                         /* oplvl_1 */
    987                         ptr[95 * i + 30 + 2] = (instr[i * 16 + 4] >> 4) & 0xf;
    988                         ptr[95 * i + 30 + 3] = instr[i * 16 + 4] & 0xf;
    989 
    990                         /* atdec_1 */
    991                         ptr[95 * i + 30 + 4] = ((~instr[i * 16 + 5]) >> 4) & 0xf;
    992                         ptr[95 * i + 30 + 5] = (~instr[i * 16 + 5]) & 0xf;
    993 
    994                         /* sustrel_1 */
    995                         ptr[95 * i + 30 + 6] = ((~instr[i * 16 + 6]) >> 4) & 0xf;
    996                         ptr[95 * i + 30 + 7] = (~instr[i * 16 + 6]) & 0xf;
    997 
    998                         /* waveform_1 */
    999                         ptr[95 * i + 30 + 8] = (instr[i * 16 + 7] >> 4) & 0xf;
    1000                         ptr[95 * i + 30 + 9] = instr[i * 16 + 7] & 0xf;
    1001 
    1002                         /* flags_2 */
    1003                         ptr[95 * i + 30 + 10] = (instr[i * 16 + 8] >> 4) & 0xf;
    1004                         ptr[95 * i + 30 + 11] = instr[i * 16 + 8] & 0xf;
    1005 
    1006                         /* oplvl_2 */
    1007                         ptr[95 * i + 30 + 12] = 3;
    1008                         ptr[95 * i + 30 + 13] = 0xF;
    1009 
    1010                         /* atdec_2 */
    1011                         ptr[95 * i + 30 + 14] = ((~instr[i * 16 + 10]) >> 4) & 0xf;
    1012                         ptr[95 * i + 30 + 15] = (~instr[i * 16 + 10]) & 0xf;
    1013 
    1014                         /* sustrel_2 */
    1015                         ptr[95 * i + 30 + 16] = ((~instr[i * 16 + 11]) >> 4) & 0xf;
    1016                         ptr[95 * i + 30 + 17] = (~instr[i * 16 + 11]) & 0xf;
    1017 
    1018                         /* waveform_2 */
    1019                         ptr[95 * i + 30 + 18] = (instr[i * 16 + 12] >> 4) & 0xf;
    1020                         ptr[95 * i + 30 + 19] = instr[i * 16 + 12] & 0xf;
    1021 
    1022                         /* feedback */
    1023                         ptr[95 * i + 30 + 20] = (instr[i * 16 + 2] >> 4) & 0xf;
    1024                         ptr[95 * i + 30 + 21] = instr[i * 16 + 2] & 0xf;
    1025                 }
     986                        /* now fill in the instruments */
     987                        for (int i = 0; i < 8; i++) {
     988
     989                                /* flags_1 */
     990                                ptr[95 * i + 30 + 0] = (instr[i * 16 + 3] >> 4) & 0xf;
     991                                ptr[95 * i + 30 + 1] = instr[i * 16 + 3] & 0xf;
     992
     993                                /* oplvl_1 */
     994                                ptr[95 * i + 30 + 2] = (instr[i * 16 + 4] >> 4) & 0xf;
     995                                ptr[95 * i + 30 + 3] = instr[i * 16 + 4] & 0xf;
     996
     997                                /* atdec_1 */
     998                                ptr[95 * i + 30 + 4] = ((~instr[i * 16 + 5]) >> 4) & 0xf;
     999                                ptr[95 * i + 30 + 5] = (~instr[i * 16 + 5]) & 0xf;
     1000
     1001                                /* sustrel_1 */
     1002                                ptr[95 * i + 30 + 6] = ((~instr[i * 16 + 6]) >> 4) & 0xf;
     1003                                ptr[95 * i + 30 + 7] = (~instr[i * 16 + 6]) & 0xf;
     1004
     1005                                /* waveform_1 */
     1006                                ptr[95 * i + 30 + 8] = (instr[i * 16 + 7] >> 4) & 0xf;
     1007                                ptr[95 * i + 30 + 9] = instr[i * 16 + 7] & 0xf;
    10261008
    1027                 free(instr);
     1009                                /* flags_2 */
     1010                                ptr[95 * i + 30 + 10] = (instr[i * 16 + 8] >> 4) & 0xf;
     1011                                ptr[95 * i + 30 + 11] = instr[i * 16 + 8] & 0xf;
     1012
     1013                                /* oplvl_2 */
     1014                                ptr[95 * i + 30 + 12] = 3;
     1015                                ptr[95 * i + 30 + 13] = 0xF;
     1016
     1017                                /* atdec_2 */
     1018                                ptr[95 * i + 30 + 14] = ((~instr[i * 16 + 10]) >> 4) & 0xf;
     1019                                ptr[95 * i + 30 + 15] = (~instr[i * 16 + 10]) & 0xf;
     1020
     1021                                /* sustrel_2 */
     1022                                ptr[95 * i + 30 + 16] = ((~instr[i * 16 + 11]) >> 4) & 0xf;
     1023                                ptr[95 * i + 30 + 17] = (~instr[i * 16 + 11]) & 0xf;
     1024
     1025                                /* waveform_2 */
     1026                                ptr[95 * i + 30 + 18] = (instr[i * 16 + 12] >> 4) & 0xf;
     1027                                ptr[95 * i + 30 + 19] = instr[i * 16 + 12] & 0xf;
     1028
     1029                                /* feedback */
     1030                                ptr[95 * i + 30 + 20] = (instr[i * 16 + 2] >> 4) & 0xf;
     1031                                ptr[95 * i + 30 + 21] = instr[i * 16 + 2] & 0xf;
     1032                        }
     1033
     1034                        free(instr);
     1035                }
    10281036
    10291037                ptr += sizeof(OLD256_MIDI_HACK) - 1;
    10301038                memcpy(ptr, track, size);