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

sev- sev at scummvm.org
Wed Apr 23 19:53:43 CEST 2014


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

Summary:
c949963a8a FULLPIPE: More work on MGM::calcOffsets()


Commit: c949963a8a490ba9ef3c0046d9edc9f2a627ad2e
    https://github.com/scummvm/scummvm/commit/c949963a8a490ba9ef3c0046d9edc9f2a627ad2e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-04-23T20:52:39+03:00

Commit Message:
FULLPIPE: More work on MGM::calcOffsets()

Changed paths:
    engines/fullpipe/motion.cpp



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 0744c36..09dd937 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -2194,6 +2194,8 @@ int MGM::recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop) {
 	if (item->subItems[subIdx])
 		return item->subItems[subIdx]->field_8;
 
+	Common::Point point;
+
 	for (int i = 0; i < item->movementListCount; i++) {
 		mov = item->movements1[i];
 
@@ -2201,82 +2203,73 @@ int MGM::recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop) {
 			v16 = (int)(&item->movements2->go.CObject.vmt + i);
 			if (!*(_DWORD *)v16 && (!flop || mov->_field_50)) {
 				*(_DWORD *)v16 = 1;
-				v39 = MGM_getStaticsIndex(this, idx, *(Statics **)(*(&item->movements1->go.CObject.vmt + i) + offsetof(Movement, _staticsObj2)));
+				v39 = getStaticsIndex(idx, item->movements1[i]->_staticsObj2);
 				v43 = recalcOffsets(idx, v39, st2idx, flip, flop);
-				v17 = (Movement *)*(&item->movements1->go.CObject.vmt + i);
-				v45 = v17;
-				v18 = v17->_currMovement;
-				v41 = v18 ? v18->_dynamicPhases.m_nCount : v17->_dynamicPhases.m_nCount;
-				v19 = item->subItems;
-				v20 = v41 + *(&v19[v39].field_C + 6 * st2idx * _items[idx].staticsListCount);
-				v42 = v41 + *(&v19[v39].field_C + 6 * st2idx * _items[idx].staticsListCount);
+
+				v41 = mov->_currMovement ? mov->_currMovement->_dynamicPhases.size() : mov->_dynamicPhases.size();
+
+				v20 = v41 + *(&item->subItems[v39].field_C + 6 * st2idx * _items[idx].staticsListCount);
 
 				if (v43 >= 0) {
-					if (!v19[subIdx].movement)
+					if (!item->subItems[subIdx].movement)
 						goto LABEL_22;
 
-					v21 = v19[subIdx].field_8;
+					v21 = item->subItems[subIdx].field_8;
 
 					if (v21 > v43 + 1) {
-						v20 = v42;
 					LABEL_22:
-						v19[subIdx].movement = v45;
+						item->subItems[subIdx].movement = mov;
 						item->subItems[subIdx].staticsIndex = v39;
 						item->subItems[subIdx].field_8 = v43 + 1;
 						item->subItems[subIdx].field_C = v20;
-						v22 = Movement_calcSomeXY(*((Movement **)&item->movements1->go.CObject.vmt + i), &flag, 0);
-						v23 = item->subItems;
-						v24 = v22->x + *(&v23[v39].x + 6 * st2idx * _items[idx].staticsListCount);
-						v25 = v22->y + *(&v23[v39].y + 6 * st2idx * _items[idx].staticsListCount);
-						v26 = v24;
-					upd_xy_loop_1_next:
-						v23[subIdx].x = v26;
-						v23[subIdx].y = v25;
+
+						mov->calcSomeXY(&point, 0);
+
+						v25 = point.x + *(&item->subItems[v39].x + 6 * st2idx * _items[idx].staticsListCount);
+						v26 = point.y + *(&item->subItems[v39].y + 6 * st2idx * _items[idx].staticsListCount);
+
+						item->subItems[subIdx].x = v25;
+						item->subItems[subIdx].y = v26;
+
 						continue;
 					}
 
 					if (v21 == v43 + 1) {
-						v20 = v42;
-
-						if (v19[subIdx].field_C > v42)
+						if (item->subItems[subIdx].field_C > v20)
 							goto LABEL_22;
 					}
 				}
 			}
 		} else if (flip) {
 			if (mov->_staticsObj2 == item->statics[st1idx]) {
-				v27 = item->movements2;
-				v28 = *(&v27->go.CObject.vmt + i);
-				v29 = (int)(&v27->go.CObject.vmt + i);
-
-				if (!v28 && (!flop || mov->_field_50)) {
-					*(_DWORD *)v29 = 1;
-					v30 = MGM_getStaticsIndex(this, idx, *(Statics **)(*(&item->movements1->go.CObject.vmt + i) + offsetof(Movement, _staticsObj1)));
-					v40 = v30;
+				if (!item->movements2[i] && (!flop || mov->_field_50)) {
+					item->movements2[i] = 1;
+
+					v30 = getStaticsIndex(idx, mov->_staticsObj1);
 					v31 = recalcOffsets(idx, v30, st2idx, flip, flop);
 
 					if (v31 >= 0) {
-						v32 = (int)&item->subItems[subIdx];
-
-						if (!*(_DWORD *)v32 || *(_DWORD *)(v32 + offsetof(MGMSubItem, field_8)) > v31 + 1) {
-							*(_DWORD *)v32 = *(&item->movements1->go.CObject.vmt + i);
-							item->subItems[subIdx].staticsIndex = v40;
+						if (!item->subItems[subIdx]->movement || item->subItems[subIdx]->field_8 > v31 + 1) {
+							item->subItems[subIdx]->movement = mov;
+							item->subItems[subIdx].staticsIndex = v30;
 							item->subItems[subIdx].field_8 = v31 + 1;
-							v33 = (Movement *)*(&item->movements1->go.CObject.vmt + i);
-							v34 = v33->_currMovement;
 
-							if (v34)
-								v44 = v34->_dynamicPhases.m_nCount;
+							if (mov->_currMovement)
+								v44 = mov->_currMovement->_dynamicPhases.size();
 							else
-								v44 = v33->_dynamicPhases.m_nCount;
-
-							item->subItems[subIdx].field_C = v44 + *(&item->subItems[v40].field_C + 6 * st2idx * _items[idx].staticsListCount);
-							v35 = Movement_calcSomeXY(*((Movement **)&item->movements1->go.CObject.vmt + i), (POINT *)&point, 0);
-							v23 = item->subItems;
-							v36 = *(&v23[v40].x + 6 * st2idx * _items[idx].staticsListCount) - v35->x;
-							v25 = *(&v23[v40].y + 6 * st2idx * _items[idx].staticsListCount) - v35->y;
-							v26 = v36;
-							goto upd_xy_loop_1_next;
+								v44 = mov->_dynamicPhases.size();
+
+							item->subItems[subIdx].field_C = v44 + *(&item->subItems[v30].field_C + 6 * st2idx * _items[idx].staticsListCount);
+
+							mov->calcSomeXY(&point, 0);
+
+							v25 = *(&item->subItems[v30].x + 6 * st2idx * _items[idx].staticsListCount) - point.x;
+							v26 = *(&item->subItems[v30].y + 6 * st2idx * _items[idx].staticsListCount) - point.y;
+
+							item->subItems[subIdx].x = v25;
+							item->subItems[subIdx].y = v26;
+
+							continue;
 						}
 					}
 				}






More information about the Scummvm-git-logs mailing list