[Scummvm-cvs-logs] scummvm master -> d197bb04afa9be420d92b5d927d496ddc881d642

sev- sev at scummvm.org
Sat May 24 10:17:50 CEST 2014


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

Summary:
c4f3f77d74 FULLPIPE: Further work on MovGraph::method50()
9f447e0ff4 FULLPIPE: Fix MovGraphItem structure
46d0e8b76c FULLPIPE: Finish MovGraph::method50() implementation
d197bb04af FULLPIPE: Simplify syntax


Commit: c4f3f77d74adb7a513819c7542dd1eed67badb95
    https://github.com/scummvm/scummvm/commit/c4f3f77d74adb7a513819c7542dd1eed67badb95
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-05-24T11:17:03+03:00

Commit Message:
FULLPIPE: Further work on MovGraph::method50()

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



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index ccd246f..cc248e1 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -738,7 +738,7 @@ bool MovGraph::method44(StaticANIObject *ani, int x, int y) {
 				int cnt = (*movarr)[0]->_movStepCount;
 
 				if (cnt > 0) {
-					if ((*movarr)[0]->_movSteps[cnt - 1].link->_flags & 0x4000000)
+					if ((*movarr)[0]->_movSteps[cnt - 1]->link->_flags & 0x4000000)
 						return true;
 				}
 			}
@@ -851,13 +851,13 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
 
 	for (int i = 0; i < movarr->_movStepCount; i++) {
 		while (i < movarr->_movStepCount - 1) {
-			if (movarr->_movSteps[i    ].link->_dwordArray1[movarr->_movSteps[i - 1].sfield_0 + _field_44] !=
-				movarr->_movSteps[i + 1].link->_dwordArray1[movarr->_movSteps[i    ].sfield_0 + _field_44])
+			if (movarr->_movSteps[i    ]->link->_dwordArray1[movarr->_movSteps[i - 1]->sfield_0 + _field_44] !=
+				movarr->_movSteps[i + 1]->link->_dwordArray1[movarr->_movSteps[i    ]->sfield_0 + _field_44])
 				break;
 			i++;
 		}
 
-		MovStep *st = &movarr->_movSteps[i];
+		MovStep *st = movarr->_movSteps[i];
 
 		ani->getMovementById(st->link->_dwordArray1[_field_44 + st->sfield_0]);
 
@@ -865,7 +865,7 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
 			id2 = staticsId;
 		} else {
 			if (i < movarr->_movStepCount - 1)
-				id2 = ani->getMovementById(movarr->_movSteps[i + 1].link->_dwordArray1[_field_44 + st->sfield_0])->_staticsObj1->_staticsId;
+				id2 = ani->getMovementById(movarr->_movSteps[i + 1]->link->_dwordArray1[_field_44 + st->sfield_0])->_staticsObj1->_staticsId;
 			else
 				id2 = st->link->_dwordArray2[_field_44 + st->sfield_0];
 		}
@@ -955,18 +955,19 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *
 		}
 	}
 
-	v11 = this->_items;
-	v12 = idx << 6;
-	v13 = (*(MovItem **)((char *)&v11->movitems + v12))[movidx].movarr;
-	if ( *(MovArr **)((char *)&v11->movarr + v12) )
-		CObjectFree(*(void **)((char *)&v11->movarr + v12));
-	memcpy((char *)&this->_items->movarr + v12, v13, 0x20u);
-	*(MovArr **)((char *)&this->_items->movarr + v12) = (MovArr *)operator new(8 * v13->_movStepCount);
-	memcpy(*(void **)((char *)&this->_items->movarr + v12), v13->_movSteps, 8 * v13->_movStepCount);
-	*(int *)((char *)&this->_items->field_10 + v12) = -1;
-	*(int *)((char *)&this->_items->field_14 + v12) = 0;
+	if (_items[idx]->movarr)
+		delete _items[idx]->movarr;
+
+	_items[idx]->movarr = _items[idx]->movitems[movidx].movarr;
+
+	_items[idx]->movarr->_movSteps.clear();
+	_items[idx]->movarr->_movSteps = _items[idx]->movitems[movidx].movarr->_movSteps;
+
+	_items[idx]->field_10 = -1;
+	_items[idx]->field_14 = 0;
+
+	MessageQueue *mq = fillMGMinfo(_items[idx]->ani, _items[idx]->movarr, 0);
 
