RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.16
diff -u -r1.16 scumm.h
|
|
|
918 | 918 | void description(); |
919 | 919 | byte *_msgPtrToAdd; |
920 | 920 | 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); |
925 | 925 | void unkMessage1(); |
926 | 926 | void unkMessage2(); |
927 | 927 | void clearMsgQueue(); |
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.12
diff -u -r1.12 string.cpp
|
|
|
391 | 391 | } |
392 | 392 | |
393 | 393 | 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: |
400 | 396 | goto newLine; |
401 | | } else if (c == 2) { |
| 397 | case 2: |
402 | 398 | _haveMsg = 0; |
403 | 399 | _keepText = true; |
404 | 400 | break; |
405 | | } else if (c == 9) { |
| 401 | case 3: |
| 402 | if (_haveMsg != 0xFE) |
| 403 | _haveMsg = 0xFF; |
| 404 | _keepText = false; |
| 405 | break; |
| 406 | case 9: |
406 | 407 | frme = *buffer++; |
407 | 408 | frme |= *buffer++ << 8; |
408 | 409 | has_anim = true; |
409 | | } else if (c == 10) { |
| 410 | break; |
| 411 | case 10: |
410 | 412 | talk_sound_a = buffer[0] | (buffer[1] << 8) | (buffer[4] << 16) | (buffer[5] << 24); |
411 | 413 | talk_sound_b = buffer[8] | (buffer[9] << 8) | (buffer[12] << 16) | (buffer[13] << 24); |
412 | 414 | has_talk_sound = true; |
… |
… |
|
415 | 417 | // Set flag that speech variant exist of this msg |
416 | 418 | if (_haveMsg == 0xFF) |
417 | 419 | _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: { |
419 | 434 | int oldy = getResourceAddress(rtCharset, charset._curId)[30]; |
420 | 435 | |
421 | 436 | charset._curId = *buffer++; |
… |
… |
|
426 | 441 | else |
427 | 442 | charset._colorMap[i] = _charsetData[charset._curId][i]; |
428 | 443 | 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: |
440 | 447 | warning("CHARSET_1: invalid code %d", c); |
441 | 448 | } |
| 449 | if (c == 3 || c == 2) |
| 450 | break; |
| 451 | |
442 | 452 | } while (1); |
443 | 453 | |
444 | 454 | // Even if talkSound() is called, we may still have to call |
… |
… |
|
640 | 650 | return NULL; |
641 | 651 | } |
642 | 652 | |
643 | | while ((chr = *msg++) != 0) { |
644 | | if (num > 500) |
| 653 | while ((ptr[num++] = chr = *msg++) != 0) { |
| 654 | if (num >= 500) |
645 | 655 | error("Message stack overflow"); |
646 | 656 | |
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 |
651 | 659 | |
652 | 660 | 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 |
655 | 663 | } |
656 | 664 | } |
657 | 665 | } |
658 | | ptr[num++] = 0; |
659 | 666 | |
660 | 667 | _numInMsgStack = num; |
661 | 668 | num = numorg; |
… |
… |
|
669 | 676 | chr = ptr[num++]; |
670 | 677 | switch (chr) { |
671 | 678 | case 4: |
672 | | unkAddMsgToStack2(READ_LE_UINT16(ptr + num)); |
| 679 | addIntToStack(READ_LE_UINT16(ptr + num)); |
673 | 680 | num += 2; |
674 | 681 | break; |
675 | 682 | case 5: |
676 | | unkAddMsgToStack3(READ_LE_UINT16(ptr + num)); |
| 683 | addVerbToStack(READ_LE_UINT16(ptr + num)); |
677 | 684 | num += 2; |
678 | 685 | break; |
679 | 686 | case 6: |
680 | | unkAddMsgToStack4(READ_LE_UINT16(ptr + num)); |
| 687 | addNameToStack(READ_LE_UINT16(ptr + num)); |
681 | 688 | num += 2; |
682 | 689 | break; |
683 | 690 | case 7: |
684 | | unkAddMsgToStack5(READ_LE_UINT16(ptr + num)); |
| 691 | addStringToStack(READ_LE_UINT16(ptr + num)); |
685 | 692 | num += 2; |
686 | 693 | break; |
687 | 694 | case 9: |
… |
… |
|
712 | 719 | return msg; |
713 | 720 | } |
714 | 721 | |
715 | | void Scumm::unkAddMsgToStack2(int var) |
| 722 | void Scumm::addIntToStack(int var) |
716 | 723 | { |
717 | 724 | int num, max; |
718 | 725 | byte flag; |
… |
… |
|
737 | 744 | } while (max); |
738 | 745 | } |
739 | 746 | |
740 | | void Scumm::unkAddMsgToStack3(int var) |
| 747 | void Scumm::addVerbToStack(int var) |
741 | 748 | { |
742 | 749 | int num, i; |
743 | 750 | |
… |
… |
|
754 | 761 | } |
755 | 762 | } |
756 | 763 | |
757 | | void Scumm::unkAddMsgToStack4(int var) |
| 764 | void Scumm::addNameToStack(int var) |
758 | 765 | { |
759 | 766 | int num; |
760 | 767 | |
… |
… |
|
766 | 773 | } |
767 | 774 | } |
768 | 775 | |
769 | | void Scumm::unkAddMsgToStack5(int var) |
| 776 | void Scumm::addStringToStack(int var) |
770 | 777 | { |
771 | 778 | byte *ptr; |
772 | 779 | |