[MODCOMP] Unit Combat Attack Defense Mod

TheLopez

Deity
Joined
Jan 16, 2006
Messages
2,525
Location
Oregon
Unit Combat Attack Defense Mod v0.1BtS
By: TheLopez

Last Update: 09/09/10

Version: v0.1BtS
Patch Compatibility: Beyond the Sword v3.19
MP Compatible: ?
Download Mod v0.1BtS

Description:
This mod adds a couple of new tags that allow the specification of unit combat
attack and defense modifiers separately instead of as a whole as the existing
tag <UnitCombatMods> does. What this allows you to do is split up the attack and
defense percentage modification. For instance the updated warrior definition
using the new tags looks like:
Code:
      <UnitCombatAttackMods>
        <UnitCombatAttackMod>
          <UnitCombatType>UNITCOMBAT_MELEE</UnitCombatType>
          <iUnitCombatMod>75</iUnitCombatMod>
        </UnitCombatAttackMod>
      </UnitCombatAttackMods>
      <UnitCombatDefenseMods>
        <UnitCombatDefenseMod>
          <UnitCombatType>UNITCOMBAT_MELEE</UnitCombatType>
          <iUnitCombatMod>50</iUnitCombatMod>
        </UnitCombatDefenseMod>
      </UnitCombatDefenseMods>

-----Notes to Modmakers-----

If you want to use this mod component in your mod I have tried to make things
as easy as possible for you. In the XML files I have added
<!-- Unit Combat Attack Defense Mod Start --> and
<!-- Unit Combat Attack Defense Mod End --> in all of the places where
changes were made. In the SDK files I have added
// < Unit Combat Attack Defense Mod Start > and
// < Unit Combat Attack Defense Mod End > in all of the places where
changes were made. In the python files I have added
# < Unit Combat Attack Defense Mod Start > and
# < Unit Combat Attack Defense Mod End > in all of the places where changes
were made.

-----Version Information-----

-----v0.1BtS------

- Setup the Unit Combat Attack Defense Mod infrastructure

- Added the new <UnitCombatAttackMods> tag that allow specification of percent
attack bonuses against a particular unit combat type.

- Added the new <UnitCombatDefenseMods> tag that allow specification of percent
defense bonuses against a particular unit combat type.

- As an example of how to use the new tags warriors have been updated in the
CIV4UnitInfos.xml file.

-----===Credits & Thanks===-----

- Exavier - Composite Mod - readme.txt format

- Cybah - for suggesting this mod
 
Here's a screenie:
Spoiler :
unitcombatattackdefense.jpg
 
we implemented this mod in our beta Total realism for BtS and we found a bug in combat calculation:
in CvUnit.cpp, method CvUnit::baseCombatStr, you missed check for combat type NO_COMBAT - in this case if you fight with NO_COMBAT unit like animals, attacker always get combat odds > 99,9% because unitCombatAttackModifier/unitCombatDefenseModifier is not defined for this

Old code:
Code:
// < Unit Combat Attack Defense Mod Start >
			iExtraModifier = unitCombatDefenseModifier(pAttacker->getUnitCombatType());
			iTempModifier += iExtraModifier;
			if (pCombatDetails != NULL)
			{
				pCombatDetails->iCombatDefenseModifier = iExtraModifier;
			}

			iExtraModifier = -pAttacker->unitCombatAttackModifier(getUnitCombatType());
			iTempModifier += iExtraModifier;
			if (pCombatDetails != NULL)
			{
				pCombatDetails->iCombatAttackModifier = iExtraModifier;
			}
			// < Unit Combat Attack Defense Mod End   >

			if (pAttacker->getUnitCombatType() != NO_UNITCOMBAT)
			{
				iExtraModifier = unitCombatModifier(pAttacker->getUnitCombatType());
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatModifierA = iExtraModifier;
				}
			}
			if (getUnitCombatType() != NO_UNITCOMBAT)
			{
				iExtraModifier = -pAttacker->unitCombatModifier(getUnitCombatType());
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatModifierT = iExtraModifier;
				}
			}

bugfix:
Code:
			UnitCombatTypes eAttackerUnitCombat = pAttacker->getUnitCombatType();
			if (eAttackerUnitCombat != NO_UNITCOMBAT)
			{
				iExtraModifier = unitCombatModifier(eAttackerUnitCombat);
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatModifierA = iExtraModifier;
				}

				iExtraModifier = unitCombatDefenseModifier(eAttackerUnitCombat);
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatDefenseModifier = iExtraModifier;
				}
			}

			UnitCombatTypes eDefenderUnitCombat = getUnitCombatType();
			if (eDefenderUnitCombat != NO_UNITCOMBAT)
			{
				iExtraModifier = -pAttacker->unitCombatModifier(eDefenderUnitCombat);
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatModifierT = iExtraModifier;
				}

				iExtraModifier = -pAttacker->unitCombatAttackModifier(eDefenderUnitCombat);
				iTempModifier += iExtraModifier;
				if (pCombatDetails != NULL)
				{
					pCombatDetails->iCombatAttackModifier = iExtraModifier;
				}
			}
 
Back
Top Bottom