[Scummvm-cvs-logs] scummvm master -> 0745e61e70ae37a9c10448ad2c96d9e632c8ee58

sev- sev at scummvm.org
Sat Jan 4 14:17:46 CET 2014


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
37123c1633 FULLPIPE: Complete MovGraph2::genMovement()
a230368de5 FULLPIPE: More code to ExCommand class
0745e61e70 FULLPIPE: Implement ExCommand2 methods


Commit: 37123c16333d6aa9c3dadc3bda4a6a11371a11b1
    https://github.com/scummvm/scummvm/commit/37123c16333d6aa9c3dadc3bda4a6a11371a11b1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T04:23:55-08:00

Commit Message:
FULLPIPE: Complete MovGraph2::genMovement()

Changed paths:
    engines/fullpipe/motion.cpp
    engines/fullpipe/motion.h
    engines/fullpipe/statics.cpp
    engines/fullpipe/statics.h



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 0e11d66..570ab67 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -1380,21 +1380,20 @@ int MovGraph2::findLink(Common::Array<MovGraphLink *> *linkList, int idx, Common
 }
 
 MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
-#if 0
 	int mx1 = 0;
 	int my1 = 0;
 
-	if (!(info->_flags & 2)) {
-		mx1 = _items2[info->field_0]->_subItems[info->subIndex].walk[0].mx;
-		my1 = _items2[info->field_0]->_subItems[info->subIndex].walk[0].my;
+	if (!(info->flags & 2)) {
+		mx1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mx;
+		my1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._my;
 	}
 
 	int mx2 = 0;
 	int my2 = 0;
 
-	if (!(info->_flags & 4)) {
-		mx2 = _items2[info->field_0]->_subItems[info->subIndex].walk[2].mx;
-		my2 = _items2[info->field_0]->_subItems[info->subIndex].walk[2].my;
+	if (!(info->flags & 4)) {
+		mx2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mx;
+		my2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._my;
 	}
 
 	Common::Point point;
@@ -1402,8 +1401,9 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int y = info->pt2.y - info->pt1.y - my2 - my1;
 	int x = info->pt2.x - info->pt1.x - mx2 - mx1;
 	int a2;
+	int mgmLen;
 
-	_mgm->calcLength(&point, _items2[info->field_0].subItems[info->subIndex].walk[1].mov, x, y, &mgmLen, &a2, info->_flags & 1);
+	_mgm.calcLength(&point, _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov, x, y, &mgmLen, &a2, info->flags & 1);
 
 	int x1 = point.x;
 	int y1 = point.y;
@@ -1411,7 +1411,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	if (!(info->flags & 1)) {
 		if (info->subIndex == 1 || info->subIndex == 0) {
 			a2 = -1;
-			x1 = mgmLen * _items2[info->field_0].subItems[info->subIndex].walk[1].mx;
+			x1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mx;
 			x = x1;
 			info->pt2.x = x1 + info->pt1.x + mx1 + mx2;
 		}
@@ -1420,7 +1420,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	if (!(info->flags & 1)) {
 		if (info->subIndex == 2 || info->subIndex == 3) {
 			a2 = -1;
-			y1 = mgmLen * _items2[info->field_0].subItems[info->subIndex].walk[1].my;
+			y1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._my;
 			y = y1;
 			info->pt2.y = y1 + info->pt1.y + my1 + my2;
 		}
@@ -1430,23 +1430,23 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int cntY = 0;
 
 	if (!(info->flags & 2)) {
-		cntX = Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[0].mov, -1, 1);
-		cntY = Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[0].mov, -1, 2);
+		cntX = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 1);
+		cntY = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	if (mgmLen > 1) {
-		cntX += (mgmLen - 1) * Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 1);
-		cntY += (mgmLen - 1) * Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 2);
+		cntX += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 1);
+		cntY += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	if (mgmLen > 0) {
-		cntX += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 1);
-		cntY += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 2);
+		cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 1);
+		cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 2);
 	}
 
 	if (!(info->flags & 4)) {
-		cntX += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 1);
-		cntY += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 2);
+		cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 1);
+		cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	int dx1 = x - x1;
@@ -1465,7 +1465,8 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int v34 = dx1 - cntX * x1;
 	int v35 = dy1 - cntY * y1;
 	int v72;
-	y2 = v34;
+	int x2;
+	int y2 = v34;
 
 	if (v34)
 		x2 = v34 / abs(v34);
