From 762f1074f3d4f7fe43b29e4e83d20a60abb1615d Mon Sep 17 00:00:00 2001 From: silversurfer Date: Mon, 20 Jan 2014 12:00:26 +0000 Subject: [PATCH] Fixed bug with merc swap feature which was introduced with Waldo the mechanic. Faces were swapped incorrectly. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6797 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Turn Based Input.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 127ccdd2..7a30be09 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -6668,37 +6668,43 @@ void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ) UINT8 ubSourceMerc = (UINT8)gusSelectedSoldier; UINT8 ubTargetMerc; + INT32 iSourceFace; + INT32 iTargetFace; UINT8 ubGroupID = pSoldier->ubGroupID; INT8 bOldPosition = GetTeamSlotFromPlayerID ( MercPtrs[ ubSourceMerc ]->ubID ); INT8 bNewPosition = bOldPosition + bDirection; SOLDIERTYPE TempMercPtr = *MercPtrs[ ubSourceMerc ]; - FACETYPE TempFace = gFacesData[ ubSourceMerc +1 ]; // check if new position is occupied by another merc? we won't replace an empty slot if ( gTeamPanel[ bNewPosition ].fOccupied && gTeamPanel[ bNewPosition ].ubID != NOBODY ) - { + { ubTargetMerc = gTeamPanel[ bNewPosition ].ubID; + // store face indexes + iSourceFace = MercPtrs[ ubSourceMerc ]->iFaceIndex; + iTargetFace = MercPtrs[ ubTargetMerc ]->iFaceIndex; + FACETYPE TempFace = gFacesData[ iSourceFace ]; + // swap the data *MercPtrs[ ubSourceMerc ] = *MercPtrs[ ubTargetMerc ]; *MercPtrs[ ubTargetMerc ] = TempMercPtr; // also swap face data, otherwise face gear, opp count etc won't update - gFacesData[ ubSourceMerc +1 ] = gFacesData[ ubTargetMerc +1 ]; - gFacesData[ ubTargetMerc +1 ] = TempFace; + gFacesData[ iSourceFace ] = gFacesData[ iTargetFace ]; + gFacesData[ iTargetFace ] = TempFace; // update IDs in the data so they match array index again MercPtrs[ ubSourceMerc ]->ubID = ubSourceMerc; MercPtrs[ ubTargetMerc ]->ubID = ubTargetMerc; - gFacesData[ ubSourceMerc +1 ].iID = ubSourceMerc +1; - gFacesData[ ubTargetMerc +1 ].iID = ubTargetMerc +1; + gFacesData[ iSourceFace ].iID = iSourceFace; + gFacesData[ iTargetFace ].iID = iTargetFace; - // update soldier ID so they match array index again - gFacesData[ ubSourceMerc +1 ].ubSoldierID = ubSourceMerc; - gFacesData[ ubTargetMerc +1 ].ubSoldierID = ubTargetMerc; + // update soldier ID so they match merc index again + gFacesData[ iSourceFace ].ubSoldierID = ubSourceMerc; + gFacesData[ iTargetFace ].ubSoldierID = ubTargetMerc; // update face index in merc data - MercPtrs[ ubSourceMerc ]->iFaceIndex = ubSourceMerc +1; - MercPtrs[ ubTargetMerc ]->iFaceIndex = ubTargetMerc +1; + MercPtrs[ ubSourceMerc ]->iFaceIndex = iSourceFace; + MercPtrs[ ubTargetMerc ]->iFaceIndex = iTargetFace; // update group info RemovePlayerFromGroup( ubGroupID, MercPtrs[ ubSourceMerc ] );