[Scummvm-cvs-logs] CVS: scummvm actor.cpp,1.27,1.28 costume.cpp,1.17,1.18 gfx.cpp,1.36,1.37 object.cpp,1.31,1.32 resource.cpp,1.44,1.45

Vincent Hamm yazoo at users.sourceforge.net
Tue Mar 5 15:06:15 CET 2002


Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv1220

Modified Files:
	actor.cpp costume.cpp gfx.cpp object.cpp resource.cpp 
Log Message:
More v7 implementation

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/actor.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** actor.cpp	5 Mar 2002 20:13:47 -0000	1.27
--- actor.cpp	5 Mar 2002 23:05:55 -0000	1.28
***************
*** 816,912 ****
  }
  
- #if !defined(FULL_THROTTLE)
  void Scumm::drawActorCostume(Actor *a) {
! 	CostumeRenderer cr;
! 
! 	if (a==NULL || !a->needRedraw)
! 		return;
  
! 	a->needRedraw = false;
  
! 	setupActorScale(a);
  
! 	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._zbuf = a->mask;
! 	if (cr._zbuf > gdi._numZBuffer)
! 		cr._zbuf = (byte)gdi._numZBuffer;
! 	if (a->forceClip)
! 		cr._zbuf = a->forceClip;
  	
! 	cr._shadow_table = _shadowPalette;
  
! 	cost_setCostume(&cr, a->costume);
! 	cost_setPalette(&cr, a->palette);
! 	cost_setFacing(&cr, a);
  
! 	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;
! 
! 	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;
  
! 	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;
  }
- #endif
  
  void Scumm::actorAnimate(Actor *a) {
- #if defined(FULL_THROTTLE)
  	byte *akos;
- #else
  	LoadedCostume lc;
- #endif
  
  	if (a==NULL || a->costume == 0)
--- 816,907 ----
  }
  
  void Scumm::drawActorCostume(Actor *a) {
! 	if(!(_features & GF_AFTER_V7)) {
! 		CostumeRenderer cr;
! 	
! 		if (a==NULL || !a->needRedraw)
! 			return;
  
! 		a->needRedraw = false;
  
! 		setupActorScale(a);
  
! 		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._zbuf = a->mask;
! 		if (cr._zbuf > gdi._numZBuffer)
! 			cr._zbuf = (byte)gdi._numZBuffer;
! 		if (a->forceClip)
! 			cr._zbuf = a->forceClip;
  	
! 		cr._shadow_table = _shadowPalette;
  
! 		cost_setCostume(&cr, a->costume);
! 		cost_setPalette(&cr, a->palette);
! 		cost_setFacing(&cr, a);
  
! 		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 {
! 		AkosRenderer ar;
  
! 		if (a==NULL || !a->needRedraw)
! 			return;
  
! 		a->needRedraw = false;
  
! 		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;
! 	
! 		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;
! 	}
  }
  
  void Scumm::actorAnimate(Actor *a) {
  	byte *akos;
  	LoadedCostume lc;
  
  	if (a==NULL || a->costume == 0)
***************
*** 917,930 ****
  		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;
  		}
  	}
--- 912,928 ----
  		a->animProgress = 0;
  
! 		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;
! 			}
  		}
  	}

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/costume.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** costume.cpp	21 Feb 2002 23:59:07 -0000	1.17
--- costume.cpp	5 Mar 2002 23:05:55 -0000	1.18
***************
*** 675,679 ****
  	if (_vm->_features&GF_AFTER_V6) {
  		_ptr += 8;
!         } else if(!(_features&GF_SMALL_HEADER)) {
  		_ptr += 2;
  	}
--- 675,679 ----
  	if (_vm->_features&GF_AFTER_V6) {
  		_ptr += 8;
!         } else if(!(_vm->_features&GF_SMALL_HEADER)) {
  		_ptr += 2;
  	}
***************
*** 712,734 ****
  
  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;
  
! 	_srcptr = _loaded._ptr + READ_LE_UINT16(_frameptr + code*2);
  
! 	if (code != 0x7B) {
! 		if ( !(_vm->_features & GF_OLD256) || code <0x79)
! 			return mainRoutine(a, slot, code);
  	}
- #endif
  
  	return 0;
--- 712,735 ----
  
  byte CostumeRenderer::drawOneSlot(Actor *a, int slot) {
  	
! 	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);
  
! 		if (code != 0x7B) {
! 			if ( !(_vm->_features & GF_OLD256) || code <0x79)
! 				return mainRoutine(a, slot, code);
! 		}
  	}
  
  	return 0;

Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gfx.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -C2 -d -r1.36 -r1.37
*** gfx.cpp	24 Feb 2002 17:25:02 -0000	1.36
--- gfx.cpp	5 Mar 2002 23:05:55 -0000	1.37
***************
*** 117,126 ****
  		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
  		updateDirtyScreen(0);
  	} else {
--- 117,122 ----
  		updateDirtyScreen(1);
  
! 	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 {
***************
*** 229,335 ****
  }
  
- #if defined(FULL_THROTTLE)
- 
  void Scumm::setCameraAt(int pos_x, int pos_y) {
- 	CameraData *cd = &camera;
- 	Point old;
- 
- 	old = cd->_cur;
- 
- 	cd->_cur.x = pos_x;
- 	cd->_cur.y = pos_y;
- 
- 	clampCameraPos(&cd->_cur);
  
! 	cd->_dest = cd->_cur;
! 
! 	assert(cd->_cur.x>=160 && cd->_cur.y>=100);
  
! 	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;
  
- 	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_MIN_X];
! 	if (cd->_cur.x < t) cd->_cur.x = t;
  
! 	t = _vars[VAR_CAMERA_MAX_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);
! 	}
  
