Ticket #9091: descumm_2870543_incl_287369.diff

File descumm_2870543_incl_287369.diff, 9.4 KB (added by SF/jestar_jokin, 11 years ago)

Includes this patch and patch 2867369

  • .cpp

    old new  
    9494#define ASTARTCOMMA (1<<28)
    9595#define AVARSTORE (1<<27)
    9696#define ANOENDSEMICOLON (1<<26)
     97#define ATOWITHLASTPAREN (1<<25)
    9798
    9899
    99 
    100100void emit_if(char *buf, char *condition);
    101101
    102102
     
    564564
    565565char *putascii(char *buf, int i) {
    566566        if (i > 31 && i < 128) {
     567                // non-printable chars are escaped by backslashes as so: "\x00"
     568                // backslashes and quote marks are escaped like so: "\\" "\""
     569                if (i == '\\' || i == '"') {
     570                        buf[0] = '\\';
     571                        buf++;
     572                }
    567573                buf[0] = i;
    568574                buf[1] = 0;
    569575                return buf + 1;
    570576        }
    571         return buf + sprintf(buf, "^%d", i);
     577        return buf + sprintf(buf, "\\x%.2X", i);
    572578}
    573579
    574580char *get_ascii(char *buf) {
     
    661667
    662668        if (args & ATO) {
    663669                char tmp[256];
     670                if (args & ATOWITHLASTPAREN) {
     671                        buf = strecpy(buf, ")");
     672                }
    664673                strcpy(tmp, buforg);
    665674                emit_if(buforg, tmp);
    666675        } else {
     
    684693                c &= 0x7f;
    685694
    686695                if (c < 8) {
    687                         buf += sprintf(buf, "^%d", (int)c);
     696                        buf += sprintf(buf, "\\x%.2X", (int)c);
    688697                        if (c > 3) {
    689                                 buf += sprintf(buf, "^%d", (int)get_byte());
     698                                buf += sprintf(buf, "\\x%.2X", (int)get_byte());
    690699                        }
    691                 } else
     700                } else {
     701                        if (c == '\\' || c == '"') // backslash is the escape character
     702                                *buf++ = '\\';
     703                        }
    692704                        *buf++ = c;
    693705                if (flag)
    694706                        *buf++ = ' ';
     
    802814                case 0x0E:
    803815                        buf = do_tok(buf, "InitAnimNr", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
    804816                        break;
    805 //              case 0x0F: buf=do_tok(buf, "PaletteList", A1LIST); break;
     817//                      case 0x0F: buf=do_tok(buf, "PaletteList", A1LIST); break;
    806818                case 0x10:
    807819                        buf = do_tok(buf, "Width", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
    808820                        break;
     
    10481060                break;
    10491061
    10501062        case 0x22 + 1:
    1051                 do_tok(buf, "setCDVolume?", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
     1063                do_tok(buf, "setCDVolume", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
    10521064                break;
    10531065        case 0x23 + 1:
    10541066                do_tok(buf, "setSoundLoudness", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | A3B);
     
    10911103
    10921104        switch (opcode & 0x1F) {
    10931105        case 0x01:
    1094                 do_tok(buf, "RoomScroll", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
     1106                do_tok(buf, "RoomScroll", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
    10951107                break;
    10961108        case 0x02:
    1097                 do_tok(buf, "RoomColor", ANOENDSEMICOLON);
     1109                do_tok(buf, "RoomColor", 0);
    10981110                break;
    10991111        case 0x03:
    1100                 do_tok(buf, "SetScreen", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
     1112                do_tok(buf, "SetScreen", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
    11011113                break;
    11021114        case 0x04:
    11031115                buf =
     
    11051117                                                 ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) |
    11061118                                                 ((opcode & 0x20) ? A3V : A3W) | ANOLASTPAREN | ANOENDSEMICOLON);
    11071119                opcode = get_byte();
    1108                 buf = do_tok(buf, NULL, ASTARTCOMMA | ANOFIRSTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1B));
     1120                buf = do_tok(buf, NULL, ASTARTCOMMA | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1B));
    11091121                break;
    11101122        case 0x05:
    1111                 do_tok(buf, "ShakeOn", ANOENDSEMICOLON);
     1123                do_tok(buf, "ShakeOn", 0);
    11121124                break;
    11131125        case 0x06:
    1114                 do_tok(buf, "ShakeOff", ANOENDSEMICOLON);
     1126                do_tok(buf, "ShakeOff", 0);
    11151127                break;
    11161128        case 0x07:
    1117                 do_tok(buf, "Unused", ANOENDSEMICOLON);
     1129                // Possibly unused, but changed to match ScummVM anyway
     1130                //do_tok(buf, "Unused", 0);
     1131                buf = do_tok(buf, "SetRoomScale",
     1132                                                 ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
     1133                                                  ANOLASTPAREN | ANOENDSEMICOLON);
     1134                opcode = get_byte();
     1135                buf = do_tok(buf, NULL,
     1136                                                 ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
     1137                                                  ASTARTCOMMA | ANOFIRSTPAREN | ANOLASTPAREN | ANOENDSEMICOLON);
     1138                opcode = get_byte();
     1139                buf = do_tok(buf, NULL,
     1140                                                 ((opcode & 0x40) ? A2V : A2B) | // apparently it uses the param 2 bit
     1141                                                  ASTARTCOMMA | ANOFIRSTPAREN);
    11181142                break;
    11191143        case 0x08:
    11201144                buf =
    11211145                        do_tok(buf, "RoomIntensity",
    11221146                                                 ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
    1123                                                  ((opcode & 0x20) ? A3V : A3B) | ANOENDSEMICOLON);
     1147                                                 ((opcode & 0x20) ? A3V : A3B));
    11241148                break;
    11251149        case 0x09:
    1126                 buf = do_tok(buf, "saveLoad", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
     1150                buf = do_tok(buf, "saveLoad", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
    11271151                break;
    11281152        case 0x0A:
    1129                 buf = do_tok(buf, "screenEffect", ((opcode & 0x80) ? A1V : A1W) | ANOENDSEMICOLON);
     1153                buf = do_tok(buf, "screenEffect", ((opcode & 0x80) ? A1V : A1W));
    11301154                break;
    11311155        case 0x0B:
    11321156                buf =
     
    11371161                opcode = get_byte();
    11381162                buf =
    11391163                        do_tok(buf, NULL,
    1140                                                  ASTARTCOMMA | ANOFIRSTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1B) |
     1164                                                 ASTARTCOMMA | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1B) |
    11411165                                                 ((opcode & 0x40) ? A2V : A2B));
    11421166                break;
    11431167
     
    11501174                opcode = get_byte();
    11511175                buf =
    11521176                        do_tok(buf, NULL,
    1153                                                  ASTARTCOMMA | ANOFIRSTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1B) |
     1177                                                 ASTARTCOMMA | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1B) |
    11541178                                                 ((opcode & 0x40) ? A2V : A2B));
    11551179                break;
    11561180
    11571181        case 0x0D:
    1158                 do_tok(buf, "saveString", ((opcode & 0x80) ? A1V : A1B) | A2ASCII | ANOENDSEMICOLON);
     1182                do_tok(buf, "saveString", ((opcode & 0x80) ? A1V : A1B) | A2ASCII);
    11591183                break;
    11601184        case 0x0E:
    1161                 do_tok(buf, "loadString", ((opcode & 0x80) ? A1V : A1B) | A2ASCII | ANOENDSEMICOLON);
     1185                do_tok(buf, "loadString", ((opcode & 0x80) ? A1V : A1B) | A2ASCII);
    11621186                break;
    11631187
    11641188        case 0x0F:
     
    11741198                break;
    11751199
    11761200        case 0x10:
    1177                 do_tok(buf, "colorCycleDelay", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
     1201                do_tok(buf, "colorCycleDelay", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
    11781202                break;
    11791203
    11801204        default:
    11811205                strcpy(buf, "Unknown??");
    11821206        }
    1183 
    1184         strcat(buf, ");");
    11851207}
    11861208
    11871209void do_room_ops_old(char *buf, byte opcode) {
     
    19571979        case 0xB5:
    19581980        case 0xF5:
    19591981                do_tok(buf, "findObject",
    1960                                          AVARSTORE | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
     1982                                         AVARSTORE | ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
    19611983                break;
    19621984        case 0x71:
    19631985        case 0xF1:
     
    20352057        case 0x9D:
    20362058        case 0xDD:
    20372059                //ifClassOfIs
    2038                 do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ATO);
     2060                do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ATO | ATOWITHLASTPAREN);
    20392061                break;
    20402062
    20412063        case 0x3F:
     
    21192141                //loadRoomWithEgo
    21202142                buf =
    21212143                        do_tok(buf, "loadRoomWithEgo",
    2122                                                  ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN);
     2144                                                 ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN | ANOENDSEMICOLON);
    21232145                do_tok(buf, NULL, A1B | A2B | ANOFIRSTPAREN | ASTARTCOMMA);
    21242146                break;
    21252147
     
    29732995                        opcode = get_byte();
    29742996                        switch (opcode & 0x1F) {
    29752997                        case 1:
    2976                                 do_tok(buf, ", setXY(",
    2977                                                          ANOLASTPAREN | ANOFIRSTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W) |
     2998                                do_tok(buf, "setXY",
     2999                                                         ASTARTCOMMA | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W) |
    29783000                                                         ((opcode & 0x40) ? A2V : A2W));
    29793001                                break;
    29803002                        case 2:
    2981                                 do_tok(buf, ", setImage(", ANOLASTPAREN | ANOFIRSTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W));
     3003                                do_tok(buf, "setImage", ASTARTCOMMA | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W));
    29823004                                break;
    29833005                        }
    2984                         strcat(buf, "));");
     3006                        strcat(buf, ");");
    29853007
    29863008                } else {
    29873009                        buf = do_tok(buf, "drawObject",
     
    30323054        case 0xCA:
    30333055        case 0x6A:
    30343056        case 0xEA:
    3035                 do_tok(buf, "startScript", ((opcode & 0x80) ? A1V : A1B) | A2LIST);
     3057                buf = do_tok(buf, "startScript", ((opcode & 0x80) ? A1V : A1B) | A2LIST | ANOLASTPAREN | ANOENDSEMICOLON);
     3058                if (opcode & 0x20) { // freeze resistant
     3059                        buf += sprintf(buf, ",F");
     3060                }
     3061                if (opcode & 0x40) { // recursive
     3062                        buf += sprintf(buf, ",R");
     3063                }
     3064                buf += sprintf(buf, ");");
    30363065                break;
    30373066
    3038 
    30393067        case 0x0B:
    30403068        case 0x4B:
    30413069        case 0x8B:
     
    31093137
    31103138        case 0x1D:
    31113139        case 0x9D:
    3112                 do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | A2LIST | ATO);
     3140                do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | A2LIST | ATO | ATOWITHLASTPAREN);
    31133141                break;                                                                                  /* arg1=object; vararg=classes to test; arg3=jumpoffs */
    31143142
    31153143        case 0x1E:
     
    31313159        case 0xE4:
    31323160                buf =
    31333161                        do_tok(buf, "loadRoomWithEgo",
    3134                                                  ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN);
     3162                                                 ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN | ANOENDSEMICOLON);
    31353163                do_tok(buf, NULL, A1W | A2W | ANOFIRSTPAREN | ASTARTCOMMA);
    31363164                break;
    31373165
     
    34653493        case 0xB5:
    34663494        case 0xF5:
    34673495                do_tok(buf, "findObject",
    3468                                          AVARSTORE | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
     3496                                         AVARSTORE | ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
    34693497                break;
    34703498
    34713499        case 0x26:
     
    36583686                break;
    36593687
    36603688        case 0x6B:
    3661                 do_tok(buf, "debug?", ((opcode & 0x80) ? A1V : A1W));
     3689                do_tok(buf, "debug", ((opcode & 0x80) ? A1V : A1W));
    36623690                break;
    36633691
    36643692        default: