diff --git a/Source/msg.cpp b/Source/msg.cpp index 41fb1bdf7..65bddaf5e 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1476,37 +1476,39 @@ BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) BOOL result; TCmdPItem *pD; int i; + BOOL found; + result = TRUE; + found = FALSE; if (gbMaxPlayers != 1) { - for (i = 0; i < MAXITEMS; i++) { - pD = &sgLevels[bLevel].item[i]; - if (*(BYTE *)pD != 0xFF - && pD->wIndx == pI->wIndx - && pD->wCI == pI->wCI - && pD->dwSeed == pI->dwSeed) { - if (pD->bCmd == CMD_STAND) { - sgbDeltaChanged = 1; - pD->bCmd = CMD_WALKXY; - return TRUE; - } else if (pD->bCmd == CMD_WALKXY) { - return TRUE; - } else if (pD->bCmd == CMD_ACK_PLRINFO) { - *(BYTE *)pD = 0xFF; - sgbDeltaChanged = 1; - return TRUE; - } else { - app_fatal("delta:1"); - } + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd != 0xFF && pD->wIndx == pI->wIndx && pD->wCI == pI->wCI && pD->dwSeed == pI->dwSeed) { + found = TRUE; + break; + } + } + if (found) { + if (pD->bCmd == CMD_WALKXY) { + return result; + } + if (pD->bCmd == CMD_STAND) { + sgbDeltaChanged = 1; + pD->bCmd = CMD_WALKXY; return result; } + if (pD->bCmd == CMD_ACK_PLRINFO) { + pD->bCmd = 0xFF; + sgbDeltaChanged = 1; + return result; + } + app_fatal("delta:1"); } - if (((pI->wCI >> 8) & 0x80) == 0) return FALSE; - - for (i = 0; i < MAXITEMS; i++) { - pD = &sgLevels[bLevel].item[i]; - if (*(BYTE *)pD == 0xFF) { + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF) { sgbDeltaChanged = 1; pD->bCmd = CMD_WALKXY; pD->x = pI->x; @@ -1521,11 +1523,12 @@ BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) pD->bMCh = pI->bMCh; pD->wValue = pI->wValue; pD->dwBuff = pI->dwBuff; - return TRUE; + result = TRUE; + break; } } } - return TRUE; + return result; } // 679660: using guessed type char gbMaxPlayers;