-	MessageQueue *mq = fillMGMinfo(*(StaticANIObject **)((char *)&this->_items->ani + v12), (MovArr *)((char *)&this->_items->movarr + v12), 0);
 	if (!mq)
 		return 0;
 
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 6233174..dbd41b8 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -307,7 +307,7 @@ struct MovStep {
 };
 
 struct MovArr {
-	MovStep *_movSteps;
+	Common::Array<MovStep *> _movSteps;
 	int _movStepCount;
 	int _afield_8;
 	MovGraphLink *_link;


Commit: 9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26
    https://github.com/scummvm/scummvm/commit/9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-05-24T11:17:03+03:00

Commit Message:
FULLPIPE: Fix MovGraphItem structure

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



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index cc248e1..20ae2df 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -507,14 +507,6 @@ bool MctlCompoundArray::load(MfcArchive &file) {
 MovGraphItem::MovGraphItem() {
 	ani = 0;
 	field_4 = 0;
-	movarr = 0;
-	field_C = 0;
-	field_10 = 0;
-	field_14 = 0;
-	field_18 = 0;
-	field_1C = 0;
-	field_20 = 0;
-	field_24 = 0;
 	movitems = 0;
 	count = 0;
 	field_30 = 0;
@@ -529,7 +521,7 @@ void MovGraphItem::free() {
 
 int MovGraph_messageHandler(ExCommand *cmd);
 
-Common::Array<MovArr *> *movGraphCallback(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter) {
+MovArr *movGraphCallback(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter) {
 	int residx = 0;
 	int itemidx = 0;
 
@@ -592,10 +584,7 @@ void MovGraph::freeItems() {
 	for (uint i = 0; i < _items.size(); i++) {
 		_items[i]->free();
 
-		for (uint j = 0; j < _items[i]->movarr->size(); j++)
-			delete (*_items[i]->movarr)[j];
-
-		delete _items[i]->movarr;
+		_items[i]->movarr._movSteps.clear();
 	}
 
 	_items.clear();
@@ -684,7 +673,7 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f
 	return method50(ani, _callback1(ani, movitems, count), staticsId);
 }
 
-void MovGraph::changeCallback(Common::Array<MovArr *> *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
+void MovGraph::changeCallback(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
 	_callback1 = callback1;
 }
 
@@ -734,11 +723,11 @@ bool MovGraph::method44(StaticANIObject *ani, int x, int y) {
 			Common::Array<MovItem *> *movitem = method28(ani, x, y, 0, &counter);
 
 			if (movitem) {
-				Common::Array<MovArr *> *movarr = _callback1(ani, movitem, counter);
-				int cnt = (*movarr)[0]->_movStepCount;
+				MovArr *movarr = _callback1(ani, movitem, counter);
+				int cnt = movarr->_movStepCount;
 
 				if (cnt > 0) {
-					if ((*movarr)[0]->_movSteps[cnt - 1]->link->_flags & 0x4000000)
+					if (movarr->_movSteps[cnt - 1]->link->_flags & 0x4000000)
 						return true;
 				}
 			}
@@ -759,7 +748,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 	subj->getPicAniInfo(&picAniInfo);
 
 	if (movitem) {
-		Common::Array<MovArr *> *goal = _callback1(subj, movitem, ss);
+		MovArr *goal = _callback1(subj, movitem, ss);
 		int idx = getItemIndexByStaticAni(subj);
 
 		for (int i = 0; i < _items[idx]->count; i++) {
@@ -787,7 +776,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 
 	movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss);
 	if (movitem) {
-		Common::Array<MovArr *> *goal = _callback1(subj, movitem, ss);
+		MovArr *goal = _callback1(subj, movitem, ss);
 		int idx = getItemIndexByStaticAni(subj);
 
 		if (_items[idx]->count > 0) {
@@ -802,18 +791,13 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 				}
 			}
 
-			_items[idx]->movarr->clear();
-
-			for (int i = 0; i < (*_items[idx]->movitems->operator[](arridx)->movarr)[i]->_movStepCount; i++) {
-				MovArr *m = new MovArr;
-
-				*m = *(*_items[idx]->movitems->operator[](arridx)->movarr)[i];
-			}
-
-			_items[idx]->field_10 = -1;
-			_items[idx]->field_14 = 0;
+			_items[idx]->movarr._movSteps.clear();
+			_items[idx]->movarr = *_items[idx]->movitems->operator[](arridx)->movarr;
+			_items[idx]->movarr._movSteps = _items[idx]->movitems->operator[](arridx)->movarr->_movSteps;
+			_items[idx]->movarr._afield_8 = -1;
+			_items[idx]->movarr._link = 0;
 
-			MessageQueue *mq = fillMGMinfo(_items[idx]->ani, (*_items[idx]->movarr)[0], staticsId);
+			MessageQueue *mq = fillMGMinfo(_items[idx]->ani, &_items[idx]->movarr, staticsId);
 			if (mq) {
 				ExCommand *ex = new ExCommand();
 				ex->_messageKind = 17;
@@ -925,7 +909,7 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
 	return mq;
 }
 
-MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *movarr, int staticsId) {
+MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int staticsId) {
 #if 0
 	if (_itemsCount <= 0)
 		return 0;
@@ -958,11 +942,9 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *
 	if (_items[idx]->movarr)
 		delete _items[idx]->movarr;
 
-	_items[idx]->movarr = _items[idx]->movitems[movidx].movarr;
-
+	_items[idx]->copyPart(_items[idx]->movitems[movidx]);
 	_items[idx]->movarr->_movSteps.clear();
 	_items[idx]->movarr->_movSteps = _items[idx]->movitems[movidx].movarr->_movSteps;
-
 	_items[idx]->field_10 = -1;
 	_items[idx]->field_14 = 0;
 
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index dbd41b8..3aa07c1 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -58,7 +58,7 @@ public:
 	virtual bool method2C(StaticANIObject *obj, int x, int y) { return false; }
 	virtual int method30() { return 0; }
 	virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; }
-	virtual void changeCallback(Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
+	virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
 	virtual bool method3C(StaticANIObject *ani, int flag) { return 0; }
 	virtual int method40() { return 0; }
 	virtual bool method44(StaticANIObject *ani, int x, int y) { return false; }
@@ -316,7 +316,7 @@ struct MovArr {
 };
 
 struct MovItem {
-	Common::Array<MovArr *> *movarr;
+	MovArr *movarr;
 	int _mfield_4;
 	int _mfield_8;
 	int _mfield_C;
@@ -325,14 +325,7 @@ struct MovItem {
 struct MovGraphItem {
 	StaticANIObject *ani;
 	int field_4;
-	Common::Array<MovArr *> *movarr;
-	int field_C;
-	int field_10;
-	int field_14;
-	int field_18;
-	int field_1C;
-	int field_20;
-	int field_24;
+	MovArr movarr;
 	Common::Array<MovItem *> *movitems;
 	int count;
 	int field_30;
@@ -350,7 +343,7 @@ public:
 	ObList _links;
 	int _field_44;
 	Common::Array<MovGraphItem *> _items;
-	Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter);
+	MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter);
 	MGM _mgm;
 
 public:
@@ -365,11 +358,11 @@ public:
 	virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount);
 	virtual bool method2C(StaticANIObject *obj, int x, int y);
 	virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
-	virtual void changeCallback(Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
+	virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
 	virtual bool method3C(StaticANIObject *ani, int flag);
 	virtual bool method44(StaticANIObject *ani, int x, int y);
 	virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
-	virtual MessageQueue *method50(StaticANIObject *ani, Common::Array<MovArr *> *movarr, int staticsId);
+	virtual MessageQueue *method50(StaticANIObject *ani, MovArr *movarr, int staticsId);
 
 	double calcDistance(Common::Point *point, MovGraphLink *link, int fuzzyMatch);
 	void calcNodeDistancesAndAngles();


Commit: 46d0e8b76cb0130c01dcddf4dd3483c1099b5a7c
    https://github.com/scummvm/scummvm/commit/46d0e8b76cb0130c01dcddf4dd3483c1099b5a7c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-05-24T11:17:03+03:00

Commit Message:
FULLPIPE: Finish MovGraph::method50() implementation

Changed paths:
    engines/fullpipe/motion.cpp



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 20ae2df..69dd648 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -910,16 +910,15 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
 }
 
 MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int staticsId) {
-#if 0
-	if (_itemsCount <= 0)
+	if (_items.size() == 0)
 		return 0;
 
 	int idx;
 	int movidx;
 	bool done = false;
 
-	for (idx = 0; idx <= _itemsCount && !done; idx++) {
-		if (idx == _itemsCount)
+	for (idx = 0; idx <= _items.size() && !done; idx++) {
+		if (idx == _items.size())
 			return 0;
 
 		if (_items[idx]->ani == ani) {
@@ -929,8 +928,8 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int stati
 			if (_items[idx]->count < 1)
 				return 0;
 
-			for (movidx = 0; movidx < _items[idx]->count; movidx++)
-				if (_items[idx]->movitems[movidx]->movarr == movarr) {
+			for (movidx = 0; movidx < _items[idx]->count; movidx++) {
+				if (_items[idx]->movitems->operator[](movidx)->movarr == movarr) {
 					done = true;
 
 					break;
@@ -939,16 +938,13 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int stati
 		}
 	}
 
-	if (_items[idx]->movarr)
-		delete _items[idx]->movarr;
+	_items[idx]->movarr._movSteps.clear();
+	_items[idx]->movarr = *_items[idx]->movitems->operator[](movidx)->movarr;
+	_items[idx]->movarr._movSteps = _items[idx]->movitems->operator[](movidx)->movarr->_movSteps;
+	_items[idx]->movarr._afield_8 = -1;
+	_items[idx]->movarr._link = 0;
 
-	_items[idx]->copyPart(_items[idx]->movitems[movidx]);
-	_items[idx]->movarr->_movSteps.clear();
-	_items[idx]->movarr->_movSteps = _items[idx]->movitems[movidx].movarr->_movSteps;
-	_items[idx]->field_10 = -1;
-	_items[idx]->field_14 = 0;
-
-	MessageQueue *mq = fillMGMinfo(_items[idx]->ani, _items[idx]->movarr, 0);
+	MessageQueue *mq = fillMGMinfo(_items[idx]->ani, &_items[idx]->movarr, 0);
 
 	if (!mq)
 		return 0;
@@ -968,11 +964,6 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int stati
 	}
 
 	return mq;
-#endif
-
-	warning("STUB: MovGraph::method50()");
-
-	return 0;
 }
 
 double MovGraph::calcDistance(Common::Point *point, MovGraphLink *link, int fuzzyMatch) {


Commit: d197bb04afa9be420d92b5d927d496ddc881d642
    https://github.com/scummvm/scummvm/commit/d197bb04afa9be420d92b5d927d496ddc881d642
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-05-24T11:17:03+03:00

Commit Message:
FULLPIPE: Simplify syntax

Changed paths:
    engines/fullpipe/motion.cpp



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 69dd648..af615cd 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -752,7 +752,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 		int idx = getItemIndexByStaticAni(subj);
 
 		for (int i = 0; i < _items[idx]->count; i++) {
-			if (_items[idx]->movitems->operator[](i)->movarr == goal) {
+			if ((*_items[idx]->movitems)[i]->movarr == goal) {
 				if (subj->_movement) {
 					Common::Point point;
 
@@ -782,7 +782,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 		if (_items[idx]->count > 0) {
 			int arridx = 0;
 
-			while (_items[idx]->movitems->operator[](arridx)->movarr != goal) {
+			while ((*_items[idx]->movitems)[arridx]->movarr != goal) {
 				arridx++;
 
 				if (arridx >= _items[idx]->count) {
@@ -792,8 +792,8 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
 			}
 
 			_items[idx]->movarr._movSteps.clear();
-			_items[idx]->movarr = *_items[idx]->movitems->operator[](arridx)->movarr;
-			_items[idx]->movarr._movSteps = _items[idx]->movitems->operator[](arridx)->movarr->_movSteps;
+			_items[idx]->movarr = *(*_items[idx]->movitems)[arridx]->movarr;
+			_items[idx]->movarr._movSteps = (*_items[idx]->movitems)[arridx]->movarr->_movSteps;
 			_items[idx]->movarr._afield_8 = -1;
 			_items[idx]->movarr._link = 0;
 
@@ -929,7 +929,7 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int stati
 				return 0;
 
 			for (movidx = 0; movidx < _items[idx]->count; movidx++) {
-				if (_items[idx]->movitems->operator[](movidx)->movarr == movarr) {
+				if ((*_items[idx]->movitems)[movidx]->movarr == movarr) {
 					done = true;
 
 					break;
@@ -939,8 +939,8 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int stati
 	}
 
 	_items[idx]->movarr._movSteps.clear();
-	_items[idx]->movarr = *_items[idx]->movitems->operator[](movidx)->movarr;
-	_items[idx]->movarr._movSteps = _items[idx]->movitems->operator[](movidx)->movarr->_movSteps;
+	_items[idx]->movarr = *(*_items[idx]->movitems)[movidx]->movarr;
+	_items[idx]->movarr._movSteps = (*_items[idx]->movitems)[movidx]->movarr->_movSteps;
 	_items[idx]->movarr._afield_8 = -1;
 	_items[idx]->movarr._link = 0;
 






More information about the Scummvm-git-logs mailing list