mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 09:23:37 +00:00
FULLPIPE: More work on MGM::calcOffsets()
This commit is contained in:
parent
8195f14473
commit
c949963a8a
@ -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 (!item->movements2[i] && (!flop || mov->_field_50)) {
|
||||
item->movements2[i] = 1;
|
||||
|
||||
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;
|
||||
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;
|
||||
v44 = mov->_dynamicPhases.size();
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user