diff --git a/Source/msg.cpp b/Source/msg.cpp index e9b7b2d9d..fa4648fa6 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2674,35 +2674,6 @@ void DeltaLoadLevel() memset(AutomapView, 0, sizeof(AutomapView)); } - for (int i = 0; i < MAXITEMS; i++) { - if (deltaLevel.item[i].bCmd == CMD_INVALID) - continue; - - if (deltaLevel.item[i].bCmd == TCmdPItem::PickedUpItem) { - int activeItemIndex = FindGetItem( - deltaLevel.item[i].def.dwSeed, - deltaLevel.item[i].def.wIndx, - deltaLevel.item[i].def.wCI); - if (activeItemIndex != -1) { - const auto &position = Items[ActiveItems[activeItemIndex]].position; - if (dItem[position.x][position.y] == ActiveItems[activeItemIndex] + 1) - dItem[position.x][position.y] = 0; - DeleteItem(activeItemIndex); - } - } - if (deltaLevel.item[i].bCmd == TCmdPItem::DroppedItem) { - int ii = AllocateItem(); - auto &item = Items[ii]; - RecreateItem(*MyPlayer, deltaLevel.item[i], item); - - int x = deltaLevel.item[i].x; - int y = deltaLevel.item[i].y; - item.position = GetItemPosition({ x, y }); - dItem[item.position.x][item.position.y] = ii + 1; - RespawnItem(Items[ii], false); - } - } - if (leveltype != DTYPE_TOWN) { for (auto it = deltaLevel.object.begin(); it != deltaLevel.object.end();) { Object *object = FindObjectAtPosition(it->first); @@ -2734,6 +2705,35 @@ void DeltaLoadLevel() } } } + + for (int i = 0; i < MAXITEMS; i++) { + if (deltaLevel.item[i].bCmd == CMD_INVALID) + continue; + + if (deltaLevel.item[i].bCmd == TCmdPItem::PickedUpItem) { + int activeItemIndex = FindGetItem( + deltaLevel.item[i].def.dwSeed, + deltaLevel.item[i].def.wIndx, + deltaLevel.item[i].def.wCI); + if (activeItemIndex != -1) { + const auto &position = Items[ActiveItems[activeItemIndex]].position; + if (dItem[position.x][position.y] == ActiveItems[activeItemIndex] + 1) + dItem[position.x][position.y] = 0; + DeleteItem(activeItemIndex); + } + } + if (deltaLevel.item[i].bCmd == TCmdPItem::DroppedItem) { + int ii = AllocateItem(); + auto &item = Items[ii]; + RecreateItem(*MyPlayer, deltaLevel.item[i], item); + + int x = deltaLevel.item[i].x; + int y = deltaLevel.item[i].y; + item.position = GetItemPosition({ x, y }); + dItem[item.position.x][item.position.y] = ii + 1; + RespawnItem(Items[ii], false); + } + } } void NetSendCmd(bool bHiPri, _cmd_id bCmd)