From e5e446e25860ee522779cefc5f2605a17c89885b Mon Sep 17 00:00:00 2001 From: staphen Date: Mon, 6 Jun 2022 00:29:14 -0400 Subject: [PATCH] Fix issues with ears due to translation --- Source/items.cpp | 1 + Source/loadsave.cpp | 2 ++ Source/msg.cpp | 36 ++++++++++++++++++------------------ Source/pack.cpp | 18 +++++++++--------- Source/player.cpp | 1 + Source/sync.cpp | 18 +++++++++--------- 6 files changed, 40 insertions(+), 36 deletions(-) diff --git a/Source/items.cpp b/Source/items.cpp index 24cf89693..a56c182b8 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -3256,6 +3256,7 @@ void RecreateEar(Item &item, uint16_t ic, int iseed, int id, int dur, int mdur, std::string itemName = fmt::format(_(/* TRANSLATORS: {:s} will be a Character Name */ "Ear of {:s}"), heroName); CopyUtf8(item._iName, itemName, sizeof(item._iName)); + CopyUtf8(item._iIName, heroName, sizeof(item._iIName)); item._iCurs = ((ivalue >> 6) & 3) + ICURS_EAR_SORCERER; item._ivalue = ivalue & 0x3F; diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index d3cae16d3..82f1df82f 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -898,6 +898,8 @@ void LoadMatchingItems(LoadHelper &file, const int n, Item *pItem) continue; if (pItem[i]._iSeed != tempItem._iSeed) continue; + if (tempItem.IDidx == IDI_EAR) + continue; pItem[i] = tempItem; } } diff --git a/Source/msg.cpp b/Source/msg.cpp index 3eef1d7c3..1acf5a514 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2628,15 +2628,15 @@ void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, BYTE mast, BYTE pnum, BYTE ii) cmd.wIndx = Items[ii].IDidx; if (Items[ii].IDidx == IDI_EAR) { - cmd.wCI = Items[ii]._iName[8] | (Items[ii]._iName[7] << 8); - cmd.dwSeed = Items[ii]._iName[12] | ((Items[ii]._iName[11] | ((Items[ii]._iName[10] | (Items[ii]._iName[9] << 8)) << 8)) << 8); - cmd.bId = Items[ii]._iName[13]; - cmd.bDur = Items[ii]._iName[14]; - cmd.bMDur = Items[ii]._iName[15]; - cmd.bCh = Items[ii]._iName[16]; - cmd.bMCh = Items[ii]._iName[17]; - cmd.wValue = Items[ii]._ivalue | (Items[ii]._iName[18] << 8) | ((Items[ii]._iCurs - ICURS_EAR_SORCERER) << 6); - cmd.dwBuff = Items[ii]._iName[22] | ((Items[ii]._iName[21] | ((Items[ii]._iName[20] | (Items[ii]._iName[19] << 8)) << 8)) << 8); + cmd.wCI = Items[ii]._iIName[1] | (Items[ii]._iIName[0] << 8); + cmd.dwSeed = Items[ii]._iIName[5] | ((Items[ii]._iIName[4] | ((Items[ii]._iIName[3] | (Items[ii]._iIName[2] << 8)) << 8)) << 8); + cmd.bId = Items[ii]._iIName[6]; + cmd.bDur = Items[ii]._iIName[7]; + cmd.bMDur = Items[ii]._iIName[8]; + cmd.bCh = Items[ii]._iIName[9]; + cmd.bMCh = Items[ii]._iIName[10]; + cmd.wValue = Items[ii]._ivalue | (Items[ii]._iIName[11] << 8) | ((Items[ii]._iCurs - ICURS_EAR_SORCERER) << 6); + cmd.dwBuff = Items[ii]._iIName[15] | ((Items[ii]._iIName[14] | ((Items[ii]._iIName[13] | (Items[ii]._iIName[12] << 8)) << 8)) << 8); } else { cmd.wCI = Items[ii]._iCreateInfo; cmd.dwSeed = Items[ii]._iSeed; @@ -2671,15 +2671,15 @@ void NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position, const Item &item cmd.wIndx = item.IDidx; if (item.IDidx == IDI_EAR) { - cmd.wCI = item._iName[8] | (item._iName[7] << 8); - cmd.dwSeed = item._iName[12] | ((item._iName[11] | ((item._iName[10] | (item._iName[9] << 8)) << 8)) << 8); - cmd.bId = item._iName[13]; - cmd.bDur = item._iName[14]; - cmd.bMDur = item._iName[15]; - cmd.bCh = item._iName[16]; - cmd.bMCh = item._iName[17]; - cmd.wValue = item._ivalue | (item._iName[18] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6); - cmd.dwBuff = item._iName[22] | ((item._iName[21] | ((item._iName[20] | (item._iName[19] << 8)) << 8)) << 8); + cmd.wCI = item._iIName[1] | (item._iIName[0] << 8); + cmd.dwSeed = item._iIName[5] | ((item._iIName[4] | ((item._iIName[3] | (item._iIName[2] << 8)) << 8)) << 8); + cmd.bId = item._iIName[6]; + cmd.bDur = item._iIName[7]; + cmd.bMDur = item._iIName[8]; + cmd.bCh = item._iIName[9]; + cmd.bMCh = item._iIName[10]; + cmd.wValue = item._ivalue | (item._iIName[11] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6); + cmd.dwBuff = item._iIName[15] | ((item._iIName[14] | ((item._iIName[13] | (item._iIName[12] << 8)) << 8)) << 8); } else { cmd.wCI = item._iCreateInfo; cmd.dwSeed = item._iSeed; diff --git a/Source/pack.cpp b/Source/pack.cpp index 3662ee479..48ba5197a 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -50,15 +50,15 @@ void PackItem(ItemPack &packedItem, const Item &item, bool isHellfire) } packedItem.idx = SDL_SwapLE16(idx); if (item.IDidx == IDI_EAR) { - packedItem.iCreateInfo = item._iName[8] | (item._iName[7] << 8); - packedItem.iSeed = LoadBE32(&item._iName[9]); - packedItem.bId = item._iName[13]; - packedItem.bDur = item._iName[14]; - packedItem.bMDur = item._iName[15]; - packedItem.bCh = item._iName[16]; - packedItem.bMCh = item._iName[17]; - packedItem.wValue = SDL_SwapLE16(item._ivalue | (item._iName[18] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6)); - packedItem.dwBuff = LoadBE32(&item._iName[19]); + packedItem.iCreateInfo = item._iIName[1] | (item._iIName[0] << 8); + packedItem.iSeed = LoadBE32(&item._iIName[2]); + packedItem.bId = item._iIName[6]; + packedItem.bDur = item._iIName[7]; + packedItem.bMDur = item._iIName[8]; + packedItem.bCh = item._iIName[9]; + packedItem.bMCh = item._iIName[10]; + packedItem.wValue = SDL_SwapLE16(item._ivalue | (item._iIName[11] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6)); + packedItem.dwBuff = LoadBE32(&item._iIName[12]); } else { packedItem.iSeed = SDL_SwapLE32(item._iSeed); packedItem.iCreateInfo = SDL_SwapLE16(item._iCreateInfo); diff --git a/Source/player.cpp b/Source/player.cpp index d53ece265..e25265e99 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3143,6 +3143,7 @@ StartPlayerKill(int pnum, int earflag) Item ear; InitializeItem(ear, IDI_EAR); CopyUtf8(ear._iName, fmt::format(_("Ear of {:s}"), player._pName), sizeof(ear._iName)); + CopyUtf8(ear._iIName, player._pName, sizeof(ear._iIName)); switch (player._pClass) { case HeroClass::Sorcerer: ear._iCurs = ICURS_EAR_SORCERER; diff --git a/Source/sync.cpp b/Source/sync.cpp index 7a3bbaa38..0d8219ef0 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -108,15 +108,15 @@ void SyncPlrInv(TSyncHeader *pHdr) pHdr->bItemY = item.position.y; pHdr->wItemIndx = item.IDidx; if (item.IDidx == IDI_EAR) { - pHdr->wItemCI = (item._iName[7] << 8) | item._iName[8]; - pHdr->dwItemSeed = (item._iName[9] << 24) | (item._iName[10] << 16) | (item._iName[11] << 8) | item._iName[12]; - pHdr->bItemId = item._iName[13]; - pHdr->bItemDur = item._iName[14]; - pHdr->bItemMDur = item._iName[15]; - pHdr->bItemCh = item._iName[16]; - pHdr->bItemMCh = item._iName[17]; - pHdr->wItemVal = (item._iName[18] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6) | item._ivalue; - pHdr->dwItemBuff = (item._iName[19] << 24) | (item._iName[20] << 16) | (item._iName[21] << 8) | item._iName[22]; + pHdr->wItemCI = (item._iIName[0] << 8) | item._iIName[1]; + pHdr->dwItemSeed = (item._iIName[2] << 24) | (item._iIName[3] << 16) | (item._iIName[4] << 8) | item._iIName[5]; + pHdr->bItemId = item._iIName[6]; + pHdr->bItemDur = item._iIName[7]; + pHdr->bItemMDur = item._iIName[8]; + pHdr->bItemCh = item._iIName[9]; + pHdr->bItemMCh = item._iIName[10]; + pHdr->wItemVal = (item._iIName[11] << 8) | ((item._iCurs - ICURS_EAR_SORCERER) << 6) | item._ivalue; + pHdr->dwItemBuff = (item._iIName[12] << 24) | (item._iIName[13] << 16) | (item._iIName[14] << 8) | item._iIName[15]; } else { pHdr->wItemCI = item._iCreateInfo; pHdr->dwItemSeed = item._iSeed;