diff -ur ScummVM-cvs20050402/scumm/insane/insane.cpp ScummVM-cvs20050402+hack/scumm/insane/insane.cpp
old
|
new
|
|
619 | 619 | } |
620 | 620 | |
621 | 621 | void Insane::smush_warpMouse(int x, int y, int buttons) { |
622 | | _vm->_system->warpMouse(x, y); |
| 622 | _player->warpMouse(x, y, buttons); |
623 | 623 | } |
624 | 624 | |
625 | 625 | void Insane::putActors(void) { |
diff -ur ScummVM-cvs20050402/scumm/smush/smush_player.cpp ScummVM-cvs20050402+hack/scumm/smush/smush_player.cpp
old
|
new
|
|
696 | 696 | _deltaPal[i] = b.getWord(); |
697 | 697 | } |
698 | 698 | readPalette(_pal, b); |
699 | | setPalette(_pal); |
| 699 | setDirtyColors(0, 255); |
700 | 700 | } else if (b.getSize() == 6) { |
701 | 701 | |
702 | 702 | b.getWord(); |
… |
… |
|
706 | 706 | for (int i = 0; i < 0x300; i++) { |
707 | 707 | _pal[i] = delta_color(_pal[i], _deltaPal[i]); |
708 | 708 | } |
709 | | setPalette(_pal); |
| 709 | setDirtyColors(0, 255); |
710 | 710 | } else { |
711 | 711 | error("SmushPlayer::handleDeltaPalette() Wrong size for DeltaPalette"); |
712 | 712 | } |
… |
… |
|
720 | 720 | return; |
721 | 721 | |
722 | 722 | readPalette(_pal, b); |
723 | | setPalette(_pal); |
| 723 | setDirtyColors(0, 255); |
724 | 724 | } |
725 | 725 | |
726 | 726 | void smush_decode_codec1(byte *dst, byte *src, int left, int top, int height, int width, int dstWidth); |
… |
… |
|
974 | 974 | b.getWord(); |
975 | 975 | if (!_skipPalette) { |
976 | 976 | readPalette(_pal, b); |
977 | | setPalette(_pal); |
| 977 | setDirtyColors(0, 255); |
978 | 978 | } |
979 | 979 | } |
980 | 980 | |
… |
… |
|
1060 | 1060 | } |
1061 | 1061 | |
1062 | 1062 | void SmushPlayer::setPalette(const byte *palette) { |
1063 | | byte palette_colors[1024]; |
1064 | | byte *p = palette_colors; |
1065 | | |
1066 | | for (int i = 0; i != 256; ++i) { |
1067 | | *p++ = _pal[i * 3 + 0] = *palette++; // red |
1068 | | *p++ = _pal[i * 3 + 1] = *palette++; // green |
1069 | | *p++ = _pal[i * 3 + 2] = *palette++; // blue |
1070 | | *p++ = 0; |
1071 | | } |
1072 | | |
1073 | | _vm->_system->setPalette(palette_colors, 0, 256); |
| 1063 | memcpy(_pal, palette, 0x300); |
| 1064 | setDirtyColors(0, 255); |
1074 | 1065 | } |
1075 | 1066 | |
1076 | 1067 | void SmushPlayer::setPaletteValue(int n, byte r, byte g, byte b) { |
1077 | 1068 | _pal[n * 3 + 0] = r; |
1078 | 1069 | _pal[n * 3 + 1] = g; |
1079 | 1070 | _pal[n * 3 + 2] = b; |
| 1071 | setDirtyColors(n, n); |
| 1072 | } |
| 1073 | |
| 1074 | void SmushPlayer::setDirtyColors(int min, int max) { |
| 1075 | if (_palDirtyMin > min) |
| 1076 | _palDirtyMin = min; |
| 1077 | if (_palDirtyMax < max) |
| 1078 | _palDirtyMax = max; |
| 1079 | } |
1080 | 1080 | |
1081 | | _vm->_system->setPalette(_pal, n, 1); |
| 1081 | void SmushPlayer::warpMouse(int x, int y, int buttons) { |
| 1082 | _warpNeeded = true; |
| 1083 | _warpX = x; |
| 1084 | _warpY = y; |
| 1085 | _warpButtons = buttons; |
1082 | 1086 | } |
1083 | 1087 | |
1084 | 1088 | void SmushPlayer::updateScreen() { |
… |
… |
|
1134 | 1138 | #endif |
1135 | 1139 | |
1136 | 1140 | uint32 end_time, start_time = _vm->_system->getMillis(); |
1137 | | _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height); |
1138 | 1141 | _updateNeeded = true; |
1139 | 1142 | end_time = _vm->_system->getMillis(); |
1140 | 1143 | debugC(DEBUG_SMUSH, "Smush stats: updateScreen( %03d )", end_time - start_time); |
… |
… |
|
1228 | 1231 | tryCmpFile(filename); |
1229 | 1232 | |
1230 | 1233 | _updateNeeded = false; |
| 1234 | _warpNeeded = false; |
| 1235 | _palDirtyMin = 256; |
| 1236 | _palDirtyMax = -1; |
1231 | 1237 | |
1232 | 1238 | // Hide mouse |
1233 | 1239 | bool oldMouseState = _vm->_system->showMouse(false); |
… |
… |
|
1243 | 1249 | } |
1244 | 1250 | |
1245 | 1251 | for (;;) { |
| 1252 | if (_warpNeeded) { |
| 1253 | _vm->_system->warpMouse(_warpX, _warpY); |
| 1254 | _warpNeeded = false; |
| 1255 | } |
1246 | 1256 | _vm->parseEvents(); |
1247 | 1257 | _vm->processKbd(true); |
| 1258 | if (_palDirtyMax >= _palDirtyMin) { |
| 1259 | byte palette_colors[1024]; |
| 1260 | byte *p = palette_colors; |
| 1261 | |
| 1262 | for (int i = _palDirtyMin; i <= _palDirtyMax; i++) { |
| 1263 | byte *data = _pal + i * 3; |
| 1264 | |
| 1265 | *p++ = data[0]; |
| 1266 | *p++ = data[1]; |
| 1267 | *p++ = data[2]; |
| 1268 | *p++ = 0; |
| 1269 | } |
| 1270 | |
| 1271 | _vm->_system->setPalette(palette_colors, _palDirtyMin, _palDirtyMax - _palDirtyMin + 1); |
| 1272 | |
| 1273 | _palDirtyMax = -1; |
| 1274 | _palDirtyMin = 256; |
| 1275 | } |
1248 | 1276 | if (_updateNeeded) { |
1249 | 1277 | |
1250 | 1278 | uint32 end_time, start_time; |
1251 | 1279 | |
1252 | 1280 | start_time = _vm->_system->getMillis(); |
| 1281 | _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height); |
1253 | 1282 | _vm->_system->updateScreen(); |
1254 | 1283 | _updateNeeded = false; |
1255 | 1284 | #ifdef _WIN32_WCE |
diff -ur ScummVM-cvs20050402/scumm/smush/smush_player.h ScummVM-cvs20050402+hack/scumm/smush/smush_player.h
old
|
new
|
|
73 | 73 | |
74 | 74 | byte *_dst; |
75 | 75 | bool _updateNeeded; |
| 76 | bool _warpNeeded; |
| 77 | int _palDirtyMin, _palDirtyMax; |
| 78 | int _warpX, _warpY; |
| 79 | int _warpButtons; |
76 | 80 | bool _insanity; |
77 | 81 | bool _middleAudio; |
78 | 82 | bool _skipPalette; |
… |
… |
|
89 | 93 | ~SmushPlayer(); |
90 | 94 | |
91 | 95 | void play(const char *filename, int32 offset = 0, int32 startFrame = 0); |
| 96 | void warpMouse(int x, int y, int buttons); |
92 | 97 | |
93 | 98 | protected: |
94 | 99 | SmushFont *_sf[5]; |
… |
… |
|
99 | 104 | void insanity(bool); |
100 | 105 | void setPalette(const byte *palette); |
101 | 106 | void setPaletteValue(int n, byte r, byte g, byte b); |
| 107 | void setDirtyColors(int min, int max); |
102 | 108 | void seekSan(const char *file, int32 pos, int32 contFrame); |
103 | 109 | const char *getString(int id); |
104 | 110 | |