diff --git a/GameSettings.cpp b/GameSettings.cpp index 48b9a6ab..c2a835eb 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1348,6 +1348,7 @@ void LoadGameExternalOptions() gGameExternalOptions.sEnemyZombieDamageResistance = iniReader.ReadInteger("Tactical Zombie Settings", "ZOMBIE_DAMAGE_RESISTANCE", 0, -50, 95); gGameExternalOptions.fZombieOnlyHeadshotsWork = iniReader.ReadBoolean("Tactical Zombie Settings", "ZOMBIE_ONLY_HEADSHOTS_WORK", FALSE); gGameExternalOptions.sZombieDifficultyLevel = iniReader.ReadInteger("Tactical Zombie Settings", "ZOMBIE_DIFFICULTY_LEVEL", 2, 1, 4); + gGameExternalOptions.fZombieRiseWithArmour = iniReader.ReadBoolean("Tactical Zombie Settings", "ZOMBIE_RISE_WITH_ARMOUR", TRUE); //################# Tactical Poison Settings ################## gGameExternalOptions.ubPoisonBaseMedicalSkillToCure = iniReader.ReadInteger("Tactical Poison Settings", "POISON_BASE_MEDICAL_SKILL_TO_CURE", 50, 1, 100); diff --git a/GameSettings.h b/GameSettings.h index b3f86ab0..8d02dd85 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -374,6 +374,7 @@ typedef struct INT8 sEnemyZombieDamageResistance; BOOLEAN fZombieOnlyHeadshotsWork; INT8 sZombieDifficultyLevel; + BOOLEAN fZombieRiseWithArmour; // Flugente: poison settings INT32 ubPoisonBaseMedicalSkillToCure; diff --git a/SaveLoadGame.cpp b/SaveLoadGame.cpp index e0076f0b..b75c2c4f 100644 --- a/SaveLoadGame.cpp +++ b/SaveLoadGame.cpp @@ -1977,6 +1977,13 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile) numBytesRead = ReadFieldByField(hFile, &this->bPoisonSum, sizeof(bPoisonSum), sizeof(INT8), numBytesRead); numBytesRead = ReadFieldByField(hFile, &this->bPoisonResistance, sizeof(bPoisonResistance), sizeof(INT16), numBytesRead); numBytesRead = ReadFieldByField(hFile, &this->bPoisonAbsorption, sizeof(bPoisonAbsorption), sizeof(INT16), numBytesRead); + + numBytesRead = ReadFieldByField(hFile, &this->bExtraStrength, sizeof(bExtraStrength), sizeof(INT16), numBytesRead); + numBytesRead = ReadFieldByField(hFile, &this->bExtraDexterity, sizeof(bExtraDexterity), sizeof(INT16), numBytesRead); + numBytesRead = ReadFieldByField(hFile, &this->bExtraAgility, sizeof(bExtraAgility), sizeof(INT16), numBytesRead); + numBytesRead = ReadFieldByField(hFile, &this->bExtraWisdom, sizeof(bExtraWisdom), sizeof(INT16), numBytesRead); + numBytesRead = ReadFieldByField(hFile, &this->bExtraExpLevel, sizeof(bExtraExpLevel), sizeof(INT8), numBytesRead); + numBytesRead = ReadFieldByField(hFile, &this->bSoldierFlagMask, sizeof(bSoldierFlagMask), sizeof(INT32), numBytesRead); #ifdef JA2UB numBytesRead = ReadFieldByField(hFile, &this->fIgnoreGetupFromCollapseCheck, sizeof(fIgnoreGetupFromCollapseCheck), sizeof(BOOLEAN), numBytesRead); diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 21d31266..847c5e12 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -2386,8 +2386,8 @@ SOLDIERTYPE *AnyDoctorWhoCanHealThisPatient( SOLDIERTYPE *pPatient, BOOLEAN fThi UINT16 CalculateHealingPointsForDoctor(SOLDIERTYPE *pDoctor, UINT16 *pusMaxPts, BOOLEAN fMakeSureKitIsInHand ) { - UINT16 usHealPts = 0; - UINT16 usKitPts = 0; + UINT32 usHealPts = 0; + UINT32 usKitPts = 0; INT8 bMedFactor; INT16 sSectorModifier = 100; @@ -2413,7 +2413,7 @@ UINT16 CalculateHealingPointsForDoctor(SOLDIERTYPE *pDoctor, UINT16 *pusMaxPts, } // calculate effective doctoring rate (adjusted for drugs, alcohol, etc.) - usHealPts = (UINT16) (( EffectiveMedical( pDoctor ) * (( EffectiveDexterity( pDoctor ) + EffectiveWisdom( pDoctor ) ) / 2) * (100 + ( 5 * EffectiveExpLevel( pDoctor) ) ) ) / gGameExternalOptions.ubDoctoringRateDivisor); + usHealPts = (UINT32) (( EffectiveMedical( pDoctor ) * (( EffectiveDexterity( pDoctor, FALSE ) + EffectiveWisdom( pDoctor ) ) / 2) * (100 + ( 5 * EffectiveExpLevel( pDoctor) ) ) ) / gGameExternalOptions.ubDoctoringRateDivisor); usHealPts = __max(0, (usHealPts * sSectorModifier)/100); // calculate normal doctoring rate - what it would be if his stats were "normal" (ignoring drugs, fatigue, equipment condition) @@ -2483,7 +2483,7 @@ UINT16 CalculateHealingPointsForDoctor(SOLDIERTYPE *pDoctor, UINT16 *pusMaxPts, UINT8 CalculateRepairPointsForRepairman(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts, BOOLEAN fMakeSureKitIsInHand ) { - UINT16 usRepairPts; + UINT32 usRepairPts; UINT16 usKitPts; UINT8 ubKitEffectiveness; // HEADROCK HAM 3.5: Modifier from local facilities @@ -2503,7 +2503,7 @@ UINT8 CalculateRepairPointsForRepairman(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts } // calculate effective repair rate (adjusted for drugs, alcohol, etc.) - usRepairPts = (UINT16) ((EffectiveMechanical( pSoldier ) * EffectiveDexterity( pSoldier ) * (100 + ( 5 * EffectiveExpLevel( pSoldier) ) ) ) / ( gGameExternalOptions.ubRepairRateDivisor * gGameExternalOptions.ubAssignmentUnitsPerDay )); + usRepairPts = (UINT16) ((EffectiveMechanical( pSoldier ) * EffectiveDexterity( pSoldier, FALSE ) * (100 + ( 5 * EffectiveExpLevel( pSoldier) ) ) ) / ( gGameExternalOptions.ubRepairRateDivisor * gGameExternalOptions.ubAssignmentUnitsPerDay )); // calculate normal repair rate - what it would be if his stats were "normal" (ignoring drugs, fatigue, equipment condition) // and equipment was not a hindrance @@ -4673,11 +4673,11 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE { // return the bonus training pts of this instructor with this student,...if student null, simply assignment student skill of 0 and student wisdom of 100 INT16 sTrainingPts = 0; - INT8 bTraineeEffWisdom = 0; - INT8 bTraineeNatWisdom = 0; - INT8 bTraineeSkill = 0; - INT8 bTrainerEffSkill = 0; - INT8 bTrainerNatSkill = 0; + INT16 bTraineeEffWisdom = 0; + INT16 bTraineeNatWisdom = 0; + INT16 bTraineeSkill = 0; + INT16 bTrainerEffSkill = 0; + INT16 bTrainerNatSkill = 0; INT16 bTrainingBonus = 0; INT8 bOpinionFactor; @@ -4694,15 +4694,15 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE switch( bTrainStat ) { case( STRENGTH ): - bTrainerEffSkill = (INT8)EffectiveStrength ( pInstructor ); + bTrainerEffSkill = EffectiveStrength ( pInstructor, TRUE ); bTrainerNatSkill = pInstructor->stats.bStrength; break; case( DEXTERITY ): - bTrainerEffSkill = EffectiveDexterity ( pInstructor ); + bTrainerEffSkill = EffectiveDexterity ( pInstructor, TRUE ); bTrainerNatSkill = pInstructor->stats.bDexterity; break; case( AGILITY ): - bTrainerEffSkill = EffectiveAgility( pInstructor ); + bTrainerEffSkill = EffectiveAgility( pInstructor, TRUE ); bTrainerNatSkill = pInstructor->stats.bAgility; break; case( HEALTH ): @@ -4743,9 +4743,9 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE if( pStudent == NULL ) { // assume these default values - bTraineeEffWisdom = 100; - bTraineeNatWisdom = 100; - bTraineeSkill = 0; + bTraineeEffWisdom = 100; + bTraineeNatWisdom = 100; + bTraineeSkill = 0; bOpinionFactor = 0; } else @@ -4815,7 +4815,7 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE // SANDRO - Teaching Skill now increases the effective skill to determine if we can instruct other mercs if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pInstructor, TEACHING_NT )) { - if( bTraineeSkill >= (bTrainerEffSkill + gSkillTraitValues.ubTGEffectiveSkillValueForTeaching) ) + if( bTraineeSkill >= (bTrainerEffSkill + (INT16)(gSkillTraitValues.ubTGEffectiveSkillValueForTeaching)) ) return ( 0 ); } else if( bTraineeSkill >= bTrainerEffSkill ) @@ -4882,7 +4882,7 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE sTrainingPts += ( ( ( bTrainingBonus + (bFacilityModifier-100) + bOpinionFactor ) * sTrainingPts ) / 100 ); // adjust for instructor fatigue - ReducePointsForFatigue( pInstructor, (UINT16 *)&sTrainingPts ); + ReducePointsForFatigue( pInstructor, (UINT32 *)&sTrainingPts ); return( sTrainingPts ); } @@ -4994,7 +4994,7 @@ INT16 GetSoldierTrainingPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, UINT16 *pus sTrainingPts += ( ( bTrainingBonus * sTrainingPts ) / 100 ); // adjust for fatigue - ReducePointsForFatigue( pSoldier, (UINT16 *)&sTrainingPts ); + ReducePointsForFatigue( pSoldier, (UINT32 *)&sTrainingPts ); return( sTrainingPts ); } @@ -5110,7 +5110,7 @@ INT16 GetSoldierStudentPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, UINT16 *pusM sTrainingPts += ( ( bTrainingBonus * sTrainingPts ) / 100 ); // adjust for fatigue - ReducePointsForFatigue( pSoldier, (UINT16 *)&sTrainingPts ); + ReducePointsForFatigue( pSoldier, (UINT32 *)&sTrainingPts ); // now add in stuff for trainer @@ -5378,7 +5378,7 @@ INT16 GetTownTrainPtsForCharacter( SOLDIERTYPE *pTrainer, UINT16 *pusMaxPts ) // adjust for fatigue of trainer - ReducePointsForFatigue( pTrainer, (UINT16 *)&sTotalTrainingPts ); + ReducePointsForFatigue( pTrainer, (UINT32 *)&sTotalTrainingPts ); /* ARM: Decided this didn't make much sense - the guys I'm training damn well BETTER be loyal - and screw the rest! diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index bb10e437..016e9755 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -1442,14 +1442,14 @@ UINT32 VirtualSoldierDressWound( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pVictim, OB uiDressSkill = ( ( 7 * EffectiveMedical( pSoldier ) ) + // medical knowledge ( sStatus) + // state of medical kit (10 * EffectiveExpLevel( pSoldier ) ) + // battle injury experience - EffectiveDexterity( pSoldier ) ) / 10; // general "handiness" + EffectiveDexterity( pSoldier, FALSE ) ) / 10; // general "handiness" } else { uiDressSkill = ( ( 3 * EffectiveMedical( pSoldier ) ) + // medical knowledge ( 2 * sStatus) + // state of medical kit (10 * EffectiveExpLevel( pSoldier ) ) + // battle injury experience - EffectiveDexterity( pSoldier ) ) / 7; // general "handiness" + EffectiveDexterity( pSoldier, FALSE ) ) / 7; // general "handiness" } // try to use every AP that the merc has left diff --git a/Strategic/Facilities.cpp b/Strategic/Facilities.cpp index 7e63b6a8..95297d24 100644 --- a/Strategic/Facilities.cpp +++ b/Strategic/Facilities.cpp @@ -912,8 +912,8 @@ INT16 FacilityRiskResult( SOLDIERTYPE *pSoldier, UINT8 ubRiskType, UINT8 ubFacil INT16 Result = 0; INT32 iChance; - INT8 bBaseEffect; - UINT8 ubRange; + INT16 bBaseEffect; + UINT16 ubRange; // Read risk data directly from facility array. iChance = gFacilityTypes[ubFacilityType].AssignmentData[ubAssignmentType].Risk[ubRiskType].usChance; @@ -922,11 +922,11 @@ INT16 FacilityRiskResult( SOLDIERTYPE *pSoldier, UINT8 ubRiskType, UINT8 ubFacil // For now, only these variables can effect risk outcome. In the future there may be more effects, like traits // and personality, or even sex. - UINT8 ubStrength = EffectiveStrength( pSoldier ); - UINT8 ubAgility = EffectiveAgility( pSoldier ); - UINT8 ubDexterity = EffectiveDexterity( pSoldier ); + INT16 ubStrength = EffectiveStrength( pSoldier, FALSE ); + INT16 ubAgility = EffectiveAgility( pSoldier, FALSE ); + INT16 ubDexterity = EffectiveDexterity( pSoldier, FALSE ); UINT8 ubHealth = __min(pSoldier->stats.bLife, pSoldier->stats.bLifeMax); - UINT8 ubWisdom = EffectiveWisdom( pSoldier ); + INT16 ubWisdom = EffectiveWisdom( pSoldier ); UINT8 ubLeadership = EffectiveLeadership( pSoldier ); UINT8 ubExplosives = EffectiveExplosive( pSoldier ); UINT8 ubExpLevel = EffectiveExpLevel( pSoldier ); @@ -961,7 +961,7 @@ INT16 FacilityRiskResult( SOLDIERTYPE *pSoldier, UINT8 ubRiskType, UINT8 ubFacil sAbsoluteMinResult = bBaseEffect - ubRange; } - INT8 bCombinedStats; + INT16 bCombinedStats; // Begin calculating the effect of skills on increasing/reducing final result. Use a mix of stats to reach a range // of 0 to 100. @@ -969,52 +969,52 @@ INT16 FacilityRiskResult( SOLDIERTYPE *pSoldier, UINT8 ubRiskType, UINT8 ubFacil switch (ubRiskType) { case RISK_STRENGTH: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.3) + (ubExpLevel * 5)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.3) + (ubExpLevel * 5)); break; case RISK_DEXTERITY: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.4) + (ubExpLevel * 6)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.4) + (ubExpLevel * 6)); break; case RISK_AGILITY: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubExpLevel * 8)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubExpLevel * 8)); break; case RISK_HEALTH: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.5) + (ubExpLevel * 5)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.5) + (ubExpLevel * 5)); break; case RISK_WISDOM: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.6) + (ubExpLevel * 4)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.6) + (ubExpLevel * 4)); break; case RISK_MARKSMANSHIP: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.4) + (ubExpLevel * 4)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.4) + (ubExpLevel * 4)); break; case RISK_MEDICAL: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.3) + (ubDexterity * 0.4) + (ubExpLevel * 3)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.3) + (ubDexterity * 0.4) + (ubExpLevel * 3)); break; case RISK_MECHANICAL: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.3) + (ubDexterity * 0.5) + (ubExpLevel * 2)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.3) + (ubDexterity * 0.5) + (ubExpLevel * 2)); break; case RISK_LEADERSHIP: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.4) + (ubLeadership * 0.3) + (ubExpLevel * 3)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.4) + (ubLeadership * 0.3) + (ubExpLevel * 3)); break; case RISK_EXPLOSIVES: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.3) + (ubDexterity * 0.3) + (ubExpLevel * 2)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubAgility * 0.3) + (ubDexterity * 0.3) + (ubExpLevel * 2)); break; case RISK_INJURY: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubDexterity * 0.2) + (ubAgility * 0.4) + (ubExpLevel * 2)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubDexterity * 0.2) + (ubAgility * 0.4) + (ubExpLevel * 2)); break; case RISK_MORALE: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubLeadership * 0.4) + (ubExpLevel * 4)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubLeadership * 0.4) + (ubExpLevel * 4)); break; case RISK_FATIGUE: - bCombinedStats = (INT8)__min(100, (ubAgility * 0.1) + (ubStrength * 0.3) + (ubHealth * 0.2) + (ubExpLevel * 4)); + bCombinedStats = (INT16)__min(100, (ubAgility * 0.1) + (ubStrength * 0.3) + (ubHealth * 0.2) + (ubExpLevel * 4)); break; case RISK_DRUNK: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.5) + (ubHealth * 0.3) + (ubExpLevel * 2)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.5) + (ubHealth * 0.3) + (ubExpLevel * 2)); break; case RISK_LOYALTY_LOCAL: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.2) + (ubLeadership * 0.3) + (ubStrength * 0.1) + (ubExpLevel * 2) + (ubLocalLoyalty * 0.2) ); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.2) + (ubLeadership * 0.3) + (ubStrength * 0.1) + (ubExpLevel * 2) + (ubLocalLoyalty * 0.2) ); break; case RISK_LOYALTY_GLOBAL: - bCombinedStats = (INT8)__min(100, (ubWisdom * 0.3) + (ubLeadership * 0.3) + (ubExpLevel * 2) + (ubLocalLoyalty * 0.2)); + bCombinedStats = (INT16)__min(100, (ubWisdom * 0.3) + (ubLeadership * 0.3) + (ubExpLevel * 2) + (ubLocalLoyalty * 0.2)); break; } diff --git a/Strategic/Strategic Pathing.cpp b/Strategic/Strategic Pathing.cpp index c5f04ae1..9434f8c4 100644 --- a/Strategic/Strategic Pathing.cpp +++ b/Strategic/Strategic Pathing.cpp @@ -1291,7 +1291,7 @@ INT32 GetStrategicMvtSpeed( SOLDIERTYPE *pCharacter ) // avg of strength and agility * percentage health..very simple..replace later - iSpeed = ( INT32 )( ( pCharacter->stats.bAgility + pCharacter->stats.bStrength ) / 2 ); + iSpeed = ( INT32 )( ( pCharacter->stats.bAgility + pCharacter->stats.bStrength + pCharacter->bExtraStrength ) / 2 ); iSpeed *= ( INT32 )(( pCharacter->stats.bLife ) ); iSpeed /= ( INT32 )pCharacter->stats.bLifeMax; diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index b428bf4e..a5d07752 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -2854,7 +2854,7 @@ void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuo if ( OK_INSECTOR_MERC( pTeamSoldier ) && PythSpacesAway( sGridNo, pTeamSoldier->sGridNo ) < bDistance && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && SoldierTo3DLocationLineOfSightTest( pTeamSoldier, sGridNo, 0, 0, TRUE ) ) { - if ( usQuoteNum == 66 && (INT8) Random( 100 ) > EffectiveWisdom( pTeamSoldier ) ) + if ( usQuoteNum == 66 && (INT16) Random( 100 ) > EffectiveWisdom( pTeamSoldier ) ) { continue; } diff --git a/Tactical/Drugs And Alcohol.cpp b/Tactical/Drugs And Alcohol.cpp index 5df9c2ac..541a9cd6 100644 --- a/Tactical/Drugs And Alcohol.cpp +++ b/Tactical/Drugs And Alcohol.cpp @@ -364,107 +364,17 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier ) // only do the checks for the player team, as soldiers do not have a gMercProfiles if ( pSoldier->bTeam == gbPlayerNum) { - // Flugente 2012-05-25: the status drugs cause weird behaviour with the stat repairing behaviour of doctoring, so this is commented out till a working solution has been found - /* //////////////// STRENGTH //////////////// - // strength we would normally have right now - INT8 strength = gMercProfiles[ pSoldier->ubProfile ].bStrength;// Madd: commenting out this part b/c it breaks doctoring! - pSoldier->ubCriticalStatDamage[ DAMAGED_STAT_STRENGTH ]; - - INT8 strengthmodifier = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_STRENGTH ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_STRENGTH ]; - - // cap modifier at 25, as currently stats cant go above 127 (INT8) - strengthmodifier = min(25, strengthmodifier); - - UINT32 newstrength = max(1, strength + strengthmodifier); - newstrength = min(126, newstrength); - - pSoldier->stats.bStrength = (INT8)newstrength; - - if ( strengthmodifier > 0 ) - { - pSoldier->timeChanges.uiChangeStrengthTime = GetJA2Clock(); - pSoldier->usValueGoneUp |= ( STRENGTH_INCREASE ); - } - else if ( strengthmodifier < 0 ) - { - pSoldier->timeChanges.uiChangeStrengthTime = GetJA2Clock(); - pSoldier->usValueGoneUp &= ~( STRENGTH_INCREASE ); - } + pSoldier->bExtraStrength = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_STRENGTH ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_STRENGTH ]; //////////////// DEXTERITY //////////////// - // dexterity we would normally have right now - INT8 dexterity = gMercProfiles[ pSoldier->ubProfile ].bDexterity;// Madd: commenting out this part b/c it breaks doctoring! - pSoldier->ubCriticalStatDamage[ DAMAGED_STAT_DEXTERITY ]; - - INT8 dexteritymodifier = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_DEXTERITY ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_DEXTERITY ]; - - // cap modifier at 25, as currently stats cant go above 127 (INT8) - dexteritymodifier = min(25, dexteritymodifier); - - UINT32 newdexterity = max(1, dexterity + dexteritymodifier); - newdexterity = min(126, newdexterity); - - pSoldier->stats.bDexterity = newdexterity; - - if ( dexteritymodifier > 0 ) - { - pSoldier->timeChanges.uiChangeDexterityTime = GetJA2Clock(); - pSoldier->usValueGoneUp |= ( DEX_INCREASE ); - } - else if ( dexteritymodifier < 0 ) - { - pSoldier->timeChanges.uiChangeDexterityTime = GetJA2Clock(); - pSoldier->usValueGoneUp &= ~( DEX_INCREASE ); - } + pSoldier->bExtraDexterity = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_DEXTERITY ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_DEXTERITY ]; //////////////// AGILITY //////////////// - // agility we would normally have right now - INT8 agility = gMercProfiles[ pSoldier->ubProfile ].bAgility;// Madd: commenting out this part b/c it breaks doctoring! - pSoldier->ubCriticalStatDamage[ DAMAGED_STAT_AGILITY ]; - - INT8 agilitymodifier = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_AGILITY ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_AGILITY ]; - - // cap modifier at 25, as currently stats cant go above 127 (INT8) - agilitymodifier = min(25, agilitymodifier); - - UINT32 newagility = max(1, agility + agilitymodifier); - newagility = min(126, newagility); - - pSoldier->stats.bAgility = newagility; - - if ( agilitymodifier > 0 ) - { - pSoldier->timeChanges.uiChangeAgilityTime = GetJA2Clock(); - pSoldier->usValueGoneUp |= ( AGIL_INCREASE ); - } - else if ( agilitymodifier < 0 ) - { - pSoldier->timeChanges.uiChangeAgilityTime = GetJA2Clock(); - pSoldier->usValueGoneUp &= ~( AGIL_INCREASE ); - } + pSoldier->bExtraAgility = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_AGILITY ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_AGILITY ]; //////////////// WISDOM //////////////// - // wisdom we would normally have right now - INT8 wisdom = gMercProfiles[ pSoldier->ubProfile ].bWisdom;// Madd: commenting out this part b/c it breaks doctoring! - pSoldier->ubCriticalStatDamage[ DAMAGED_STAT_WISDOM ]; - - INT8 wisdommodifier = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_WISDOM ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_WISDOM ]; - - // cap modifier at 25, as currently stats cant go above 127 (INT8) - wisdommodifier = min(25, wisdommodifier); - - UINT32 newwisdom = max(1, wisdom + wisdommodifier); - newwisdom = min(126, newwisdom); - - pSoldier->stats.bWisdom = newwisdom; - - if ( wisdommodifier > 0 ) - { - pSoldier->timeChanges.uiChangeWisdomTime = GetJA2Clock(); - pSoldier->usValueGoneUp |= ( WIS_INCREASE ); - } - else if ( wisdommodifier < 0 ) - { - pSoldier->timeChanges.uiChangeWisdomTime = GetJA2Clock(); - pSoldier->usValueGoneUp &= ~( WIS_INCREASE ); - }*/ + pSoldier->bExtraWisdom = pSoldier->drugs.bDrugEffect[ DRUG_TYPE_WISDOM ] - pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_WISDOM ]; // if our sideeffect count is 1 (which should occur a while AFTER we took the drug), we suddenly become blind for a few turns... if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_BLIND ] == 0 && pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_BLIND ] == 1 ) diff --git a/Tactical/Handle Doors.cpp b/Tactical/Handle Doors.cpp index a386fb8f..29a26ca3 100644 --- a/Tactical/Handle Doors.cpp +++ b/Tactical/Handle Doors.cpp @@ -289,7 +289,7 @@ void InteractWithClosedDoor( SOLDIERTYPE *pSoldier, UINT8 ubHandleCode ) BOOLEAN DoTrapCheckOnStartingMenu( SOLDIERTYPE * pSoldier, DOOR * pDoor ) { - INT8 bDetectLevel; + INT16 bDetectLevel; if ( pDoor && pDoor->fLocked && pDoor->ubTrapID != NO_TRAP && pDoor->bPerceivedTrapped == DOOR_PERCEIVED_UNKNOWN ) { diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 3f8d2bc3..0a2cb129 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4599,7 +4599,8 @@ void SetOffBoobyTrap( ITEM_POOL * pItemPool ) BOOLEAN ContinuePastBoobyTrap( SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bLevel, INT32 iItemIndex, BOOLEAN fInStrategic, BOOLEAN *pfSaidQuote ) { BOOLEAN fBoobyTrapKnowledge; - INT8 bTrapDifficulty, bTrapDetectLevel; + INT8 bTrapDifficulty; + INT16 bTrapDetectLevel; OBJECTTYPE * pObj; pObj = &(gWorldItems[ iItemIndex ].object); @@ -5028,7 +5029,8 @@ BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT32 sGridNo, BOOLEAN f { INT32 sNextGridNo; // BOOLEAN fWorthChecking = FALSE, fProblemExists = FALSE, fDetectedProblem = FALSE; - UINT8 ubDetectLevel, ubDirection; + UINT16 ubDetectLevel; + UINT8 ubDirection; MAP_ELEMENT * pMapElement; UINT32 fCheckFlag; UINT32 uiWorldBombIndex; @@ -5451,7 +5453,8 @@ void ToggleItemGlow( BOOLEAN fOn ) BOOLEAN ContinuePastBoobyTrapInMapScreen( OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier ) { BOOLEAN fBoobyTrapKnowledge; - INT8 bTrapDifficulty, bTrapDetectLevel; + INT8 bTrapDifficulty; + INT16 bTrapDetectLevel; if ((*pObject)[0]->data.bTrap > 0) { diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index a26cfda2..a7e4ce3b 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11196,7 +11196,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier //swprintf( pStr, L"%s (%s) [%d%%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", INT8 accuracy = (UsingNewCTHSystem()==true?Weapon[ usItem ].nAccuracy:Weapon[ usItem ].bAccuracy); - accuracy *= accuracyheatmultiplicator; + accuracy = (INT8)(accuracy * accuracyheatmultiplicator); #ifdef CHINESE swprintf( pStr, ChineseSpecString4, #else @@ -11264,7 +11264,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier //Info for weapons INT8 accuracy = (UsingNewCTHSystem()==true?Weapon[ usItem ].nAccuracy:Weapon[ usItem ].bAccuracy); - accuracy *= accuracyheatmultiplicator; + accuracy = (INT8)(accuracy * accuracyheatmultiplicator); #ifdef CHINESE swprintf( pStr, L"%s [%d%]\n%s %d\n%s %d\n%s %d (%d)\n%s %s\n%s %1.1f %s", diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index c70da968..2d79a734 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -572,7 +572,7 @@ void UpdateSelectedSoldier( UINT16 usSoldierID, BOOLEAN fSelect ); void CheckForFacePanelStartAnims( SOLDIERTYPE *pSoldier, INT16 sPanelX, INT16 sPanelY ); void HandleSoldierFaceFlash( SOLDIERTYPE *pSoldier, INT16 sFaceX, INT16 sFaceY ); BOOLEAN PlayerExistsInSlot( UINT8 ubID ); -void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged ); // SADNRO - added argument +void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged, BOOLEAN fAugmented ); // SANDRO - added argument // Flugente - me too extern void UpdateItemHatches(); @@ -2755,61 +2755,61 @@ void RenderSMPanel( BOOLEAN *pfDirty ) mprintf( SM_CAMMO_PERCENT_X, SM_CAMMO_PERCENT_Y, L"%%" ); #endif - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeAgilityTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & AGIL_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_AGILITY] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeAgilityTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & AGIL_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_AGILITY] > 0 )) ? TRUE : FALSE), MercUnderTheInfluence(gpSMCurrentMerc, DRUG_TYPE_AGILITY)); // SANDRO - swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bAgility ); + swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bAgility + gpSMCurrentMerc->bExtraAgility ); FindFontRightCoordinates(SM_AGI_X, SM_AGI_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeDexterityTime,( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & DEX_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_DEXTERITY] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeDexterityTime,( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & DEX_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_DEXTERITY] > 0 )) ? TRUE : FALSE), MercUnderTheInfluence(gpSMCurrentMerc, DRUG_TYPE_DEXTERITY)); // SANDRO - swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bDexterity ); + swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bDexterity + gpSMCurrentMerc->bExtraDexterity ); FindFontRightCoordinates(SM_DEX_X, SM_DEX_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeStrengthTime, ( BOOLEAN )( gpSMCurrentMerc->usValueGoneUp & STRENGTH_INCREASE?TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_STRENGTH] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeStrengthTime, ( BOOLEAN )( gpSMCurrentMerc->usValueGoneUp & STRENGTH_INCREASE?TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_STRENGTH] > 0 )) ? TRUE : FALSE), MercUnderTheInfluence(gpSMCurrentMerc, DRUG_TYPE_STRENGTH)); // SANDRO - swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bStrength ); + swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bStrength + gpSMCurrentMerc->bExtraStrength ); FindFontRightCoordinates(SM_STR_X, SM_STR_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeLeadershipTime, ( BOOLEAN )( gpSMCurrentMerc->usValueGoneUp & LDR_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_LEADERSHIP] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeLeadershipTime, ( BOOLEAN )( gpSMCurrentMerc->usValueGoneUp & LDR_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_LEADERSHIP] > 0 )) ? TRUE : FALSE), FALSE); // SANDRO swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bLeadership ); FindFontRightCoordinates(SM_CHAR_X, SM_CHAR_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeWisdomTime,( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & WIS_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_WISDOM] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeWisdomTime,( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & WIS_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_WISDOM] > 0 )) ? TRUE : FALSE), MercUnderTheInfluence(gpSMCurrentMerc, DRUG_TYPE_WISDOM)); // SANDRO - swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bWisdom ); + swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bWisdom + gpSMCurrentMerc->bExtraWisdom ); FindFontRightCoordinates(SM_WIS_X, SM_WIS_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeLevelTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & LVL_INCREASE? TRUE: FALSE ), FALSE ); + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeLevelTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & LVL_INCREASE? TRUE: FALSE ), FALSE , FALSE); - swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bExpLevel ); + swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bExpLevel + gpSMCurrentMerc->bExtraExpLevel ); FindFontRightCoordinates(SM_EXPLVL_X, SM_EXPLVL_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMarksmanshipTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MRK_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MARKSMANSHIP] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMarksmanshipTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MRK_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MARKSMANSHIP] > 0 )) ? TRUE : FALSE), FALSE); // SANDRO swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bMarksmanship ); FindFontRightCoordinates(SM_MRKM_X, SM_MRKM_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeExplosivesTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & EXP_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_EXPLOSIVES] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeExplosivesTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & EXP_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_EXPLOSIVES] > 0 )) ? TRUE : FALSE), FALSE); // SANDRO swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bExplosive ); FindFontRightCoordinates(SM_EXPL_X, SM_EXPL_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMechanicalTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MECH_INCREASE ? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MECHANICAL] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMechanicalTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MECH_INCREASE ? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MECHANICAL] > 0 )) ? TRUE : FALSE), FALSE); // SANDRO swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bMechanical ); FindFontRightCoordinates(SM_MECH_X, SM_MECH_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); mprintf( usX, usY , sString ); - UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMedicalTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MED_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MEDICAL] > 0 )) ? TRUE : FALSE)); // SANDRO + UpdateStatColor( gpSMCurrentMerc->timeChanges.uiChangeMedicalTime, ( BOOLEAN ) ( gpSMCurrentMerc->usValueGoneUp & MED_INCREASE? TRUE: FALSE ), ( BOOLEAN ) ( ( gGameOptions.fNewTraitSystem && ( gpSMCurrentMerc->ubCriticalStatDamage[DAMAGED_STAT_MEDICAL] > 0 )) ? TRUE : FALSE), FALSE); // SANDRO swprintf( sString, L"%2d", gpSMCurrentMerc->stats.bMedical ); FindFontRightCoordinates(SM_MED_X, SM_MED_Y ,SM_STATS_WIDTH ,SM_STATS_HEIGHT ,sString, BLOCKFONT2, &usX, &usY); @@ -3057,7 +3057,7 @@ void RenderSMPanel( BOOLEAN *pfDirty ) } -void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged ) // SANDRO - added argument +void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged, BOOLEAN fAugmented ) // SANDRO - added argument // Flugente - me too { if ( gpSMCurrentMerc->stats.bLife >= OKLIFE ) { @@ -3077,6 +3077,10 @@ void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged ) // S SetFontForeground( FONT_RED ); } } + else if ( fAugmented ) + { + SetRGBFontForeground( 250, 5, 250 ); + } else { SetFontBackground( FONT_MCOLOR_BLACK ); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 219c272c..704d6e4f 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -3042,7 +3042,7 @@ UINT32 CalculateCarriedWeight( SOLDIERTYPE * pSoldier ) UINT32 uiTotalWeight = 0; UINT32 uiPercent; UINT8 ubLoop; - UINT16 ubStrengthForCarrying; + UINT32 ubStrengthForCarrying; //Pulmu: Changes for dynamic ammo weight for( ubLoop = 0; ubLoop < pSoldier->inv.size(); ubLoop++) @@ -3053,7 +3053,7 @@ UINT32 CalculateCarriedWeight( SOLDIERTYPE * pSoldier ) // for now, assume soldiers can carry 1/2 their strength in KGs without penalty. // instead of multiplying by 100 for percent, and then dividing by 10 to account // for weight units being in 10ths of kilos, not kilos... we just start with 10 instead of 100! - ubStrengthForCarrying = EffectiveStrength( pSoldier ); + ubStrengthForCarrying = EffectiveStrength( pSoldier, FALSE ); if ( ubStrengthForCarrying > 80 ) { ubStrengthForCarrying += (ubStrengthForCarrying - 80); @@ -12991,17 +12991,17 @@ INT32 GetGunAccuracy( OBJECTTYPE *pObj ) if ( gGameOptions.fWeaponOverheating ) { FLOAT overheatdamagepercentage = GetGunOverheatDamagePercentage( pObj ); - FLOAT accuracymalus = (max((FLOAT)1.0, overheatdamagepercentage) - (FLOAT)1.0) * 0.1; - accuracyheatmultiplicator = max((FLOAT)0.0, (FLOAT)1.0 - accuracymalus); + FLOAT accuracymalus = (max(1.0f, overheatdamagepercentage) - 1.0f) * 0.1; + accuracyheatmultiplicator = max(0.0f, 1.0f - accuracymalus); } if(UsingNewCTHSystem() == false) - return(accuracyheatmultiplicator * Weapon[pObj->usItem].bAccuracy); + return( (INT32)(accuracyheatmultiplicator * Weapon[pObj->usItem].bAccuracy) ); INT32 bonus = 0; if ( pObj->exists() == true ) { - bonus = accuracyheatmultiplicator * Weapon[Item[pObj->usItem].uiIndex].nAccuracy; + bonus = (INT32)(accuracyheatmultiplicator * Weapon[Item[pObj->usItem].uiIndex].nAccuracy); bonus = (bonus * (*pObj)[0]->data.gun.bGunStatus) / 100; INT32 iModifier = GetAccuracyModifier( pObj ); @@ -13487,7 +13487,7 @@ BOOLEAN OBJECTTYPE::TransformObject( SOLDIERTYPE * pSoldier, UINT8 ubStatusIndex UINT16 usOrigItem = this->usItem; UINT32 uiOrigClass = Item[this->usItem].usItemClass; UINT8 ubOrigNumObjects = this->ubNumberOfObjects; - UINT8 ubOrigStatus = (*this)[ubStatusIndex]->data.objectStatus; //Madd: moved this up here, since it was getting corrupted when applied to multiple results -- all statuses were coming back as 0 + INT16 ubOrigStatus = (*this)[ubStatusIndex]->data.objectStatus; //Madd: moved this up here, since it was getting corrupted when applied to multiple results -- all statuses were coming back as 0 UINT16 usAPCost = 0; INT32 iBPCost = 0; diff --git a/Tactical/Keys.cpp b/Tactical/Keys.cpp index e8e68165..b46062f8 100644 --- a/Tactical/Keys.cpp +++ b/Tactical/Keys.cpp @@ -306,7 +306,8 @@ BOOLEAN AttemptToLockDoor( SOLDIERTYPE * pSoldier, DOOR * pDoor ) BOOLEAN AttemptToCrowbarLock( SOLDIERTYPE * pSoldier, DOOR * pDoor ) { INT32 iResult; - INT8 bStress, bSlot; + INT16 bStress; + INT8 bSlot; bSlot = FindUsableCrowbar( pSoldier ); if ( bSlot == ITEM_NOT_FOUND ) @@ -339,7 +340,7 @@ BOOLEAN AttemptToCrowbarLock( SOLDIERTYPE * pSoldier, DOOR * pDoor ) } // possibly damage crowbar - bStress = __min( EffectiveStrength( pSoldier ), LockTable[pDoor->ubLockID].ubSmashDifficulty + 30 ); + bStress = __min( EffectiveStrength( pSoldier, FALSE ), LockTable[pDoor->ubLockID].ubSmashDifficulty + 30 ); // reduce crowbar status by random % between 0 and 5% DamageObj( &(pSoldier->inv[ bSlot ]), (INT8) PreRandom( bStress / 20 ) ); @@ -597,7 +598,7 @@ BOOLEAN AttemptToUntrapDoor( SOLDIERTYPE * pSoldier, DOOR * pDoor ) BOOLEAN ExamineDoorForTraps( SOLDIERTYPE * pSoldier, DOOR * pDoor ) { // Check to see if there is a trap or not on this door - INT8 bDetectLevel; + INT16 bDetectLevel; if (pDoor->ubTrapID == NO_TRAP) { @@ -632,7 +633,7 @@ BOOLEAN ExamineDoorForTraps( SOLDIERTYPE * pSoldier, DOOR * pDoor ) BOOLEAN HasDoorTrapGoneOff( SOLDIERTYPE * pSoldier, DOOR * pDoor ) { // Check to see if the soldier causes the trap to go off - INT8 bDetectLevel; + INT16 bDetectLevel; if (pDoor->ubTrapID != NO_TRAP) { diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 278296f4..fdf110f8 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -7339,7 +7339,7 @@ void CalcTargetMovementOffset( SOLDIERTYPE *pShooter, SOLDIERTYPE *pTarget, OBJE // Now let's figure out how competent our shooter is. FLOAT iCombinedSkill = gGameCTHConstants.MOVEMENT_MRK * EffectiveMarksmanship( pShooter ); iCombinedSkill += gGameCTHConstants.MOVEMENT_WIS * EffectiveWisdom( pShooter ); - iCombinedSkill += gGameCTHConstants.MOVEMENT_DEX * EffectiveDexterity( pShooter ); + iCombinedSkill += gGameCTHConstants.MOVEMENT_DEX * EffectiveDexterity( pShooter, FALSE ); iCombinedSkill += gGameCTHConstants.MOVEMENT_EXP_LEVEL * (EffectiveExpLevel( pShooter ) * 10); // Average @@ -7514,7 +7514,7 @@ void CalcRangeCompensationOffset( SOLDIERTYPE *pShooter, FLOAT *dMuzzleOffsetY, // matter, and a skilled shooter will have a far greater chance of guessing the extra muzzle angle required. FLOAT iCombinedSkill = gGameCTHConstants.MOVEMENT_MRK * EffectiveMarksmanship( pShooter ); iCombinedSkill += gGameCTHConstants.MOVEMENT_WIS * EffectiveWisdom( pShooter ); - iCombinedSkill += gGameCTHConstants.MOVEMENT_DEX * EffectiveDexterity( pShooter ); + iCombinedSkill += gGameCTHConstants.MOVEMENT_DEX * EffectiveDexterity( pShooter, FALSE ); iCombinedSkill += gGameCTHConstants.MOVEMENT_EXP_LEVEL * (EffectiveExpLevel( pShooter ) * 10); // Average @@ -7839,7 +7839,7 @@ UINT32 CalcCounterForceFrequency(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon) { INT8 traitLoop; - FLOAT iCounterForceFrequency = gGameCTHConstants.RECOIL_COUNTER_FREQUENCY_AGI * EffectiveAgility(pShooter); + FLOAT iCounterForceFrequency = gGameCTHConstants.RECOIL_COUNTER_FREQUENCY_AGI * EffectiveAgility(pShooter, FALSE); iCounterForceFrequency += gGameCTHConstants.RECOIL_COUNTER_FREQUENCY_EXP_LEVEL * EffectiveExpLevel(pShooter) * 10; // Average @@ -7895,8 +7895,8 @@ FLOAT CalcCounterForceMax(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT8 uiSt if(uiStance == 0) uiStance = gAnimControl[ pShooter->usAnimState ].ubHeight; - FLOAT iCounterForceMax = gGameCTHConstants.RECOIL_MAX_COUNTER_STR * EffectiveStrength(pShooter); - iCounterForceMax += gGameCTHConstants.RECOIL_MAX_COUNTER_AGI * EffectiveAgility(pShooter); + FLOAT iCounterForceMax = gGameCTHConstants.RECOIL_MAX_COUNTER_STR * EffectiveStrength(pShooter, FALSE); + iCounterForceMax += gGameCTHConstants.RECOIL_MAX_COUNTER_AGI * EffectiveAgility(pShooter, FALSE); iCounterForceMax += gGameCTHConstants.RECOIL_MAX_COUNTER_EXP_LEVEL * EffectiveExpLevel(pShooter) * 10; FLOAT iDivisor = gGameCTHConstants.RECOIL_MAX_COUNTER_STR + @@ -7921,9 +7921,9 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT { INT8 traitLoop; - FLOAT iCounterForceAccuracy = gGameCTHConstants.RECOIL_COUNTER_ACCURACY_DEX * EffectiveDexterity(pShooter); + FLOAT iCounterForceAccuracy = gGameCTHConstants.RECOIL_COUNTER_ACCURACY_DEX * EffectiveDexterity(pShooter, FALSE); iCounterForceAccuracy += gGameCTHConstants.RECOIL_COUNTER_ACCURACY_WIS * EffectiveWisdom(pShooter); - iCounterForceAccuracy += gGameCTHConstants.RECOIL_COUNTER_ACCURACY_AGI * EffectiveAgility(pShooter); + iCounterForceAccuracy += gGameCTHConstants.RECOIL_COUNTER_ACCURACY_AGI * EffectiveAgility(pShooter, FALSE); iCounterForceAccuracy += gGameCTHConstants.RECOIL_COUNTER_ACCURACY_EXP_LEVEL * EffectiveExpLevel(pShooter) * 10; FLOAT iDivisor = gGameCTHConstants.RECOIL_COUNTER_ACCURACY_DEX + diff --git a/Tactical/LOS.h b/Tactical/LOS.h index d7456745..f6588706 100644 --- a/Tactical/LOS.h +++ b/Tactical/LOS.h @@ -236,10 +236,10 @@ FLOAT CalcCounterForceChange( SOLDIERTYPE * pShooter, UINT32 uiCounterForceAccur // HEADROCK HAM 4: Required for shooting mechanic extern INT8 EffectiveMarksmanship( SOLDIERTYPE * pSoldier ); -extern INT8 EffectiveWisdom( SOLDIERTYPE * pSoldier ); +extern INT16 EffectiveWisdom( SOLDIERTYPE * pSoldier ); extern INT8 EffectiveExpLevel( SOLDIERTYPE * pSoldier ); -extern INT8 EffectiveDexterity( SOLDIERTYPE * pSoldier ); -extern INT8 EffectiveStrength( SOLDIERTYPE * pSoldier ); -extern INT8 EffectiveAgility( SOLDIERTYPE * pSoldier ); +extern INT16 EffectiveDexterity( SOLDIERTYPE * pSoldier, BOOLEAN fTrainer ); +extern INT16 EffectiveStrength( SOLDIERTYPE * pSoldier, BOOLEAN fTrainer ); +extern INT16 EffectiveAgility( SOLDIERTYPE * pSoldier, BOOLEAN fTrainer ); #endif \ No newline at end of file diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index af5dc378..730b2ab1 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -1726,9 +1726,9 @@ INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubAddTurningCos return sAPCost; } -INT8 CalcAimSkill( SOLDIERTYPE * pSoldier, UINT16 usWeapon ) +INT16 CalcAimSkill( SOLDIERTYPE * pSoldier, UINT16 usWeapon ) { - INT8 bAimSkill; + INT16 bAimSkill; if ( Item[ usWeapon ].usItemClass == IC_GUN || Item[ usWeapon ].usItemClass == IC_LAUNCHER ) { @@ -1740,7 +1740,7 @@ INT8 CalcAimSkill( SOLDIERTYPE * pSoldier, UINT16 usWeapon ) //if ( Item[ usInHand ].usItemClass == IC_BLADE ) { // KNIVES: modify aiming cost by avg of attacker's DEXTERITY & AGILITY - bAimSkill = ( EffectiveDexterity( pSoldier ) + EffectiveAgility( pSoldier ) ) / 2; + bAimSkill = ( EffectiveDexterity( pSoldier, FALSE ) + EffectiveAgility( pSoldier, FALSE ) ) / 2; //return( 4 ); } return( bAimSkill ); @@ -1938,7 +1938,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurni UINT32 uiMercFlags; UINT16 usTargID; INT16 bFullAPs; - INT8 bAimSkill; + INT16 bAimSkill; INT16 bAPCost = APBPConstants[AP_MIN_AIM_ATTACK]; BOOLEAN fAddingTurningCost = FALSE; BOOLEAN fAddingRaiseGunCost = FALSE; diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index 92000615..002947f6 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -46,6 +46,7 @@ #include "Campaign Types.h" //#include "Queen Command.h" + #include "text.h" // added by Flugente #endif #include "Animation Control.h" @@ -2268,8 +2269,20 @@ void CreateZombiefromCorpse( ROTTING_CORPSE * pCorpse, UINT16 usAnimState ) pNewSoldier->bPoisonAbsorption = 200 + Random(100); ////////////////////////////////////////////////////////////////////// - memcpy( &(pNewSoldier->name), &(pCorpse->name), sizeof(CHAR16) * 10 ); - pNewSoldier->name[9] = '\0'; + if ( !memcmp( pCorpse->name, TacticalStr[ CIV_TEAM_MINER_NAME ], sizeof(pCorpse->name) ) + || !memcmp( pCorpse->name, TacticalStr[ MILITIA_TEAM_MERC_NAME ], sizeof(pCorpse->name) ) + || !memcmp( pCorpse->name, TacticalStr[ CREATURE_TEAM_MERC_NAME ], sizeof(pCorpse->name) ) + || !memcmp( pCorpse->name, TacticalStr[ CIV_TEAM_MERC_NAME ], sizeof(pCorpse->name) ) + || !memcmp( pCorpse->name, TacticalStr[ ZOMBIE_TEAM_MERC_NAME ], sizeof(pCorpse->name) ) + || !memcmp( pCorpse->name, TacticalStr[ ENEMY_TEAM_MERC_NAME ], sizeof(pCorpse->name) ) ) + { + swprintf( pNewSoldier->name, TacticalStr[ ZOMBIE_TEAM_MERC_NAME ] ); + } + else + { + memcpy( &(pNewSoldier->name), &(pCorpse->name), sizeof(CHAR16) * 10 ); + pNewSoldier->name[9] = '\0'; + } // add skills according to difficulty level switch( gGameExternalOptions.sZombieDifficultyLevel ) @@ -2369,6 +2382,65 @@ void CreateZombiefromCorpse( ROTTING_CORPSE * pCorpse, UINT16 usAnimState ) // Set a pending animation to change stance first... //SendChangeSoldierStanceEvent( pNewSoldier, ANIM_CROUCH ); + // search for armour and equip if found + if ( gGameExternalOptions.fZombieRiseWithArmour ) + { + BOOLEAN fHelmetFound = FALSE; + BOOLEAN fVestFound = FALSE; + BOOLEAN fPantsFound = FALSE; + + ITEM_POOL * pItemPool, * pItemPoolNext; + + GetItemPool( pCorpse->def.sGridNo, &pItemPool, pCorpse->def.bLevel ); + + while( pItemPool && ( !fHelmetFound || !fVestFound ||!fPantsFound ) ) + { + pItemPoolNext = pItemPool->pNext; + + OBJECTTYPE* pObj = &(gWorldItems[ pItemPool->iItemIndex ].object); + + if ( Item[ pObj->usItem ].usItemClass == IC_ARMOUR ) + { + switch (Armour[Item[pObj->usItem].ubClassIndex].ubArmourClass) + { + case ARMOURCLASS_HELMET: + { + if( !fHelmetFound && AutoPlaceObject(pNewSoldier, pObj, FALSE)) + { + // remove item from the ground + RemoveItemFromPool( pCorpse->def.sGridNo, pItemPool->iItemIndex, pCorpse->def.bLevel ); + fHelmetFound = TRUE; + } + break; + } + case ARMOURCLASS_VEST: + { + if( !fVestFound && AutoPlaceObject(pNewSoldier, pObj, FALSE)) + { + // remove item from the ground + RemoveItemFromPool( pCorpse->def.sGridNo, pItemPool->iItemIndex, pCorpse->def.bLevel ); + fVestFound = TRUE; + } + break; + } + case ARMOURCLASS_LEGGINGS: + { + if( !fPantsFound && AutoPlaceObject(pNewSoldier, pObj, FALSE)) + { + // remove item from the ground + RemoveItemFromPool( pCorpse->def.sGridNo, pItemPool->iItemIndex, pCorpse->def.bLevel ); + fPantsFound = TRUE; + } + break; + } + default: + break; + } + } + + pItemPool = pItemPoolNext; + } + } // Change to standing,unless we can getup with an animation pNewSoldier->EVENT_InitNewSoldierAnim( STANDING, 0, TRUE ); diff --git a/Tactical/SkillCheck.cpp b/Tactical/SkillCheck.cpp index 75c9f01a..2d56cb3a 100644 --- a/Tactical/SkillCheck.cpp +++ b/Tactical/SkillCheck.cpp @@ -18,7 +18,7 @@ #include "Soldier Control.h" #endif -INT8 EffectiveStrength( SOLDIERTYPE *pSoldier) +INT16 EffectiveStrength( SOLDIERTYPE *pSoldier, BOOLEAN fTrainer ) { INT8 bBandaged; INT32 iEffStrength; @@ -29,9 +29,17 @@ INT8 EffectiveStrength( SOLDIERTYPE *pSoldier) bBandaged = pSoldier->stats.bLifeMax - pSoldier->stats.bLife - pSoldier->bBleeding; if (pSoldier->stats.bStrength > 0) - { - iEffStrength = ( pSoldier->stats.bStrength )/ 2; - iEffStrength += ( (pSoldier->stats.bStrength ) / 2) * (pSoldier->stats.bLife + bBandaged / 2) / (pSoldier->stats.bLifeMax); + { + if ( fTrainer ) + { + iEffStrength = pSoldier->stats.bStrength / 2; + iEffStrength += ( pSoldier->stats.bStrength / 2) * (pSoldier->stats.bLife + bBandaged / 2) / (pSoldier->stats.bLifeMax); + } + else + { + iEffStrength = ( pSoldier->stats.bStrength + pSoldier->bExtraStrength )/ 2; + iEffStrength += ( (pSoldier->stats.bStrength + pSoldier->bExtraStrength) / 2) * (pSoldier->stats.bLife + bBandaged / 2) / (pSoldier->stats.bLifeMax); + } } else { @@ -41,27 +49,32 @@ INT8 EffectiveStrength( SOLDIERTYPE *pSoldier) // ATE: Make sure at least 2... iEffStrength = __max( iEffStrength, 2 ); - return( (INT8) iEffStrength ); + return( (INT16) iEffStrength ); } -INT8 EffectiveWisdom( SOLDIERTYPE * pSoldier ) +INT16 EffectiveWisdom( SOLDIERTYPE * pSoldier) { INT32 iEffWisdom; iEffWisdom = pSoldier->stats.bWisdom; + iEffWisdom += pSoldier->bExtraWisdom; + iEffWisdom = EffectStatForBeingDrunk( pSoldier, iEffWisdom ); - return( (INT8) iEffWisdom ); + return( (INT16) iEffWisdom ); } -INT8 EffectiveAgility( SOLDIERTYPE * pSoldier ) +INT16 EffectiveAgility( SOLDIERTYPE * pSoldier, BOOLEAN fTrainer ) { INT32 iEffAgility; iEffAgility = pSoldier->stats.bAgility; + if ( !fTrainer ) + iEffAgility += pSoldier->bExtraAgility; + iEffAgility = EffectStatForBeingDrunk( pSoldier, iEffAgility ); if ( pSoldier->sWeightCarriedAtTurnStart > 100 ) @@ -69,7 +82,7 @@ INT8 EffectiveAgility( SOLDIERTYPE * pSoldier ) iEffAgility = (iEffAgility * 100) / pSoldier->sWeightCarriedAtTurnStart; } - return( (INT8) iEffAgility ); + return( (INT16) iEffAgility ); } @@ -164,6 +177,8 @@ INT8 EffectiveExpLevel( SOLDIERTYPE * pSoldier ) iEffExpLevel -= 1; } } + + iEffExpLevel += pSoldier->bExtraExpLevel; if (iEffExpLevel > 10) { @@ -192,15 +207,18 @@ INT8 EffectiveMarksmanship( SOLDIERTYPE * pSoldier ) return( (INT8) iEffMarksmanship ); } -INT8 EffectiveDexterity( SOLDIERTYPE * pSoldier ) +INT16 EffectiveDexterity( SOLDIERTYPE * pSoldier, BOOLEAN fTrainer ) { INT32 iEffDexterity; iEffDexterity = pSoldier->stats.bDexterity; + if ( !fTrainer ) + iEffDexterity += pSoldier->bExtraDexterity; + iEffDexterity = EffectStatForBeingDrunk( pSoldier, iEffDexterity ); - return( (INT8) iEffDexterity ); + return( (INT16) iEffDexterity ); } @@ -220,7 +238,7 @@ UINT8 GetPenaltyForFatigue( SOLDIERTYPE *pSoldier ) return( ubPercentPenalty ); } -void ReducePointsForFatigue( SOLDIERTYPE *pSoldier, UINT16 *pusPoints ) +void ReducePointsForFatigue( SOLDIERTYPE *pSoldier, UINT32 *pusPoints ) { *pusPoints -= (*pusPoints * GetPenaltyForFatigue( pSoldier )) / 100; } @@ -259,7 +277,7 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) // adjust skill based on wisdom (knowledge) iSkill = iSkill * (EffectiveWisdom( pSoldier ) + 100) / 200; // and dexterity (clumsy?) - iSkill = iSkill * (EffectiveDexterity( pSoldier ) + 100) / 200; + iSkill = iSkill * (EffectiveDexterity( pSoldier, FALSE ) + 100) / 200; // factor in experience iSkill = iSkill + EffectiveExpLevel( pSoldier ) * 3; @@ -310,7 +328,7 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) { break; } - iSkill = (iSkill * 3 + EffectiveDexterity( pSoldier ) ) / 4; + iSkill = (iSkill * 3 + EffectiveDexterity( pSoldier, FALSE ) ) / 4; // SANDRO - STOMP traits - Demolitions trait detonator attaching bonus if ( gGameOptions.fNewTraitSystem ) @@ -401,7 +419,7 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) } } - iSkill += EffectiveDexterity( pSoldier ) * 2; + iSkill += EffectiveDexterity( pSoldier, FALSE ) * 2; iSkill += EffectiveExpLevel( pSoldier ) * 10; iSkill = iSkill / 10; // bring the value down to a percentage @@ -445,7 +463,7 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) break; } } - iSkill += EffectiveDexterity( pSoldier ) * 2; + iSkill += EffectiveDexterity( pSoldier, FALSE ) * 2; iSkill += EffectiveExpLevel( pSoldier ) * 10; iSkill = iSkill / 10; // bring the value down to a percentage // penalty based on poor wisdom @@ -475,12 +493,12 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) case OPEN_WITH_CROWBAR: // Add for crowbar... - iSkill = EffectiveStrength( pSoldier ) + 20; + iSkill = EffectiveStrength( pSoldier, FALSE ) + 20; fForceDamnSound = TRUE; break; case SMASH_DOOR_CHECK: - iSkill = EffectiveStrength( pSoldier ); + iSkill = EffectiveStrength( pSoldier, FALSE ); // SANDRO - STOMP traits - Martial Arts trait kick doors bonus if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT )) { @@ -519,7 +537,7 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) // adjust skill based on wisdom (knowledge) iSkill = iSkill * (EffectiveWisdom( pSoldier ) + 100) / 200; // and dexterity (clumsy?) - iSkill = iSkill * (EffectiveDexterity( pSoldier ) + 100) / 200; + iSkill = iSkill * (EffectiveDexterity( pSoldier, FALSE ) + 100) / 200; // factor in experience iSkill = iSkill + EffectiveExpLevel( pSoldier ) * 3; @@ -777,11 +795,11 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) } -INT8 CalcTrapDetectLevel( SOLDIERTYPE * pSoldier, BOOLEAN fExamining ) +INT16 CalcTrapDetectLevel( SOLDIERTYPE * pSoldier, BOOLEAN fExamining ) { // return the level of trap which the guy is able to detect - INT8 bDetectLevel; + INT16 bDetectLevel; // formula: 1 pt for every exp_level // plus 1 pt for every 40 explosives diff --git a/Tactical/SkillCheck.h b/Tactical/SkillCheck.h index 72d63fe5..b7955f2d 100644 --- a/Tactical/SkillCheck.h +++ b/Tactical/SkillCheck.h @@ -5,20 +5,20 @@ #include "types.h" #include "Soldier Control.h" -extern void ReducePointsForFatigue( SOLDIERTYPE *pSoldier, UINT16 *pusPoints ); +extern void ReducePointsForFatigue( SOLDIERTYPE *pSoldier, UINT32 *pusPoints ); extern INT32 GetSkillCheckPenaltyForFatigue( SOLDIERTYPE *pSoldier, INT32 iSkill ); extern INT32 SkillCheck( SOLDIERTYPE *pSoldier, INT8 bReason, INT8 bDifficulty ); -extern INT8 CalcTrapDetectLevel( SOLDIERTYPE *pSoldier, BOOLEAN fExamining ); +extern INT16 CalcTrapDetectLevel( SOLDIERTYPE *pSoldier, BOOLEAN fExamining ); -extern INT8 EffectiveStrength( SOLDIERTYPE *pSoldier ); -extern INT8 EffectiveWisdom( SOLDIERTYPE *pSoldier ); -extern INT8 EffectiveAgility( SOLDIERTYPE *pSoldier ); +extern INT16 EffectiveStrength( SOLDIERTYPE *pSoldier, BOOLEAN fTrainer ); +extern INT16 EffectiveWisdom( SOLDIERTYPE *pSoldier ); +extern INT16 EffectiveAgility( SOLDIERTYPE *pSoldier, BOOLEAN fTrainer ); extern INT8 EffectiveMechanical( SOLDIERTYPE *pSoldier ); extern INT8 EffectiveExplosive( SOLDIERTYPE *pSoldier ); extern INT8 EffectiveLeadership( SOLDIERTYPE *pSoldier ); extern INT8 EffectiveMarksmanship( SOLDIERTYPE *pSoldier ); -extern INT8 EffectiveDexterity( SOLDIERTYPE *pSoldier ); +extern INT16 EffectiveDexterity( SOLDIERTYPE *pSoldier, BOOLEAN fTrainer ); extern INT8 EffectiveExpLevel( SOLDIERTYPE *pSoldier ); extern INT8 EffectiveMedical( SOLDIERTYPE *pSoldier ); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 99a2da63..b354ce66 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1914,9 +1914,9 @@ INT16 SOLDIERTYPE::CalcActionPoints( void ) // 2 * this->stats.bLifeMax + // 2 * EffectiveDexterity( this ) ) + 20) / 40); ubPoints = 20 + (((10 * EffectiveExpLevel( this ) + - 3 * EffectiveAgility( this ) + + 3 * EffectiveAgility( this, FALSE ) + 2 * this->stats.bLifeMax + - 2 * EffectiveDexterity( this ) ) + 5) / 10); + 2 * EffectiveDexterity( this, FALSE ) ) + 5) / 10); //if (GameOption[INCREASEDAP] % 2 == 1) //points += APBPConstants[AP_INCREASE]; @@ -7063,6 +7063,9 @@ void SOLDIERTYPE::EVENT_BeginMercTurn( BOOLEAN fFromRealTime, INT32 iRealTimeCou this->aiData.bUnderFire--; } + // Flugente: reset extra stats. Currently they only depend on drug effects, and those are reset every turn + this->ResetExtraStats(); + // ATE: Add decay effect sfor drugs... if ( fFromRealTime ) //&& iRealTimeCounter % 300 ) { @@ -8085,7 +8088,8 @@ void CalculateSoldierAniSpeed( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pStatsSoldier UINT32 uiTerrainDelay; UINT32 uiSpeed = 0; - INT8 bBreathDef, bLifeDef, bAgilDef; + INT8 bBreathDef, bLifeDef; + INT16 bAgilDef; INT8 bAdditional = 0; // for those animations which have a speed of zero, we have to calculate it @@ -8208,7 +8212,7 @@ void CalculateSoldierAniSpeed( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pStatsSoldier if ( bBreathDef > 30 ) bBreathDef = 30; - bAgilDef = 50 - ( EffectiveAgility( pStatsSoldier ) / 4 ); + bAgilDef = 50 - ( EffectiveAgility( pStatsSoldier, FALSE ) / 4 ); bLifeDef = 50 - ( pStatsSoldier->stats.bLife / 2 ); uiTerrainDelay += ( bLifeDef + bBreathDef + bAgilDef + bAdditional ); @@ -8833,7 +8837,7 @@ UINT32 SleepDartSuccumbChance( SOLDIERTYPE * pSoldier ) INT16 bEffectiveStrength; // figure out base chance of succumbing, - bEffectiveStrength = EffectiveStrength( pSoldier ); + bEffectiveStrength = EffectiveStrength( pSoldier, TRUE ); if (bEffectiveStrength > 90) { @@ -9428,7 +9432,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sPo INT16 sTestOne, sTestTwo, sChanceToDrop; INT8 bVisible = -1; - sTestOne = EffectiveStrength( this ); + sTestOne = EffectiveStrength( this, FALSE ); sTestTwo = ( 2 * ( __max( sLifeDeduct, ( sBreathLoss / 100 ) ) ) ); @@ -11894,14 +11898,14 @@ UINT32 SOLDIERTYPE::SoldierDressWound( SOLDIERTYPE *pVictim, INT16 sKitPts, INT1 uiDressSkill = ( ( 7 * EffectiveMedical( this ) ) + // medical knowledge ( sStatus) + // state of medical kit (10 * EffectiveExpLevel( this ) ) + // battle injury experience - EffectiveDexterity( this ) ) / 10; // general "handiness" + EffectiveDexterity( this, FALSE ) ) / 10; // general "handiness" } else { uiDressSkill = ( ( 3 * EffectiveMedical( this ) ) + // medical knowledge ( 2 * sStatus) + // state of medical kit (10 * EffectiveExpLevel( this ) ) + // battle injury experience - EffectiveDexterity( this ) ) / 7; // general "handiness" + EffectiveDexterity( this, FALSE ) ) / 7; // general "handiness" } // try to use every AP that the merc has left @@ -13494,6 +13498,15 @@ INT16 SOLDIERTYPE::GetPoisonDamagePercentage( void ) return( val ); } +// reset the extra stat variables +void SOLDIERTYPE::ResetExtraStats() +{ + bExtraStrength = 0; + bExtraDexterity = 0; + bExtraAgility = 0; + bExtraWisdom = 0; + bExtraExpLevel = 0; +} INT32 CheckBleeding( SOLDIERTYPE *pSoldier ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 1af987ef..f6f4b8f2 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1158,6 +1158,15 @@ public: INT16 bPoisonAbsorption; // for x points of poison damage received, you gain x * (bPoisonAbsorption / 100) poison life points /////////////////////////////////////////////////////// + // Flugente: new variables for extra stats + INT16 bExtraStrength; // additional strength gained via power armor + INT16 bExtraDexterity; // additional dexterity gained via drugs + INT16 bExtraAgility; // additional agility gained via drugs + INT16 bExtraWisdom; // additional wisdom gained via drugs + INT8 bExtraExpLevel; // corruption can temporarily alter our ExpLevel without messing up our stats this way + + INT32 bSoldierFlagMask; // for various soldier-related flags (Illusion, Kill streak, etc.). Easier than adding 32 bool variables + #ifdef JA2UB //ja25 @@ -1355,6 +1364,9 @@ public: INT16 GetPoisonAbsorption( void ); // returns the poison percentage of the damage we will be doing with the weapon currently in our hand INT16 GetPoisonDamagePercentage( void ); + + // reset the extra stat variables + void ResetExtraStats(); ////////////////////////////////////////////////////////////////////////////// }; // SOLDIERTYPE; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index f42d0ee7..c1554f63 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -1759,13 +1759,13 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, BOOLEAN f //iPoints = EffectiveExpLevel( MercPtrs[ pSoldier->ubRobotRemoteHolderID ] ) - 2; // Snap: (do some proper rounding here) iPoints = ( 20*EffectiveExpLevel( MercPtrs[ pSoldier->ubRobotRemoteHolderID ] ) - + EffectiveAgility( MercPtrs[ pSoldier->ubRobotRemoteHolderID ] ) + 15 ) / 30 - 2; + + EffectiveAgility( MercPtrs[ pSoldier->ubRobotRemoteHolderID ], FALSE ) + 15 ) / 30 - 2; } else { //iPoints = EffectiveExpLevel( pSoldier ); // Snap: - iPoints = ( 20*EffectiveExpLevel( pSoldier ) + EffectiveAgility( pSoldier ) + 15 ) / 30; + iPoints = ( 20*EffectiveExpLevel( pSoldier ) + EffectiveAgility( pSoldier, FALSE ) + 15 ) / 30; /* if ( pSoldier->bTeam == ENEMY_TEAM ) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 641fcc49..9322aa69 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -4790,8 +4790,8 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi INT8 bExperience = EffectiveExpLevel( pSoldier ); INT8 bMarksmanship = EffectiveMarksmanship( pSoldier ); - INT8 bDexterity = EffectiveDexterity( pSoldier );; - INT8 bWisdom = EffectiveWisdom( pSoldier ); + INT16 bDexterity = EffectiveDexterity( pSoldier, FALSE ); + INT16 bWisdom = EffectiveWisdom( pSoldier ); if ( bMarksmanship == 0 || bDexterity == 0 ) { @@ -6165,7 +6165,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, // Determine iMarksmanship and Base CTH if (Item[usItemUsed].rocketlauncher ){ // use the same calculation as for mechanical thrown weapons - iMarksmanship = ( EffectiveDexterity( pSoldier ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + (10 * EffectiveExpLevel( pSoldier ) )) / 4; + iMarksmanship = ( EffectiveDexterity( pSoldier, FALSE ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + (10 * EffectiveExpLevel( pSoldier ) )) / 4; // heavy weapons trait helps out if (HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPS_OT ) && !( gGameOptions.fNewTraitSystem )) // SANDRO - old/new traits iMarksmanship += gbSkillTraitBonus[HEAVY_WEAPS_OT] * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPS_OT ); @@ -6326,7 +6326,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, // but ability to dodge is reduced if crouched or prone! if (pTarget->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY && !TANK( pTarget ) && !(pSoldier->ubBodyType != QUEENMONSTER) ) { - iPenalty = ( EffectiveAgility( pTarget ) / 5 + EffectiveExpLevel( pTarget ) * 2); + iPenalty = ( EffectiveAgility( pTarget, FALSE ) / 5 + EffectiveExpLevel( pTarget ) * 2); switch( gAnimControl[ pTarget->usAnimState ].ubHeight ) { case ANIM_CROUCH: @@ -6338,7 +6338,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, } // reduce dodge ability by the attacker's stats - iBonus = ( EffectiveDexterity( pSoldier ) / 5 + EffectiveExpLevel( pSoldier ) * 2); + iBonus = ( EffectiveDexterity( pSoldier, FALSE ) / 5 + EffectiveExpLevel( pSoldier ) * 2); if ( TANK( pTarget ) || (pSoldier->ubBodyType != QUEENMONSTER) ) { // reduce ability to track shots @@ -6929,7 +6929,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, // breath penalty is based on % breath missing (max 1/2 chance) iPenalty = (iChance * (100 - pSoldier->bBreath)) / 200; // reduce breath penalty due to merc's dexterity (he can compensate!) - iChance -= (iPenalty * (100 - ( EffectiveDexterity( pSoldier ) - 10))) / 100; + iChance -= (iPenalty * (100 - ( EffectiveDexterity( pSoldier, FALSE ) - 10))) / 100; } ///////////////////////////////////////////////////////////////////////////////////// @@ -9227,7 +9227,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO iImpact += GetDamage(pObj); - iImpact += EffectiveStrength( pSoldier ) / 20; // 0 to 5 for strength, adjusted by damage taken + iImpact += EffectiveStrength( pSoldier, FALSE ) / 20; // 0 to 5 for strength, adjusted by damage taken if ( AM_A_ROBOT( pTarget ) ) { @@ -9237,7 +9237,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO else { iImpact = ( EffectiveExpLevel( pSoldier ) / 2); // 0 to 4 for level - iImpact += EffectiveStrength( pSoldier ) / 5; // 0 to 20 for strength, adjusted by damage taken + iImpact += EffectiveStrength( pSoldier, FALSE ) / 5; // 0 to 20 for strength, adjusted by damage taken // NB martial artists don't get a bonus for using brass knuckles! - oh, they do in STOMP - SANDRO if (pSoldier->usAttackingWeapon ) @@ -9550,26 +9550,29 @@ UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAi if (gGameExternalOptions.fEnhancedCloseCombatSystem) { // We need to be agile and dexterous - iAttRating = ( 2 * EffectiveDexterity( pAttacker ) + // coordination, accuracy * - 2 * EffectiveAgility( pAttacker ) + // speed & reflexes - pAttacker->stats.bStrength + // physical strength + iAttRating = ( 2 * EffectiveDexterity( pAttacker, FALSE ) + // coordination, accuracy * + 2 * EffectiveAgility( pAttacker, FALSE ) + // speed & reflexes + pAttacker->stats.bStrength + // physical strength + pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pAttacker ) ) ); // experience, knowledge } else { // this is more of a brute force strength-vs-strength check - iAttRating = ( EffectiveDexterity( pAttacker ) + // coordination, accuracy - EffectiveAgility( pAttacker ) + // speed & reflexes + iAttRating = ( EffectiveDexterity( pAttacker, FALSE ) + // coordination, accuracy + EffectiveAgility( pAttacker, FALSE ) + // speed & reflexes 3 * pAttacker->stats.bStrength + // physical strength (TRIPLED!) + 3 * pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pAttacker ) ) ); // experience, knowledge } /////////////////////////////////////////////////////////////////////////////////////// } else { - iAttRating = (3 * EffectiveDexterity( pAttacker ) + // coordination, accuracy (TRIPLED!) - EffectiveAgility( pAttacker ) + // speed & reflexes + iAttRating = (3 * EffectiveDexterity( pAttacker, FALSE ) + // coordination, accuracy (TRIPLED!) + EffectiveAgility( pAttacker, FALSE ) + // speed & reflexes pAttacker->stats.bStrength + // physical strength + pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pAttacker ) ) ); // experience, knowledge } @@ -9732,24 +9735,27 @@ UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAi // SANDRO - Enhanced Close Combat System - stealing defence based on dexterity and strength if (gGameExternalOptions.fEnhancedCloseCombatSystem) { - iDefRating = ( EffectiveAgility( pDefender )) + // speed & reflexes - 2 * EffectiveDexterity( pDefender ) + // coordination, accuracy + iDefRating = ( EffectiveAgility( pDefender, FALSE )) + // speed & reflexes + 2 * EffectiveDexterity( pDefender, FALSE ) + // coordination, accuracy 2 * pDefender->stats.bStrength + // physical strength + 2 * pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pDefender ) ); // experience, knowledge } else { - iDefRating = (EffectiveAgility( pDefender )) + // speed & reflexes - EffectiveDexterity( pDefender ) + // coordination, accuracy + iDefRating = (EffectiveAgility( pDefender, FALSE )) + // speed & reflexes + EffectiveDexterity( pDefender, FALSE ) + // coordination, accuracy 3 * pDefender->stats.bStrength + // physical strength (TRIPLED!) + 3 * pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pDefender ) ); // experience, knowledge } } else { - iDefRating = (3 * EffectiveAgility( pDefender ) ) + // speed & reflexes (TRIPLED!) - EffectiveDexterity( pDefender ) + // coordination, accuracy + iDefRating = (3 * EffectiveAgility( pDefender, FALSE ) ) + // speed & reflexes (TRIPLED!) + EffectiveDexterity( pDefender, FALSE ) + // coordination, accuracy pDefender->stats.bStrength + // physical strength + pDefender->bExtraStrength + // additional strength from power armour (10 * EffectiveExpLevel( pDefender ) ); // experience, knowledge } @@ -10346,13 +10352,13 @@ INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed ) // start with the range based on the soldier's strength and the item's weight // Altered by Digicrab on 14 March, 2004 // Reversed a Ja2Gold change that made grenades of weight 3 or more have the same throw distance as those of weight 3. - INT32 iThrowingStrength = ( EffectiveStrength( pSoldier ) * 2 + 100 ) / 3; + INT32 iThrowingStrength = ( EffectiveStrength( pSoldier, FALSE ) * 2 + 100 ) / 3; iRange = 2 + ( iThrowingStrength / (3 + (Item[usItem].ubWeight) / 3 )); } else { // not as aerodynamic! // start with the range based on the soldier's strength and the item's weight - iRange = 2 + ( ( EffectiveStrength( pSoldier ) / ( 5 + Item[usItem].ubWeight) ) ); + iRange = 2 + ( ( EffectiveStrength( pSoldier, FALSE ) / ( 5 + Item[usItem].ubWeight) ) ); } // adjust for thrower's remaining breath (lose up to 1/2 of range) @@ -10432,7 +10438,7 @@ UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi { // PHYSICALLY THROWN arced projectile (ie. grenade) // for lack of anything better, base throwing accuracy on dex & marskmanship - iChance = ( EffectiveDexterity( pSoldier ) + EffectiveMarksmanship( pSoldier ) ) / 2; + iChance = ( EffectiveDexterity( pSoldier, FALSE ) + EffectiveMarksmanship( pSoldier ) ) / 2; //////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - old/new traits if ( gGameOptions.fNewTraitSystem ) @@ -10464,7 +10470,7 @@ UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi { // MECHANICALLY FIRED arced projectile (ie. mortar), need brains & know-how - iChance = ( EffectiveDexterity( pSoldier ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + pSoldier->stats.bExpLevel ) / 4; + iChance = ( EffectiveDexterity( pSoldier, FALSE ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + pSoldier->stats.bExpLevel ) / 4; //////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - old/new traits @@ -10646,7 +10652,7 @@ UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi bPenalty /= 2; // reduce breath penalty due to merc's dexterity (he can compensate!) - iChance -= (bPenalty * (100 - ( EffectiveDexterity( pSoldier ) - 10))) / 100; + iChance -= (bPenalty * (100 - ( EffectiveDexterity( pSoldier, FALSE ) - 10))) / 100; } // if iChance exists, but it's a mechanical item being used @@ -11085,8 +11091,8 @@ void EstimateBulletsLeft( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj ) { UINT16 usExpLevel; - UINT16 usDexterity; - UINT16 usWisdom; + UINT32 usDexterity; + UINT32 usWisdom; UINT16 ubMagSize = Weapon[pObj->usItem].ubMagSize; UINT16 usRealBulletCount = (*pObj)[0]->data.gun.ubGunShotsLeft; UINT16 i = 0; @@ -11103,7 +11109,7 @@ void EstimateBulletsLeft( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj ) } usExpLevel = EffectiveExpLevel(pSoldier); - usDexterity = EffectiveDexterity(pSoldier); + usDexterity = EffectiveDexterity(pSoldier, FALSE); usWisdom = EffectiveWisdom(pSoldier); if ( gGameExternalOptions.usBulletHideIntensity <= 0 ) diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 82a48018..bb24dec1 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -3969,13 +3969,13 @@ void DebugSoldierPage1( ) SetFontShade(LARGEFONT1, FONT_SHADE_GREEN); gprintf( 200, LINE_HEIGHT * ubLine, L"Agility:"); SetFontShade(LARGEFONT1, FONT_SHADE_NEUTRAL); - gprintf( 350, LINE_HEIGHT * ubLine, L"%d ( %d )", pSoldier->stats.bAgility, EffectiveAgility( pSoldier ) ); + gprintf( 350, LINE_HEIGHT * ubLine, L"%d ( %d )", pSoldier->stats.bAgility, EffectiveAgility( pSoldier, FALSE ) ); ubLine++; SetFontShade(LARGEFONT1, FONT_SHADE_GREEN); gprintf( 200, LINE_HEIGHT * ubLine, L"Dexterity:"); SetFontShade(LARGEFONT1, FONT_SHADE_NEUTRAL); - gprintf( 350, LINE_HEIGHT * ubLine, L"%d( %d )", pSoldier->stats.bDexterity, EffectiveDexterity( pSoldier ) ); + gprintf( 350, LINE_HEIGHT * ubLine, L"%d( %d )", pSoldier->stats.bDexterity, EffectiveDexterity( pSoldier, FALSE ) ); ubLine++; SetFontShade(LARGEFONT1, FONT_SHADE_GREEN); @@ -5235,7 +5235,7 @@ UINT8 MovementNoise( SOLDIERTYPE *pSoldier ) // CHANGED BY SANDRO - LET'S MAKE THE STEALTH BASED ON AGILITY LIKE IT SHOULD BE //iStealthSkill = 20 + 4 * EffectiveExpLevel( pSoldier ) + ((EffectiveDexterity( pSoldier ) * 4) / 10); // 24-100 - iStealthSkill = 20 + 4 * EffectiveExpLevel( pSoldier ) + ((EffectiveAgility( pSoldier ) * 4) / 10); // 24-100 + iStealthSkill = 20 + 4 * EffectiveExpLevel( pSoldier ) + ((EffectiveAgility( pSoldier, FALSE ) * 4) / 10); // 24-100 // big bonus for those "extra stealthy" mercs if ( pSoldier->ubBodyType == BLOODCAT ) diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index 7d7d6542..0e26ee43 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -1873,14 +1873,14 @@ INT32 EstimateStabDamage( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, if (fBladeAttack) { iImpact = GetDamage(&pSoldier->inv[HANDPOS]); - iImpact += EffectiveStrength( pSoldier ) / 20; // 0 to 5 for strength, adjusted by damage taken + iImpact += EffectiveStrength( pSoldier, FALSE ) / 20; // 0 to 5 for strength, adjusted by damage taken } else { // this all was a little changed for enhanced close combat system - SANDRO if ( gGameExternalOptions.fEnhancedCloseCombatSystem ) { - iImpact = EffectiveStrength( pSoldier ) / 5; // 0 to 20 for strength, adjusted by damage taken + iImpact = EffectiveStrength( pSoldier, FALSE ) / 5; // 0 to 20 for strength, adjusted by damage taken if ( pSoldier->usAttackingWeapon ) { @@ -1909,7 +1909,7 @@ INT32 EstimateStabDamage( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, // base HTH damage iImpact = 5; } - iImpact += EffectiveStrength( pSoldier ) / 5; // 0 to 20 for strength, adjusted by damage taken + iImpact += EffectiveStrength( pSoldier, FALSE ) / 5; // 0 to 20 for strength, adjusted by damage taken } } diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index 6575568c..2be7aea3 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -755,7 +755,7 @@ INT32 CalcThreateningEffectiveness( UINT8 ubMerc ) return( 0 ); } - iStrength = EffectiveStrength( pSoldier ); + iStrength = EffectiveStrength( pSoldier, TRUE ); if ( Item[ pSoldier->inv[HANDPOS].usItem ].usItemClass & IC_WEAPON ) { diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index 2914a7db..0971061d 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -2480,7 +2480,7 @@ BOOLEAN AttemptToCatchObject( REAL_OBJECT *pObject ) // OK, get chance to catch // base it on...? CC? Dexterity? - ubChanceToCatch = 50 + EffectiveDexterity( pSoldier ) / 2; + ubChanceToCatch = 50 + EffectiveDexterity( pSoldier, FALSE ) / 2; #ifdef JA2TESTVERSION ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Chance To Catch: %d", ubChanceToCatch ); diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 3e42211c..75139409 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -5098,13 +5098,11 @@ STR16 zOptionsToggleText[] = L"允许显示敌军装备", // Show Soldier Tooltips L"自动存盘", //"Auto save", L"沉默的Skyrider", //"Silent Skyrider", - //L"降低CPU的使用率", //"Low CPU usage", L"增强属性框(EDB)", //L"Enhanced Description Box", L"强制回合制模式", // add forced turn mode L"属性进度条", //L"Stat Progress Bars", // Show progress towards stat increase //ham3.6 L"替代战略地图颜色", // Change color scheme of Strategic Map L"替代子弹图像", // Show alternate bullet graphics (tracers) - //L"开启新的瞄准系统(NCTH)", // use NCTH L"显示佣兵军衔", // shows mercs ranks L"显示脸部装备图", L"显示脸部装备图标", @@ -5114,7 +5112,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"自动加速敌军回合", // Automatic fast forward through AI turns L"Allow Zombies", // TODO.Translate - //L"武器过热", L"--作弊模式选项--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"强制 Bobby Ray 送货", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5210,21 +5207,20 @@ STR16 zOptionsScreenHelpText[] = L"打开时,把光标定位在敌人身上并且按下 |A|l|t 键会显示敌兵装备信息窗口。", L"打开时,游戏将在玩家回合后自动存盘", L"打开时,Skyrider保持沉默。", - //L"打开时,游戏将使用更少的CPU资源。", L"打开时,使用物品及武器的“增强描述框”(EDB)。", L"打开时,在战术画面内存在敌军时,将一直处于回合制模式直至该地区所有敌军被消灭(可以通过快捷键 |C|T|R|L+|S|H|I|F|T+|A|L|T+|T 来控制打开或关闭强制回合制模式)", L"打开时,显示各属性的增长进度。", // L"When ON, shows character progress towards gaining levels.", //ham3.6 L"打开时, 战略地图将会根据探索状态显示不同的着色。", L"打开时, 当你射击时会显示间隔子弹图像。", - //L"打开时, 使用新命中率系统(NCTH)和光标。", L"打开时,在战略界面的佣兵名旁显示军衔。", L"打开时, 显示佣兵脸部装备图。", L"打开时, 佣兵肖像右下角显示脸部装备图标", L"打开时,在交换位置和其它动作时光标不切换。键入 |x 可以快速切换。", L"When ON, mercs will not report progress during training.", //TODO.Translate + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"打开时,敌军回合将被大幅加速。", L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"打开时,武器连续射击时温度逐渐升高引起过热。", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"强制 Bobby Ray 出货", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 2767fcfe..c0973e37 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -5097,13 +5097,11 @@ STR16 zOptionsToggleText[] = L"Show Soldier Tooltips", L"Auto save", L"Silent Skyrider", - //L"Low CPU Usage", L"Enhanced Description Box", L"Forced Turn Mode", // add forced turn mode L"Stat Progress Bars", // Show progress towards stat increase // TODO.Translate L"Alternate Strategy-Map Colors", // Change color scheme of Strategic Map L"Alternate bullet graphics", // Show alternate bullet graphics (tracers) // TODO.Translate - //L"Activate New CTH system", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Show Face gear graphics", // TODO.Translate L"Show Face gear icons", @@ -5113,7 +5111,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // TODO.Translate - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5209,21 +5206,20 @@ STR16 zOptionsScreenHelpText[] = L"When ON, a tooltip window is shown when pressing |A|l|t and hovering cursor over an enemy.", L"When ON, game will be saved in 2 alternate save slots after each players turn.", L"When ON, Skyrider will not talk anymore.", - //L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // add forced turn mode L"When ON, shows character progress towards gaining levels.", // TODO.Translate L"When ON, the Strategic Map will be colored differently based on exploration.", L"When ON, alternate bullet graphics will be shown when you shoot.", // TODO.Translate - //L"When ON, New CTH system and cursor is used.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"When ON, you will see the equipped face gear on the merc portraits.", // TODO.Translate L"When ON, you will see icons for the equipped face gear on the merc portraits in the lower right corner.", L"Wanneer ingeschakeld, zal de cursor niet te schakelen tussen uitwisseling positie en andere acties. Druk op |x om snelle uitwisseling te starten.", L"When ON, mercs will not report progress during training.", //TODO.Translate + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index c99ffbed..c2c79ccc 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -5096,13 +5096,11 @@ STR16 zOptionsToggleText[] = L"Show Soldier Tooltips", L"Tactical End-Turn Save", L"Silent Skyrider", - //L"Low CPU usage", L"Enhanced Description Box", L"Forced Turn Mode", // add forced turn mode L"Stat Progress Bars", // Show progress towards stat increase L"Alternate Strategy Map Colors", // Change color scheme of Strategic Map L"Alternate Bullet Graphics", // Show alternate bullet graphics (tracers) -// L"Use new Chance to Hit System", // use NCTH L"Show Merc Ranks", // shows mercs ranks L"Show Face Gear Graphics", L"Show Face Gear Icons", @@ -5112,7 +5110,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5208,21 +5205,20 @@ STR16 zOptionsScreenHelpText[] = L"When ON, a tooltip window is shown when pressing |A|l|t and hovering cursor over an enemy.", L"When ON, game will be saved in 2 alternate save slots after each player's turn.", L"When ON, Skyrider will not talk anymore.", - //L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", L"When ON and enemy present, turn base mode persists untill sector is free (|C|t|r|l+|S|h|i|f|t+|A|l|t+|T).", // add forced turn mode L"When ON, shows character progress towards gaining levels.", L"When ON, the strategic map will be colored differently based on exploration.", L"When ON, alternate bullet graphics will be shown when you shoot.", -// L"When ON, the new chance to hit system and cursor is used.", - L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate + L"When ON, ranks will be displayed before merc names in the strategic view.", L"When ON, you will see the equipped face gear on the merc portraits.", L"When ON, you will see icons for the equipped face gear on the merc portraits in the lower right corner.", L"When ON, the cursor will not toggle between exchange position and other actions. Press |x to initiate quick exchange.", L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", + L"When ON, mercs will not report progress during doctoring.", L"When ON, AI turns will be much faster.", L"When ON, zombies will spawn. Be aware!", // allow zombies - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", @@ -7223,7 +7219,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nThis is the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil.\n \nNaturally, this has no effect if the weapon lacks\nboth Burst and Auto-Fire modes.\n \nLower frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nLower is better.", L"\n \nThis weapon's to-hit is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased To-Hit allows the gun to hit targets\nmore often, assuming it is also well-aimed.\n \nHigher is better.", L"\n \nThis weapon's Aim Bonus is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased Aim Bonus allows the gun to hit\ntargets at longer ranges more often, assuming\nit is also well-aimed.\n \nHigher is better.", - L"\n \nA single shot causes this much heat.\nThe type of ammunition can affect this value.\n \nLower is better.", // TODO.Translate + L"\n \nA single shot causes this much heat.\nThe type of ammunition can affect this value.\n \nLower is better.", L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 918ad594..6f11ae6d 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -5087,13 +5087,11 @@ STR16 zOptionsToggleText[] = L"Afficher infobulle soldat", L"Sauvegarde auto", L"Silence Skyrider !", - //L"Faible consommation processeur", L"EDB (mod rajoutant info utiles)", L"Mode tour par tour forcé", // add forced turn mode L"Afficher deviation balle", // Screen messages showing amount and direction of shot deviation. L"Couleur alternative map", // Change color scheme of Strategic Map L"Montrer tirs alternatifs", // Show alternate bullet graphics (tracers) - //L"Activé NCTH", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Afficher équipments portrait", L"Afficher icones portraits", @@ -5103,7 +5101,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5199,21 +5196,20 @@ STR16 zOptionsScreenHelpText[] = L"Si activé, une fenêtre info-bulle apparaît lorsque vous appuyez sur |A|l|t et que le curseur est au dessus d'un ennemi.", L"Si activé, le jeu est sauvegardé à chaque nouveau tour du joueur.", L"Si activé, les confirmations insistantes de Skyrider cessent.", - //L"Si activé, le jeu restreint l'utilisation du processeur.", L"Si activé, l'EDB sera affiché pour les armes et objets.", L"Si cette option est activée et que des ennemis sont présents, \nle mode tour par tour est actif tant qu'il reste \ndes ennemis dans le secteur (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // add forced turn mode L"Si activé, montre la progression des caractères à travers le gain de niveaux.", L"Si activé, la carte stratégique sera coloré différemment selon l'exploration.", L"Si activé, le graphisme des tirs alternatifs sera affiché quand vous tirerez.", - //L"Si activé, le nouveau systéme NCTH (chance de toucher) \nainsi que le nouveau curseur seront utilisés.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"Si activé, vous verrez l'équipement du mercenaire à travers son portrait.", L"Si activé, vous verrez les icones correspondant à l'équipement porté en bas à droite du portrait.", L"Si activé, le curseur ne basculera pas entre changer de position et une autre action. Appuyez sur |x pour initier un échange rapide.", L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Forcer tous les envois en attente de Bobby Ray", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index a92a9749..58a10556 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -4945,23 +4945,20 @@ STR16 zOptionsToggleText[] = L"Tooltips über Gegner", L"Automatisch speichern", L"Stummer Skyrider", - //L"Niedrige CPU Belastung", L"Erw. Gegenstandsinfo", L"Erzwungener Runden-Modus", // add forced turn mode L"Status Trainingsfortschritt", // Show progress towards stat increase L"Alternatives Kartenfarbschema", // Change color scheme of Strategic Map L"Alternative Projektil-Grafik", // Show alternate bullet graphics (tracers) - //L"Neues Zielsystem verwenden", // use NCTH L"Söldnerrang anzeigen.", // shows mercs ranks L"Gesichtsequipment-Grafiken", L"Gesichtsequipment-Icons", L"Cursor-Wechsel deaktivieren", // Disable Cursor Swap L"Stummes Trainieren", // Madd: mercs don't say quotes while training - L"Quiet Repairing", // Madd: mercs don't say quotes while repairing TODO.Translate - L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring TODO.Translate + L"Stummes Reparieren", // Madd: mercs don't say quotes while repairing + L"Stumme Behandlung", // Madd: mercs don't say quotes while doctoring L"Autom. schnelle Gegner-Züge", // Automatic fast forward through AI turns L"Allow Zombies", // Flugente Zombies 1.0 - //L"Waffen können überhitzen", L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Erzwinge BR Lieferung", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5057,20 +5054,20 @@ STR16 zOptionsScreenHelpText[] = L"Wenn diese Funktion aktiviert ist, werden mit Druck auf |A|l|t Informationen über den Gegner eingeblendet, auf dem sich der Maus-Cursor befindet.", L"Wenn diese Funktion aktiviert ist, wird nach jeder Runde automatisch abwechselnd in zwei speziellen Autosave-Spielständen gespeichert.", L"Wenn diese Funktion aktiviert ist, wird Skyrider nichts mehr sagen. Verwenden Sie diese Option, wenn er Ihnen auf die Nüsse geht.", - //L"Aktivieren Sie diese Funktion, wenn Ihr Rechner steinalt ist und anderenfalls Probleme auftreten würden.", L"Wenn diese Funktion aktiviert ist, werden erweiterte Beschreibungen und Werte zu den Waffen und Gegenständen angezeigt.", L"Wenn diese Funktion aktiviert ist und noch Gegner im Sektor sind, bleibt das Spiel im Runden-Modus, bis alle Feinde tot sind (|C|t|r|l+|S|h|i|f|t+|A|l|t+|T).", L"Wenn diese Funktion aktiviert ist, werden die Söldnerwerte visuell mit ihrem Trainingsfortschritt unterlegt.", L"Wenn diese Funktion aktiviert ist, wird die Strategische Karte entsprechend Ihres Erkundungsfortschrittes unterschiedlich eingefärbt.", L"Wenn diese Funktion aktiviert ist, werden geschossene Projektile visuell mit Tracer-Effekten dargestellt.", - //L"Wenn diese Funktion aktiviert ist, wird das neue Zielsystem und der neue Zielcursor verwendet.", L"Wenn diese Funktion aktiviert ist, werden die Ränge der Söldner in der Strategischen Karte vor dem Namen angezeigt.", L"Wenn diese Funktion aktiviert ist, sehen sie das Gesichtsequipment Ihrer Söldner direkt auf dem Portrait.", L"Wenn diese Funktion aktiviert ist, sehen sie Icons für das Gesichtsequipment in der rechten unteren Ecke des Portraits.", L"Wenn diese Funktion aktiviert ist, wird der Mauscursor nicht automatisch wechseln zwischen Personen-Positionswechsel und weiteren Aktionen.\nFür manuellen Positionswechsel drücken Sie |x.", L"Wenn diese Funktion aktiviert ist, werden die Söldner über ihren Fortschritt während des Trainings nicht mehr berichten.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"Wenn diese Funktion aktiviert ist, werden gegnerische Züge schneller durchgeführt.", - //L"Wenn diese Funktion aktiviert ist, können sich Waffen überhiten bei schneller Schussfolge.", + L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 9e618414..2976ff28 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -5082,13 +5082,11 @@ STR16 zOptionsToggleText[] = L"Show Soldier Tooltips", L"Auto save", L"Silent Skyrider", - //L"Low CPU usage", L"Enhanced Description Box", L"Forced Turn Mode", // add forced turn mode L"Stat Progress Bars", // Show progress towards stat increase // TODO.Translate L"Alternate Strategy-Map Colors", // Change color scheme of Strategic Map L"Alternate bullet graphics", // Show alternate bullet graphics (tracers) // TODO.Translate - //L"Activate New CTH system", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Show Face gear graphics", // TODO.Translate L"Show Face gear icons", @@ -5098,7 +5096,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5154,7 +5151,7 @@ STR16 zOptionsScreenHelpText[] = L"Se attivata, sarà richiesto un altro clic su \"salva\" per il movimento in tempo reale.", //Sleep/Wake notification - L"Se attivata, verrete avvisati quando i mercenari in \"servizio\" vanno a riposare e quando rientrano in servizio.", + L"Se attivata, verrete avvisati quando i mercenari in \"servizio\" vanno a riposare e quando rientrano in servizio.", //Use the metric system L"Se attivata, utilizza il sistema metrico di misurazione; altrimenti ricorre al sistema britannico.", @@ -5194,21 +5191,20 @@ STR16 zOptionsScreenHelpText[] = L"When ON, a tooltip window is shown when pressing |A|l|t and hovering cursor over an enemy.", L"When ON, game will be saved in 2 alternate save slots after each players turn.", L"When ON, Skyrider will not talk anymore.", - //L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // add forced turn mode L"When ON, shows character progress towards gaining levels.", // TODO.Translate L"When ON, the Strategic Map will be colored differently based on exploration.", L"When ON, alternate bullet graphics will be shown when you shoot.", // TODO.Translate - //L"When ON, New CTH system and cursor is used.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"When ON, you will see the equipped face gear on the merc portraits.", // TODO.Translate L"When ON, you will see icons for the equipped face gear on the merc portraits in the lower right corner.", L"Se attivato, il cursore non si alternerà tra la posizione di scambio e altre azioni. Premere |x per avviare lo scambio rapido.", L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 8fc67fc9..6cd735d3 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -5094,13 +5094,11 @@ STR16 zOptionsToggleText[] = L"Show Soldier Tooltips", L"Automatyczny zapis", L"Cichy Skyrider", - //L"Niskie obciążenie procesora", L"Rozszerzone Okno Opisu (EDB)", //Enhanced Description Box L"WymuŚ tryb turowy", // add forced turn mode L"Stat Progress Bars", // Show progress towards stat increase // TODO.Translate L"Alternate Strategy-Map Colors", // Change color scheme of Strategic Map L"Alternate bullet graphics", // Show alternate bullet graphics (tracers) // TODO.Translate - //L"Activate New CTH system", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Show Face gear graphics", // TODO.Translate L"Show Face gear icons", @@ -5110,7 +5108,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5207,20 +5204,19 @@ STR16 zOptionsScreenHelpText[] = L"JeŚli WŁ¥CZONE, gra będzie zapisywana każdorazowo po zakończeniu tury gracza.", L"JeŚli WŁ¥CZONE, Skyrider nie będzie nic mówił.", L"JeŚli WŁ¥CZONE, gra będzie obciążała procesor w mniejszym stopniu.", - //L"JeŚli WŁ¥CZONE, rozszerzone opisy będą pokazane dla przedmiotów i broni.", L"JeŚli WŁ¥CZONE i wróg jest obecny, \ntryb turowy jest włączony, \ndopóki sektor nie zostanie oczyszczony (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // add forced turn mode L"Gdy WŁ¥CZONE, pokazuje postęp w doŚwiadczeniu postaci.", L"When ON, the Strategic Map will be colored differently based on exploration.", L"Gdy WŁ¥CZONE, zastępuje starą animację pocisku nową.", - //L"When ON, New CTH system and cursor is used.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"When ON, you will see the equipped face gear on the merc portraits.", // TODO.Translate L"When ON, you will see icons for the equipped face gear on the merc portraits in the lower right corner.", L"When ON, the cursor will not toggle between exchange position and other actions. Press |x to initiate quick exchange.", // TODO.Translate L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"WymuŚ wszystkie oczekiwane dostawy od Bobby Ray's.", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 2c48797c..544673a7 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -5077,13 +5077,11 @@ STR16 zOptionsToggleText[] = L"Подсказки над солдатами", //Show Soldier Tooltips L"Автосохранение каждый ход", L"Молчаливый пилот вертолёта", - //L"Низкая загрузка процессора", L"Подробное описание предметов", //Enhanced Description Box L"Только пошаговый режим", // add forced turn mode L"Подсветить навык к повышению", //Stat Progress Bars // Show progress towards stat increase L"Новая расцветка стратег. карты", //Alternate Strategy-Map Colors //Change color scheme of Strategic Map L"Заметная летящая пуля", // Show alternate bullet graphics (tracers) - //L"Новая система прицеливания", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Показать снаряжение на голове", //Show Face gear graphics L"Показать иконки снаряжения", @@ -5093,7 +5091,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Читерские настройки--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Ускорить доставку Бобби Рэя", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5189,21 +5186,20 @@ STR16 zOptionsScreenHelpText[] = L"Если включено, при нажатии кнопки |A|l|t \nи наведении курсора мыши на вражеского солдата \nбудет показана дополнительная информация.", L"Если включено, игра будет автоматически \nсохраняться после каждого хода игрока.", L"Если включено, Небесный Всадник\nне будет вас раздражать болтливостью.", - //L"Если включено, игра будет использовать\nменьше процессорного времени.", L"Если включено, будет задействовано\nподробное описание предметов.", L"Если включено и в секторе присутствует враг, \nпошаговый режим будет задействован \nдо полной зачистки сектора (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", L"Если включено, навык, \nкоторый вскоре повысится будет подсвечен.", L"Если включено, необследованные сектрора \nна стратегической карте будут чёрно-белыми.", L"Если включено, летящая пуля будет более заметной.", - //L"Если включено, будет задействована новая система прицеливания \nи новый курсор прицеливания.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"Если включено, на портрете наёмника будет отображено одетое головное снаряжение.", L"Если включено, в правом нижнем углу \nна портрете наёмника будут отображены иконки \nодетого головного снаряжения.", L"When ON, the cursor will not toggle between exchange position and other actions. Press |x to initiate quick exchange.", // TODO.Translate L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Выберите этот пункт чтобы груз Бобби Рэя прибыл немедленно.", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index 3bd547e3..6a33facb 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -5098,13 +5098,11 @@ STR16 zOptionsToggleText[] = L"Show Soldier Tooltips", L"Auto save", L"Silent Skyrider", - //L"Low CPU usage", L"Enhanced Description Box", L"Forced Turn Mode", // add forced turn mode L"Stat Progress Bars", // Show progress towards stat increase // TODO.Translate L"Alternate Strategy-Map Colors", // Change color scheme of Strategic Map L"Alternate bullet graphics", // Show alternate bullet graphics (tracers) // TODO.Translate - //L"Activate New CTH system", // use NCTH L"Show Merc Ranks", // shows mercs ranks // TODO.Translate L"Show Face gear graphics", // TODO.Translate L"Show Face gear icons", @@ -5114,7 +5112,6 @@ STR16 zOptionsToggleText[] = L"Quiet Doctoring", // Madd: mercs don't say quotes while doctoring //TODO.Translate L"Auto Fast Forward AI Turns", // Automatic fast forward through AI turns // TODO.Translate L"Allow Zombies", // Flugente Zombies 1.0 - //L"Weapons Overheating", // TODO.Translate L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -5210,21 +5207,20 @@ STR16 zOptionsScreenHelpText[] = L"When ON, a tooltip window is shown when pressing |A|l|t and hovering cursor over an enemy.", L"When ON, game will be saved in 2 alternate save slots after each players turn.", L"When ON, Skyrider will not talk anymore.", - //L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // add forced turn mode L"When ON, shows character progress towards gaining levels.", // TODO.Translate L"When ON, the Strategic Map will be colored differently based on exploration.", L"When ON, alternate bullet graphics will be shown when you shoot.", // TODO.Translate - //L"When ON, New CTH system and cursor is used.", L"When ON, ranks will be displayed before merc names in the strategic view.", // TODO.Translate L"When ON, you will see the equipped face gear on the merc portraits.", // TODO.Translate L"When ON, you will see icons for the equipped face gear on the merc portraits in the lower right corner.", L"When ON, the cursor will not toggle between exchange position and other actions. Press |x to initiate quick exchange.", L"When ON, mercs will not report progress during training.", + L"When ON, mercs will not report progress during repairing.", // TODO.Translate + L"When ON, mercs will not report progress during doctoring.", // TODO.Translate L"When ON, AI turns will be much faster.", // TODO.Translate L"When ON, zombies will span. Be aware!", // allow zombies // TODO.Translate - //L"When ON, weapons can be overheated when firing.", // TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",