15 Jan 2007: Updated for RotWK
Note: This guide was tested with BFME 2 patch 1.04. With patch 1.05 of the official game, the leadership system was changed. The effects haven't been tested yet.
This doesn't apply to RotWK v1.0 as the expansion is based on patch 1.04 of the original game.
-----------------------------------------------------------------
Written by Solinx for The 3rd Age community
====================================
ok, the previous guide was to change CaH power into a Normal power, useable for normal heroes. This time it's about changing a normal power into a CaH power.
Written with ini files from Battle for Middle Earth 2 patch 1.04
--- Important! ---
First off, I'll tell you that not all powers will be so easy to port as the example I am going to use.
The following two power types are thougher to convert:
- Weapon toggle
- Special weapons/attacks
Sadly these two include many abilities. It quite likely possible to convert the weapontoggle, but I'm not entirely sure if the second is possible (without removing other abilities that is). When I know more, this guide will be updated.
Stealth is also a bit different, but that one requires only a small addition and will be covert in this guide.
--- Assumptions ---
I've assumed that you...
...have read the beginner tutorials, which explain the basics of modding.
...have some knowledge about how normal powers work. (Useful, but not really required if you follow the steps.)
...know how to change strings on buttons.
--- Requirements: ---
Ok, now you know that, let's start with the guide. As I said, I'm keeping this simple. We will start by converting the 'Outlaw Leadership' of Eomer into a level 1 'Men of the West' CaH power.
After we've done that, we'll change it into a 3rd level power, that can only be selected after getting the standard level 1 CaH leadership.
The files you need to copy code from are:
...\data\ini\commandbutton.ini
...\data\ini\specialpower.ini
...\data\ini\object\goodfaction\units\men\eomer.ini
You will need to add code to:
...\data\ini\commandbutton.ini
...\data\ini\object\createahero\createaheropowers.inc
...\data\ini\createaherospecialpowers.ini
...\data\ini\createaheroupgrades.inc
...\data\ini\attributemodifier.ini
Optional, in case of a stealth power:
...\data\ini\object\createahero\createahero.ini
Weapon toggles and special powers/attacks require some additional coding in other files. Perhaps I will make an advanced guide on them when I know more about them.
--- Lets get started ---
Before we do anything, we need to know what kind of power we are working with.
Open Eomer.ini and search for "PASSIVE OUTLAW LEADERSHIP".
In our case, the name is a dead giveaway, but other powers aren't always that predictable.
You will find the following code:
;;; PASSIVE OUTLAW LEADERSHIP;;; Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership2 SpecialPowerTemplate = SpecialAbilityFakeLeadership2 TriggeredBy = Upgrade_EomerOutlawLeader End Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate2 SpecialPowerTemplate = SpecialAbilityFakeLeadership2 UpdateModuleStartsAttack = No StartsPaused = Yes End Behavior = AttributeModifierAuraUpdate ModuleTag_Leadership2 StartsActive = No;If no, requires upgrade to turn on. BonusName = EomerPassiveOutlawLeadership TriggeredBy = Upgrade_EomerOutlawLeader RefreshDelay = 2000 Range = 200 AllowSelf = Yes ObjectFilter = ANY +CAVALRY +INFANTRY -STRUCTURE -BASE_FOUNDATION -DOZER End
As you can see, this is a plain aura ability. It generates cash for each kill.
--- Copying the core of the ability ---
Copy the code from Eomer.ini and open createaheropowers.inc
Scroll to the bottom of that file and paste the code you copied from Eomer.ini into createaheropowers.inc
We can't use an exact copy of the power, because we need to make sure it's unique.
After my changes, the code looks like this:
;;; PASSIVE OUTLAW LEADERSHIP;;; Behavior = UnpauseSpecialPowerUpgrade ModuleTag_CaHOutlawLeadershipEnabler SpecialPowerTemplate = SpecialAbilityCaHFakeLeadership2 TriggeredBy = Upgrade_CaHOutlawLeader End Behavior = SpecialPowerModule ModuleTag_CaHOutlawLeadershipUpdate SpecialPowerTemplate = SpecialAbilityCaHFakeLeadership2 UpdateModuleStartsAttack = No StartsPaused = Yes End Behavior = AttributeModifierAuraUpdate ModuleTag_CaHOutlawLeadership StartsActive = No;If no, requires upgrade to turn on. BonusName = EomerPassiveOutlawLeadership TriggeredBy = Upgrade_CaHOutlawLeader RefreshDelay = 2000 Range = 200 AllowSelf = Yes ObjectFilter = ANY +CAVALRY +INFANTRY -STRUCTURE -BASE_FOUNDATION -DOZER EndIf you compare the two code blocks, you will notice that I changed the ModuleTag, SpecialPowerTemplate and the TriggeredBy values.
In case you want the aura to have different attributes modifiers, you naturally can create your own. But that is outside the scope of this guide.
--- The upgrade ---
Simple stuff first. We created a new upgrade, named "Upgrade_CaHOutlawLeader". There is no such upgrade defined yet, so we need to do that.
Open createaheroupgrades.inc and add the following code:
Upgrade Upgrade_CaHOutlawLeader Type = OBJECT EndThis identifies Upgrade_CaHOutlawLeader as an upgrade for the CaH object.
That's it for the upgrade.
--- The SpecialPowerTemplate ---
Just as simple, open createaherospecialpowers.ini and add the following code:
;------------------------------------------------------------------------------ ; For the CaH version of Eomer's passive leadership abilities SpecialPower SpecialAbilityCaHFakeLeadership2 Enum = SPECIAL_FAKE_LEADERSHIP_BUTTON ReloadTime = 1; in milliseconds EndNow we've also defined the special power.
Note: When adding a lot of powers to one CaH class, try not to use the same Enum. The game won't allow normal objects to have any Enum twice in all their abilities. CaH may be different, but it is unlikely.
--- CommandButton.ini ---
The next step is to open up CommandButton.ini and find this code:
CommandButton Command_RohanEomerOutlawLeadership Command = SPECIAL_POWER SpecialPower = SpecialAbilityFakeLeadership2 Options = NONPRESSABLE TextLabel = CONTROLBAR:OutlawLeadership ButtonImage = UCCommon_Pillage RadiusCursorType = TrainingRadiusCursor ButtonBorderType = ACTION DescriptLabel = CONTROLBAR:ToolTipOutlawLeadership InPalantir = Yes End
Copy it and paste it at the bottom of the file.
Just copying isn't enough. For a start, all buttons must have an unique name. Change it into Command_CreateAHero_HotW_OutlawLeadership.
The specialpower name is used to link the button to the bits of code in the object. Clearly it needs to be the same as in createaheropowers.inc.
You'll also need to change the TextLabel and DescriptLabel, I've made the assumption you know how to do that.
So far, this has been similar to duplicating a normal power. Now we come at the new code that is only used for the CaH. For now, just use this code:
CreateAHeroUIAllowableUpgrades = Upgrade_CreateAHero_ClassHeroOfTheWest CreateAHeroUIMinimumLevel = 1 CreateAHeroUIPrerequisiteButtonName = NoneThe combined result of the button will be:
CommandButton Command_CreateAHero_HotW_OutlawLeadership Command = SPECIAL_POWER SpecialPower = SpecialAbilityCaHFakeLeadership2 Options = NONPRESSABLE TextLabel = CONTROLBAR:CreateAHeroOutlawLeadership ButtonImage = UCCommon_Pillage RadiusCursorType = TrainingRadiusCursor ButtonBorderType = ACTION DescriptLabel = CONTROLBAR:ToolTipCreateAHeroOutlawLeadership InPalantir = Yes CreateAHeroUIAllowableUpgrades = Upgrade_CreateAHero_ClassHeroOfTheWest CreateAHeroUIMinimumLevel = 1 CreateAHeroUIPrerequisiteButtonName = None EndThat's it. You now have changed this simple leadership from a normal power to a level 1 HotW power. No need to do anything with experience ini's, since the last three lines of code, together with hardcoded stuff, make sure your CaH gets this power when he should.
UPDATE:
With the release of RotWK, the commandbuttons of the CaH's have a 4th line: The costs of the power.
Add the following line to the bottom, just above the 'end' of course, of each commandbutton:CreateAHeroUICostIfSelected = 500You can replace 500 with the costs you find appropiate for the power, or you can use one of the variables that EA used with their powers. You can find the values of these variables in ...data\ini\gamedata.ini
--- Making a chain with the normal level 1 CaH leadership ---
With the three unique lines from the CommandButton.ini, we can also make a chain of abilities, like the dwarven Battlerage, which has 4 levels.
To make our new CaH an upgrade of the normal level 1 CaH leadership, we need to change the three lines into this:
CreateAHeroUIAllowableUpgrades = Upgrade_CreateAHero_ClassHeroOfTheWest CreateAHeroUIMinimumLevel = 3 CreateAHeroUIPrerequisiteButtonName = Command_CreateAHeroLeadership
As you can see, the first line stayed the same. It selects the main classes that are allowed to get this ability. You can add more than one class.
These are the possible inputs:
* Upgrade_CreateAHero_ClassArcher
* Upgrade_CreateAHero_ClassHeroOfTheWest
* Upgrade_CreateAHero_ClassIstariWizard
* Upgrade_CreateAHero_ClassDwarf
* Upgrade_CreateAHero_ClassCorruptedMan
* Upgrade_CreateAHero_ClassServantsOfSauron
It's pretty obvious which classes are which.
The second line sets the minimum level that must be attained before you can select the power in the CaH creation menu.
Normal inputs are 1, 3, 7 or 10
It's quite likely that other inputs also work, but I never tried them.
The last line is the button name of the ability that our own ability is going to succeed.
If you search for "Command_CreateAHeroLeadership" in commandbutton.ini, you will find that this is the name of the normal level 1 CaH leadership.
When you create a chain of abilities, make sure that the level progression is possible.
First the abilities with the lowest minimum level requirement, then upward.
Also make sure that the chain isn't broken half way, because a class isn't allowed to get the middle ability.
--- Making our leadership an upgrade instead of a replacement ---
Ok. With this code our outlaw leadership succeeds the standard leadership. However, the effect of the normal leadership will vanish as soon as the hero gets our ability.
To make our leadership a true upgrade, instead of a replacement, we need to modify attributemodifier.ini
Open the attributemodifier.ini.
Next we need to search for EomerPassiveOutlawLeadership. That will find you:
ModifierList EomerPassiveOutlawLeadership Category = WEAPON Modifier = BOUNTY_PERCENTAGE 100.0% // Percentage of victim bounty value to build granted to slaying member's player. Duration = 2500 // lasts for 2.5 seconds EndCopy and paste this code to the bottom of the file.
The standard level 1 CaH leadership is in fact a generic leadership. Search for GenericHeroLeadership and you will find:
ModifierList GenericHeroLeadership Category = LEADERSHIP Modifier = EXPERIENCE 200% Modifier = ARMOR 50% Modifier = DAMAGE_MULT 150% // Multiplicitive. Damage multiplied by this, will compound in multiple bonuses Duration = 3000 FX = FX_GenericLeadership ReplaceInCategoryIfLongest = Yes IgnoreIfAnticategoryActive = Yes EndNow we need to combine these two leaderships to create a new leadership.
I suggest this combination:
ModifierList CreateaHero_HotW_PassiveOutlawLeadership Category = WEAPON Modifier = BOUNTY_PERCENTAGE 100.0% // Percentage of victim bounty value to build granted to slaying member's player. Modifier = EXPERIENCE 200% Modifier = ARMOR 50% Modifier = DAMAGE_MULT 150% // Multiplicitive. Damage multiplied by this, will compound in multiple bonuses Duration = 2500 // lasts for 2.5 seconds FX = FX_GenericLeadership EndThat makes sure the leadership can't replace or be replaced (ie. the leadership bonus stacks with a normal leadership), nor can it be dispelled by another aura.
Also, take notice of the new name. All modifiers should be unique, so don't forget to change the name.
Another combination:
ModifierList CreateaHero_HotW_PassiveOutlawLeadership Category = LEADERSHIP Modifier = EXPERIENCE 200% Modifier = ARMOR 50% Modifier = DAMAGE_MULT 150% // Multiplicitive. Damage multiplied by this, will compound in multiple bonuses Modifier = BOUNTY_PERCENTAGE 100.0% // Percentage of victim bounty value to build granted to slaying member's player. Duration = 3000 FX = FX_GenericLeadership ReplaceInCategoryIfLongest = Yes IgnoreIfAnticategoryActive = Yes EndHere the upgraded leadership is still replaceable, can replace another or can dispelled by another aura.
It's only difference is the name, the addition of the bounty modifier and the duration.
last thing to do is to change the aura name in our aura module, so open createaheropowers.inc.
Search for ModuleTag_CaHOutlawLeadership, the name of our aura module.
And changing the BonusName into CreateaHero_HotW_PassiveOutlawLeadership.
--- Finished ---
That's it. For the Men of the West CaH class, our new leadership should be listed on the same row as the standard CaH power.
You can only select it at level 3 and when your hero get's it in-game, it will include the effects of the normal leadership in addition to the bounty leadership.
--- Exceptions ---
As I said before, this is a simple example and there are quite a few exceptions to the rule.
(For now) I won't go into weaponsets or abilities based on special weapons. These require additional editing in a few other parts of the CaH files.
For the stealth exception we need to make an additional edit to createahero.ini.
As a start, find "Create-A-Hero Stealth And Camouflage Updates".
All stealth powers come with either a stealth of invisibility module.
As you can see, all these modules are listed in this ini file, instead of in createaheropowers.inc.
The other two behaviours (Enable & Unpause) remain in that file.
You'll also notice that the modules all have RequiredUpgrades and ForbiddenUpgrades.
In the required upgrades you put the class to get the upgrade.
This can only be one class! If you want multiple classes to have the same stealth ability, you will have to make multiple modules.
In addition you also place the same upgrade as named in the createaheropowers.inc.
In the ForbiddenUpgrades, you need to place "Upgrade_CreateAHeroMapMode", this is to prevent your hero from activating his stealth ability in the CaH creation menu.
Also, in case you are making a chain of stealth modes, you can add the upgrade names of all other stealth abilities in the chain here.
Update:
Among the additional parts for stealth abilities, you can also find an additional piece of code for the disguise ability. Some people had troubles modding that ability. Credit to Cahik for solving their problems.
Solinx
Edited by Solinx, 21 January 2007 - 12:11 AM.