Common subdirectories: /cygdrive/c/scummvm/scumm/CVS and /cygdrive/c/scummvm.test/scumm/CVS
diff -u /cygdrive/c/scummvm/scumm/charset.cpp /cygdrive/c/scummvm.test/scumm/charset.cpp
old
|
new
|
|
928 | 928 | void CharsetRendererV3::setColor(byte color) |
929 | 929 | { |
930 | 930 | _color = color; |
931 | | _shadowColor = (_vm->_gameId == GID_ZAK256) ? 8 : 0; |
932 | | if (_vm->_gameId == GID_ZAK256) { |
| 931 | _shadowColor = (_vm->_gameId == GID_ZAK256 || _vm->_gameId == GID_INDY3_TOWNS) ? 8 : 0; |
| 932 | if (_vm->_gameId == GID_ZAK256 || _vm->_gameId == GID_INDY3_TOWNS) { |
933 | 933 | _dropShadow = ((_color & 0x80) != 0); |
934 | 934 | _color &= 0x7f; |
935 | 935 | } else if (_vm->_features & GF_16COLOR) { |
diff -u /cygdrive/c/scummvm/scumm/help.cpp /cygdrive/c/scummvm.test/scumm/help.cpp
old
|
new
|
|
31 | 31 | break; |
32 | 32 | case GID_INDY3: |
33 | 33 | case GID_INDY3_256: |
| 34 | case GID_INDY3_TOWNS: |
34 | 35 | return 6; |
35 | 36 | break; |
36 | 37 | case GID_LOOM: |
… |
… |
|
141 | 142 | break; |
142 | 143 | case GID_INDY3: |
143 | 144 | case GID_INDY3_256: |
| 145 | case GID_INDY3_TOWNS: |
144 | 146 | ADD_BIND("q", "Push"); |
145 | 147 | ADD_BIND("a", "Pull"); |
146 | 148 | ADD_BIND("z", "Give"); |
… |
… |
|
264 | 266 | case GID_INDY3: |
265 | 267 | case GID_ZAK256: |
266 | 268 | case GID_INDY3_256: |
| 269 | case GID_INDY3_TOWNS: |
267 | 270 | title = "Other game controls:"; |
268 | 271 | ADD_TEXT("Inventory:"); |
269 | 272 | ADD_BIND("y", "Upper left item"); |
… |
… |
|
289 | 292 | switch (gameId) { |
290 | 293 | case GID_INDY3: |
291 | 294 | case GID_INDY3_256: |
| 295 | case GID_INDY3_TOWNS: |
292 | 296 | title = "Fighting controls (numpad):"; |
293 | 297 | ADD_BIND("7", "Step back"); |
294 | 298 | ADD_BIND("4", "Step back"); |
… |
… |
|
312 | 316 | switch (gameId) { |
313 | 317 | case GID_INDY3: |
314 | 318 | case GID_INDY3_256: |
| 319 | case GID_INDY3_TOWNS: |
315 | 320 | title = "Biplane controls (numpad):"; |
316 | 321 | ADD_BIND("7", "Fly to upper left"); |
317 | 322 | ADD_BIND("4", "Fly to left"); |
diff -u /cygdrive/c/scummvm/scumm/resource.cpp /cygdrive/c/scummvm.test/scumm/resource.cpp
old
|
new
|
|
652 | 652 | tag = _fileHandle.readUint16LE(); |
653 | 653 | _fileHandle.seek(-6, SEEK_CUR); |
654 | 654 | /* FIXME */ |
655 | | if ((type == rtSound) && !(_features & GF_AMIGA) && (_gameId != GID_ZAK256)) { |
| 655 | if ((type == rtSound) && !(_features & GF_AMIGA) && (_gameId != GID_ZAK256) && (_gameId != GID_INDY3_TOWNS)) { |
656 | 656 | return readSoundResourceSmallHeader(type, idx); |
657 | 657 | } |
658 | 658 | } else { |
diff -u /cygdrive/c/scummvm/scumm/resource_v3.cpp /cygdrive/c/scummvm.test/scumm/resource_v3.cpp
old
|
new
|
|
152 | 152 | break; |
153 | 153 | |
154 | 154 | default: |
155 | | error("Bad ID %c%c found in directory!", blocktype & 0xFF, blocktype >> 8); |
| 155 | // FIXME: this is a little hack because Indy3 FM Towns has 32 bytes appended to 00.LFL. |
| 156 | if (_gameId != GID_INDY3_TOWNS) |
| 157 | error("Bad ID %c%c found in directory!", blocktype & 0xFF, blocktype >> 8); |
156 | 158 | return; |
157 | 159 | } |
158 | 160 | } |
diff -u /cygdrive/c/scummvm/scumm/script.cpp /cygdrive/c/scummvm.test/scumm/script.cpp
old
|
new
|
|
504 | 504 | } |
505 | 505 | #endif |
506 | 506 | checkRange(_numVariables - 1, 0, var, "Variable %d out of range(rzb)"); |
507 | | return (_scummVars[ var ] & ( 1 << bit ) ) ? 1 : 0; |
| 507 | return (_scummVars[var] & (1 << bit)) ? 1 : 0; |
508 | 508 | } else { |
509 | 509 | var &= 0x7FFF; |
| 510 | #if defined(BYPASS_COPY_PROT) |
| 511 | if (_gameId == GID_INDY3_TOWNS && var == 1508) { |
| 512 | return 0; |
| 513 | } |
| 514 | #endif |
510 | 515 | checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(r)"); |
511 | 516 | return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0; |
512 | 517 | } |
513 | 518 | } |
514 | 519 | |
515 | 520 | if (var & 0x4000) { |
516 | | if (_gameId == GID_INDY3_256) { |
| 521 | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3_TOWNS) { |
517 | 522 | var &= 0xF; |
518 | 523 | } else { |
519 | 524 | var &= 0xFFF; |
… |
… |
|
580 | 585 | } |
581 | 586 | |
582 | 587 | if (var & 0x4000) { |
583 | | if (_gameId == GID_INDY3_256) { |
| 588 | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3_TOWNS) { |
584 | 589 | var &= 0xF; |
585 | 590 | } else { |
586 | 591 | var &= 0xFFF; |
… |
… |
|
758 | 763 | // not actual data not even a 00 (stop code) |
759 | 764 | // maybe we should be limiting ourselves to strictly reading the size |
760 | 765 | // described in the header? |
761 | | if (_gameId == GID_INDY3_256) { |
| 766 | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3_TOWNS) { |
762 | 767 | // FIXME: Oddly, Indy3 seems to contain exit scripts with only a size |
763 | 768 | // and a tag - not even a terminating NULL! |
764 | 769 | byte *roomptr = getResourceAddress(rtRoom, _roomResource); |
diff -u /cygdrive/c/scummvm/scumm/script_v5.cpp /cygdrive/c/scummvm.test/scumm/script_v5.cpp
old
|
new
|
|
599 | 599 | // the actor ID of the opposing soldier. So, we copy that value |
600 | 600 | // over to the Local[5] variable of script 33. |
601 | 601 | // See also bug #743314. |
602 | | if (_gameId == GID_INDY3_256 && vm.slot[cur].number == 32 && script == 33) { |
| 602 | if ((_gameId == GID_INDY3_256 || _gameId == GID_INDY3_TOWNS) && vm.slot[cur].number == 32 && script == 33) { |
603 | 603 | vars[5] = vm.localvar[cur][5]; |
604 | 604 | } |
605 | 605 | |
… |
… |
|
667 | 667 | initCharset(getVarOrDirectByte(0x80)); |
668 | 668 | break; |
669 | 669 | case 14: /* unk */ |
670 | | if (_features & GF_OLD_BUNDLE || _gameId == GID_INDY3_256) { |
| 670 | if (_features & GF_OLD_BUNDLE || _gameId == GID_INDY3_256 || _gameId == GID_INDY3_TOWNS) { |
671 | 671 | // FIXME: What is this supposed to do? From comparing |
672 | 672 | // Indy3's script 118 to the Passport Demo's script 58 |
673 | 673 | // my guess is that it's some sort of "init charset", |
… |
… |
|
690 | 690 | break; |
691 | 691 | } |
692 | 692 | |
693 | | if (!(_features & GF_OLD_BUNDLE) && _gameId != GID_INDY3_256) { |
| 693 | if (!(_features & GF_OLD_BUNDLE) && _gameId != GID_INDY3_256 && _gameId != GID_INDY3_TOWNS) { |
694 | 694 | VAR(VAR_CURSORSTATE) = _cursor.state; |
695 | 695 | VAR(VAR_USERPUT) = _userPut; |
696 | 696 | } |
… |
… |
|
975 | 975 | return; |
976 | 976 | |
977 | 977 | // INDY3 uses this opcode as a wait_for_actor(); |
978 | | if ((_gameId == GID_INDY3_256) || (_gameId == GID_INDY3)) { |
| 978 | if ((_gameId == GID_INDY3_TOWNS) || (_gameId == GID_INDY3_256) || (_gameId == GID_INDY3)) { |
979 | 979 | const byte *oldaddr = _scriptPointer - 1; |
980 | 980 | a = derefActor(getVarOrDirectByte(0x80), "o5_getActorScale (wait)"); |
981 | 981 | if (a->moving) { |
… |
… |
|
1009 | 1009 | int a; |
1010 | 1010 | getResultPos(); |
1011 | 1011 | |
1012 | | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3) |
| 1012 | if (_gameId == GID_INDY3_TOWNS || _gameId == GID_INDY3_256 || _gameId == GID_INDY3) |
1013 | 1013 | a = getVarOrDirectByte(0x80); |
1014 | 1014 | else |
1015 | 1015 | a = getVarOrDirectWord(0x80); |
… |
… |
|
1021 | 1021 | int a; |
1022 | 1022 | getResultPos(); |
1023 | 1023 | |
1024 | | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3) { |
| 1024 | if (_gameId == GID_INDY3_TOWNS || _gameId == GID_INDY3_256 || _gameId == GID_INDY3) { |
1025 | 1025 | a = getVarOrDirectByte(0x80); |
1026 | 1026 | |
1027 | 1027 | // FIXME - bug 636433 workaround (can't get into Zeppelin) |
… |
… |
|
1505 | 1505 | _opcode = fetchScriptByte(); |
1506 | 1506 | if (_opcode != 17) |
1507 | 1507 | resid = getVarOrDirectByte(0x80); |
1508 | | if (_gameId != GID_ZAK256) { |
| 1508 | if (_gameId != GID_ZAK256 && _gameId != GID_INDY3_TOWNS) { |
1509 | 1509 | // FIXME - this probably can be removed eventually, I don't think the following |
1510 | 1510 | // check will ever be triggered, but then I could be wrong and it's better |
1511 | 1511 | // to play it safe. |
… |
… |
|
2014 | 2014 | } |
2015 | 2015 | |
2016 | 2016 | void Scumm_v5::o5_startMusic() { |
2017 | | if (_gameId == GID_ZAK256) { |
| 2017 | if (_gameId == GID_ZAK256 || _gameId == GID_INDY3_TOWNS) { |
2018 | 2018 | // In Zak256, this seems to be some kind of Audio CD status query function. |
2019 | 2019 | // See also bug #762589 (thanks to Hibernatus for providing the information). |
2020 | 2020 | getResultPos(); |
… |
… |
|
2341 | 2341 | void Scumm_v5::o5_wait() { |
2342 | 2342 | const byte *oldaddr = _scriptPointer - 1; |
2343 | 2343 | |
2344 | | if ((_gameId == GID_INDY3_256) || (_gameId == GID_INDY3)) { |
| 2344 | if ((_gameId == GID_INDY3_TOWNS) || (_gameId == GID_INDY3_256) || (_gameId == GID_INDY3)) { |
2345 | 2345 | _opcode = 2; |
2346 | 2346 | } else |
2347 | 2347 | _opcode = fetchScriptByte(); |
… |
… |
|
2584 | 2584 | // It's also needed for Loom, or the lines Bobbin |
2585 | 2585 | // speaks during the intro are put at position 0,0. |
2586 | 2586 | // In addition, Loom needs to remember the text colour. |
2587 | | if (_gameId == GID_INDY3_256 || _gameId == GID_INDY3 || _gameId == GID_LOOM) { |
| 2587 | if (_gameId == GID_INDY3_TOWNS || _gameId == GID_INDY3_256 || _gameId == GID_INDY3 || _gameId == GID_LOOM) { |
2588 | 2588 | _string[textSlot].t_xpos = _string[textSlot].xpos; |
2589 | 2589 | _string[textSlot].t_ypos = _string[textSlot].ypos; |
2590 | 2590 | _string[textSlot].t_color = _string[textSlot].color; |
… |
… |
|
2615 | 2615 | a = getVarOrDirectWord(0x80); |
2616 | 2616 | |
2617 | 2617 | #if 1 |
2618 | | if (_gameId == GID_ZAK256) { |
| 2618 | if (_gameId == GID_ZAK256 || _gameId == GID_INDY3_TOWNS) { |
2619 | 2619 | // FIXME / TODO: OK the first thing to note is: at least in Zak256, |
2620 | 2620 | // maybe also in other games, this opcode does a bit more. I added |
2621 | 2621 | // some stubs here, but somebody with a full IDA or more knowledge |
diff -u /cygdrive/c/scummvm/scumm/scumm.h /cygdrive/c/scummvm.test/scumm/scumm.h
old
|
new
|
|
212 | 212 | GID_ZAK, |
213 | 213 | GID_PUTTDEMO, |
214 | 214 | GID_PUTTPUTT, |
215 | | GID_MONKEY_SEGA |
| 215 | GID_MONKEY_SEGA, |
| 216 | GID_INDY3_TOWNS |
216 | 217 | }; |
217 | 218 | |
218 | 219 | #define _maxRooms res.num[rtRoom] |
diff -u /cygdrive/c/scummvm/scumm/scummvm.cpp /cygdrive/c/scummvm.test/scumm/scummvm.cpp
old
|
new
|
|
90 | 90 | /* Scumm Version 3 */ |
91 | 91 | {"indy3EGA", "Indiana Jones and the Last Crusade", GID_INDY3, 3, VersionSettings::ADLIB_ALWAYS, |
92 | 92 | GF_SMALL_HEADER | GF_SMALL_NAMES | GF_NO_SCALLING | GF_USE_KEY | GF_16COLOR | GF_OLD_BUNDLE, "00.LFL"}, |
| 93 | {"indy3Towns", "Indiana Jones and the Last Crusade (FM Towns)", GID_INDY3_TOWNS, 3, VersionSettings::ADLIB_ALWAYS, |
| 94 | GF_SMALL_HEADER | GF_SMALL_NAMES | GF_NO_SCALLING | GF_OLD256 | GF_AUDIOTRACKS, "00.LFL"}, |
93 | 95 | {"indy3", "Indiana Jones and the Last Crusade (256)", GID_INDY3_256, 3, VersionSettings::ADLIB_ALWAYS, |
94 | 96 | GF_SMALL_HEADER | GF_SMALL_NAMES | GF_NO_SCALLING | GF_OLD256 | GF_ADLIB_DEFAULT, "00.LFL"}, |
95 | 97 | {"zak256", "Zak McKracken and the Alien Mindbenders (256)", GID_ZAK256, 3, VersionSettings::ADLIB_ALWAYS, |
… |
… |
|
567 | 569 | _hexdumpScripts = false; |
568 | 570 | _showStack = false; |
569 | 571 | |
570 | | if (_gameId == GID_ZAK256) { // FmTowns is 320x240 |
| 572 | if (_gameId == GID_ZAK256 || _gameId == GID_INDY3_TOWNS) { // FmTowns is 320x240 |
571 | 573 | _screenWidth = 320; |
572 | 574 | _screenHeight = 240; |
573 | 575 | } else if (_gameId == GID_CMI) { |
Only in /cygdrive/c/scummvm.test/scumm/: scummvm___Release
Common subdirectories: /cygdrive/c/scummvm/scumm/smush and /cygdrive/c/scummvm.test/scumm/smush
diff -u /cygdrive/c/scummvm/scumm/sound.cpp /cygdrive/c/scummvm.test/scumm/sound.cpp
old
|
new
|
|
384 | 384 | WA probably again contains audio data? |
385 | 385 | */ |
386 | 386 | #endif |
387 | | rate = 11000; |
| 387 | rate = 11025; |
388 | 388 | int type = *(ptr + 0x0D); |
389 | 389 | |
390 | 390 | switch(type) { |
… |
… |
|
392 | 392 | int waveSize = READ_LE_UINT32(ptr + 0x22); |
393 | 393 | int loopStart = READ_LE_UINT32(ptr + 0x26); |
394 | 394 | int loopEnd = READ_LE_UINT32(ptr + 0x2A); |
| 395 | rate = (READ_LE_UINT32(ptr + 0x32) == 60) ? 11025 : 22050; // 48 means 22050 |
395 | 396 | |
396 | 397 | if (size - 0x36 < waveSize) { |
397 | 398 | warning("Wrong wave size in sound #%i: %i", soundID, waveSize); |
… |
… |
|
415 | 416 | } |
416 | 417 | } |
417 | 418 | |
418 | | _scumm->_mixer->playRaw(NULL, sound, waveSize, 11000, flags, soundID); |
| 419 | _scumm->_mixer->playRaw(NULL, sound, waveSize, rate, flags, soundID); |
419 | 420 | break; |
420 | 421 | } |
421 | 422 | |
… |
… |
|
803 | 804 | stopCD(); |
804 | 805 | } |
805 | 806 | |
806 | | if (_scumm->_gameId == GID_ZAK256) { |
| 807 | if (_scumm->_gameId == GID_ZAK256 || _scumm->_gameId == GID_INDY3_TOWNS) { |
807 | 808 | _scumm->_mixer->stopID(a); |
808 | 809 | } else if (_scumm->_imuseDigital) { |
809 | 810 | _scumm->_imuseDigital->stopSound(a); |