diff options
Diffstat (limited to 'engines/gob/inter_v6.cpp')
-rw-r--r-- | engines/gob/inter_v6.cpp | 75 |
1 files changed, 44 insertions, 31 deletions
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp index 20186a165d..5234db33b0 100644 --- a/engines/gob/inter_v6.cpp +++ b/engines/gob/inter_v6.cpp @@ -753,51 +753,64 @@ void Inter_v6::o6_playVmdOrMusic() { } bool Inter_v6::o6_loadCursor(OpFuncParams ¶ms) { - int16 width, height; - byte *dataBuf; - int16 id; - int8 index; + int16 id = load16(); - id = load16(); + if ((id == -1) || (id == -2)) { + char file[10]; - if (id == -1) { - byte str[10]; + if (id == -1) { + for (int i = 0; i < 9; i++) + file[i] = *_vm->_global->_inter_execPtr++; + } else + strncpy(file, GET_VAR_STR(load16()), 10); - for (int i = 0; i < 9; i++) - str[i] = *_vm->_global->_inter_execPtr++; + file[9] = '\0'; - str[9] = '\0'; + uint16 start = load16(); + int8 index = (int8) *_vm->_global->_inter_execPtr++; - uint16 var1 = load16(); - int8 var2 = *_vm->_global->_inter_execPtr++; + int vmdSlot = _vm->_vidPlayer->slotOpen(file); - warning("Urban Stub: loadCursor %d: \"%s\", %d, %d", id, str, var1, var2); + if (vmdSlot == -1) { + warning("Can't open video \"%s\" as cursor", file); + return false; + } - } else if (id == -2) { + int16 framesCount = _vm->_vidPlayer->getFramesCount(vmdSlot); - uint16 var1 = load16(); - uint16 var2 = load16(); - int8 var3 = *_vm->_global->_inter_execPtr++; + for (int i = 0; i < framesCount; i++) { + _vm->_vidPlayer->slotPlay(vmdSlot); + _vm->_vidPlayer->slotCopyFrame(vmdSlot, _vm->_draw->_cursorSprites->getVidMem(), + 0, 0, _vm->_draw->_cursorWidth, _vm->_draw->_cursorWidth, + (start + i) * _vm->_draw->_cursorWidth, 0, + _vm->_draw->_cursorSprites->getWidth()); + } - warning("Urban Stub: loadCursor %d: %d, %d, %d", id, var1, var2, var3); + _vm->_vidPlayer->slotClose(vmdSlot); - } else { - index = (int8) *_vm->_global->_inter_execPtr++; + _vm->_draw->_cursorAnimLow[index] = start; + _vm->_draw->_cursorAnimHigh[index] = framesCount + start - 1; + _vm->_draw->_cursorAnimDelays[index] = 10; - if ((index * _vm->_draw->_cursorWidth) >= _vm->_draw->_cursorSprites->getWidth()) - return false; + return false; + } - dataBuf = _vm->_game->loadTotResource(id, 0, &width, &height); + int8 index = (int8) *_vm->_global->_inter_execPtr++; - _vm->_video->fillRect(_vm->_draw->_cursorSprites, - index * _vm->_draw->_cursorWidth, 0, - index * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1, - _vm->_draw->_cursorHeight - 1, 0); + if ((index * _vm->_draw->_cursorWidth) >= _vm->_draw->_cursorSprites->getWidth()) + return false; - _vm->_video->drawPackedSprite(dataBuf, width, height, - index * _vm->_draw->_cursorWidth, 0, 0, _vm->_draw->_cursorSprites); - _vm->_draw->_cursorAnimLow[index] = 0; - } + int16 width, height; + byte *dataBuf = _vm->_game->loadTotResource(id, 0, &width, &height); + + _vm->_video->fillRect(_vm->_draw->_cursorSprites, + index * _vm->_draw->_cursorWidth, 0, + index * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1, + _vm->_draw->_cursorHeight - 1, 0); + + _vm->_video->drawPackedSprite(dataBuf, width, height, + index * _vm->_draw->_cursorWidth, 0, 0, _vm->_draw->_cursorSprites); + _vm->_draw->_cursorAnimLow[index] = 0; return false; } |