RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.168
diff -u -d -r1.168 smush_player.cpp
|
|
|
|
| 238 | 238 | _base = NULL; |
| 239 | 239 | _frameBuffer = NULL; |
| 240 | 240 | _specialBuffer = NULL; |
| | 241 | |
| | 242 | _seekPos = -1; |
| 241 | 243 | |
| 242 | 244 | _skipNext = false; |
| 243 | 245 | _subtitles = ConfMan.getBool("subtitles"); |
| … |
… |
|
| 368 | 370 | _smixer->addChannel(c); |
| 369 | 371 | } |
| 370 | 372 | |
| 371 | | if ((_middleAudio) && (index != 0)) { |
| 372 | | c->setParameters(max_frames, flags, vol, pan, index); |
| 373 | | } else if (index == 0) { |
| | 373 | if (_middleAudio || (index == 0)) { |
| 374 | 374 | c->setParameters(max_frames, flags, vol, pan, index); |
| 375 | 375 | } else { |
| 376 | 376 | c->checkParameters(index, max_frames, flags, vol, pan); |
| … |
… |
|
| 982 | 982 | } |
| 983 | 983 | |
| 984 | 984 | void SmushPlayer::setupAnim(const char *file) { |
| 985 | | Chunk *sub; |
| 986 | 985 | int i; |
| 987 | 986 | char file_font[11]; |
| 988 | 987 | |
| 989 | | _base = new FileChunk(file); |
| 990 | | sub = _base->subBlock(); |
| 991 | | checkBlock(*sub, TYPE_AHDR); |
| 992 | | handleAnimHeader(*sub); |
| 993 | | |
| 994 | 988 | if (_insanity) { |
| 995 | 989 | if (!((_vm->_features & GF_DEMO) && (_vm->_platform == Common::kPlatformPC))) |
| 996 | 990 | readString("mineroad.trs"); |
| … |
… |
|
| 1027 | 1021 | } else { |
| 1028 | 1022 | error("SmushPlayer::setupAnim() Unknown font setup for game"); |
| 1029 | 1023 | } |
| 1030 | | |
| 1031 | | delete sub; |
| 1032 | 1024 | } |
| 1033 | 1025 | |
| 1034 | 1026 | void SmushPlayer::parseNextFrame() { |
| 1035 | 1027 | Common::StackLock lock(_mutex); |
| | 1028 | |
| | 1029 | Chunk *sub; |
| 1036 | 1030 | |
| 1037 | 1031 | if (_vm->_smushPaused) |
| 1038 | 1032 | return; |
| | 1033 | |
| | 1034 | if (_seekPos >= 0) { |
| | 1035 | if (_smixer) |
| | 1036 | _smixer->stop(); |
| | 1037 | |
| | 1038 | if (_seekFile.size() > 0) { |
| | 1039 | if (_base) { |
| | 1040 | delete _base; |
| | 1041 | } |
| | 1042 | _base = new FileChunk(_seekFile); |
| | 1043 | |
| | 1044 | if (_seekPos > 0) { |
| | 1045 | assert(_seekPos > 8); |
| | 1046 | // In this case we need to get palette and number of frames |
| | 1047 | sub = _base->subBlock(); |
| | 1048 | checkBlock(*sub, TYPE_AHDR); |
| | 1049 | handleAnimHeader(*sub); |
| | 1050 | delete sub; |
| | 1051 | |
| | 1052 | _middleAudio = true; |
| | 1053 | _seekPos -= 8; |
| | 1054 | } else { |
| | 1055 | // We need this in Full Throttle when entering/leaving |
| | 1056 | // the old mine road. |
| | 1057 | tryCmpFile(_seekFile.c_str()); |
| | 1058 | } |
| | 1059 | _skipPalette = false; |
| | 1060 | } else { |
| | 1061 | _skipPalette = true; |
| | 1062 | } |
| | 1063 | |
| | 1064 | _base->seek(_seekPos, FileChunk::seek_start); |
| | 1065 | _frame = _seekFrame; |
| | 1066 | |
| | 1067 | _seekPos = -1; |
| | 1068 | } |
| 1039 | 1069 | |
| | 1070 | assert(_base); |
| 1040 | 1071 | if (_base->eof()) { |
| 1041 | 1072 | _vm->_smushVideoShouldFinish = true; |
| 1042 | 1073 | return; |
| 1043 | 1074 | } |
| 1044 | 1075 | |
| 1045 | | Chunk *sub = _base->subBlock(); |
| | 1076 | sub = _base->subBlock(); |
| 1046 | 1077 | |
| 1047 | 1078 | switch (sub->getType()) { |
| 1048 | 1079 | case TYPE_AHDR: // FT INSANE may seek file to the beginning |
| … |
… |
|
| 1153 | 1184 | void SmushPlayer::seekSan(const char *file, int32 pos, int32 contFrame) { |
| 1154 | 1185 | Common::StackLock lock(_mutex); |
| 1155 | 1186 | |
| 1156 | | if (_smixer) |
| 1157 | | _smixer->stop(); |
| 1158 | | |
| 1159 | | if (file) { |
| 1160 | | if (_base) { |
| 1161 | | _base->seek(0, FileChunk::seek_end); |
| 1162 | | delete _base; |
| 1163 | | } |
| 1164 | | |
| 1165 | | _base = new FileChunk(file); |
| 1166 | | if (pos) { |
| 1167 | | assert(pos != 8); |
| 1168 | | // In this case we need to get palette and number of frames |
| 1169 | | Chunk *sub = _base->subBlock(); |
| 1170 | | checkBlock(*sub, TYPE_AHDR); |
| 1171 | | handleAnimHeader(*sub); |
| 1172 | | delete sub; |
| 1173 | | |
| 1174 | | _middleAudio = true; |
| 1175 | | pos -= 8; |
| 1176 | | } else { |
| 1177 | | // We need this in Full Throttle when entering/leaving |
| 1178 | | // the old mine road. |
| 1179 | | tryCmpFile(file); |
| 1180 | | } |
| 1181 | | _skipPalette = false; |
| 1182 | | } else { |
| 1183 | | _skipPalette = true; |
| 1184 | | } |
| 1185 | | |
| 1186 | | _base->seek(pos, FileChunk::seek_start); |
| 1187 | | |
| 1188 | | _frame = contFrame; |
| | 1187 | _seekFile = file ? file : ""; |
| | 1188 | _seekPos = pos; |
| | 1189 | _seekFrame = contFrame; |
| 1189 | 1190 | } |
| 1190 | 1191 | |
| 1191 | 1192 | void SmushPlayer::tryCmpFile(const char *filename) { |
| … |
… |
|
| 1198 | 1199 | if (i == NULL) { |
| 1199 | 1200 | error("invalid filename : %s", filename); |
| 1200 | 1201 | } |
| 1201 | | #ifdef USE_MAD |
| | 1202 | #if defined(USE_MAD) || defined(USE_VORBIS) |
| 1202 | 1203 | char fname[260]; |
| | 1204 | #endif |
| | 1205 | #ifdef USE_MAD |
| 1203 | 1206 | memcpy(fname, filename, i - filename); |
| 1204 | 1207 | strcpy(fname + (i - filename), ".mp3"); |
| 1205 | 1208 | _compressedFile.open(fname); |
| … |
… |
|
| 1234 | 1237 | } |
| 1235 | 1238 | f.close(); |
| 1236 | 1239 | |
| 1237 | | tryCmpFile(filename); |
| 1238 | | |
| 1239 | 1240 | _updateNeeded = false; |
| 1240 | 1241 | _warpNeeded = false; |
| 1241 | 1242 | _palDirtyMin = 256; |
| … |
… |
|
| 1245 | 1246 | bool oldMouseState = _vm->_system->showMouse(false); |
| 1246 | 1247 | |
| 1247 | 1248 | // Load the video |
| | 1249 | _seekFile = filename; |
| | 1250 | _seekPos = offset; |
| | 1251 | _seekFrame = startFrame; |
| | 1252 | _base = 0; |
| | 1253 | |
| 1248 | 1254 | setupAnim(filename); |
| 1249 | 1255 | init(); |
| 1250 | 1256 | |
| 1251 | | if (offset) { |
| 1252 | | _base->seek(offset - 8, FileChunk::seek_start); |
| 1253 | | _frame = startFrame; |
| 1254 | | _middleAudio = true; |
| 1255 | | } |
| 1256 | | |
| 1257 | 1257 | for (;;) { |
| 1258 | 1258 | if (_warpNeeded) { |
| 1259 | 1259 | _vm->_system->warpMouse(_warpX, _warpY); |
| … |
… |
|
| 1280 | 1280 | _palDirtyMin = 256; |
| 1281 | 1281 | } |
| 1282 | 1282 | if (_updateNeeded) { |
| 1283 | | |
| 1284 | 1283 | uint32 end_time, start_time; |
| 1285 | 1284 | |
| 1286 | 1285 | start_time = _vm->_system->getMillis(); |
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.50
diff -u -d -r1.50 smush_player.h
|
|
|
|
| 51 | 51 | byte *_frameBuffer; |
| 52 | 52 | byte *_specialBuffer; |
| 53 | 53 | |
| | 54 | Common::String _seekFile; |
| | 55 | int32 _seekPos; |
| | 56 | int32 _seekFrame; |
| | 57 | |
| 54 | 58 | bool _skipNext; |
| 55 | 59 | bool _subtitles; |
| 56 | 60 | bool _skips[37]; |