From 9f940cd5a55f49fd2bd567c97204e9350e8fa7e6 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sun, 22 Jul 2018 15:35:14 +0000 Subject: [PATCH] - Fix: when Larry changes profiles, several stats are not properly copied - Fix: when Larry changes profiles, Goodguy is always copied over git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8583 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Soldier Profile.cpp | 60 ++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index 2fb29aad..e2835497 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -2369,20 +2369,11 @@ BOOLEAN MercIsInTropicalSector( SOLDIERTYPE * pSoldier ) SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) { - UINT8 ubSrcProfile; - UINT8 ubDestProfile; - MERCPROFILESTRUCT * pNewProfile; + MERCPROFILESTRUCT* pNewProfile; + UINT8 ubSrcProfile = pSoldier->ubProfile; - ubSrcProfile = pSoldier->ubProfile; - if ( ubSrcProfile == LARRY_NORMAL) - { - ubDestProfile = LARRY_DRUNK; - } - else if ( ubSrcProfile == LARRY_DRUNK ) - { - ubDestProfile = LARRY_NORMAL; - } - else + // need a stop criteria... + if ( FALSE ) { // I don't think so! return( pSoldier ); @@ -2437,6 +2428,11 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) pNewProfile->records.usSectorsDiscovered = gMercProfiles[ ubSrcProfile ].records.usSectorsDiscovered; pNewProfile->records.usMilitiaTrained = gMercProfiles[ ubSrcProfile ].records.usMilitiaTrained; pNewProfile->records.ubQuestsHandled = gMercProfiles[ ubSrcProfile ].records.ubQuestsHandled; + pNewProfile->records.usInterrogations = gMercProfiles[ubSrcProfile].records.usInterrogations; + pNewProfile->records.usDamageTaken = gMercProfiles[ubSrcProfile].records.usDamageTaken; + pNewProfile->records.usDamageDealt = gMercProfiles[ubSrcProfile].records.usDamageDealt; + pNewProfile->records.usTimesInfected = gMercProfiles[ubSrcProfile].records.usTimesInfected; + pNewProfile->records.usPointsHealed = gMercProfiles[ubSrcProfile].records.usPointsHealed; ///////////////////////////////////////////////////////////////////////////////////// pNewProfile->usTotalDaysServed = gMercProfiles[ ubSrcProfile ].usTotalDaysServed; @@ -2451,11 +2447,21 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) pNewProfile->bSectorZ = gMercProfiles[ ubSrcProfile ].bSectorZ; pNewProfile->usStrategicInsertionData = gMercProfiles[ ubSrcProfile ].usStrategicInsertionData; pNewProfile->sTrueSalary = gMercProfiles[ ubSrcProfile ].sTrueSalary; + + // the goodguy property is permanent and shouldn't carry over, so check for that + BOOLEAN goodguy = ( gMercProfiles[ubDestProfile].ubMiscFlags3 & PROFILE_MISC_FLAG3_GOODGUY ) ? TRUE : FALSE; + pNewProfile->ubMiscFlags3 = gMercProfiles[ ubSrcProfile ].ubMiscFlags3; + + pNewProfile->ubMiscFlags3 &= ~PROFILE_MISC_FLAG3_GOODGUY; + if ( goodguy ) + pNewProfile->ubMiscFlags3 |= PROFILE_MISC_FLAG3_GOODGUY; + pNewProfile->ubDaysOfMoraleHangover = gMercProfiles[ ubSrcProfile ].ubDaysOfMoraleHangover; pNewProfile->ubNumTimesDrugUseInLifetime = gMercProfiles[ ubSrcProfile ].ubNumTimesDrugUseInLifetime; pNewProfile->uiPrecedentQuoteSaid = gMercProfiles[ ubSrcProfile ].uiPrecedentQuoteSaid; pNewProfile->sPreCombatGridNo = gMercProfiles[ ubSrcProfile ].sPreCombatGridNo; + pNewProfile->ubSnitchExposedCooldown = gMercProfiles[ubSrcProfile].ubSnitchExposedCooldown; // CJC: this is causing problems so just skip the transfer of exp... /* @@ -2484,6 +2490,28 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) pNewProfile->bExplosivesDelta = gMercProfiles[ ubSrcProfile ].bExplosivesDelta; */ + pNewProfile->sLifeGain = gMercProfiles[ubSrcProfile].sLifeGain; + pNewProfile->sAgilityGain = gMercProfiles[ubSrcProfile].sAgilityGain; + pNewProfile->sDexterityGain = gMercProfiles[ubSrcProfile].sDexterityGain; + pNewProfile->sStrengthGain = gMercProfiles[ubSrcProfile].sStrengthGain; + pNewProfile->sWisdomGain = gMercProfiles[ubSrcProfile].sWisdomGain; + pNewProfile->sExpLevelGain = gMercProfiles[ubSrcProfile].sExpLevelGain; + + pNewProfile->bLifeDelta = gMercProfiles[ubSrcProfile].bLifeDelta; + pNewProfile->bAgilityDelta = gMercProfiles[ubSrcProfile].bAgilityDelta; + pNewProfile->bDexterityDelta = gMercProfiles[ubSrcProfile].bDexterityDelta; + pNewProfile->bStrengthDelta = gMercProfiles[ubSrcProfile].bStrengthDelta; + pNewProfile->bWisdomDelta = gMercProfiles[ubSrcProfile].bWisdomDelta; + pNewProfile->bExpLevelDelta = gMercProfiles[ubSrcProfile].bExpLevelDelta; + + pNewProfile->bLife = gMercProfiles[ubSrcProfile].bLife; + pNewProfile->bAgility = gMercProfiles[ubSrcProfile].bAgility; + pNewProfile->bDexterity = gMercProfiles[ubSrcProfile].bDexterity; + pNewProfile->bStrength = gMercProfiles[ubSrcProfile].bStrength; + pNewProfile->bWisdom = gMercProfiles[ubSrcProfile].bWisdom; + pNewProfile->bExpLevel = gMercProfiles[ubSrcProfile].bExpLevel; + + pNewProfile->bInvStatus = gMercProfiles[ ubSrcProfile ].bInvStatus; pNewProfile->bInvNumber = gMercProfiles[ ubSrcProfile ].bInvNumber; pNewProfile->inv = gMercProfiles[ ubSrcProfile ].inv; @@ -2503,11 +2531,11 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) pSoldier->stats.bStrength = pNewProfile->bStrength + pNewProfile->bStrengthDelta; pSoldier->stats.bDexterity = pNewProfile->bDexterity + pNewProfile->bDexterityDelta; pSoldier->stats.bAgility = pNewProfile->bAgility + pNewProfile->bAgilityDelta; - pSoldier->stats.bWisdom = pNewProfile->bWisdom + pNewProfile->bWisdomDelta; + pSoldier->stats.bWisdom = pNewProfile->bWisdom + pNewProfile->bWisdomDelta; pSoldier->stats.bExpLevel = pNewProfile->bExpLevel + pNewProfile->bExpLevelDelta; pSoldier->stats.bLeadership = pNewProfile->bLeadership + pNewProfile->bLeadershipDelta; - pSoldier->stats.bMarksmanship = pNewProfile->bMarksmanship + pNewProfile->bMarksmanshipDelta; + pSoldier->stats.bMarksmanship = pNewProfile->bMarksmanship + pNewProfile->bMarksmanshipDelta; pSoldier->stats.bMechanical = pNewProfile->bMechanical + pNewProfile->bMechanicDelta; pSoldier->stats.bMedical = pNewProfile->bMedical + pNewProfile->bMedicalDelta; pSoldier->stats.bExplosive = pNewProfile->bExplosive + pNewProfile->bExplosivesDelta; @@ -2527,7 +2555,7 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier ) } #endif } - else + else if ( pSoldier->ubProfile == LARRY_NORMAL ) { SetFactFalse( FACT_LARRY_CHANGED ); }