Ticket #8052: scummvm.diff

File scummvm.diff, 5.0 KB (added by SF/cccp_99, 17 years ago)

affected files: string.cpp and scumm.h

  • scummvm/scumm/scumm.h

    RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
    retrieving revision 1.16
    diff -u -r1.16 scumm.h
     
    918918        void description();
    919919        byte *_msgPtrToAdd;
    920920        byte *addMessageToStack(byte *msg);
    921         void unkAddMsgToStack2(int var);
    922         void unkAddMsgToStack3(int var);
    923         void unkAddMsgToStack4(int var);
    924         void unkAddMsgToStack5(int var);
     921        void addIntToStack(int var);
     922        void addVerbToStack(int var);
     923        void addNameToStack(int var);
     924        void addStringToStack(int var);
    925925        void unkMessage1();
    926926        void unkMessage2();
    927927        void clearMsgQueue();
  • scummvm/scumm/string.cpp

    RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
    retrieving revision 1.12
    diff -u -r1.12 string.cpp
     
    391391                }
    392392
    393393                c = *buffer++;
    394                 if (c == 3) {
    395                         if (_haveMsg != 0xFE)
    396                                 _haveMsg = 0xFF;
    397                         _keepText = false;
    398                         break;
    399                 } else if (c == 1) {
     394                switch(c) {
     395                case 1:
    400396                        goto newLine;
    401                 } else if (c == 2) {
     397                case 2:
    402398                        _haveMsg = 0;
    403399                        _keepText = true;
    404400                        break;
    405                 } else if (c == 9) {
     401                case 3:         
     402                        if (_haveMsg != 0xFE)
     403                                _haveMsg = 0xFF;
     404                        _keepText = false;
     405                        break;         
     406                case 9:
    406407                        frme = *buffer++;
    407408                        frme |= *buffer++ << 8;
    408409                        has_anim = true;
    409                 } else if (c == 10) {
     410                        break;
     411                case 10:
    410412                        talk_sound_a = buffer[0] | (buffer[1] << 8) | (buffer[4] << 16) | (buffer[5] << 24);
    411413                        talk_sound_b = buffer[8] | (buffer[9] << 8) | (buffer[12] << 16) | (buffer[13] << 24);
    412414                        has_talk_sound = true;
     
    415417                        // Set flag that speech variant exist of this msg
    416418                        if (_haveMsg == 0xFF)
    417419                                _haveMsg = 0xFE;
    418                 } else if (c == 14) {
     420                        break;         
     421                case 12:
     422                        int color;
     423                        color = *buffer++;
     424                        color |= *buffer++ << 8;
     425                        if (color == 0xFF)
     426                                charset._color = _charsetColor;
     427                        else
     428                                charset._color = color;
     429                        break;
     430                case 13:
     431                        buffer += 2;
     432                        break;
     433                case 14: {
    419434                        int oldy = getResourceAddress(rtCharset, charset._curId)[30];
    420435
    421436                        charset._curId = *buffer++;
     
    426441                                else
    427442                                        charset._colorMap[i] = _charsetData[charset._curId][i];
    428443                        charset._ypos2 -= getResourceAddress(rtCharset, charset._curId)[30] - oldy;
    429                 } else if (c == 12) {
    430                         int color;
    431                         color = *buffer++;
    432                         color |= *buffer++ << 8;
    433                         if (color == 0xFF)
    434                                 charset._color = _charsetColor;
    435                         else
    436                                 charset._color = color;
    437                 } else if (c == 13) {
    438                         buffer += 2;
    439                 } else {
     444                        break;
     445                        }
     446                default:
    440447                        warning("CHARSET_1: invalid code %d", c);
    441448                }
     449                if (c == 3 || c == 2)
     450                        break;
     451
    442452        } while (1);
    443453
    444454        // Even if talkSound() is called, we may still have to call
     
    640650                return NULL;
    641651        }
    642652
    643         while ((chr = *msg++) != 0) {
    644                 if (num > 500)
     653while ((ptr[num++] = chr = *msg++) != 0) {
     654                if (num >= 500)
    645655                        error("Message stack overflow");
    646656
    647                 ptr[num++] = chr;
    648 
    649                 if (chr == 255) {
    650                         ptr[num++] = chr = *msg++;
     657                if (chr == 0xff) {      // 0xff is an escape character                 
     658                        ptr[num++] = chr = *msg++;      // followed by a "command" code
    651659
    652660                        if (chr != 1 && chr != 2 && chr != 3 && chr != 8) {
    653                                 ptr[num++] = chr = *msg++;
    654                                 ptr[num++] = chr = *msg++;
     661                                ptr[num++] = *msg++;    // and some commands are followed by parameters to the functions below
     662                                ptr[num++] = *msg++;    // these are numbers of names, strings, verbs, variables, etc
    655663                        }
    656664                }
    657665        }
    658         ptr[num++] = 0;
    659666
    660667        _numInMsgStack = num;
    661668        num = numorg;
     
    669676                        chr = ptr[num++];
    670677                        switch (chr) {
    671678                        case 4:
    672                                 unkAddMsgToStack2(READ_LE_UINT16(ptr + num));
     679                                addIntToStack(READ_LE_UINT16(ptr + num));
    673680                                num += 2;
    674681                                break;
    675682                        case 5:
    676                                 unkAddMsgToStack3(READ_LE_UINT16(ptr + num));
     683                                addVerbToStack(READ_LE_UINT16(ptr + num));
    677684                                num += 2;
    678685                                break;
    679686                        case 6:
    680                                 unkAddMsgToStack4(READ_LE_UINT16(ptr + num));
     687                                addNameToStack(READ_LE_UINT16(ptr + num));
    681688                                num += 2;
    682689                                break;
    683690                        case 7:
    684                                 unkAddMsgToStack5(READ_LE_UINT16(ptr + num));
     691                                addStringToStack(READ_LE_UINT16(ptr + num));
    685692                                num += 2;
    686693                                break;
    687694                        case 9:
     
    712719        return msg;
    713720}
    714721
    715 void Scumm::unkAddMsgToStack2(int var)
     722void Scumm::addIntToStack(int var)
    716723{
    717724        int num, max;
    718725        byte flag;
     
    737744        } while (max);
    738745}
    739746
    740 void Scumm::unkAddMsgToStack3(int var)
     747void Scumm::addVerbToStack(int var)
    741748{
    742749        int num, i;
    743750
     
    754761        }
    755762}
    756763
    757 void Scumm::unkAddMsgToStack4(int var)
     764void Scumm::addNameToStack(int var)
    758765{
    759766        int num;
    760767
     
    766773        }
    767774}
    768775
    769 void Scumm::unkAddMsgToStack5(int var)
     776void Scumm::addStringToStack(int var)
    770777{
    771778        byte *ptr;
    772779