These small tutorials will show you how to make weapons and some neat stuff you can do with weapons, such as have a morgul blade effect (explained on Page 6).
You will need to know how to make weapons work and how a character uses them.
Some understanding of special powers and OCL's would also be helpfull.
Index:
Page 1 - Intro
Page 2 - Weapons & Nuggets in detail
Page 3 - Weapons & Nuggets in detail Cont.
Page 4 - Weapon 'leveling'
Page 5 - Weapon 'leveling' ~Changing Weapon Projectile~
Page 6 - Making 'MorgulBlade' effect
Page 7 - Interesting Weapons ~ Nature's Wrath / Galadriel's Tornado
Please rate my tutorials and post comments!
I would appreciate it if you send me a PM after rating my article to say what I should Improve/Change to get a better rating from you.
I will be updating this tutorial and adding more different kinds of things about weapons!
So don't forget to check this article every once in a while!
Weapons & Nuggets in detail
This Tutorial will show you more about weapons and damagenuggets.
NOTE
I Suggest that you have read the Weapons & Weaponsets by Hostile article before you read this tutorial, but you don't have to since I will be explaining a bit about the basics too...
This tutorial does not require you to do anything, it is just for you to find out more things about weapons and damagenuggets.
For all the damage types look in the file: DamageTypes which you can download at the bottom of this page!
WEAPONS
Weapons are the basic things you need for a unit to be able to do any damage at all.
Here is an example of a Weapon with descriptions of the different parts:
Weapon HobbitSword ; BALANCE Hobbit Sword Weapon
LeechRangeWeapon = Yes ;Once fired is it avoidable?
AttackRange = 20.0 ;How far can you be from the target and still be able to attack?
MeleeWeapon = Yes ;Is it a melee weapon?
DelayBetweenShots = HOBBIT_SWORD_DELAYBETWEENSHOTS ; time between shots, msec
PreAttackDelay = HOBBIT_SWORD_PREATTACKDELAY ; 433 is natural time of the stabbing animation.
PreAttackType = PER_SHOT ; Do the delay each time we attack a new target
FiringDuration = HOBBIT_SWORD_FIRINGDURATION ; min 600 for anim
FireFX = FX_GondorSwordHit ;FX Played when fired
FireFlankFX = FX_Flanking ;FX Played when Flanking
DamageNugget ; A basic Nugget that just does damage
Damage = HOBBIT_SWORD_DAMAGE ; The amount of damage the nugget does
Radius = 0.0 ; How far from target do other units get hurt?
DelayTime = 0 ; Time it takes for the nugget to be used
DamageType = CRUSH ;What kind of damage is it?
DamageFXType = SWORD_SLASH ;used to cross with their DamageFX listing to determine what effect to play
DeathType = NORMAL ;What kind of death does the unit have when killed, EX: Burning, Normal, Crushed
FlankingBonus = 50% ;If attacked from behind, how much extra damage is done
End
End
This is the basics of the Hobbitsword weapon. If you read all the descriptions on the side you should pretty much be able to understand what each part of the weapon does.
A Ranged weapon has a not so different kind of code:
I'm not going to put descriptions to things I have already mentioned
;------------------------------------------------------------------------------
; Merry and Pippin use these to throw rocks
Weapon HobbitRockThrow ; BALANCE Hobbit Weapon Rock
AttackRange = HOBBIT_ROCK_RANGE
WeaponSpeed = 150.0 ; dist/sec (huge value == effectively instant)
AcceptableAimDelta = 20 ; prevent twitchy reaiming in horde on horde
PreAttackDelay = 500
PreAttackType = PER_SHOT
HitPercentage = 0 ; never auto hits, always hits ground
ScatterRadius = 0.0 ;When this weapon misses it can randomly miss by as much as this distance.
FiringDuration = 1200
DelayBetweenShots = 3166
CanFireWhileMoving = Yes ;This is Self-explanatory
ProjectileNugget ; A Nugget that creates an Object and sends it to the target with a Warhead
ProjectileTemplateName = HobbitRockProjectile ;The object that goes to target
WarheadTemplateName = HobbitRockThrowWarhead ;The warhead, or thing that does damage when it hits
End
End
;----------------------------
Weapon HobbitRockThrowWarhead ;The Warhead mentioned up there
FireFX = FX_ImpactHobbitRock
ProjectileCollidesWith = ENEMIES NEUTRAL STRUCTURES WALLS ; What can it collide with?
RadiusDamageAffects = ENEMIES ;who does the radius damage affect?
HitStoredTarget = Yes ; Always hits initial target.
DamageNugget ; A basic Nugget that just does damage
Damage = HOBBIT_ROCK_DAMAGE ; ; The *DAMAGE* Done
DamageScalar = 25% ANY +HERO +STRUCTURE +INFANTRY -MONSTER ; ; how much % of the *Damage* these units take
DamageScalar = 50% ANY +MONSTER ; ; how much % of the *Damage* these units take
Radius = 0.0 ; HitStoredTarget means we hurt the person we launched at. And nobody else. So a miss hurts nobody.
DelayTime = 0
DamageType = HERO_RANGED
DamageFXType = SMALL_ROCK
DeathType = NORMAL
End
End
A ranged weapon from a hobbit is somewhat different from another units bow:
;------------------------------------------------------------------------------
Weapon GondorRangerBow
AttackRange = GONDOR_RANGER_RANGE
RangeBonusMinHeight = 10 ;how much higher than target do i have to be to have an longer range
RangeBonus = 1 ;range advantage gotten from height
RangeBonusPerFoot = 1 ; ;range advantage gotten per foot
LeechRangeWeapon = Yes
WeaponSpeed = 321 ; dist/sec
MinWeaponSpeed = 241
MaxWeaponSpeed = 481 ; dist/sec Upper limit on scaling, when attacking past nominal "max" range
FireFX = FX_RohanArcherBowWeapon
PlayFXWhenStealthed = Yes ;does FX play even though unit is stealthed?
ScaleWeaponSpeed = Yes ; Used for lob weapons, scales speed proportional to range
HitPercentage = 100 ;Chance it hits target '100 = Always'
ScatterRadius = 16.0
AcceptableAimDelta = 20
DelayBetweenShots = 0
PreAttackDelay = GONDOR_RANGER_BOW_PREATTACKDELAY
PreAttackType = PER_SHOT
PreAttackRandomAmount = 0
FiringDuration = 0
ClipSize = 1 ;How many of the projectilenuggets are shot at one shot?
AutoReloadsClip = Yes
AutoReloadWhenIdle = 1
ClipReloadTime = 1366 ; Time to reload
ContinuousFireOne = 2 ; ; ; amount of times to fire fast after each other
WeaponBonus = CONTINUOUS_FIRE_MEAN RATE_OF_FIRE 225% ; ;
ContinuousFireCoast = GONDOR_RANGER_BOW_RELOADTIME_MAX
AntiAirborneVehicle = Yes ;can hit airborne things?
AntiAirborneMonster = Yes ;can hit airborne things?
HitPassengerPercentage = 20%
CanBeDodged = Yes ; Will check for a DodgePercent on the target to have a second chance at failing HitPercent
ProjectileNugget ; Default arrow
ProjectileTemplateName = GoodFactionArrow
WarheadTemplateName = GondorRangerBowWarhead
ForbiddenUpgradeNames = Upgrade_GondorFireArrows ;upgrades not allowed for shooting this
End
;Fire arrow available from fire arrow upgrade
ProjectileNugget ;Nugget used when *Upgrade_GondorFireArrows* is purchased
ProjectileTemplateName = GoodFactionFireArrow
WarheadTemplateName = GondorRangerBowFireWarhead
RequiredUpgradeNames = Upgrade_GondorFireArrows ;upgrades needed for shooting this
End
End
;----------------------------
Weapon GondorRangerBowWarhead
ProjectileCollidesWith = ENEMIES NEUTRAL STRUCTURES WALLS
RadiusDamageAffects = ENEMIES NEUTRALS ALLIES NOT_SIMILAR
HitStoredTarget = Yes ; Always hits initial target.
DamageNugget ; A basic Nugget that just does damage
Damage = GONDOR_RANGER_DAMAGE
DamageScalar = 135% ANY +MONSTER -SUMMONED
Radius = 0.0
DelayTime = 0
DamageType = PIERCE
DamageFXType = GOOD_ARROW_PIERCE
DeathType = NORMAL
End
End
If you look at both the Hobbit's rocks and the ranger's bow you will notice that the bow has alot more code. This is because a ranger has a bigger chance of hitting a unit and he shoots a different speeds and has height advantages!
This rounds up the Weapon part of this tutorial...
_________________________________________________________________
On the next page I will explain the different kind of Weapon Nuggets in the game \
Weapons & Nuggets in detail Cont.
This part of the tutorial will show you more Nuggets.
For all the damage types look in the file: DamageTypes which you can download at the bottom of this page!
Nuggets
There are many kind of NUGGETS in BFME2, here's a list of the ones I have found:
*1* DamageNugget
*2* MetaImpactNugget
*3* ProjectileNugget
*4* WeaponOCLNugget
*5* AttributeModifierNugget
*6* StealMoneyNugget
*7* DOTNugget
*8* ParalyzeNugget
*9* EmotionWeaponNugget
*10*FireLogicNugget
*11*SpecialModelConditionNugget
*12*ClearNuggets
*13*DamageFieldNugget
*14*HordeAttackNugget
*15*SpawnAndFadeNugget
*16*GrabNugget
*17*LuaEventNugget
*18*SlaveAttackNugget
*19*DamageContainedNugget
*20*OpenGateNugget
*Cool* Cool Nuggets
Tip: Use the Search function (Ctrl+F) to find a specific Nugget so for DamageNugget Search for *1*
There may be many more, so comment if you know another one!
DamageNugget *1*
The Name says it already, its a nugget that just does normal damage.
Example:
DamageNugget ; A basic Nugget that just does damage
Damage = 1 ;Damage for a normal hit
Radius = 0.0 ;Radius of damage
DelayTime = 0 ;How long from hit till the damage is applied
DamageType = SLASH ;Used to cross reference with victim's armor to determine if hurt
DamageFXType = SWORD_SLASH ;used to cross with their DamageFX listing to determine what effect to play
DeathType = NORMAL ;Used as index to their Death Modules to determine which one to play
End
MetaImpactNugget *2*
A Nugget that throws things back with force, Think about moves like wizardblast or when drogoth smacks the ground with his tail.
Example:
MetaImpactNugget ; A Nugget that throws things back with force
HeroResist = .75 ;only knocks heroes down 75% of the time
ShockWaveAmount = 50.0 ;Amount of force that will push units
ShockWaveRadius = 10.0 ;Radius the shockwave affects
ShockWaveArc = 90 ; in degrees to each side 180 is full circle
ShockWaveTaperOff = 1.0
ShockWaveSpeed = 0.0 ;Speed of shockwave
ShockWaveZMult = 1.0
InvertShockWave = Yes ; Pull(YES) OR Push(NO)
End
ProjectileNugget *3*
A Nugget that creates an Object and sends it to the target with a Warhead.
Example:
ProjectileNugget ; A Nugget that creates an Object and sends it to the target with a Warhead
ProjectileTemplateName = GimliAxeProjectile ;object shot
WarheadTemplateName = RohanGimliAxeThrownWarhead ;warhead that gives damage
End
WeaponOCLNugget *4*
A Nugget that should only be used for the rarest of super special weapons According To EA
Creates an object at the target's position, not used alot
Example:
WeaponOCLNugget ; A Nugget that should only be used for the rarest of super special weapons.
WeaponOCLName = OCL_SuperComplicatedFivePartMovingDeathBlossom ;don't know if this OCL even exists!
End
AttributeModifierNugget *5*
A nugget that modifies a units attribute.
Example:
AttributeModifierNugget
AttributeModifier = WitchKingMorgulBladeEffect ;The attribute modifier used.
DamageFXType = SWORD_SLASH ;used to cross with their DamageFX listing to determine what effect to play
End
StealMoneyNugget *6*
I like the idea of this nugget,
It steals money per attack!
Example:
StealMoneyNugget
AmountStolenPerAttack = 5 ; amount of money unit steals per attack
End
DOTNugget *7*
DOT stands for Damage Over Time, at least that is what I believe.
It does damage to a target over a period of time, most common in poison attacks.
Example:
DOTNugget ; An example of a poison DOTNugget.
Damage = DEFAULT_POISON_DAMAGE
AcceptDamageAdd = No
Radius = 0.0
DelayTime = 0
DamageType = POISON
DamageFXType = POISON
DeathType = NORMAL
DamageInterval = 1000 ;how many seconds between poison damage done?
DamageDuration = 10000 ;how long is target poisoned?
SpecialObjectFilter = AFFECTED_BY_POISON_OBJECTFILTER
End
ParalyzeNugget *8*
Paralyzes unit for a period of time.
Example:
ParalyzeNugget
Radius = 0.0
Duration = POISONED_STINGER_DURATION
SpecialObjectFilter = CRIPPLE_STRIKE_OBJECT_FILTER ;Who does it affect?
ParalyzeFX = FX_PoisonedStunEffect
End
EmotionWeaponNugget *9*
Gives target a specific emotion, most commonly used emotion is Terror, which causes unit to run away.
Example:
EmotionWeaponNugget
EmotionType = TERROR
Radius = 0
Duration = 5
SpecialObjectFilter = ANY ENEMIES +MONSTER
End
FireLogicNugget *10*
This Nugget affects the fire logic of the ground around the target.
Example:
;These 2 together make almost any ground burn
FireLogicNugget
LogicType = INCREASE_BURN_RATE
Radius = 1
Damage = 40
End
FireLogicNugget
LogicType = INCREASE_FUEL
Radius = 40
Damage = 20
MinMaxBurnRate = 40
MinDecay = 25
MaxResistance = 1
End
SpecialModelConditionNugget *11*
I'm not exacly sure what this does, but I think it has to do with a weapon used when a model has a specific condition.
Example:
Weapon MordorMtTrollBored ;I suspect this one is for a troll who smacks around because he is bored and it hurts people
AttackRange = 40.0
PreAttackFX = FX_TrollTreeSwing
FireFX = FX_TrollPunchGeneric ;FX_TrollTreeHit
RadiusDamageAffects = ALLIES
SpecialModelConditionNugget
ModelConditionNames = USER_2 ; Can be used to set multiple, and it doesn't use the normal hit reaction because this one is special
ModelConditionDuration = 2000
SpecialObjectFilter = NONE +MordorCaveTroll +MordorMountainTroll +GoblinCaveTroll
End
SpecialModelConditionNugget
ModelConditionNames = USER_3
ModelConditionDuration = 21000
SpecialObjectFilter = NONE +MordorMountainTroll
End
End
ClearNuggets *12*
Clear all the damage/fx/paralyze etc nuggets so they can be replaced.
Example:
ClearNuggets ; Clear all the damage/fx/paralyze etc nuggets so they can be replaced.
DamageFieldNugget *13*
A Nugget that lays down an area of damage that persists independantly.
Example:
DamageFieldNugget
WeaponTemplateName = SmallFireFieldWeapon ;Weapon to "put down"
Duration = 3000 ;How long will the weapon live?
End
HordeAttackNugget *14*
This nugget tells the horde to attack something.
Example:
HordeAttackNugget
End
SpawnAndFadeNugget *15*
This nugget spawns an object and tells the object who uses the weapon to fade away.
Example:
;;Isengard Mine
SpawnAndFadeNugget
ObjectTargetFilter = ANY +STRUCTURE +INFANTRY +CAVALRY +MONSTER -ROCK_VENDOR ;where not to spawn?
SpawnedObjectName = IsengardDeployedExplosiveMine ;What to spawn?
SpawnOffset = X:8 Y:1 Z:0 ;How far away from me to spawn?
End
GrabNugget *16*
A Nugget that makes the unit grab another object.
Example:
GrabNugget ; A Nugget that makes me grab you
SpecialObjectFilter = ANY +GRAB_AND_DROP
ContainTargetOnEffect = Yes
ImpactTargetOnEffect = Yes ;... if for some reason, I can not contain you, I'll try to give you a shove
ShockWaveAmount = 50.0
ShockWaveRadius = 16.0
ShockWaveTaperOff = 0.75
ShockWaveZMult = 1.1
End
LuaEventNugget *17*
A Nugget that Sends a lua script event out.
This is usefull to make people be scared of you!
Example:
LuaEventNugget ; Sends a lua script event out
LuaEvent = BeUncontrollablyAfraid ;What LUA Script?
Radius = 200 ;How far?
SendToEnemies = Yes ;Enemy units recieve the LUA?
SendToAllies = No ;Ally units recieve the LUA?
SendToNeutral = Yes ;Neutral units recieve the LUA?
End
SlaveAttackNugget *18*
A Nugget that tells the objects slave to perform the attack.
Example:
SlaveAttackNugget
End
DamageContainedNugget *19*
A Nugget that damages anyone who is contained by any object, such as a transport boat.
Example:
DamageContainedNugget
KillCount = 5 ;how many to kill
KillKindof = INFANTRY ;What "Kind" to kill
KillKindofNot = NONE ;What not to kill?
DeathType = BURNED ;How will they die?
End
OpenGateNugget *20*
A Nugget that forces a gate to open.
For example, some battering ram might automatically break open the gate!
Example:
OpenGateNugget ;Force open any gate hit by this.
Radius = 0.0
End
Some Cool Nuggets *Cool*
Get healed by attacking unit, like a wight!
Weapon BarrowWightTouch ;BALANCE BarrowWightTouch
RadiusDamageAffects = ENEMIES NEUTRALS
LeechRangeWeapon = Yes
AttackRange = 20.0
MeleeWeapon = Yes
DelayBetweenShots = BARROWWIGHT_SWORD_DELAYBETWEENSHOTS ; Bad Things happen if delay between shots is less than Preattack+Firing times. You are ready to fire before you are done firing.
PreAttackDelay = BARROWWIGHT_SWORD_PREATTACKDELAY ; 400 is sword swing delay time before contact with target.
PreAttackType = PER_SHOT ; Do the delay each time we attack a new target
FireFX = FX_BarrowWightHit ;FX_GondorSwordHit
FiringDuration = BARROWWIGHT_SWORD_FIRINGDURATION ; Duration of the sword swing
DamageNugget ; A basic Nugget that just does damage
Damage = BARROWWIGHT_SWORD
Radius = 10.0
DelayTime = 0
DamageType = MAGIC
DamageFXType = SWORD_SLASH
DeathType = NORMAL
DrainLife = Yes ;<- This is the part that allows unit to steal health
DrainLifeMultiplier = 0.5 ;<- How much % of damage done is converted into health for unit?
End
AttributeModifierNugget
AttributeModifier = BarrowWightTouchDebuff
AntiCategories = LEADERSHIP BUFF
SpecialObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER
End
End
This rounds up this tutorial,
So good luck with making cool Nugget Combo's.
If you know of any other Nuggets then comment it or send me a PM!
Leveling Spear
This Tutorial will show you how to make your spear become stronger as your hero levels up!
In this tutorial 'myhero' will be Jack and he is going to throw a spear that gets stronger everytime he levels up!
NOTE
If you are going to do this then I do expect you to know what you are going to do and that you have a fairly good understanding about coding.
This tutorial will not teach you how to understand everything I'm doing here, but if you read other tutorials about the INI's that are listed down there then you should be able to have a basic idea about what im doing.
One last thing, you should know how to add commandsets and buttons since i wont be telling that.
INI's Needed:
-'Myhero'.ini *the hero you are editing
-Upgrade.ini
-experiencelevels.ini
-Weapon.ini
-'MyHero'.ini-
Open your hero's ini and add this to his specialpowers area:
//--------------------------------------------------------------------------
// THROW SPEAR SPECIAL POWER
//--------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_SmiteEnabler
SpecialPowerTemplate = SpecialAbilitySpearThrow
TriggeredBy = Upgrade_JackSpearThrow
End
Behavior = SpecialPowerModule ModuleTag_EowynSmiteStarter
SpecialPowerTemplate = SpecialAbilitySpearThrow
UpdateModuleStartsAttack = Yes
StartsPaused = Yes
End
Behavior = WeaponFireSpecialAbilityUpdate ModuleTag_SpecialAbilitySmiteUpdate
SpecialPowerTemplate = SpecialAbilitySpearThrow
UnpackTime = 1200
PackTime = 2000
AwardXPForTriggering = 0
StartAbilityRange = 275.0
ApproachRequiresLOS = Yes
SpecialWeapon = JackSpear
WhichSpecialWeapon = 1
End
Your hero will now use the 'JackSpear' as the weapon he throws.
-Upgrade.ini-
Open the Upgrade.ini
Go all the way to the bottom of the file and add this code.
Upgrade Upgrade_JackSpearThrow
Type = OBJECT
End
Upgrade Upgrade_JackSpearLVL1
Type = OBJECT
End
Upgrade Upgrade_JackSpearLVL2
Type = OBJECT
End
Upgrade Upgrade_JackSpearLVL3
Type = OBJECT
End
Upgrade Upgrade_JackSpearLVL4
Type = OBJECT
End
Most of these 'upgrades' you don't have to worry about for now.
You should have noticed that we start with the upgrade Upgrade_JackSpearThrow.
We will put this upgrade in the experience.ini later on.
The upgrades after that one are the ones which will enable the spear to become stronger as 'Jack' Levels up.
In this tutorial I will only use the spear upgrades till lvl 4, but you can just add your own upgrades to make it go up to LVL 10 or higher.
-experiencelevels.ini-
We will now add the upgrades to 'Jacks' experience levels...
Add this code at the bottom of the file:
ExperienceLevel JackLevel1
TargetNames = Jack
RequiredExperience = 1
ExperienceAward = FARAMIR_LVL1_EXP_AWARD
Rank = 1
Upgrades = Upgrade_JackSpearThrow Upgrade_JackSpearLVL1
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel JackLevel2
TargetNames = Jack
RequiredExperience = FARAMIR_LVL2_EXP_NEEDED
ExperienceAward = FARAMIR_LVL2_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
Rank = 2
AttributeModifiers = HeroLevelUpDageel1
Upgrades = Upgrade_JackSpearLVL2
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel JackLevel3
TargetNames = Jack
RequiredExperience = FARAMIR_LVL3_EXP_NEEDED
ExperienceAward = FARAMIR_LVL3_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
Rank = 3
Upgrades = Upgrade_JackSpearLVL3
AttributeModifiers = HeroLevelUpDageel2
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel JackLevel4
TargetNames = Jack
RequiredExperience = FARAMIR_LVL4_EXP_NEEDED
ExperienceAward = FARAMIR_LVL4_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
Rank = 4
Upgrades = Upgrade_JackSpearLVL4
AttributeModifiers = HeroLevelUpDageel3
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
For your information all I did was add the upgrades Upgrade_JackSpearLVL1 till LVL 4 and add the Upgrade_JackSpearThrow at JackLevel1
So if you have other upgrades for your hero all you have to do is add those upgrades Manually to your character's Experience levels.
And remember in this tutorial I will only go till lvl 4, but you can make it go up to LVL 10 or higher.
-Weapon.ini-
So finally we are going to make the Weapon for our hero's spear.
Add this code to the bottom of your weapon.ini:
Weapon JackSpear ; BALANCE Rohan Eomer Spear Weapon
AttackRange = 300.0
LeechRangeWeapon = Yes
WeaponSpeed = 261 ; dist/sec
MinWeaponSpeed = 201
MaxWeaponSpeed = 301 ; dist/sec Upper limit on scaling, when attacking past nominal "max" range
FireFX = FX_EomerSpearThrow
ScaleWeaponSpeed = Yes ; Used for lob weapons, scales speed proportional to range
HitPercentage = 100
ScatterRadius = 0.0 ;When this weapon misses it can randomly miss by as much as this distance.
AntiAirborneVehicle = Yes
AntiAirborneMonster = Yes
PreAttackDelay = 1
PreAttackType = PER_SHOT ; Do the delay each time we attack a new target
FiringDuration = 2000 ; Duration of the archer firing shot is 500ms.
HoldAfterFiringDelay = 2000
ProjectileNugget ; A Nugget that creates an Object and sends it to the target with a Warhead
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL1
ForbiddenUpgradeNames = Upgrade_JackSpearLVL2 Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 2
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL2
RequiredUpgradeNames = Upgrade_JackSpearLVL2
ForbiddenUpgradeNames = Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 3
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL3
RequiredUpgradeNames = Upgrade_JackSpearLVL3
ForbiddenUpgradeNames = Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 4
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL4
RequiredUpgradeNames = Upgrade_JackSpearLVL4
End
End
;-----------------------------------
Weapon JackSpearWarheadLVL1
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
FireFX = FX_GondorSwordHit
HitStoredTarget = Yes
DamageNugget ; A basic Nugget that just does damage
Damage = 1000
;Spear Bad Against Buildings, Perfect For Flying Units, Good For Breaking Ships.
DamageScalar = 5% NONE +STRUCTURE
DamageScalar = 400% NONE +MordorFellBeast +MordorWitchKingOnFellBeast +GondorGwaihir +Drogoth
DamageScalar = 200% NONE +EvilMenCorsairShip +EvilShoreBombardShip +EvilFireShip +ElvenBattleShip +ElvenFireShip +ElvenShoreBombardShip
Radius = 15
DelayTime = 0
DamageType = MAGIC
DamageFXType = SWORD_SLASH
DeathType = NORMAL
End
End
Weapon JackSpearWarheadLVL2
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
FireFX = FX_GondorSwordHit
HitStoredTarget = Yes
DamageNugget ; A basic Nugget that just does damage
Damage = 1000
;Spear Bad Against Buildings, Perfect For Flying Units, Good For Breaking Ships.
DamageScalar = 5% NONE +STRUCTURE
DamageScalar = 400% NONE +MordorFellBeast +MordorWitchKingOnFellBeast +GondorGwaihir +Drogoth
DamageScalar = 200% NONE +EvilMenCorsairShip +EvilShoreBombardShip +EvilFireShip +ElvenBattleShip +ElvenFireShip +ElvenShoreBombardShip
Radius = 15
DelayTime = 0
DamageType = MAGIC
DamageFXType = SWORD_SLASH
DeathType = NORMAL
End
End
Weapon JackSpearWarheadLVL3
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
FireFX = FX_GondorSwordHit
HitStoredTarget = Yes
DamageNugget ; A basic Nugget that just does damage
Damage = 1500
;Spear Bad Against Buildings, Perfect For Flying Units, Good For Breaking Ships.
DamageScalar = 5% NONE +STRUCTURE
DamageScalar = 400% NONE +MordorFellBeast +MordorWitchKingOnFellBeast +GondorGwaihir +Drogoth
DamageScalar = 200% NONE +EvilMenCorsairShip +EvilShoreBombardShip +EvilFireShip +ElvenBattleShip +ElvenFireShip +ElvenShoreBombardShip
Radius = 15
DelayTime = 0
DamageType = MAGIC
DamageFXType = SWORD_SLASH
DeathType = NORMAL
End
End
Weapon JackSpearWarheadLVL4
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
FireFX = FX_GondorSwordHit
HitStoredTarget = Yes
DamageNugget ; A basic Nugget that just does damage
Damage = 2000
;Spear Bad Against Buildings, Perfect For Flying Units, Good For Breaking Ships.
DamageScalar = 5% NONE +STRUCTURE
DamageScalar = 400% NONE +MordorFellBeast +MordorWitchKingOnFellBeast +GondorGwaihir +Drogoth
DamageScalar = 200% NONE +EvilMenCorsairShip +EvilShoreBombardShip +EvilFireShip +ElvenBattleShip +ElvenFireShip +ElvenShoreBombardShip
Radius = 15
DelayTime = 0
DamageType = MAGIC
DamageFXType = SWORD_SLASH
DeathType = NORMAL
End
End
Your hero now throws this spear, which becomes stronger when your hero levels up!
If you want to add more then you should look at the principle I have used up there.
Its fairly simple: to add more levels you must add more upgrades to the projectilenuggets and you must make more warheads for the spear...
Your spear throw should now work!
Just a little tip: don't forget to add the command button Command_RohanEomerSpear to your hero's commandset!
On The Next Page:
How to make the spear change color as you level up...
Leveling Spear Changing colors
This Part of my tutorial will show you how to make your spear Change colors as your hero levels up!
This tutorial will refer to parts of the tutorial from the previous page.
NOTE
You should have done the things on the previous page if you want to be able to do this correctly.
INI's Needed:
-Weapon.ini
-Goodfactionsubobjects.ini *or Evilfactionsubobjects.ini, depends on which side your hero is!
-FXparticlesystem.ini
Texture Needed:
- exspearglow.tga
-Weapon.ini-
Here is the part of the weapon JackSpear that we will be working on:
ProjectileNugget ; A Nugget that creates an Object and sends it to the target with a Warhead
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL1
ForbiddenUpgradeNames = Upgrade_JackSpearLVL2 Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 2
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL2
RequiredUpgradeNames = Upgrade_JackSpearLVL2
ForbiddenUpgradeNames = Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 3
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL3
RequiredUpgradeNames = Upgrade_JackSpearLVL3
ForbiddenUpgradeNames = Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 4
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL4
RequiredUpgradeNames = Upgrade_JackSpearLVL4
End
Notice that the ProjectileTemplateName is RohanEomerSpearProjectile, this is the object Jack throws!
Lets have Jack throw a special color spear as soon as he reaches LVL 4:
ProjectileNugget ; A Nugget that creates an Object and sends it to the target with a Warhead
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL1
ForbiddenUpgradeNames = Upgrade_JackSpearLVL2 Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 2
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL2
RequiredUpgradeNames = Upgrade_JackSpearLVL2
ForbiddenUpgradeNames = Upgrade_JackSpearLVL3 Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 3
ProjectileTemplateName = RohanEomerSpearProjectile
WarheadTemplateName = JackSpearWarheadLVL3
RequiredUpgradeNames = Upgrade_JackSpearLVL3
ForbiddenUpgradeNames = Upgrade_JackSpearLVL4
End
ProjectileNugget ; LVL 4
ProjectileTemplateName = JackSpearLVL4Projectile ;<-Special Spear Color for lvl 4
WarheadTemplateName = JackSpearWarheadLVL4
RequiredUpgradeNames = Upgrade_JackSpearLVL4
End
Notice I changed the ProjectileTemplateName to JackSpearLVL4Projectile.
Now we will move on to changing the looks of that spear...
-Goodfactionsubobjects.ini-
Now we will add this code to the bottom of this ini:
Object JackSpearLVL4Projectile
Draw = W3DScriptedModelDraw ModuleTag_01 ;ModuleTag_Draw
DefaultModelConditionState
Model = RUEomer_SPER
ParticleSysBone NONE JackSpearLVL4ContrailThin ;<-ParticleSystem used
ParticleSysBone NONE JackSpearLVL4FlameTrail ;<-ParticleSystem used
Texture = exspearglow.tga JackSpearLVL4exspearglow.tga ;<- The TGA File that you are using
End
End
; *** AUDIO Parameters ***
; ***DESIGN parameters ***
EditorSorting = SYSTEM
ArmorSet
Armor = NoArmor
End
VisionRange = 0.0
; *** ENGINEERING Parameters ***
KindOf = PROJECTILE
Body = ActiveBody ModuleTag_02
MaxHealth = 10.0
End
Behavior = DestroyDie ModuleTag_03
;nothing
End
Behavior = BezierProjectileBehavior ModuleTag_04
; To tweak a Bezier path
FirstHeight = 9 ; Height of Bezier control points above highest intervening terrain
SecondHeight = 9
FirstPercentIndent = 20% ; Percentage of shot distance control points are placed
SecondPercentIndent = 90%
FlightPathAdjustDistPerSecond = 50
; Can allow a max speed this can attempt to follow a target. Units are their velocity we can tag. (45 is default human speed)
DetonateCallsKill = Yes
CurveFlattenMinDist = 100.0
End
Behavior = CreateObjectDie ModuleTag_06
DeathTypes = ALL
End
Behavior = FXListDie ModuleTag_07
DeathTypes = ALL -CRUSHED -SPLATTED
DeathFX = FX_SmiteHit
End
Geometry = Sphere
GeometryIsSmall = Yes
GeometryMajorRadius = 0.8
End
Now a little bit of grafical stuff, In Textures1.BIG find the file exspearglow.tga and extract it.
Rename the file to JackSpearLVL4exspearglow.tga.
Open Paint Shop Pro or Photoshop, or any other good image editing software...
Choose a color to make your spear,
For this tutorial I'll make the spear red.
Colorize it with the options:
Hue: 0 Saturation: 153
Now save it...
Notice I have put 3 notes up there in the codebox:
The first 2 are Particlesystems, which will come later on.
The 3rd is the name of the TGA file you have just changed!
-FXparticlesystem.ini-
This is the code you need to add at the bottom of the file:
;Look at these 2 systems to see changes made!
;FXParticleSystem SpearContrailThin
;FXParticleSystem SpearFlameTrail
;---------Jack Spear FX---------
FXParticleSystem JackSpearLVL4FlameTrail
System
Priority = ALWAYS_RENDER
ParticleName = EXspearhead.tga
Lifetime = 50 50
SortLevel = 1
Size = 40 40
BurstCount = 2 2
IsGroundAligned = Yes
IsParticleUpTowardsEmitter = Yes
End
Color = DefaultColor
Color1 = R:90 G:20 B:20 0
Color2 = R:0 G:0 B:0 50
End
Alpha = DefaultAlpha
End
Update = DefaultUpdate
SizeRateDamping = 0.8 0.9
AngleZ = -2 2
AngularDamping = 1 1
AngularDampingXY = 1 1
End
Physics = DefaultPhysics
VelocityDamping = 1 1
End
EmissionVelocity = OrthoEmissionVelocity
End
EmissionVolume = PointEmissionVolume
End
Draw = DefaultDraw
End
End
FXParticleSystem JackSpearLVL4ContrailThin
System
Priority = MEDIUM_OR_ABOVE
Type = STREAK
ParticleName = EXContrail.tga
Lifetime = 7 7
SortLevel = 1
Size = 1 2
BurstCount = 1 1
InitialDelay = 1 1
End
Color = DefaultColor
Color1 = R:90 G:20 B:20 0
Color2 = R:0 G:0 B:0 7
Color4 = R:32 G:32 B:32 0
End
Alpha = DefaultAlpha
End
Update = DefaultUpdate
SizeRate = -0.3 -0.3
SizeRateDamping = 0.85 0.9
AngularDamping = 1 1
AngularDampingXY = 1 1
End
Physics = DefaultPhysics
VelocityDamping = 0.93 0.94
End
EmissionVelocity = OrthoEmissionVelocity
End
EmissionVolume = LineEmissionVolume
StartPoint = X:7 Y:0 Z:0
EndPoint = X:8 Y:0 Z:0
End
Draw = StreakDraw
End
End
What I have changed in these 2 systems is the 'DefaultColor's:
Color1 = R:90 G:20 B:20 0
This is the same kind of color we gave our JackSpearLVL4exspearglow.tga.
Now the spear Jack throws at LVL 4 is a reddish color.
Once again a tip: If you want to look at the differences between the spear's coding you should look at the RohanEomerSpearProjectile in the Goodfactionsubobjects.ini
Play around with the color values to make cool looking spear, and good luck.
I hope this tutorial has helped you understand the weapons and thrown projectiles in BFME better!
'MorgulBlade' effect
This Tutorial will show you how to make your own MorgulBlade!
In this tutorial 'myhero' will be Jack (once again) and he is going to use the MorgulBlade that makes a chest of gold appear when he kills a unit!
NOTE
If you are going to do this then I do expect you to know what you are going to do and that you have a fairly good understanding about coding.
This tutorial will not teach you how to understand everything I'm doing here, but if you read other tutorials about the INI's that are listed down there then you should be able to have a basic idea about what im doing.
One last thing, you should know how to add commandsets and buttons and experiencelevels since I wont be telling that.
INI's Needed:
-'Myhero'.ini *the hero you are editing
-Upgrade.ini
-Weapon.ini
-Objectcreationlist.ini
-'Myhero'.ini-
Add this code to your hero's special power area:
;--------- Kill For a chest of gold -----------------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_BlackRiderMorgulBlade
SpecialPowerTemplate = SpecialAbilityBlackRiderMorgulBlade
TriggeredBy = Upgrade_JackChest
End
Behavior = SpecialPowerModule ModuleTag_BlackRiderMorgulBladeStarter
SpecialPowerTemplate = SpecialAbilityBlackRiderMorgulBlade
UpdateModuleStartsAttack = Yes
StartsPaused = Yes
InitiateSound = FellBeastVoiceAttack
End
Behavior = WeaponFireSpecialAbilityUpdate ModuleTag_BlackRiderMorgulBladeUpdate
SpecialPowerTemplate = SpecialAbilityBlackRiderMorgulBlade
SkipContinue = Yes
UnpackTime = 150 ;250
PreparationTime = 1
PersistentPrepTime = 250 ;500
PackTime = 50 ;100
AwardXPForTriggering = 0
StartAbilityRange = 15.0
SpecialWeapon = Jackschestofgold ;EvilMenBlackRiderMorgulBlade
WhichSpecialWeapon = 1
End
Behavior = AutoAbilityBehavior ModuleTag_MorgulBladeAutoAbility
SpecialAbility = SpecialAbilityBlackRiderMorgulBlade
ForbiddenStatus = INSIDE_GARRISON
AllowSelf = No
Query = 1 MORGULBLADE_OBJECT_FILTER
End
Im going to explain what I changed from the original 'MorgulBlade' power:
1st
TriggeredBy = Upgrade_JackChest
Its the upgrade needed to do the power...
2nd
SpecialWeapon = Jackschestofgold
The Weapon he uses when doing the power...
Moving On...
-Upgrade.ini-
Add this code at the bottom of upgrade.ini:
Upgrade Upgrade_JackChest
Type = OBJECT
End
This is the upgrade you will need to add to the experiencelevels.INI yourself, and it will be used later!
~if you do not know how to do this then you did not read my note on the top of the page!~
-Weapon.ini-
Add this code at the bottom of the file:
Weapon Jackschestofgold
LeechRangeWeapon = Yes
AttackRange = 30.0
MeleeWeapon = Yes
;FireFX = FX_BlackRiderMorgulBladeTempAudio ;FX_BlackRiderMorgulBlade
DelayBetweenShots = EVILMEN_BLACKRIDER_DELAYBETWEENSHOTS
PreAttackDelay = EVILMEN_BLACKRIDER_PREATTACKDELAY ; 1467 is the prep time for archer.
PreAttackType = PER_SHOT ; Do the delay each time we attack a new target
FiringDuration = EVILMEN_BLACKRIDER_FIRINGDURATION ; Duration of the archer firing shot is 500ms.
DamageNugget ; A basic Nugget that just does damage
Damage = 2000
Radius = 0.0
DelayTime = 0
DamageType = MAGIC
DamageSubType = BECOME_UNDEAD ;<- This seems like it has nothing to do with a chest when he dies...
DamageFXType = MAGIC
DeathType = NORMAL
End
AttributeModifierNugget
AttributeModifier = BlackRiderMorgulBlade
DamageFXType = SWORD_SLASH
SpecialObjectFilter = MORGULBLADE_OBJECT_FILTER
End
End
You might have seen the Note in the codebox,
Its true the BECOME_UNDEAD might seem like a joke but I'm sure you'll understand:
Become_undead just spawns a wight when the dude dies... so you could change the OCL so it drops a chest or another creature instead when it dies!
I also removed the poison damagenugget from the code, you can just get it back from the original morgulblade weapon if you want...
-Objectcreationlist.ini-
Find this code:
;--------------------------------Become Undead----------------------------
ObjectCreationList OCL_BecomeUndead
CreateObject
ObjectNames = BarrowWight_Summoned ; ;
Count = 1
FadeIn = No
End
End
And change it to:
;--------------------------------Become Undead----------------------------
ObjectCreationList OCL_BecomeUndead
CreateObject
ObjectNames = BarrowWight_Summoned ; ;
Count = 1
FadeIn = No
ForbiddenUpgrades = Upgrade_JackChest
End
CreateObject
ObjectNames = TreasureChest1 ;; BarrowWight_Summoned ; ;
Count = 1
FadeIn = No
RequiredUpgrades = Upgrade_JackChest
End
End
Now Jack should get a chest of gold when he kills someone with his power!
Note
You still have to add the upgrade Upgrade_JackChest to the experiencelevels.ini and add the command Command_BlackRiderMorgulBlade to your hero's commandset
With this code you should be able to make another unit appear after killing a unit with the power I have tested this myself and it worked, so it should work for you!
I hope this tutorial helped you alot.
Please put a comment if the power does not work, I tried it myself and it worked but who knows...
Nature's Wrath ~ Tornado
This part of the tutorial is about a special 'weapon',
The Tornado's Wind from Galadriel's Nature's Wrath Power.
NOTE
I expect you to have read most things on Pages 2 & 3.
This is not a 'real' tutorial it is just an example of a cool thing you can do with weapons!
INI's Needed:
-Weapon.ini
-Neutralunits.ini *only needed for reference to the "units" GaladrielTornado02 & GaladrielTornado
-Weapon.ini-
This is the code in the weapon.ini that Galadriel's tornado uses.
It has many interesting parts in it as you can see...
Weapon TornadoWindWeapon
RadiusDamageAffects = ENEMIES NEUTRALS
DelayBetweenShots = 0 ; time between shots, msec
ClipSize = 0 ; how many shots in a Clip (0 == infinite)
DamageNugget ; A basic Nugget that just does damage
Damage = TORNADO_DAMAGE_INNER
Radius = 20.0
DelayTime = 0
DamageType = HERO
DamageFXType = TORNADO ;GIMLI_LEAP
DeathType = NORMAL
DamageScalar = 35% NONE +STRUCTURE
CylinderAOE = Yes
End
DamageNugget ; A basic Nugget that just does damage
Damage = TORNADO_DAMAGE_OUTER
Radius = 50.0
DelayTime = 0
DamageType = HERO
DamageFXType = TORNADO ;GIMLI_LEAP
DeathType = NORMAL
DamageScalar = 35% NONE +STRUCTURE
CylinderAOE = Yes
End
MetaImpactNugget ; A Nugget that throws things back with force
KillObjectFilter = INSTANT_DEATH_ON_METAIMPACT_OBJFILTER
ShockWaveAmount = TORNADO_METASHOCKWAVE_AMOUNT
ShockWaveRadius = TORNADO_METASHOCKWAVE_RADIUS
ShockWaveTaperOff = 1.0
ShockWaveZMult = 1.6
InvertShockWave = Yes // makes it "suck"
CyclonicFactor = 0.66
End
End
-Interesting Parts In The Weapon Code-
-Delaybetweenshots is set to 0 so it is a 'continuous' effect/weapon
-Killobjectfilter tells what units to kill the second they get 'sucked up'
-InvertShockWave is set to Yes so the weapon 'sucks' units toward it
-CyclonicFactor is how strong the 'suction' should be
-Neutralunits.ini-
GaladrielTornado02
This part of the code in the object/unit GaladrielTornado02 lets the weapon be used continuously.
Behavior = FireWeaponUpdate ModuleTag_WINDY
FireWeaponNugget
WeaponName = TornadoWindWeapon
FireDelay = 0
OneShot = No
End
End
This is all for the Nature's Wrath ~ Tornado Part of the tutorial.
I hope this has helped you to see how the Tornado and it's weapon works.
Flanking gives bonus damage if the enemy is surrounded
Thanks, changed the description :P
how can i install the Mod
I have a problem, somehow when I try to start my game a game.dat occurs about the weapons.ini (The reason I'm posting here). The error is something about Unknown Block LeechRangeWeapon. Which makes no sense for me, 'cause as far as I understand the weapon.ini only works with gamedata.ini and there is no mentioning about LeechRangeWeapon in gamedata.ini? :)
This comment is currently awaiting admin approval, join now to view.