diff options
author | Vincent Hamm | 2002-03-05 23:05:55 +0000 |
---|---|---|
committer | Vincent Hamm | 2002-03-05 23:05:55 +0000 |
commit | 6600b48be93a44a97f85de7d223c52ffa1225bf2 (patch) | |
tree | ad757ab0fd7be24f1addbc472fef7aa1cbb5f2b6 | |
parent | 720c41a25f8a302985898846f23dff441197c782 (diff) | |
download | scummvm-rg350-6600b48be93a44a97f85de7d223c52ffa1225bf2.tar.gz scummvm-rg350-6600b48be93a44a97f85de7d223c52ffa1225bf2.tar.bz2 scummvm-rg350-6600b48be93a44a97f85de7d223c52ffa1225bf2.zip |
More v7 implementation
svn-id: r3656
-rw-r--r-- | actor.cpp | 162 | ||||
-rw-r--r-- | costume.cpp | 33 | ||||
-rw-r--r-- | gfx.cpp | 470 | ||||
-rw-r--r-- | object.cpp | 74 | ||||
-rw-r--r-- | resource.cpp | 7 |
5 files changed, 365 insertions, 381 deletions
@@ -815,99 +815,94 @@ void Scumm::processActors() { } while (ac++,--cnt); } -#if !defined(FULL_THROTTLE) void Scumm::drawActorCostume(Actor *a) { - CostumeRenderer cr; - - if (a==NULL || !a->needRedraw) - return; + if(!(_features & GF_AFTER_V7)) { + CostumeRenderer cr; + + if (a==NULL || !a->needRedraw) + return; - a->needRedraw = false; + a->needRedraw = false; - setupActorScale(a); + setupActorScale(a); - cr._actorX = a->x - virtscr->xstart; - cr._actorY = a->y - a->elevation; - cr._scaleX = a->scalex; - cr._scaleY = a->scaley; + cr._actorX = a->x - virtscr->xstart; + cr._actorY = a->y - a->elevation; + cr._scaleX = a->scalex; + cr._scaleY = a->scaley; - cr._outheight = virtscr->height; - cr._vm = this; + cr._outheight = virtscr->height; + cr._vm = this; - cr._zbuf = a->mask; - if (cr._zbuf > gdi._numZBuffer) - cr._zbuf = (byte)gdi._numZBuffer; - if (a->forceClip) - cr._zbuf = a->forceClip; + cr._zbuf = a->mask; + if (cr._zbuf > gdi._numZBuffer) + cr._zbuf = (byte)gdi._numZBuffer; + if (a->forceClip) + cr._zbuf = a->forceClip; - cr._shadow_table = _shadowPalette; + cr._shadow_table = _shadowPalette; - cost_setCostume(&cr, a->costume); - cost_setPalette(&cr, a->palette); - cost_setFacing(&cr, a); + cost_setCostume(&cr, a->costume); + cost_setPalette(&cr, a->palette); + cost_setFacing(&cr, a); - a->top = 0xFF; + a->top = 0xFF; - a->bottom = 0; - - /* if the actor is partially hidden, redraw it next frame */ - if(cr.drawCostume(a)&1) { - a->needBgReset = true; - a->needRedraw = true; - } -} -#else -void Scumm::drawActorCostume(Actor *a) { - AkosRenderer ar; - - if (a==NULL || !a->needRedraw) - return; - - a->needRedraw = false; + a->bottom = 0; - setupActorScale(a); - - ar.x = a->x - virtscr->xstart; - ar.y = a->y - a->elevation; - ar.scale_x = a->scalex; - ar.scale_y = a->scaley; - ar.clipping = a->forceClip; - if (ar.clipping == 100) { - ar.clipping = a->mask; - if (ar.clipping > (byte)gdi._numZBuffer) - ar.clipping = gdi._numZBuffer; - } - ar.charsetmask = _vars[VAR_CHARSET_MASK]!=0; - - ar.outptr = getResourceAddress(rtBuffer, 1) + virtscr->xstart; - ar.outwidth = virtscr->width; - ar.outheight = virtscr->height; + /* if the actor is partially hidden, redraw it next frame */ + if(cr.drawCostume(a)&1) { + a->needBgReset = true; + a->needRedraw = true; + } + } else { + AkosRenderer ar; - ar.shadow_mode = a->shadow_mode; - ar.shadow_table = _shadowPalette; + if (a==NULL || !a->needRedraw) + return; - akos_setCostume(&ar, a->costume); - akos_setPalette(&ar, a->palette); - akos_setFacing(&ar, a); + a->needRedraw = false; - ar.dirty_id = a->number; + setupActorScale(a); - ar.cd = &a->cost; + ar.x = a->x - virtscr->xstart; + ar.y = a->y - a->elevation; + ar.scale_x = a->scalex; + ar.scale_y = a->scaley; + ar.clipping = a->forceClip; + if (ar.clipping == 100) { + ar.clipping = a->mask; + if (ar.clipping > (byte)gdi._numZBuffer) + ar.clipping = gdi._numZBuffer; + } + ar.charsetmask = _vars[VAR_CHARSET_MASK]!=0; + + ar.outptr = getResourceAddress(rtBuffer, 1) + virtscr->xstart; + ar.outwidth = virtscr->width; + ar.outheight = virtscr->height; + + ar.shadow_mode = a->shadow_mode; + ar.shadow_table = _shadowPalette; + + akos_setCostume(&ar, a->costume); + akos_setPalette(&ar, a->palette); + akos_setFacing(&ar, a); + + ar.dirty_id = a->number; + + ar.cd = &a->cost; - ar.draw_top = a->top = 0x7fffffff; - ar.draw_bottom = a->bottom = 0; - akos_drawCostume(&ar); - a->top = ar.draw_top; - a->bottom = ar.draw_bottom; + ar.draw_top = a->top = 0x7fffffff; + ar.draw_bottom = a->bottom = 0; + akos_drawCostume(&ar); + a->top = ar.draw_top; + a->bottom = ar.draw_bottom; + } } -#endif void Scumm::actorAnimate(Actor *a) { -#if defined(FULL_THROTTLE) byte *akos; -#else LoadedCostume lc; -#endif if (a==NULL || a->costume == 0) return; @@ -916,16 +911,19 @@ void Scumm::actorAnimate(Actor *a) { if (a->animProgress >= a->animSpeed) { a->animProgress = 0; -#if defined(FULL_THROTTLE) - akos = getResourceAddress(rtCostume, a->costume); - assert(akos); - if (akos_increaseAnims(akos, a)) { -#else - loadCostume(&lc, a->costume); - if (cost_increaseAnims(&lc, a)) { -#endif - a->needRedraw = true; - a->needBgReset = true; + if (_features & GF_AFTER_V7) { + akos = getResourceAddress(rtCostume, a->costume); + assert(akos); + if (akos_increaseAnims(akos, a)) { + a->needRedraw = true; + a->needBgReset = true; + } + } else { + loadCostume(&lc, a->costume); + if (cost_increaseAnims(&lc, a)) { + a->needRedraw = true; + a->needBgReset = true; + } } } } diff --git a/costume.cpp b/costume.cpp index ae88294950..ebd32a499c 100644 --- a/costume.cpp +++ b/costume.cpp @@ -674,7 +674,7 @@ void CostumeRenderer::loadCostume(int id) { if (_vm->_features&GF_AFTER_V6) { _ptr += 8; - } else if(!(_features&GF_SMALL_HEADER)) { + } else if(!(_vm->_features&GF_SMALL_HEADER)) { _ptr += 2; } @@ -711,25 +711,26 @@ void Scumm::initActorCostumeData(Actor *a) { } byte CostumeRenderer::drawOneSlot(Actor *a, int slot) { -#if !defined(FULL_THROTTLE) - int i; - int code; - CostumeData *cd = &a->cost; - - if (cd->curpos[slot]==0xFFFF || cd->stopped & (1<<slot)) - return 0; - i = cd->curpos[slot]&0x7FFF; - _frameptr = _loaded._ptr + READ_LE_UINT16(_loaded._ptr + _loaded._numColors + slot*2 + 10); - code = _loaded._dataptr[i]&0x7F; + if(!(_vm->_features & GF_AFTER_V7)) { + int i; + int code; + CostumeData *cd = &a->cost; + + if (cd->curpos[slot]==0xFFFF || cd->stopped & (1<<slot)) + return 0; + + i = cd->curpos[slot]&0x7FFF; + _frameptr = _loaded._ptr + READ_LE_UINT16(_loaded._ptr + _loaded._numColors + slot*2 + 10); + code = _loaded._dataptr[i]&0x7F; - _srcptr = _loaded._ptr + READ_LE_UINT16(_frameptr + code*2); + _srcptr = _loaded._ptr + READ_LE_UINT16(_frameptr + code*2); - if (code != 0x7B) { - if ( !(_vm->_features & GF_OLD256) || code <0x79) - return mainRoutine(a, slot, code); + if (code != 0x7B) { + if ( !(_vm->_features & GF_OLD256) || code <0x79) + return mainRoutine(a, slot, code); + } } -#endif return 0; @@ -116,12 +116,8 @@ void Scumm::drawDirtyScreenParts() { if (_features & GF_OLD256) updateDirtyScreen(1); -#if defined(FULL_THROTTLE) - if (camera._last.x==camera._cur.x && - camera._last.y==camera._cur.y) { -#else - if (camera._last.x == camera._cur.x) { -#endif + if ((camera._last.x==camera._cur.x && + camera._last.y==camera._cur.y && (_features & GF_AFTER_V7)) || (camera._last.x == camera._cur.x)) { updateDirtyScreen(0); } else { vs = &virtscr[0]; @@ -228,109 +224,104 @@ void Scumm::setCursor(int cursor) { warning("setCursor(%d)", cursor); } -#if defined(FULL_THROTTLE) - void Scumm::setCameraAt(int pos_x, int pos_y) { - CameraData *cd = &camera; - Point old; - old = cd->_cur; + if(_features & GF_AFTER_V7) { + CameraData *cd = &camera; + Point old; - cd->_cur.x = pos_x; - cd->_cur.y = pos_y; + old = cd->_cur; - clampCameraPos(&cd->_cur); + cd->_cur.x = pos_x; + cd->_cur.y = pos_y; - cd->_dest = cd->_cur; + clampCameraPos(&cd->_cur); - assert(cd->_cur.x>=160 && cd->_cur.y>=100); + cd->_dest = cd->_cur; - if ((cd->_cur.x != old.x || cd->_cur.y != old.y) && _vars[VAR_SCROLL_SCRIPT]) { - _vars[VAR_CAMERA_POS_X] = cd->_cur.x; - _vars[VAR_CAMERA_POS_Y] = cd->_cur.y; - runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); - } -} -#else -void Scumm::setCameraAt(int pos_x, int pos_y) { - int t; - CameraData *cd = &camera; + assert(cd->_cur.x>=160 && cd->_cur.y>=100); - if (cd->_mode!=CM_FOLLOW_ACTOR || abs(pos_x - cd->_cur.x) > 160) { - cd->_cur.x = pos_x; - } - cd->_dest.x = pos_x; + if ((cd->_cur.x != old.x || cd->_cur.y != old.y) && _vars[VAR_SCROLL_SCRIPT]) { + _vars[VAR_CAMERA_POS_X] = cd->_cur.x; + _vars[VAR_CAMERA_POS_Y] = cd->_cur.y; + runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); + } + } else { + int t; + CameraData *cd = &camera; - t = _vars[VAR_CAMERA_MIN_X]; - if (cd->_cur.x < t) cd->_cur.x = t; + if (cd->_mode!=CM_FOLLOW_ACTOR || abs(pos_x - cd->_cur.x) > 160) { + cd->_cur.x = pos_x; + } + cd->_dest.x = pos_x; - t = _vars[VAR_CAMERA_MAX_X]; - if (cd->_cur.x > t) cd->_cur.x = t; + t = _vars[VAR_CAMERA_MIN_X]; + if (cd->_cur.x < t) cd->_cur.x = t; - if (_vars[VAR_SCROLL_SCRIPT]) { - _vars[VAR_CAMERA_POS_X] = cd->_cur.x; - runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); - } + t = _vars[VAR_CAMERA_MAX_X]; + if (cd->_cur.x > t) cd->_cur.x = t; - if (cd->_cur.x != cd->_last.x && charset._hasMask) - stopTalk(); -} -#endif - -#if defined(FULL_THROTTLE) -void Scumm::setCameraFollows(Actor *a) { - CameraData *cd = &camera; - byte oldfollow = cd->_follows; - int ax,ay; - - cd->_follows = a->number; + if (_vars[VAR_SCROLL_SCRIPT]) { + _vars[VAR_CAMERA_POS_X] = cd->_cur.x; + runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); + } - if (a->room != _currentRoom) { - startScene(a->room, 0, 0); + if (cd->_cur.x != cd->_last.x && charset._hasMask) + stopTalk(); } - - ax = abs(a->x - cd->_cur.x); - ay = abs(a->y - cd->_cur.y); - - if ( ax > _vars[VAR_CAMERA_THRESHOLD_X] || - ay > _vars[VAR_CAMERA_THRESHOLD_Y] || - ax > 160 || - ay > 100) { - setCameraAt(a->x, a->y); - } - - if (a->number != oldfollow) - runHook(0); } -#else void Scumm::setCameraFollows(Actor *a) { - int t,i; - CameraData *cd = &camera; - - cd->_mode = CM_FOLLOW_ACTOR; - cd->_follows = a->number; - - if (a->room != _currentRoom) { - startScene(a->room, 0, 0); - cd->_mode = CM_FOLLOW_ACTOR; - cd->_cur.x = a->x; - setCameraAt(cd->_cur.x, 0); - } + if(_features & GF_AFTER_V7) { + CameraData *cd = &camera; + byte oldfollow = cd->_follows; + int ax,ay; + + cd->_follows = a->number; - t = (a->x >> 3); + if (a->room != _currentRoom) { + startScene(a->room, 0, 0); + } + + ax = abs(a->x - cd->_cur.x); + ay = abs(a->y - cd->_cur.y); + + if ( ax > _vars[VAR_CAMERA_THRESHOLD_X] || + ay > _vars[VAR_CAMERA_THRESHOLD_Y] || + ax > 160 || + ay > 100) { + setCameraAt(a->x, a->y); + } - if (t-_screenStartStrip < cd->_leftTrigger || - t-_screenStartStrip > cd->_rightTrigger) - setCameraAt(a->x, 0); + if (a->number != oldfollow) + runHook(0); + } else { + int t,i; + CameraData *cd = &camera; - for (i=1,a=getFirstActor(); ++a,i<NUM_ACTORS; i++) { - if (a->room==_currentRoom) - a->needRedraw = true; + cd->_mode = CM_FOLLOW_ACTOR; + cd->_follows = a->number; + + if (a->room != _currentRoom) { + startScene(a->room, 0, 0); + cd->_mode = CM_FOLLOW_ACTOR; + cd->_cur.x = a->x; + setCameraAt(cd->_cur.x, 0); + } + + t = (a->x >> 3); + + if (t-_screenStartStrip < cd->_leftTrigger || + t-_screenStartStrip > cd->_rightTrigger) + setCameraAt(a->x, 0); + + for (i=1,a=getFirstActor(); ++a,i<NUM_ACTORS; i++) { + if (a->room==_currentRoom) + a->needRedraw = true; + } + runHook(0); } - runHook(0); } -#endif void Scumm::initBGBuffers() { byte *ptr; @@ -518,9 +509,8 @@ void Scumm::unkVirtScreen4(int a) { VirtScreen *vs; setDirtyRange(0, 0, 0); -#if !defined(FULL_THROTTLE) - camera._last.x = camera._cur.x; -#endif + if(!(_features & GF_AFTER_V7)) + camera._last.x = camera._cur.x; if (!_screenEffectFlag) return; _screenEffectFlag = false; @@ -1650,8 +1640,6 @@ void Gdi::clearUpperMask() { ); } -#if defined(FULL_THROTTLE) - void Scumm::clampCameraPos(Point *pt) { if (pt->x < _vars[VAR_CAMERA_MIN_X]) pt->x = _vars[VAR_CAMERA_MIN_X]; @@ -1668,166 +1656,164 @@ void Scumm::clampCameraPos(Point *pt) { void Scumm::moveCamera() { - CameraData *cd = &camera; - Point old = cd->_cur; - Actor *a; - - if (cd->_follows) { - a = derefActorSafe(cd->_follows, "moveCamera"); - if (abs(cd->_cur.x - a->x) > _vars[VAR_CAMERA_THRESHOLD_X] || - abs(cd->_cur.y - a->y) > _vars[VAR_CAMERA_THRESHOLD_Y]) { - cd->_movingToActor = true; - if (_vars[VAR_CAMERA_THRESHOLD_X] == 0) - cd->_cur.x = a->x; - if (_vars[VAR_CAMERA_THRESHOLD_Y] == 0) - cd->_cur.y = a->y; - clampCameraPos(&cd->_cur); + if(_features & GF_AFTER_V7) { + CameraData *cd = &camera; + Point old = cd->_cur; + Actor *a; + + if (cd->_follows) { + a = derefActorSafe(cd->_follows, "moveCamera"); + if (abs(cd->_cur.x - a->x) > _vars[VAR_CAMERA_THRESHOLD_X] || + abs(cd->_cur.y - a->y) > _vars[VAR_CAMERA_THRESHOLD_Y]) { + cd->_movingToActor = true; + if (_vars[VAR_CAMERA_THRESHOLD_X] == 0) + cd->_cur.x = a->x; + if (_vars[VAR_CAMERA_THRESHOLD_Y] == 0) + cd->_cur.y = a->y; + clampCameraPos(&cd->_cur); + } + } else { + cd->_movingToActor = false; } - } else { - cd->_movingToActor = false; - } - - if (cd->_movingToActor) { - cd->_dest.x = a->x; - cd->_dest.y = a->y; - } - - assert(cd->_cur.x>=160 && cd->_cur.y>=100); - - clampCameraPos(&cd->_dest); - - if (cd->_cur.x < cd->_dest.x) { - cd->_cur.x += _vars[VAR_CAMERA_SPEED_X]; - if (cd->_cur.x > cd->_dest.x) - cd->_cur.x = cd->_dest.x; - } - - if (cd->_cur.x > cd->_dest.x) { - cd->_cur.x -= _vars[VAR_CAMERA_SPEED_X]; - if (cd->_cur.x < cd->_dest.x) - cd->_cur.x = cd->_dest.x; - } - - if (cd->_cur.y < cd->_dest.y) { - cd->_cur.y += _vars[VAR_CAMERA_SPEED_Y]; - if (cd->_cur.y > cd->_dest.y) - cd->_cur.y = cd->_dest.y; - } - - if (cd->_cur.y > cd->_dest.y) { - cd->_cur.y -= _vars[VAR_CAMERA_SPEED_Y]; - if (cd->_cur.y < cd->_dest.y) - cd->_cur.y = cd->_dest.y; - } - if (cd->_cur.x == cd->_dest.x && - cd->_cur.y == cd->_dest.y) { - - cd->_movingToActor = false; - cd->_accel.x = cd->_accel.y = 0; - _vars[VAR_CAMERA_SPEED_X] = _vars[VAR_CAMERA_SPEED_Y] = 0; - } else { - - cd->_accel.x += _vars[VAR_CAMERA_ACCEL_X]; - cd->_accel.y += _vars[VAR_CAMERA_ACCEL_Y]; + if (cd->_movingToActor) { + cd->_dest.x = a->x; + cd->_dest.y = a->y; + } + + assert(cd->_cur.x>=160 && cd->_cur.y>=100); + + clampCameraPos(&cd->_dest); + + if (cd->_cur.x < cd->_dest.x) { + cd->_cur.x += _vars[VAR_CAMERA_SPEED_X]; + if (cd->_cur.x > cd->_dest.x) + cd->_cur.x = cd->_dest.x; + } + + if (cd->_cur.x > cd->_dest.x) { + cd->_cur.x -= _vars[VAR_CAMERA_SPEED_X]; + if (cd->_cur.x < cd->_dest.x) + cd->_cur.x = cd->_dest.x; + } + + if (cd->_cur.y < cd->_dest.y) { + cd->_cur.y += _vars[VAR_CAMERA_SPEED_Y]; + if (cd->_cur.y > cd->_dest.y) + cd->_cur.y = cd->_dest.y; + } + + if (cd->_cur.y > cd->_dest.y) { + cd->_cur.y -= _vars[VAR_CAMERA_SPEED_Y]; + if (cd->_cur.y < cd->_dest.y) + cd->_cur.y = cd->_dest.y; + } - _vars[VAR_CAMERA_SPEED_X] += cd->_accel.x / 100; - _vars[VAR_CAMERA_SPEED_Y] += cd->_accel.y / 100; - - if (_vars[VAR_CAMERA_SPEED_X] < 8) - _vars[VAR_CAMERA_SPEED_X] = 8; - - if (_vars[VAR_CAMERA_SPEED_Y] < 8) - _vars[VAR_CAMERA_SPEED_Y] = 8; - - } + if (cd->_cur.x == cd->_dest.x && + cd->_cur.y == cd->_dest.y) { + + cd->_movingToActor = false; + cd->_accel.x = cd->_accel.y = 0; + _vars[VAR_CAMERA_SPEED_X] = _vars[VAR_CAMERA_SPEED_Y] = 0; + } else { + + cd->_accel.x += _vars[VAR_CAMERA_ACCEL_X]; + cd->_accel.y += _vars[VAR_CAMERA_ACCEL_Y]; + + _vars[VAR_CAMERA_SPEED_X] += cd->_accel.x / 100; + _vars[VAR_CAMERA_SPEED_Y] += cd->_accel.y / 100; - cameraMoved(); - - if (cd->_cur.x != old.x || cd->_cur.y != old.y) { - _vars[VAR_CAMERA_POS_X] = cd->_cur.x; - _vars[VAR_CAMERA_POS_Y] = cd->_cur.y; - runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); - } -} - -#else -void Scumm::moveCamera() { - CameraData *cd = &camera; - int pos = cd->_cur.x; - int actorx, t; - Actor *a; - - cd->_cur.x &= 0xFFF8; - - if (cd->_cur.x < _vars[VAR_CAMERA_MIN_X]) { - if (_vars[VAR_CAMERA_FAST_X]) - cd->_cur.x = _vars[VAR_CAMERA_MIN_X]; - else - cd->_cur.x += 8; + if (_vars[VAR_CAMERA_SPEED_X] < 8) + _vars[VAR_CAMERA_SPEED_X] = 8; + + if (_vars[VAR_CAMERA_SPEED_Y] < 8) + _vars[VAR_CAMERA_SPEED_Y] = 8; + + } + cameraMoved(); + + if (cd->_cur.x != old.x || cd->_cur.y != old.y) { + _vars[VAR_CAMERA_POS_X] = cd->_cur.x; + _vars[VAR_CAMERA_POS_Y] = cd->_cur.y; + runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); + } + } else { + CameraData *cd = &camera; + int pos = cd->_cur.x; + int actorx, t; + Actor *a; + + cd->_cur.x &= 0xFFF8; + + if (cd->_cur.x < _vars[VAR_CAMERA_MIN_X]) { + if (_vars[VAR_CAMERA_FAST_X]) + cd->_cur.x = _vars[VAR_CAMERA_MIN_X]; + else + cd->_cur.x += 8; + cameraMoved(); return; - } - - if (cd->_cur.x > _vars[VAR_CAMERA_MAX_X]) { - if (_vars[VAR_CAMERA_FAST_X]) - cd->_cur.x = _vars[VAR_CAMERA_MAX_X]; - else - cd->_cur.x-=8; + } + + if (cd->_cur.x > _vars[VAR_CAMERA_MAX_X]) { + if (_vars[VAR_CAMERA_FAST_X]) + cd->_cur.x = _vars[VAR_CAMERA_MAX_X]; + else + cd->_cur.x-=8; + cameraMoved(); + return; + } + + if (cd->_mode==CM_FOLLOW_ACTOR) { + a = derefActorSafe(cd->_follows, "moveCamera"); + + actorx = a->x; + t = (actorx>>3) - _screenStartStrip; + + if (t < cd->_leftTrigger || t > cd->_rightTrigger) { + if (_vars[VAR_CAMERA_FAST_X]) { + if (t > 35) + cd->_dest.x = actorx + 80; + if (t < 5) + cd->_dest.x = actorx - 80; + } else + cd->_movingToActor = 1; + } + } + + if (cd->_movingToActor) { + a = derefActorSafe(cd->_follows, "moveCamera(2)"); + cd->_dest.x = a->x; + } + + if (cd->_dest.x < _vars[VAR_CAMERA_MIN_X]) + cd->_dest.x = _vars[VAR_CAMERA_MIN_X]; + + if (cd->_dest.x > _vars[VAR_CAMERA_MAX_X]) + cd->_dest.x = _vars[VAR_CAMERA_MAX_X]; + + if (_vars[VAR_CAMERA_FAST_X]) { + cd->_cur.x = cd->_dest.x; + } else { + if (cd->_cur.x < cd->_dest.x) + cd->_cur.x+=8; + if (cd->_cur.x > cd->_dest.x) + cd->_cur.x-=8; + } + + /* a is set a bit above */ + if (cd->_movingToActor && cd->_cur.x>>3 == a->x>>3) { + cd->_movingToActor = 0; + } + cameraMoved(); - return; - } - - if (cd->_mode==CM_FOLLOW_ACTOR) { - a = derefActorSafe(cd->_follows, "moveCamera"); - - actorx = a->x; - t = (actorx>>3) - _screenStartStrip; - - if (t < cd->_leftTrigger || t > cd->_rightTrigger) { - if (_vars[VAR_CAMERA_FAST_X]) { - if (t > 35) - cd->_dest.x = actorx + 80; - if (t < 5) - cd->_dest.x = actorx - 80; - } else - cd->_movingToActor = 1; + + if (pos != cd->_cur.x && _vars[VAR_SCROLL_SCRIPT]) { + _vars[VAR_CAMERA_POS_X] = cd->_cur.x; + runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); } } - - if (cd->_movingToActor) { - a = derefActorSafe(cd->_follows, "moveCamera(2)"); - cd->_dest.x = a->x; - } - - if (cd->_dest.x < _vars[VAR_CAMERA_MIN_X]) - cd->_dest.x = _vars[VAR_CAMERA_MIN_X]; - - if (cd->_dest.x > _vars[VAR_CAMERA_MAX_X]) - cd->_dest.x = _vars[VAR_CAMERA_MAX_X]; - - if (_vars[VAR_CAMERA_FAST_X]) { - cd->_cur.x = cd->_dest.x; - } else { - if (cd->_cur.x < cd->_dest.x) - cd->_cur.x+=8; - if (cd->_cur.x > cd->_dest.x) - cd->_cur.x-=8; - } - - /* a is set a bit above */ - if (cd->_movingToActor && cd->_cur.x>>3 == a->x>>3) { - cd->_movingToActor = 0; - } - - cameraMoved(); - - if (pos != cd->_cur.x && _vars[VAR_SCROLL_SCRIPT]) { - _vars[VAR_CAMERA_POS_X] = cd->_cur.x; - runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0); - } } -#endif #if defined(FULL_THROTTLE) void Scumm::cameraMoved() { diff --git a/object.cpp b/object.cpp index 2cb64af9a3..cbbbc71d07 100644 --- a/object.cpp +++ b/object.cpp @@ -532,46 +532,46 @@ void Scumm::setupRoomObject(ObjectData *od, byte *room) { else od->obj_nr = READ_LE_UINT16(&(cdhd->v5.obj_id)); -#if !defined(FULL_THROTTLE) - if (_features & GF_AFTER_V6) { - od->width = READ_LE_UINT16(&cdhd->v6.w); - od->height = READ_LE_UINT16(&cdhd->v6.h); - od->x_pos = ((int16)READ_LE_UINT16(&cdhd->v6.x)); - od->y_pos = ((int16)READ_LE_UINT16(&cdhd->v6.y)); - if (cdhd->v6.flags == 0x80) { - od->parentstate = 1; + if(!(_features & GF_AFTER_V7)) { + if (_features & GF_AFTER_V6) { + od->width = READ_LE_UINT16(&cdhd->v6.w); + od->height = READ_LE_UINT16(&cdhd->v6.h); + od->x_pos = ((int16)READ_LE_UINT16(&cdhd->v6.x)); + od->y_pos = ((int16)READ_LE_UINT16(&cdhd->v6.y)); + if (cdhd->v6.flags == 0x80) { + od->parentstate = 1; + } else { + od->parentstate = (cdhd->v6.flags&0xF); + } + od->parent = cdhd->v6.parent; + od->actordir = cdhd->v6.actordir; } else { - od->parentstate = (cdhd->v6.flags&0xF); + od->width = cdhd->v5.w<<3; + od->height = cdhd->v5.h<<3; + od->x_pos = cdhd->v5.x<<3; + od->y_pos = cdhd->v5.y<<3; + if (cdhd->v5.flags == 0x80) { + od->parentstate = 1; + } else { + od->parentstate = (cdhd->v5.flags&0xF); + } + od->parent = cdhd->v5.parent; + od->walk_x = READ_LE_UINT16(&cdhd->v5.walk_x); + od->walk_y = READ_LE_UINT16(&cdhd->v5.walk_y); + od->actordir = cdhd->v5.actordir; } - od->parent = cdhd->v6.parent; - od->actordir = cdhd->v6.actordir; } else { - od->width = cdhd->v5.w<<3; - od->height = cdhd->v5.h<<3; - od->x_pos = cdhd->v5.x<<3; - od->y_pos = cdhd->v5.y<<3; - if (cdhd->v5.flags == 0x80) { - od->parentstate = 1; - } else { - od->parentstate = (cdhd->v5.flags&0xF); - } - od->parent = cdhd->v5.parent; - od->walk_x = READ_LE_UINT16(&cdhd->v5.walk_x); - od->walk_y = READ_LE_UINT16(&cdhd->v5.walk_y); - od->actordir = cdhd->v5.actordir; - } -#else - od->parent = cdhd->parent; - od->parentstate = cdhd->parentstate; + od->parent = cdhd->v7.parent; + od->parentstate = cdhd->v7.parentstate; - imhd = (ImageHeader*)findResourceData(MKID('IMHD'), room + od->offs_obim_to_room); - od->x_pos = imhd->x_pos; - od->y_pos = imhd->y_pos; - od->width = imhd->width; - od->height = imhd->height; - od->actordir = imhd->actordir; + imhd = (ImageHeader*)findResourceData(MKID('IMHD'), room + od->offs_obim_to_room); + od->x_pos = imhd->v7.x_pos; + od->y_pos = imhd->v7.y_pos; + od->width = imhd->v7.width; + od->height = imhd->v7.height; + od->actordir = imhd->v7.actordir; -#endif + } od->fl_object_index = 0; } @@ -1049,8 +1049,8 @@ void Scumm::setCursorImg(uint img, uint room, uint imgindex) { w = READ_LE_UINT16(&foir.cdhd->v6.w)>>3; h = READ_LE_UINT16(&foir.cdhd->v6.h)>>3; #else - w = READ_LE_UINT16(&foir.imhd->width)>>3; - h = READ_LE_UINT16(&foir.imhd->height)>>3; + w = READ_LE_UINT16(&foir.imhd->v7.width)>>3; + h = READ_LE_UINT16(&foir.imhd->v7.height)>>3; #endif dataptr = findResource(IMxx_tags[imgindex],foir.obim); diff --git a/resource.cpp b/resource.cpp index c26b7bebcf..38e1363474 100644 --- a/resource.cpp +++ b/resource.cpp @@ -564,10 +564,9 @@ void Scumm::ensureResourceLoaded(int type, int i) { loadResource(type, i); -#if !defined(FULL_THROTTLE) - if (type==rtRoom && i==_roomResource) - _vars[VAR_ROOM_FLAG] = 1; -#endif + if(!(_features & GF_AFTER_V7)) + if (type==rtRoom && i==_roomResource) + _vars[VAR_ROOM_FLAG] = 1; } int Scumm::loadResource(int type, int index) { |