@@ -1481,9 +1482,9 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 	if (info->flags & 2) {
 		ex = new ExCommand(
-							_items2[info->field_0].objectId,
+							_items2[info->field_0]->_objectId,
 							5,
-							_items2[info->field_0].subItems[info->subIndex].walk[1].movementId,
+							_items2[info->field_0]->_subItems[info->subIndex]._walk[1]._movementId,
 							info->pt1.x,
 							info->pt1.y,
 							0,
@@ -1494,14 +1495,14 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 		ex->_field_14 = info->distance1;
 
-		ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 		ex->_field_24 = 1;
 		ex->_excFlags |= 2;
 	} else {
 		ex = new ExCommand(
-							 _items2[info->field_0].objectId,
+							 _items2[info->field_0]->_objectId,
 							 5,
-							 _items2[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].movementId,
+							 _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._movementId,
 							 info->pt1.x,
 							 info->pt1.y,
 							 0,
@@ -1512,26 +1513,26 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 		ex->_field_14 = info->distance1;
 
-		ex->_keyCode = _items2[info->field_0].obj->_oKeyCode;
+		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 		ex->_field_24 = 1;
 		ex->_excFlags |= 2;
 		mq->addExCommandToEnd(ex);
 
-		ex = _mgm->buildExCommand2(
-								  _items2[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].mov,
-								  _items2[info->field_0].objectId,
+		ex = _mgm.buildExCommand2(
+								  _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov,
+								  _items2[info->field_0]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  -1);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0]->_okeyCode;
+		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 	}
 
 	mq->addExCommandToEnd(ex);
 
-	for (i = 0; i < mgmLen; ++i) {
+	for (int i = 0; i < mgmLen; ++i) {
 		int par;
 
 		if (i == mgmLen - 1)
@@ -1539,49 +1540,44 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 		else
 			par = -1;
 
-		ex = _mgm->buildExCommand2(
-								  _items2[info->field_0].subItems[info->subIndex].walk[1].mov,
-								  _items2[info->field_0].objectId,
+		ex = _mgm.buildExCommand2(
+								  _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov,
+								  _items2[info->field_0]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  par);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 		mq->addExCommandToEnd(ex);
 	}
 
 	if (!(info->flags & 4)) {
-		ex = _mgm->buildExCommand2(
-								  _items2[info->field_0].subItems[info->subIndex].walk[2].mov,
-								  _items2[info->field_0].objectId,
+		ex = _mgm.buildExCommand2(
+								  _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov,
+								  _items2[info->field_0]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  -1);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 
 		mq->addExCommandToEnd(ex);
 	}
 
-    ex = new ExCommand(_items2[info->field_0].objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
+    ex = new ExCommand(_items2[info->field_0]->_objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
 	ex->_field_14 = info->distance2;
 
-	ex->_keyCode = _items[info->field_0].obj->_okeyCode;
+	ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
 	ex->_field_24 = 0;
 	ex->_excFlags |= 2;
 
 	mq->addExCommandToEnd(ex);
 
 	return mq;
-#endif
-
-	warning("STUB: MovGraph2::genMovement()");
-
-	return 0;
 }
 
 MovGraphLink *MovGraph2::findLink1(int x, int y, int idx, int fuzzyMatch) {
@@ -1904,6 +1900,20 @@ int MGM::recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop) {
 	return 0;
 }
 
+Common::Point *MGM::calcLength(Common::Point *point, Movement *mov, int x, int y, int *x1, int *y1, int flag) {
+	warning("STUB: MGM::calcLength()");
+
+	return point;
+}
+
+ExCommand2 *MGM::buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len) {
+	ExCommand2 *ex2 = new ExCommand2;
+
+	warning("STUB: MGM::buildExCommand2()");
+
+	return ex2;
+}
+
 MovGraphLink::MovGraphLink() {
 	_distance = 0;
 	_angle = 0;
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 1e813ee..2d39a27 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -30,6 +30,7 @@ class Movement;
 class MctlConnectionPoint;
 class MovGraphLink;
 class MessageQueue;
+class ExCommand2;
 
 int startWalkTo(int objId, int objKey, int x, int y, int a5);
 int doSomeAnimation(int objId, int objKey, int a3);
@@ -174,6 +175,8 @@ public:
 	int getStaticsIndexById(int idx, int16 id);
 	void clearMovements2(int idx);
 	int recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop);
+	Common::Point *calcLength(Common::Point *point, Movement *mov, int x, int y, int *x1, int *y1, int flag);
+	ExCommand2 *buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len);
 };
 
 struct MctlLadderMovementVars {
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp
index 2af9cff..e7bc2b9 100644
--- a/engines/fullpipe/statics.cpp
+++ b/engines/fullpipe/statics.cpp
@@ -1528,6 +1528,12 @@ int Movement::calcDuration() {
 	return res;
 }
 
+int Movement::countPhasesWithFlag(int maxidx, int flag) {
+	warning("STUB: Movement::countPhasesWithFlag()");
+
+	return 0;
+}
+
 void Movement::setDynamicPhaseIndex(int index) {
 	debug(7, "Movement::setDynamicPhaseIndex(%d)", index);
 	while (_currDynamicPhaseIndex < index)
diff --git a/engines/fullpipe/statics.h b/engines/fullpipe/statics.h
index c8537df..0e2e6db 100644
--- a/engines/fullpipe/statics.h
+++ b/engines/fullpipe/statics.h
@@ -153,6 +153,7 @@ class Movement : public GameObject {
 	DynamicPhase *getDynamicPhaseByIndex(int idx);
 
 	int calcDuration();
+	int countPhasesWithFlag(int maxidx, int flag);
 
 	void removeFirstPhase();
 	bool gotoNextFrame(void (*_callback1)(int, Common::Point *point, int, int), void (*callback2)(int *));


Commit: a230368de597e291ac4321fc77e3a6b5ffaafc12
    https://github.com/scummvm/scummvm/commit/a230368de597e291ac4321fc77e3a6b5ffaafc12
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T05:01:27-08:00

Commit Message:
FULLPIPE: More code to ExCommand class

Changed paths:
    engines/fullpipe/messages.cpp
    engines/fullpipe/messages.h
    engines/fullpipe/motion.cpp
    engines/fullpipe/statics.cpp
    engines/fullpipe/utils.h



diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index cdb457e..7db168d 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -41,7 +41,10 @@ ExCommand::ExCommand(ExCommand *src) : Message(src) {
 	_messageNum = src->_messageNum;
 	_excFlags = src->_excFlags;
 	_parId = src->_parId;
+}
 
+ExCommand *ExCommand::createClone(ExCommand *src) {
+	return new ExCommand(src);
 }
 
 ExCommand::ExCommand(int16 parentId, int messageKind, int messageNum, int x, int y, int a7, int a8, int sceneClickX, int sceneClickY, int a11) : 
@@ -78,6 +81,8 @@ bool ExCommand::load(MfcArchive &file) {
 		_parId = file.readUint32LE();
 	}
 
+	_objtype = kObjTypeExCommand;
+
 	return true;
 }
 
@@ -120,6 +125,50 @@ void ExCommand::handle() {
 	}
 }
 
+void ExCommand::setf3c(int val) {
+	if (val != -1)
+		_field_3C = val;
+
+	_field_34 = 1;
+}
+
+void ExCommand::firef34() {
+	if (_field_34) {
+		if (_field_3C >= _keyCode) {
+			_field_34 = 0;
+
+			sendMessage();
+
+			if (!_field_30 )
+				setf3c(_field_2C);
+		}
+	}
+}
+
+ExCommand2::ExCommand2(int messageKind, int parentId, const Common::Point *points, int pointsSize) : ExCommand(parentId, messageKind, 0, 0, 0, 0, 1, 0, 0, 0) {
+	_points = 0;
+	_objtype = kObjTypeExCommand2;
+
+	warning("STUB: ExCommand2::ExCommand2()");
+}
+
+ExCommand2::ExCommand2(ExCommand2 *src) : ExCommand(src) {
+	warning("STUB: ExCommand2::ExCommand2()");
+}
+
+ExCommand2::~ExCommand2() {
+	free(_points);
+}
+
+ExCommand *ExCommand2::createClone(ExCommand *src) {
+	if (_objtype == kObjTypeExCommand)
+		return new ExCommand(src);
+	else if (_objtype == kObjTypeExCommand2)
+		return new ExCommand2((ExCommand2 *)src);
+
+	error("ExCommand2::createClone(): Wrong object type: %d", _objtype);
+}
+
 Message::Message() {
 	_messageKind = 0;
 	_parentId = 0;		
diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h
index 30ded96..d03cb77 100644
--- a/engines/fullpipe/messages.h
+++ b/engines/fullpipe/messages.h
@@ -57,7 +57,6 @@ class Message : public CObject {
 
 class ExCommand : public Message {
  public:
-
 	int _messageNum;
 	int _field_3C;
 	int _excFlags;
@@ -70,16 +69,27 @@ class ExCommand : public Message {
 
 	virtual bool load(MfcArchive &file);
 
+	virtual ExCommand *createClone(ExCommand *src);
+
 	bool handleMessage();
 	void sendMessage();
 	void postMessage();
 	void handle();
+
+	void firef34();
+	void setf3c(int val);
 };
 
 class ExCommand2 : public ExCommand {
  public:
 	Common::Point **_points;
 	int _pointsSize;
+
+	ExCommand2(int messageKind, int parentId, const Common::Point *points, int pointsSize);
+	ExCommand2(ExCommand2 *src);
+	virtual ~ExCommand2();
+
+	virtual ExCommand *createClone(ExCommand *src);
 };
 
 class ObjstateCommand : public CObject {
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 570ab67..960ff45 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -1907,7 +1907,7 @@ Common::Point *MGM::calcLength(Common::Point *point, Movement *mov, int x, int y
 }
 
 ExCommand2 *MGM::buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len) {
-	ExCommand2 *ex2 = new ExCommand2;
+	ExCommand2 *ex2 = new ExCommand2(20, objId, 0, 0);
 
 	warning("STUB: MGM::buildExCommand2()");
 
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp
index e7bc2b9..1c3d11a 100644
--- a/engines/fullpipe/statics.cpp
+++ b/engines/fullpipe/statics.cpp
@@ -1923,6 +1923,8 @@ bool StaticPhase::load(MfcArchive &file) {
 
 	assert (g_fp->_gameProjectVersion >= 12);
 
+	warning("StaticPhase::load(): Code continues here");
+
 	return true;
 }
 
diff --git a/engines/fullpipe/utils.h b/engines/fullpipe/utils.h
index 427cd67..5714fd3 100644
--- a/engines/fullpipe/utils.h
+++ b/engines/fullpipe/utils.h
@@ -66,6 +66,8 @@ class MfcArchive : public Common::SeekableReadStream {
 
 enum ObjType {
 	kObjTypeDefault,
+	kObjTypeExCommand,
+	kObjTypeExCommand2,
 	kObjTypeMovGraph,
 	kObjTypeMovGraphLink,
 	kObjTypeMovGraphNode,


Commit: 0745e61e70ae37a9c10448ad2c96d9e632c8ee58
    https://github.com/scummvm/scummvm/commit/0745e61e70ae37a9c10448ad2c96d9e632c8ee58
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T05:15:05-08:00

Commit Message:
FULLPIPE: Implement ExCommand2 methods

Changed paths:
    engines/fullpipe/messages.cpp
    engines/fullpipe/messages.h



diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index 7db168d..dcca925 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -145,18 +145,34 @@ void ExCommand::firef34() {
 	}
 }
 
-ExCommand2::ExCommand2(int messageKind, int parentId, const Common::Point *points, int pointsSize) : ExCommand(parentId, messageKind, 0, 0, 0, 0, 1, 0, 0, 0) {
-	_points = 0;
+ExCommand2::ExCommand2(int messageKind, int parentId, const Common::Point **points, int pointsSize) : ExCommand(parentId, messageKind, 0, 0, 0, 0, 1, 0, 0, 0) {
 	_objtype = kObjTypeExCommand2;
 
-	warning("STUB: ExCommand2::ExCommand2()");
+	_pointsSize = pointsSize;
+	_points = (Common::Point **)malloc(sizeof(Common::Point *) * pointsSize);
+
+	for (int i = 0; i < pointsSize; i++) {
+		_points[i] = new Common::Point;
+
+		*_points[i] = *points[i];
+	}
 }
 
 ExCommand2::ExCommand2(ExCommand2 *src) : ExCommand(src) {
-	warning("STUB: ExCommand2::ExCommand2()");
+	_pointsSize = src->_pointsSize;
+	_points = (Common::Point **)malloc(sizeof(Common::Point *) * _pointsSize);
+
+	for (int i = 0; i < _pointsSize; i++) {
+		_points[i] = new Common::Point;
+
+		*_points[i] = *src->_points[i];
+	}
 }
 
 ExCommand2::~ExCommand2() {
+	for (int i = 0; i < _pointsSize; i++)
+		delete _points[i];
+
 	free(_points);
 }
 
diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h
index d03cb77..653bd96 100644
--- a/engines/fullpipe/messages.h
+++ b/engines/fullpipe/messages.h
@@ -85,7 +85,7 @@ class ExCommand2 : public ExCommand {
 	Common::Point **_points;
 	int _pointsSize;
 
-	ExCommand2(int messageKind, int parentId, const Common::Point *points, int pointsSize);
+	ExCommand2(int messageKind, int parentId, const Common::Point **points, int pointsSize);
 	ExCommand2(ExCommand2 *src);
 	virtual ~ExCommand2();
 






More information about the Scummvm-git-logs mailing list