! 	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 (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 (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);
! 	}
  
! 	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);
  }
- #endif
  
  void Scumm::initBGBuffers() {
--- 225,326 ----
  }
  
  void Scumm::setCameraAt(int pos_x, int pos_y) {
  
! 	if(_features & GF_AFTER_V7) {
! 		CameraData *cd = &camera;
! 		Point old;
  
! 		old = cd->_cur;
  
  		cd->_cur.x = pos_x;
! 		cd->_cur.y = pos_y;
  
! 		clampCameraPos(&cd->_cur);
  
! 		cd->_dest = cd->_cur;
  
! 		assert(cd->_cur.x>=160 && cd->_cur.y>=100);
  
! 		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;
  
! 		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_MIN_X];
! 		if (cd->_cur.x < t) cd->_cur.x = t;
  
! 		t = _vars[VAR_CAMERA_MAX_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);
! 		}
  
! 		if (cd->_cur.x != cd->_last.x && charset._hasMask)
! 			stopTalk();
! 	}
  }
  
  void Scumm::setCameraFollows(Actor *a) {
! 	if(_features & GF_AFTER_V7) {
! 		CameraData *cd = &camera;
! 		byte oldfollow = cd->_follows;
! 		int ax,ay;
! 	
! 		cd->_follows = a->number;
  
! 		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 (a->number != oldfollow)
! 			runHook(0);
! 	} else {
! 		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);
! 		}
! 	
! 		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);
  	}
  }
  
  void Scumm::initBGBuffers() {
***************
*** 519,525 ****
  
  	setDirtyRange(0, 0, 0);
! #if !defined(FULL_THROTTLE)
! 	camera._last.x = camera._cur.x;
! #endif
  	if (!_screenEffectFlag)
  		return;
--- 510,515 ----
  
  	setDirtyRange(0, 0, 0);
! 	if(!(_features & GF_AFTER_V7))
! 		camera._last.x = camera._cur.x;
  	if (!_screenEffectFlag)
  		return;
***************
*** 1651,1656 ****
  }
  
- #if defined(FULL_THROTTLE)
- 
  void Scumm::clampCameraPos(Point *pt) {
  	if (pt->x < _vars[VAR_CAMERA_MIN_X])
--- 1641,1644 ----
***************
*** 1669,1832 ****
  
  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);
  		}
- 	} 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];
  		
! 		_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;
! 
! 	}
  	
! 	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;
  		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;
  		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();
- 
- 	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)
--- 1657,1818 ----
  
  void Scumm::moveCamera() {
! 	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;
  		}
  	
! 		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];
! 			
! 			_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;
! 	
! 		}
! 		
  		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;
! 			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();
! 	
! 		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 defined(FULL_THROTTLE)

Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/object.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -C2 -d -r1.31 -r1.32
*** object.cpp	5 Mar 2002 21:03:31 -0000	1.31
--- object.cpp	5 Mar 2002 23:05:55 -0000	1.32
***************
*** 533,576 ****
  		        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;
  		} else {
! 			od->parentstate = (cdhd->v6.flags&0xF);
  		}
- 		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;
  
! 	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;
  
! #endif
  	od->fl_object_index = 0;
  }
--- 533,576 ----
  		        od->obj_nr = READ_LE_UINT16(&(cdhd->v5.obj_id));
  	
! 	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->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->v7.parent;
! 		od->parentstate = cdhd->v7.parentstate;
  
! 		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;
  
! 	}
  	od->fl_object_index = 0;
  }
***************
*** 1050,1055 ****
  	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;
  #endif
  
--- 1050,1055 ----
  	h = READ_LE_UINT16(&foir.cdhd->v6.h)>>3;
  #else
! 	w = READ_LE_UINT16(&foir.imhd->v7.width)>>3;
! 	h = READ_LE_UINT16(&foir.imhd->v7.height)>>3;
  #endif
  

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/resource.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -C2 -d -r1.44 -r1.45
*** resource.cpp	5 Mar 2002 22:23:48 -0000	1.44
--- resource.cpp	5 Mar 2002 23:05:55 -0000	1.45
***************
*** 565,572 ****
  	loadResource(type, i);
  
! #if !defined(FULL_THROTTLE)
! 	if (type==rtRoom && i==_roomResource)
! 		_vars[VAR_ROOM_FLAG] = 1;
! #endif
  }
  
--- 565,571 ----
  	loadResource(type, i);
  
! 	if(!(_features & GF_AFTER_V7))
! 		if (type==rtRoom && i==_roomResource)
! 			_vars[VAR_ROOM_FLAG] = 1;
  }
  





More information about the Scummvm-git-logs mailing list