Ok, some may have noticed I was creating a vampire custom hero....everything works on him so far but I've hit a snag.
I want him to have Glorfindel's horse riding abbility (which works fine at the moment) but also I want him to be able to change into a vampire bat (or bat cloud) and a seperate toggle to change into a vampire werewolf (useing a warg...they look more werewolf like...kinda like American Werewolf in London style...heh).
The problem isn't in Kain's ini, but in the VampireBat one...obviously I want him to be able to change back...lol.
I had set up a child object of the Crebain (crows) and changed their skins to the cavebats and changed a few other bits such as the sounds to the cavebats one (kinda like what the re-skin does for 'em) and then I added the Beorning human/Beorning bear toggle (from the BFME The War mod and modified for VampireBat)...but it keeps giving me an undefined Behaviour error on game boot up.
I now know it's something in the toggle that it don't like since I deleted the other behaviours and left the transform toggle in and it STILL did it.....grrrr.....lol.
If someone could be kind enough to tell me what I need to change (or new code I need to add) I'd be very grateful...I can pretty much guess where to put it...lol...just need the toggle thingy working. I also changed the kindof a little to match Kain's (the vampire) and removed lifetime update with the relevant command.
For those that might be interested I'll list his powers/abbilties (all been coded so far...need the game to boot to check 'em). -
1) Horse Toggle
2)Vampire Bat Toggle
3)Vampire Werewolf Toggle
4)Blink (teleport)
5)Raise the Dead (army of the dead Summon).
He also has a hidden elven gifts that kicks in at about lvl 5....and aragorn's leadership which is available from lvl 1. And he has a vampire health drain on his custom KainSoulReaverSword weapon thanks to Zimoo...(thankies Zimoo... ).
The elven gifts/healing is set up so he can heal even during combat....making him one tough s.o.b.....well anyone who's familiar with Blood Omen and Legacy of Kain series of games will know just how tough Kain is.
I also added SCARY MONSTER to his kindof....that means anyone, friend or foe, that meets him will likely cower in fear...(I have great fun with that...lol).
Animal Transformation.
Started by BigRedKane, Jan 23 2007 10:39 PM
2 replies to this topic
#1
Posted 23 January 2007 - 10:39 PM
#2
Posted 24 January 2007 - 11:06 AM
It could be that you used the mount specialpower enum twice, although the error doesn't look like it.
Seeing the code you use would be helpful in this case.
If you don't want to post a near complete hero for your mod, just pm it to me and I'll have a look.
Solinx
Seeing the code you use would be helpful in this case.
If you don't want to post a near complete hero for your mod, just pm it to me and I'll have a look.
Solinx
"An expert is a man who has made all the mistakes which can be made in a very narrow field." - Niels Bohr
#3
Posted 25 January 2007 - 07:03 AM
hiya Solinx,
great to hear from ya....
I'll post what I can of my hero....I've added so many new powers to the poor guy I'm not entirely sure which ones will work as I intended yet....lol.
Oh well...for the mo it's definately the transforming powers giving probs.
and I don't mind posting the custom hero here....if anyone wants to use him they're welcome to it...lol..
Here's Kain's object ini (Kain.ini)
[codebox]
;------------------------------------------------------------------------------
;
; Kain.ini
;
;------------------------------------------------------------------------------
ChildObject Kain ElvenGlorfindel
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = GLORFINDEL_THREAT_LEVEL
ThingClass = CHARACTER_UNIT
TransportSlotCount = TRANSPORTSLOTCOUNT_HERO
BuildCost = GLORFINDEL_BUILDCOST
BuildTime = GLORFINDEL_BUILDTIME
BountyValue = ELVEN_GLORFINDEL_BOUNTY_VALUE
ShockwaveResistance = SHOCKWAVE_RESISTANCE_ALWAYS
;//DisplayMeleeDamage = GLORFINDEL_DAMAGE
;;;;;; WEAPON SETS ;;;;;;
WeaponSet
Conditions = None
Weapon = PRIMARY KainSoulReaverSword
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
WeaponSet
Conditions = CONTAINED
Weapon = PRIMARY GarrisonedUnitBow
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
;;;;;; Armor Sets ;;;;;;
ArmorSet
Conditions = None
Armor = HeroArmor
DamageFX = NormalDamageFX
End
ArmorSet
Conditions = MOUNTED
Armor = HeroArmorMounted
DamageFX = NormalDamageFX
End
VisionRange = VISION_HERO_STANDARD
ShroudClearingRange = SHROUD_CLEAR_HERO
MaxVisionBonusPercent = 600%
VisionBonusTestRadius = 200
VisionBonusPercentPerFoot = 2.0%
DisplayName = OBJECT:Kain
RecruitText = CONTROLBAR:KainRecruit ;;;;;;;;;;;; Anyone who gets revived should get these
ReviveText = CONTROLBAR:KainRevive ;;
Hotkey = CONTROLBAR:KainHotkey ;; If not, it won't look too bad.
MinCrushVelocityPercent = 50 ; Has to be moving at at least 50% of full speed.
CrushDecelerationPercent = 1 ; Lose xx percent of max velocity when crushing.
CrusherLevel = 0 ;Can I crush anything?
MountedCrusherLevel = 3 ;Crush level when mounted.
RamPower = 25
CrushKnockback = 80
CrushZFactor = 1.0
CommandSet = KainCommandSet
CommandPoints = 100
; *** AUTO RESOLVE DATA ***
AutoResolveUnitType = AutoResolveUnit_Hero
AutoResolveCombatChain = AutoResolve_HeroCombatChain
AutoResolveBody = AutoResolve_GlorfindelBody
AutoResolveArmor
Armor = AutoResolve_GlorfindelArmor
End
AutoResolveWeapon
Weapon = AutoResolve_GlorfindelWeapon
End
;AutoResolveLeadership = AutoResolve_GlorfindelBonus
; *** AUDIO Parameters ***;
VoiceAttack = GlorfindelVoiceAttack
VoiceAttackAir = GlorfindelVoiceAttack
VoiceAttackCharge = GlorfindelVoiceAttackCharge
VoiceAttackMachine = GlorfindelVoiceAttack
VoiceAttackStructure = GlorfindelVoiceAttackBuilding
VoiceFear = GlorfindelVoiceHelpMe
VoiceGuard = GlorfindelVoiceMove
VoiceMove = GlorfindelVoiceMove
VoiceMoveToCamp = GlorfindelVoiceMoveCamp
VoiceMoveWhileAttacking = GlorfindelVoiceDisengage
VoicePriority = 64
VoiceRetreatToCastle = GlorfindelVoiceRetreat
VoiceSelect = GlorfindelVoiceSelectMS
VoiceSelectBattle = GlorfindelVoiceSelectBattle
SoundImpact = ImpactHorse
UnitSpecificSounds
VoiceEnterUnitElvenTransportShip = GlorfindelVoiceMoveShip
VoiceGarrison = GlorfindelVoiceMoveGarrison
VoiceInitiateCaptureBuilding = GlorfindelVoiceCaptureBuilding ; From SpecialPower SpecialAbilityCaptureBuilding
End
ClientBehavior = ModelConditionSoundSelectorClientBehavior ModuleTag_MCSoundSelector
SoundState = MOUNTED
VoiceMove = GlorfindelVoiceMoveMount
VoiceSelect = GlorfindelVoiceSelectMountedMS
End
End
CrowdResponseKey = ElfHero
#include "..\..\..\includes\StandardUnitEvaEvents.inc"
EvaEventDieOwner = GlorfindelDie ;Eva event to trigger on unit's death. NOTICE THAT this is only for permanent deaths
Behavior = LargeGroupAudioUpdate ModuleTag_LGAU ; Tie into LargeGroupAudio system
Key = Humanoid_Male Elf Elf_Male Unit Infantry Hero
;UnitWeight = 2
End
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:BodyFallSoldier Animation:EUGLRFDL_SKL.EUGLRFDL_LNDA Frames:5
AnimationSound = Sound:BodyFallSoldier Animation:EUGLRFDL_SKL.EUGLRFDL_DTHA Frames:34
AnimationSound = Sound:FootstepDirtA Animation:EUGlrfdl_SKL.EUGlrfdl_RUNA Frames:9 18 28 38 48 58
AnimationSound = Sound:FootstepDirtA Animation:EUGlrfdl_SKL.EUGlrfdl_RUNB Frames:9 18 28 38 48 58
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_ACCL Frames:16
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_RUNA Frames:8
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_TNL1 Frames:8
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_TNR1 Frames:8
AnimationSound = Sound:HorseDieForHero Animation:RUHHs_Theo_SKL.RUHHs_Theo_LNDA Frames:0
AnimationSound = Sound:BodyFallSoldier Animation:RUHHs_Theo_SKL.RUHHs_Theo_LNDA Frames:2 10
AnimationSound = Sound:HorseDieForHero Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:0
AnimationSound = Sound:BodyFallGenericNoArmor Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:6
AnimationSound = Sound:BodyFallSoldier Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:45
End
;-------------------------------
Behavior = EmotionTrackerUpdate Module_EmotionTracker
TauntAndPointDistance = 300
TauntAndPointUpdateDelay = 10000
AddEmotion = Doom_Base
// AddEmotion = BraceForBeingCrushed_Base
// AddEmotion = FearIdle_Base
// AddEmotion = FearBusy_Base
AddEmotion = Point_Base
AddEmotion = Taunt_Base
AddEmotion = CheerIdle_Base
AddEmotion = CheerBusy_Base
// AddEmotion = HeroCheerIdle_Base
// AddEmotion = HeroCheerBusy_Base
AddEmotion = Alert_Base
AddEmotion = CheerForAboutToCrush_Base
End
; --------- LEADERSHIP -----------------------------------------------------------------
Behavior = AttributeModifierAuraUpdate ModuleTag_Leadership
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = GenericHeroLeadership
TriggeredBy = Upgrade_AragornLeadership
RefreshDelay = 2000
Range = 200
AntiCategory = BUFF
ObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER
End
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
TriggeredBy = Upgrade_AragornLeadership
End
Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate
SpecialPowerTemplate = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack = No
StartsPaused = Yes
End
; --------- HEALING -----------------------------------------------------------------
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = No
TriggeredBy = Upgrade_ElvenGift
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = No
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
TriggeredBy = Upgrade_ElvenGift
AttributeModifier = SpellBookElvenGifts
End
;---------Wolf MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = VampireWolf
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
;---------BAT MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = VampireBat
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
//--------------------------------------------------------------------------
// HERO ARMY OF THE DEAD SUMMON //
//--------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_AragornOathbreakersEnabler
SpecialPowerTemplate = SuperweaponSpawnOathbreakers
TriggeredBy = Upgrade_AragornOathbreakers
End
Behavior = OCLSpecialPower ModuleTag_OCLSpecialPower
SpecialPowerTemplate = SuperweaponSpawnOathbreakers
OCL = OCL_GondorArmyofTheDeadEggSmall
CreateLocation = CREATE_AT_LOCATION
StartsPaused = Yes
SetModelCondition = ModelConditionState:USER_1
SetModelConditionTime = 8.1
End
//--------------------------------------------------------------------------
// HERO BLINK (Teleport) SPELL //
//--------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TeleportEnabler
SpecialPowerTemplate = SpecialAbilityHeroBlink
TriggeredBy = Upgrade_DainRoyalGuard
End
Behavior = SpecialPowerModule ModuleTag_TeleportStarter
SpecialPowerTemplate = SpecialAbilityHeroBlink
UpdateModuleStartsAttack = Yes
TriggerFX = FX_Blink
StartsPaused = Yes
End
Behavior = TeleportSpecialAbilityUpdate ModuleTag_TeleportUpdate
SpecialPowerTemplate = SpecialAbilityHeroBlink
UnpackingVariation = 1
UnpackTime = 1800
PackTime = 1800
ApproachRequiresLOS = No
BusyForDuration = 1800 // don't accept any AI for this long... ai commands will be queued (should be at least PackTime)
DestinationWeaponName = CreateaHeroBlinkDestination // Fires at point of teleport to push people away and down.
End
; *** ENGINEERING Parameters ***--------------------------------------------------------------------------------
RadarPriority = UNIT
KindOf = HERO PRELOAD SELECTABLE INFANTRY ATTACK_NEEDS_LINE_OF_SIGHT PATH_THROUGH_EACH_OTHER SCARY MONSTER SCORE ARMY_SUMMARY HEAVY_MELEE_HITTER
PathfindDiameter = 40.0
CamouflageDetectionMultiplier = 2.0
Body = RespawnBody ModuleTag_RespawnBody
MaxHealth = 1000000
PermanentlyKilledByFilter = NONE ;Who kills me permanently?
DodgePercent = HERO_DODGE_PERCENT
End
Behavior = RespawnUpdate ModuleTag_RespawnUpdate
; DeathAnim = STUNNED ;Model condition to play when killed-to-respawn
DeathFX = FX_GlorfindelDieToRespawn ;FXList to play when killed-to-respawn
DeathAnim = DYING ;Model condition to play when killed-to-respawn
DeathAnimationTime = 6500 ;How long DeathAnim will take.
InitialSpawnFX = FX_GlorfindelInitialSpawn
RespawnAnim = LEVELED ;Animation to play when respawning.
RespawnFX = FX_GlorfindelRespawn ;FXList to play when respawning.
RespawnAnimationTime = 2000 ;Time it takes for respawn to play.
AutoRespawnAtObjectFilter = NONE +CASTLE_KEEP ;Respawn at this location -- and at it's exit production point if possible.
ButtonImage = HIGlorfindel_res
;RespawnEntries determine the ruleset for how a character can be revived. Some units may automatically respawn, others
;may require a specific revive action performed on him. You can specify different values for each level... or use Level:Any
RespawnRules = AutoSpawn:No Cost:1125 Time:60000 Health:100% ;DEFAULT VALUES
End
Behavior = AutoHealBehavior ModuleTag_GlorfindelHealing
StartsActive = Yes
HealingAmount = HERO_HEAL_AMOUNT
HealingDelay = 1000
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = Yes
End
; autoability for casting Wind Rider and Blade of Purity, Wind Rider
Behavior = AutoAbilityBehavior ModuleTag_AutoAbilityBehavior
End
#include "..\..\..\includes\DefaultInvisibilityUpdate.inc"
Behavior = StancesBehavior ModuleTag_StancesBehavior
StanceTemplate = Hero
End
#include "..\..\..\includes\CaptureBuilding.inc"
Behavior = AIUpdateInterface ModuleTag_03
AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS STEALTHED
MoodAttackCheckRate = 500
CanAttackWhileContained = Yes
End
LocomotorSet
Locomotor = HeroHumanLocomotor
Condition = SET_NORMAL
Speed = NORMAL_ELVEN_FAST_MEMBER_SPEED
End
LocomotorSet
Locomotor = HeroHorseLocomotor
Condition = SET_MOUNTED
Speed = NORMAL_ELVEN_CAVALRY_MEMBER_SPEED
End
Behavior = PhysicsBehavior ModuleTag_04
GravityMult = 1.0
ShockStandingTime = 2000 ;msec
End
Behavior = SlowDeathBehavior ModuleTag_05
DeathTypes = ALL
SinkDelay = 3000
SinkRate = 1.40 ; in Dist/Sec
DestructionDelay = 8000
Sound = INITIAL GlorfindelVoiceDie
End
Behavior = SquishCollide ModuleTag_06
;nothing
End
Behavior = NotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
End
Behavior = HitReactionBehavior HitReactionBehaviorModuleTag
HitReactionLifeTimer1 = 2700 ; level 1 (light damage) hit reaction animations in msec
HitReactionLifeTimer2 = 3366 ; level 2 (medium damage) hit reaction animations in msec
HitReactionLifeTimer3 = 10 ; level 3 (heavy damage) hit reaction animations in msec
HitReactionThreshold1 = 5.0 ; level 1 (light damage) threshold trigger
HitReactionThreshold2 = 100.0 ; level 2 (medium damage) threshold trigger
HitReactionThreshold3 = 300.0 ; level 3 (heavy damage) threshold trigger
End
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
;InitiateSound =
StartsPaused = No
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
UnpackTime = 2000
PreparationTime = 1
PersistentPrepTime = 250
PackTime = 2000
OpacityTarget = .3 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
End
;///////////////////
; AISpecialPowers
;///////////////////
Behavior = AISpecialPowerUpdate GlorfindelToggleMountedAI
CommandButtonName = Command_MountHorseGlorfindel
SpecialPowerAIType = AI_SPECIAL_POWER_TOGGLE_MOUNTED
End
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = No
TriggeredBy = Upgrade_ElvenGift
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = Yes
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
TriggeredBy = Upgrade_ElvenGift
AttributeModifier = SpellBookElvenGifts
End
End
[/codebox]
Here's the Vampire Bat object code (VampireBat.ini) -
[codebox]
;-----------------------------------------------------------------------------------------
; Crebain Object
;-----------------------------------------------------------------------------------------
ChildObject VampireBat Crebain
; *** ART Parameters ***
; ButtonImage for Heros is button image on Hero Select UI to select hero. HI = HeroIcon or HeroImage.
ButtonImage = HICaveBats
SelectPortrait = UPBatCloud
Draw = W3DHordeModelDraw ModuleTag_01
; OkToChangeModelColor = Yes ; temporarily commented out to remove the house color
WadingParticleSys = EntRipples
StaticModelLODMode = Yes ; Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = Bats_SKN
End
IdleAnimationState
StateName = Idle
Animation = IdleA
AnimationName = Bats_SKL.Bats_IDLA
AnimationMode = LOOP
AnimationBlendTime = 30
End
Flags = RANDOMSTART RESTART_ANIM_WHEN_COMPLETE
End
AnimationState = JUST_BUILT
StateName = State_JustBuilt
Animation
AnimationName = Bats_SKL.Bats_SMNA
AnimationMode = ONCE
AnimationBlendTime = 0
End
End
AnimationState = DYING DEATH_1 ; Killed
Animation
AnimationName = Bats_SKL.Bats_SMNB
AnimationMode = ONCE
AnimationBlendTime = 15
End
End
AnimationState = MOVING
Animation = RunA
AnimationName = Bats_SKL.Bats_MOV
AnimationMode = LOOP
AnimationBlendTime = 30
; Distance = 35
End
End
AnimationState = SELECTED
StateName = State_Selected
Animation = AtAttention
AnimationName = Bats_SKL.Bats_IDLA
AnimationMode = LOOP
AnimationBlendTime = 30
End
End
End
Draw = W3DScriptedModelDraw DustEffects
DefaultModelConditionState
Model = None
End
IdleAnimationState
End
AnimationState = MOVING WADING
ParticleSysBone = None FootstepSlash
End
AnimationState = MOVING ACCELERATE
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING DECELERATE
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING
End
End
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = 0.0
CommandPoints = 0
ShockwaveResistance = SHOCKWAVE_RESISTANCE_IMMUNE
VisionRange = 200.0
DisplayName = OBJECT:VampireBats
CommandSet = VampireBatCommandSet
; *** AUDIO Parameters ***
EvaEnemyObjectSightedEvent = None ; Don't bother player about this object showing up over their base -- happens too much to bother
SoundAmbient = CaveBatsAmbientLoop
SoundMoveStart = CaveBatsSelect
VoiceSelect = CaveBatsSelect
; *** ENGINEERING Parameters ***
RadarPriority = UNIT
KindOf = SELECTABLE NO_COLLIDE SCARY MONSTER MOVE_ONLY HERO IGNORE_FOR_EVA_SPEECH_POSITION SCORE
SelectionPriority = SELECTION_PRIORITY_CREBAIN
Body = ActiveBody ModuleTag_02
MaxHealth = 1000000
MaxHealthDamaged = 750
;RecoveryTime = 5000
End
Behavior = AIUpdateInterface ModuleTag_AIUpdateInterface
End
Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
End
LocomotorSet
Locomotor = CrebainLocomotor
Condition = SET_NORMAL
Speed = 200
End
Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
MinLifetime = 60000
MaxLifetime = 60000
End
Behavior = AttributeModifierAuraUpdate ModuleTag_FearMe
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = EyeOfSauronFear
RefreshDelay = 1000
Range = 150.0
ObjectFilter = ANY +INFANTRY +CAVALRY
TargetEnemy = Yes
MaxActiveRank = 1 ;Only affects level 1 rank units
End
Behavior = AttributeModifierAuraUpdate ModuleTag_Debuff
StartsActive = Yes
BonusName = GenericDebuff
AntiCategory = LEADERSHIP BUFF
Range = 200
RefreshDelay = 2000
ObjectFilter = ANY +INFANTRY +CAVALRY -STRUCTURE -BASE_FOUNDATION -HORDE -HERO
TargetEnemy = Yes
End
; Detects other stealth units
Behavior = StealthDetectorUpdate StealthDetectorUpdateModuleTag
DetectionRate = 500 ; how often to rescan for stealthed things in my sight (msec)
End
Behavior = SlowDeathBehavior ModuleTag_NormalDeath ; Nuked
DeathTypes = ALL
DeathFlags = DEATH_1
DestructionDelay = 2000
SinkDelay = 2000
;SinkRate = 0.64 ; in Dist/Sec
Sound = INITIAL SpellGenericUnsummonFasterMS
End
Geometry = CYLINDER
GeometryMajorRadius = 50.0
GeometryMinorRadius = 50.0
GeometryHeight = 61.0
GeometryIsSmall = No
;AttackContactPoint = X:0 Y:0 Z:60
AttackContactPoint = X:40 Y:40 Z:60
AttackContactPoint = X:-40 Y:40 Z:60
AttackContactPoint = X:-40 Y:-40 Z:60
AttackContactPoint = X:40 Y:-40 Z:60
Shadow = SHADOW_ADDITIVE_DECAL_DYNAMIC
ShadowSizeX = 400;
ShadowSizeY = 400;
ShadowTexture = MUSauronEye;
ShadowOpacityStart = 0
ShadowOpacityFadeInTime = 1000
ShadowOpacityPeak = 255
ShadowOpacityFadeOutTime = 1000
ShadowOpacityEnd = 0
ShadowOverrideLODVisibility = yes
End
;---------BAT MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = Kain
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
; --------- LEADERSHIP -----------------------------------------------------------------
Behavior = AttributeModifierAuraUpdate ModuleTag_Leadership
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = GenericHeroLeadership
RefreshDelay = 2000
Range = 200
AntiCategory = BUFF
ObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER
End
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
End
Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate
SpecialPowerTemplate = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack = No
StartsPaused = Yes
End
; --------- HEALING -----------------------------------------------------------------
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = Yes
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = No
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
AttributeModifier = SpellBookElvenGifts
End
RemoveModule ModuleTag_LifetimeUpdate
End
[/codebox]
here's the Vampire Werewolf object ini (VampireWolf) -
[codebox]
ChildObject VampireWolf NeutralWarg
; *** ART Parameters ***
; This is required for garrisoned objects - please put in all objects.
ButtonImage = BIWargSentry_Warg
SelectPortrait = UPLoneWarg
Draw = W3DHordeModelDraw ModuleTag_01
OkToChangeModelColor = Yes
StaticModelLODMode = Yes
; specify options for static LODs
LodOptions = LOW
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_LOW
MaxRandomTextures = MAX_RANDOM_TEXTURES_LOW
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_LOW
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_LOW
End
LodOptions = MEDIUM
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_MED
MaxRandomTextures = MAX_RANDOM_TEXTURES_MED
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_MED
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_MED
End
LodOptions = HIGH
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_HIGH
MaxRandomTextures = MAX_RANDOM_TEXTURES_HIGH
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_HIGH
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_HIGH
End
RandomTexture = IUWargSntryA.tga 0 IUWargSntryA.tga
RandomTexture = IUWargSntryB.tga 0 IUWargSntryA.tga
DefaultModelConditionState
Model = IUWarg_SKN
Skeleton = IUWarg_SKL
End
; -------------- STUNNED ANIMS ----------------
AnimationState = PASSENGER
Animation = Grabbed
AnimationName = IUWarg_GBDA
AnimationMode = LOOP
End
End
AnimationState = FREEFALL
Animation = freefall
AnimationName = IUWarg_FLYA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
AnimationState = DYING BURNINGDEATH
Animation
AnimationName = IUWarg_DIEA
AnimationMode = ONCE
AnimationBlendTime = 10
End
End
AnimationState = DYING SPLATTED
Animation = splatted
AnimationName = IUWarg_LNDA
AnimationMode = ONCE
End
End
AnimationState = STUNNED_FLAILING
Animation = JustDie
AnimationName = IUWarg_FLYA
AnimationMode = LOOP
End
End
AnimationState = DYING
Animation = JustDie
AnimationName = IUWarg_DIEA
AnimationMode = ONCE
End
End
AnimationState = BURNINGDEATH
Animation
AnimationName = IUWarg_MFDA
AnimationMode = LOOP
Distance = 50
End
End
AnimationState = STUNNED
Animation = Land
AnimationName = IUWarg_LNDA
AnimationMode = ONCE
End
End
AnimationState = STUNNED_STANDING_UP
Animation = StandUp
AnimationName = IUWarg_GTPA
AnimationMode = ONCE
End
End
; -------------- MOVING ANIMS ---------------
AnimationState = TURN_LEFT_HIGH_SPEED
Animation = MTurnLeft
AnimationName = IUWarg_TNL1
AnimationMode = LOOP
End
End
AnimationState = TURN_RIGHT_HIGH_SPEED
Animation = MTurnRight
AnimationName = IUWarg_TNR1
AnimationMode = LOOP
End
End
AnimationState = TURN_LEFT
Animation = TurnRight
AnimationName = IUWarg_TRNL
AnimationMode = LOOP
AnimationSpeedFactorRange = 2.0 2.0
End
End
AnimationState = TURN_RIGHT
Animation = TurnRight
AnimationName = IUWarg_TRNR
AnimationMode = LOOP
AnimationSpeedFactorRange = 2.0 2.0
End
End
AnimationState = MOVING ACCELERATE
Animation = Accelerate
AnimationName = IUWarg_ACCL
AnimationMode = ONCE
End
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING DECELERATE
Animation = Decelerate
AnimationName = IUWarg_DECL
AnimationMode = ONCE
End
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING BACKING_UP
Animation = BackingUp
AnimationName = IUWarg_BAKA
AnimationMode = LOOP
End
End
AnimationState = MOVING
ShareAnimation = Yes
Animation = RunA
AnimationName = IUWarg_RUNA
AnimationMode = LOOP
End
;ParticleSysBone = None CalvaryDustTrails
End
; ----------- ATTACKING ANIMS --------------
AnimationState = BETWEEN_FIRING_SHOTS_A
Animation = BetweenFiringShots
AnimationName = IUWarg_IDLA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
AnimationState = FIRING_OR_PREATTACK_A
Animation = AttackA3
AnimationName = IUWarg_ATKA
AnimationMode = ONCE
UseWeaponTiming = Yes
AnimationBlendTime = 10
End
End
AnimationState = ATTACKING
Animation = AttackA3
AnimationName = IUWarg_ATKA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
; ----------- WAR CHANT ANIMS -------------
AnimationState = WAR_CHANT
Animation = Chant
AnimationName = IUWarg_TNTA
AnimationMode = LOOP
End
End
; ----------- EMOTION ANIMS ---------------
AnimationState = EMOTION_TAUNTING
Animation = TNTA
AnimationName = IUWarg_TNTA
AnimationMode = LOOP
End
End
AnimationState = EMOTION_CELEBRATING
Animation = CHRA
AnimationName = IUWarg_CHRA
AnimationMode = ONCE
End
End
; ----------- IDLE ANIMS ---------------
AnimationState = EMOTION_ALERT
StateName = STATE_Ready
Animation = ALERT
AnimationName = IUWarg_IDLA
AnimationMode = LOOP
End
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Selected" then CurDrawableSetTransitionAnimState("Selected_to_Ready") end
EndScript
End
; ----------- SELECTED ANIMS --------------
AnimationState = SELECTED
SimilarRestart = Yes
Animation = AtAttention
AnimationName = IUWarg_ATNB
AnimationMode = LOOP
End
StateName = Selected
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Idle" then CurDrawableSetTransitionAnimState("Idle_to_Selected") end
if Prev == "STATE_Ready" then CurDrawableSetTransitionAnimState("Ready_to_Selected") end
EndScript
End
IdleAnimationState
Animation
AnimationName = IUWarg_IDLC
AnimationMode = ONCE
AnimationBlendTime = 10
AnimationPriority = 20
End
Animation
AnimationName = IUWarg_IDLB
AnimationMode = ONCE
AnimationBlendTime = 10
AnimationPriority = 1
End
StateName = Idle
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Selected" then CurDrawableSetTransitionAnimState("Selected_to_Idle") end
EndScript
End
;------------ TRANSITION ANIMS ----------------
TransitionState = Selected_to_Idle
Animation = ATNE
AnimationName = IUWarg_ATNC
AnimationMode = ONCE
AnimationSpeedFactorRange = 0.7 1.3
End
End
TransitionState = Idle_to_Selected
Animation = ATND
AnimationName = IUWarg_ATNA
AnimationMode = ONCE
AnimationSpeedFactorRange = 0.7 1.3
End
End
End
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = GLORFINDEL_THREAT_LEVEL
TransportSlotCount = TRANSPORTSLOTCOUNT_UNIT
BuildCost = GLORFINDEL_BUILDCOST
BuildTime = GLORFINDEL_BUILDTIME
CommandPoints = 100
WeaponSet
Conditions = None
Weapon = PRIMARY VampireWolfWeapon
End
ArmorSet
Conditions = None
Armor = CavalryArmor
DamageFX = NormalDamageFX
End
VisionRange = CREEP_VISION
ShroudClearingRange = CREEP_VISION
BountyValue = ISENGARD_WARGRIDER_BOUNTY_VALUE
DisplayName = OBJECT:VampireWolf
CrushableLevel = 1 ;What am I?: 0 = for infantry, 1 = for trees, 2 = general vehicles
CrusherLevel = 0
IsTrainable = Yes
CommandSet = VampireWolfCommandSet
; ******************************************* AUDIO Parameters ***********************************;
VoiceSelect = NeutralWargVoxSelect
VoiceMove = NeutralWargVoxMove
VoiceAttack = NeutralWargVoxAttack
SoundAmbient = WargAmbienceVOX
SoundImpact = ImpactHorse
;SoundMoveLoop = WargMoveFootsteps
;SoundCrushing = WargRiderCrushing ; Sound made when crushing another unit underhoof
;#include "..\includes\StandardUnitEvaEvents.inc"
EvaEnemyObjectSightedEvent = WargRiderCreepSighted ; Special event for wargs showing up. Helps distinguish the real enemies from random creeps
EvaEnemyObjectSightedAfterRespawnEvent = WargRiderCreepSighted ; Event to run after the Cave Troll Lair is respawned. WARNING: This INI field only works for "SlavedUpdate.UseSlaverAsControlForEvaObjectSightedEvents = Yes" units
;EvaEventDieOwner = GroupWargRiderDie ;Eva event to trigger on unit's death. NOTICE THAT this is only for permanent deaths
;For deaths you can respawn from, use the DeathFX
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:WargMoveFootsteps Animation:IUWarg_SKL.IUWarg_RUNA Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TNL1 Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TNR1 Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TRNL Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TRNR Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_ACCL Frames:0
; AnimationSound = Sound:WargRiderTauntCallouts Animation:IUWarg_SKL.IUWarg_TNTA Frames:27
AnimationSound = Sound:WargTauntCallouts Animation:IUWarg_SKL.IUWarg_TNTA Frames:26 Animation:IUWarg_SKL.IUWarg_ATND Frames:7 Animation:IUWarg_SKL.IUWarg_HWLA Frames:17
AnimationSound = Sound:WargTauntFootstep Animation:IUWarg_SKL.IUWarg_TNTA Frames:7 12 64 73
;AnimationSound = Sound:WargSaddleFoleySingles Animation:IUWarg_SKL.IUWarg_TNTA Frames:25 Animation:IUWarg_SKL.IUWarg_RUNA Frames:5 Animation:IUWarg_SKL.IUWarg_TNL1 Frames:5 Animation:IUWarg_SKL.IUWarg_TNR1 Frames:5 Animation:IUWarg_SKL.IUWarg_ACCL Frames:5 Animation:IUWarg_SKL.IUWarg_ATNA Frames:5 Animation:IUWarg_SKL.IUWarg_ATND Frames:5 Animation:IUWarg_SKL.IUWarg_GTPA Frames:5 101 Animation:IUWarg_SKL.IUWarg_HWLA Frames:15 Animation:IUWarg_SKL.IUWarg_RDYA Frames:5 Animation:IUWarg_SKL.IUWarg_RDYB Frames:5
End
; Tie into LargeGroupAudio system
Behavior = LargeGroupAudioUpdate ModuleTag_LGAU
Key = Warg
End
; *** ENGINEERING Parameters ***
RadarPriority = UNIT
ThingClass = CAVALRY_UNIT
KindOf = CAVALRY GRAB_AND_DROP HERO PRELOAD SELECTABLE ATTACK_NEEDS_LINE_OF_SIGHT PATH_THROUGH_EACH_OTHER SCARY MONSTER SCORE ARMY_SUMMARY HEAVY_MELEE_HITTER
Body = ActiveBody BodyModuleTag
MaxHealth = 1000000
BurningDeathBehavior = Yes
BurningDeathFX = FX_CavalryBurningFlame
End
Behavior = EmotionTrackerUpdate Module_EmotionTracker
End
Behavior = StancesBehavior ModuleTag_StancesBehavior
StanceTemplate = FighterHorde
End
Behavior = AIUpdateInterface ModuleTag_03
AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS
AILuaEventsList = WargRiderFunctions
BurningDeathTime = BURNINGDEATH_DURATION_CAVALRY
End
LocomotorSet
Locomotor = WargLocomotor
Condition = SET_NORMAL
Speed = 80 ;80
End
LocomotorSet
Locomotor = BurningDeathLocomotorCavalry
Condition = SET_BURNINGDEATH
Speed = BURNINGDEATH_WANDERSPEED_CAVALRY
End
Behavior = PhysicsBehavior ModuleTag_04
GravityMult = 1.0
ShockStandingTime = 3800 ;msec
End
Behavior = SquishCollide ModuleTag_06
;nothing
End
Behavior = SpecialPowerModule ModuleTag_HowlUpdate
SpecialPowerTemplate = SpecialAbilityWargHowl
UpdateModuleStartsAttack = No
AttributeModifier = IsengardWargHowl
; AttributeModifierRange = 200
AttributeModifierAffectsSelf = Yes
; AttributeModifierAffects = ANY + INFANTRY +CAVALRY
AttributeModifierFX = FX_WargHowl
End
Behavior = SlowDeathBehavior ModuleTag_08
; Die and don't spawn horse
DeathTypes = ALL
SinkDelay = 5000
SinkRate = 1.50 ; in Dist/Sec
DestructionDelay = 17000
Sound = INITIAL WargVoxDie
End
Behavior = SlavedUpdate ModuleTag_Slave
GuardMaxRange = 250
GuardWanderRange = 80
UseSlaverAsControlForEvaObjectSightedEvents = Yes
End
Geometry = CYLINDER
GeometryMajorRadius = 15
GeometryHeight = 20.0
GeometryIsSmall = Yes
Shadow = SHADOW_DECAL
ShadowSizeX = 30;
ShadowSizeY = 20;
ShadowTexture = ShadowI;
End
;---------Wolf MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = Kain
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
[/codebox]
Here's the Command Buttons (Commandbutton.ini) -
[codebox]
CommandButton Command_ConstructKain
Command = UNIT_BUILD
Object = Kain
Options = CANCELABLE
TextLabel = CONTROLBAR:KainRecruit
ButtonImage = HIGlorfindel
ButtonBorderType = BUILD
DescriptLabel = CONTROLBAR:LW_ToolTip_Kain
Radial = Yes
InPalantir = Yes
ShowProductionCount = Yes
; UnitSpecificSound = GondorArcherVoiceBuy
End
CommandButton Command_VampireBatToggleMounted
Command = SPECIAL_POWER
SpecialPower = SpecialAbilityToggleMounted
TextLabel = CONTROLBAR:TheodenMount
Options = TOGGLE_IMAGE_ON_WEAPONSET ON_GROUND_ONLY OK_FOR_MULTI_SELECT ; Not really image, just audio
FlagsUsedForToggle = MOUNTED ; What we really want is to toggle Theoden's audio if he is mounted or unmounted. Ya, this is a hack
ButtonImage = HICaveBats HICaveBats
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:GenericMountTooltip
InPalantir = Yes
End
CommandButton Command_VampireWolfToggleMounted
Command = SPECIAL_POWER
SpecialPower = SpecialAbilityToggleMounted
TextLabel = CONTROLBAR:TheodenMount
Options = TOGGLE_IMAGE_ON_WEAPONSET ON_GROUND_ONLY OK_FOR_MULTI_SELECT ; Not really image, just audio
FlagsUsedForToggle = MOUNTED ; What we really want is to toggle Theoden's audio if he is mounted or unmounted. Ya, this is a hack
ButtonImage = BIWargSentry_Warg BIWargSentry_Warg
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:GenericMountTooltip
InPalantir = Yes
End
[/codebox]
Here's the Command Sets (commandset.ini) -
[codebox]
CommandSet KainCommandSet
1 = Command_ToggleStance
2 = Command_MountHorseGlorfindel
3 = Command_VampireBatToggleMounted
4 = Command_VampireWolfToggleMounted
5 = Command_CreateAHero_Blink
6 = Command_SpawnOathbreakers
12 = Command_CaptureBuilding
13 = Command_AttackMove
14 = Command_Stop
End
CommandSet VampireBatCommandSet
1 = Command_ToggleStance
2 = Command_VampireBatToggleMounted
13 = Command_AttackMove
14 = Command_Stop
End
CommandSet VampireWolfCommandSet
1 = Command_ToggleStance
2 = Command_VampireWolfToggleMounted
13 = Command_AttackMove
14 = Command_Stop
End
[/codebox]
here's the Experience Levels -
[codebox]
;------------------ Kain ------------------------
ExperienceLevel KainLevel1
TargetNames = Kain
RequiredExperience = 1
ExperienceAward = GLORFINDEL_LVL1_EXP_AWARD
Rank = 1
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel2
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL2_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL2_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 2
AttributeModifiers = HeroLevelUpDamage1
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel3
TargetNames = Kain
RequiredExperience = Glorfindel_LVL3_EXP_NEEDED
ExperienceAward = Glorfindel_LVL3_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 3
AttributeModifiers = HeroLevelUpDamage2
Upgrades = Upgrade_AragornLeadership
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel4
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL4_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL4_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 4
AttributeModifiers = HeroLevelUpDamage3
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel5
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL5_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL5_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 5
AttributeModifiers = HeroLevelUpDamage4
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel6
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL6_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL6_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 6
AttributeModifiers = HeroLevelUpDamage5
Upgrades = Upgrade_ElvenGift
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel7
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL7_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL7_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 7
AttributeModifiers = HeroLevelUpDamage6
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel8
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL8_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL8_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 8
AttributeModifiers = HeroLevelUpDamage7
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel9
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL9_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL9_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 9
Upgrades = Upgrade_DainRoyalGuard
AttributeModifiers = HeroLevelUpDamage8
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel10
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL10_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL10_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Upgrades = Upgrade_AragornOathbreakers
Rank = 10
AttributeModifiers = HeroLevelUpDamage9
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
[/codebox]
And here's Kain's new weapon and the Vampire Wolf new weapon from Weapon.ini -
[codebox]
;-------------------------------------------------------------------------------
Weapon KainSoulReaverSword
LeechRangeWeapon = Yes
AttackRange = 20.0
MeleeWeapon = Yes
DelayBetweenShots = GLORFINDEL_SWORD_DELAYBETWEENSHOTS
PreAttackDelay = GLORFINDEL_SWORD_PREATTACKDELAY
PreAttackType = PER_SHOT
FireFX = FX_GondorSwordHit
FiringDuration = GLORFINDEL_SWORD_FIRINGDURATION
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
DamageNugget
Damage = GLORFINDEL_SWORD_DAMAGE
Radius = 10.0
DelayTime = 0
DamageType = HERO
DamageFXType = SWORD_SLASH
DeathType = Normal
DrainLife = Yes
DrainLifeMultiplier = 1.5
End
End
;------------------------------------------------------------------------------
Weapon VampireWolfWeapon
LeechRangeWeapon = Yes
AttackRange = STANDARD_MELEE_ATTACK_RANGE
MeleeWeapon = Yes
PreAttackDelay = ISENGARD_WARGRIDER_WARG_PREATTACKDELAY
DelayBetweenShots = ISENGARD_WARGRIDER_WARG_DELAYBETWEENSHOTS ; time between shots, msec
FiringDuration = ISENGARD_WARGRIDER_WARG_FIRINGDURATION
FireFX = FX_WargRiderlessAttack
DamageNugget ; A basic Nugget that just does damage
Damage = ISENGARD_WARGRIDER_WARG_DAMAGE
Radius = 0.0
DelayTime = 0
DamageType = CAVALRY
;DamageFXType = SWORD_SLASH
DeathType = NORMAL
DamageScalar = 10% ANY +STRUCTURE
DrainLife = Yes
DrainLifeMultiplier = 1.5
End
End
[/codebox]
That should be it...(I hope)....
Thanks for offering to take a look Solinx, much appreciated.
great to hear from ya....
I'll post what I can of my hero....I've added so many new powers to the poor guy I'm not entirely sure which ones will work as I intended yet....lol.
Oh well...for the mo it's definately the transforming powers giving probs.
and I don't mind posting the custom hero here....if anyone wants to use him they're welcome to it...lol..
Here's Kain's object ini (Kain.ini)
[codebox]
;------------------------------------------------------------------------------
;
; Kain.ini
;
;------------------------------------------------------------------------------
ChildObject Kain ElvenGlorfindel
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = GLORFINDEL_THREAT_LEVEL
ThingClass = CHARACTER_UNIT
TransportSlotCount = TRANSPORTSLOTCOUNT_HERO
BuildCost = GLORFINDEL_BUILDCOST
BuildTime = GLORFINDEL_BUILDTIME
BountyValue = ELVEN_GLORFINDEL_BOUNTY_VALUE
ShockwaveResistance = SHOCKWAVE_RESISTANCE_ALWAYS
;//DisplayMeleeDamage = GLORFINDEL_DAMAGE
;;;;;; WEAPON SETS ;;;;;;
WeaponSet
Conditions = None
Weapon = PRIMARY KainSoulReaverSword
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
WeaponSet
Conditions = CONTAINED
Weapon = PRIMARY GarrisonedUnitBow
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
;;;;;; Armor Sets ;;;;;;
ArmorSet
Conditions = None
Armor = HeroArmor
DamageFX = NormalDamageFX
End
ArmorSet
Conditions = MOUNTED
Armor = HeroArmorMounted
DamageFX = NormalDamageFX
End
VisionRange = VISION_HERO_STANDARD
ShroudClearingRange = SHROUD_CLEAR_HERO
MaxVisionBonusPercent = 600%
VisionBonusTestRadius = 200
VisionBonusPercentPerFoot = 2.0%
DisplayName = OBJECT:Kain
RecruitText = CONTROLBAR:KainRecruit ;;;;;;;;;;;; Anyone who gets revived should get these
ReviveText = CONTROLBAR:KainRevive ;;
Hotkey = CONTROLBAR:KainHotkey ;; If not, it won't look too bad.
MinCrushVelocityPercent = 50 ; Has to be moving at at least 50% of full speed.
CrushDecelerationPercent = 1 ; Lose xx percent of max velocity when crushing.
CrusherLevel = 0 ;Can I crush anything?
MountedCrusherLevel = 3 ;Crush level when mounted.
RamPower = 25
CrushKnockback = 80
CrushZFactor = 1.0
CommandSet = KainCommandSet
CommandPoints = 100
; *** AUTO RESOLVE DATA ***
AutoResolveUnitType = AutoResolveUnit_Hero
AutoResolveCombatChain = AutoResolve_HeroCombatChain
AutoResolveBody = AutoResolve_GlorfindelBody
AutoResolveArmor
Armor = AutoResolve_GlorfindelArmor
End
AutoResolveWeapon
Weapon = AutoResolve_GlorfindelWeapon
End
;AutoResolveLeadership = AutoResolve_GlorfindelBonus
; *** AUDIO Parameters ***;
VoiceAttack = GlorfindelVoiceAttack
VoiceAttackAir = GlorfindelVoiceAttack
VoiceAttackCharge = GlorfindelVoiceAttackCharge
VoiceAttackMachine = GlorfindelVoiceAttack
VoiceAttackStructure = GlorfindelVoiceAttackBuilding
VoiceFear = GlorfindelVoiceHelpMe
VoiceGuard = GlorfindelVoiceMove
VoiceMove = GlorfindelVoiceMove
VoiceMoveToCamp = GlorfindelVoiceMoveCamp
VoiceMoveWhileAttacking = GlorfindelVoiceDisengage
VoicePriority = 64
VoiceRetreatToCastle = GlorfindelVoiceRetreat
VoiceSelect = GlorfindelVoiceSelectMS
VoiceSelectBattle = GlorfindelVoiceSelectBattle
SoundImpact = ImpactHorse
UnitSpecificSounds
VoiceEnterUnitElvenTransportShip = GlorfindelVoiceMoveShip
VoiceGarrison = GlorfindelVoiceMoveGarrison
VoiceInitiateCaptureBuilding = GlorfindelVoiceCaptureBuilding ; From SpecialPower SpecialAbilityCaptureBuilding
End
ClientBehavior = ModelConditionSoundSelectorClientBehavior ModuleTag_MCSoundSelector
SoundState = MOUNTED
VoiceMove = GlorfindelVoiceMoveMount
VoiceSelect = GlorfindelVoiceSelectMountedMS
End
End
CrowdResponseKey = ElfHero
#include "..\..\..\includes\StandardUnitEvaEvents.inc"
EvaEventDieOwner = GlorfindelDie ;Eva event to trigger on unit's death. NOTICE THAT this is only for permanent deaths
Behavior = LargeGroupAudioUpdate ModuleTag_LGAU ; Tie into LargeGroupAudio system
Key = Humanoid_Male Elf Elf_Male Unit Infantry Hero
;UnitWeight = 2
End
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:BodyFallSoldier Animation:EUGLRFDL_SKL.EUGLRFDL_LNDA Frames:5
AnimationSound = Sound:BodyFallSoldier Animation:EUGLRFDL_SKL.EUGLRFDL_DTHA Frames:34
AnimationSound = Sound:FootstepDirtA Animation:EUGlrfdl_SKL.EUGlrfdl_RUNA Frames:9 18 28 38 48 58
AnimationSound = Sound:FootstepDirtA Animation:EUGlrfdl_SKL.EUGlrfdl_RUNB Frames:9 18 28 38 48 58
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_ACCL Frames:16
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_RUNA Frames:8
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_TNL1 Frames:8
AnimationSound = Sound:HorseMoveFootsteps Animation:RUHHs_Theo_SKL.RUHHs_Theo_TNR1 Frames:8
AnimationSound = Sound:HorseDieForHero Animation:RUHHs_Theo_SKL.RUHHs_Theo_LNDA Frames:0
AnimationSound = Sound:BodyFallSoldier Animation:RUHHs_Theo_SKL.RUHHs_Theo_LNDA Frames:2 10
AnimationSound = Sound:HorseDieForHero Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:0
AnimationSound = Sound:BodyFallGenericNoArmor Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:6
AnimationSound = Sound:BodyFallSoldier Animation:RUHHs_Theo_SKL.RUHHs_Theo_DIEA Frames:45
End
;-------------------------------
Behavior = EmotionTrackerUpdate Module_EmotionTracker
TauntAndPointDistance = 300
TauntAndPointUpdateDelay = 10000
AddEmotion = Doom_Base
// AddEmotion = BraceForBeingCrushed_Base
// AddEmotion = FearIdle_Base
// AddEmotion = FearBusy_Base
AddEmotion = Point_Base
AddEmotion = Taunt_Base
AddEmotion = CheerIdle_Base
AddEmotion = CheerBusy_Base
// AddEmotion = HeroCheerIdle_Base
// AddEmotion = HeroCheerBusy_Base
AddEmotion = Alert_Base
AddEmotion = CheerForAboutToCrush_Base
End
; --------- LEADERSHIP -----------------------------------------------------------------
Behavior = AttributeModifierAuraUpdate ModuleTag_Leadership
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = GenericHeroLeadership
TriggeredBy = Upgrade_AragornLeadership
RefreshDelay = 2000
Range = 200
AntiCategory = BUFF
ObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER
End
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
TriggeredBy = Upgrade_AragornLeadership
End
Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate
SpecialPowerTemplate = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack = No
StartsPaused = Yes
End
; --------- HEALING -----------------------------------------------------------------
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = No
TriggeredBy = Upgrade_ElvenGift
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = No
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
TriggeredBy = Upgrade_ElvenGift
AttributeModifier = SpellBookElvenGifts
End
;---------Wolf MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = VampireWolf
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
;---------BAT MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = VampireBat
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
//--------------------------------------------------------------------------
// HERO ARMY OF THE DEAD SUMMON //
//--------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_AragornOathbreakersEnabler
SpecialPowerTemplate = SuperweaponSpawnOathbreakers
TriggeredBy = Upgrade_AragornOathbreakers
End
Behavior = OCLSpecialPower ModuleTag_OCLSpecialPower
SpecialPowerTemplate = SuperweaponSpawnOathbreakers
OCL = OCL_GondorArmyofTheDeadEggSmall
CreateLocation = CREATE_AT_LOCATION
StartsPaused = Yes
SetModelCondition = ModelConditionState:USER_1
SetModelConditionTime = 8.1
End
//--------------------------------------------------------------------------
// HERO BLINK (Teleport) SPELL //
//--------------------------------------------------------------------------
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TeleportEnabler
SpecialPowerTemplate = SpecialAbilityHeroBlink
TriggeredBy = Upgrade_DainRoyalGuard
End
Behavior = SpecialPowerModule ModuleTag_TeleportStarter
SpecialPowerTemplate = SpecialAbilityHeroBlink
UpdateModuleStartsAttack = Yes
TriggerFX = FX_Blink
StartsPaused = Yes
End
Behavior = TeleportSpecialAbilityUpdate ModuleTag_TeleportUpdate
SpecialPowerTemplate = SpecialAbilityHeroBlink
UnpackingVariation = 1
UnpackTime = 1800
PackTime = 1800
ApproachRequiresLOS = No
BusyForDuration = 1800 // don't accept any AI for this long... ai commands will be queued (should be at least PackTime)
DestinationWeaponName = CreateaHeroBlinkDestination // Fires at point of teleport to push people away and down.
End
; *** ENGINEERING Parameters ***--------------------------------------------------------------------------------
RadarPriority = UNIT
KindOf = HERO PRELOAD SELECTABLE INFANTRY ATTACK_NEEDS_LINE_OF_SIGHT PATH_THROUGH_EACH_OTHER SCARY MONSTER SCORE ARMY_SUMMARY HEAVY_MELEE_HITTER
PathfindDiameter = 40.0
CamouflageDetectionMultiplier = 2.0
Body = RespawnBody ModuleTag_RespawnBody
MaxHealth = 1000000
PermanentlyKilledByFilter = NONE ;Who kills me permanently?
DodgePercent = HERO_DODGE_PERCENT
End
Behavior = RespawnUpdate ModuleTag_RespawnUpdate
; DeathAnim = STUNNED ;Model condition to play when killed-to-respawn
DeathFX = FX_GlorfindelDieToRespawn ;FXList to play when killed-to-respawn
DeathAnim = DYING ;Model condition to play when killed-to-respawn
DeathAnimationTime = 6500 ;How long DeathAnim will take.
InitialSpawnFX = FX_GlorfindelInitialSpawn
RespawnAnim = LEVELED ;Animation to play when respawning.
RespawnFX = FX_GlorfindelRespawn ;FXList to play when respawning.
RespawnAnimationTime = 2000 ;Time it takes for respawn to play.
AutoRespawnAtObjectFilter = NONE +CASTLE_KEEP ;Respawn at this location -- and at it's exit production point if possible.
ButtonImage = HIGlorfindel_res
;RespawnEntries determine the ruleset for how a character can be revived. Some units may automatically respawn, others
;may require a specific revive action performed on him. You can specify different values for each level... or use Level:Any
RespawnRules = AutoSpawn:No Cost:1125 Time:60000 Health:100% ;DEFAULT VALUES
End
Behavior = AutoHealBehavior ModuleTag_GlorfindelHealing
StartsActive = Yes
HealingAmount = HERO_HEAL_AMOUNT
HealingDelay = 1000
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = Yes
End
; autoability for casting Wind Rider and Blade of Purity, Wind Rider
Behavior = AutoAbilityBehavior ModuleTag_AutoAbilityBehavior
End
#include "..\..\..\includes\DefaultInvisibilityUpdate.inc"
Behavior = StancesBehavior ModuleTag_StancesBehavior
StanceTemplate = Hero
End
#include "..\..\..\includes\CaptureBuilding.inc"
Behavior = AIUpdateInterface ModuleTag_03
AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS STEALTHED
MoodAttackCheckRate = 500
CanAttackWhileContained = Yes
End
LocomotorSet
Locomotor = HeroHumanLocomotor
Condition = SET_NORMAL
Speed = NORMAL_ELVEN_FAST_MEMBER_SPEED
End
LocomotorSet
Locomotor = HeroHorseLocomotor
Condition = SET_MOUNTED
Speed = NORMAL_ELVEN_CAVALRY_MEMBER_SPEED
End
Behavior = PhysicsBehavior ModuleTag_04
GravityMult = 1.0
ShockStandingTime = 2000 ;msec
End
Behavior = SlowDeathBehavior ModuleTag_05
DeathTypes = ALL
SinkDelay = 3000
SinkRate = 1.40 ; in Dist/Sec
DestructionDelay = 8000
Sound = INITIAL GlorfindelVoiceDie
End
Behavior = SquishCollide ModuleTag_06
;nothing
End
Behavior = NotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
End
Behavior = HitReactionBehavior HitReactionBehaviorModuleTag
HitReactionLifeTimer1 = 2700 ; level 1 (light damage) hit reaction animations in msec
HitReactionLifeTimer2 = 3366 ; level 2 (medium damage) hit reaction animations in msec
HitReactionLifeTimer3 = 10 ; level 3 (heavy damage) hit reaction animations in msec
HitReactionThreshold1 = 5.0 ; level 1 (light damage) threshold trigger
HitReactionThreshold2 = 100.0 ; level 2 (medium damage) threshold trigger
HitReactionThreshold3 = 300.0 ; level 3 (heavy damage) threshold trigger
End
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
;InitiateSound =
StartsPaused = No
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
UnpackTime = 2000
PreparationTime = 1
PersistentPrepTime = 250
PackTime = 2000
OpacityTarget = .3 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
End
;///////////////////
; AISpecialPowers
;///////////////////
Behavior = AISpecialPowerUpdate GlorfindelToggleMountedAI
CommandButtonName = Command_MountHorseGlorfindel
SpecialPowerAIType = AI_SPECIAL_POWER_TOGGLE_MOUNTED
End
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = No
TriggeredBy = Upgrade_ElvenGift
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = Yes
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
TriggeredBy = Upgrade_ElvenGift
AttributeModifier = SpellBookElvenGifts
End
End
[/codebox]
Here's the Vampire Bat object code (VampireBat.ini) -
[codebox]
;-----------------------------------------------------------------------------------------
; Crebain Object
;-----------------------------------------------------------------------------------------
ChildObject VampireBat Crebain
; *** ART Parameters ***
; ButtonImage for Heros is button image on Hero Select UI to select hero. HI = HeroIcon or HeroImage.
ButtonImage = HICaveBats
SelectPortrait = UPBatCloud
Draw = W3DHordeModelDraw ModuleTag_01
; OkToChangeModelColor = Yes ; temporarily commented out to remove the house color
WadingParticleSys = EntRipples
StaticModelLODMode = Yes ; Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = Bats_SKN
End
IdleAnimationState
StateName = Idle
Animation = IdleA
AnimationName = Bats_SKL.Bats_IDLA
AnimationMode = LOOP
AnimationBlendTime = 30
End
Flags = RANDOMSTART RESTART_ANIM_WHEN_COMPLETE
End
AnimationState = JUST_BUILT
StateName = State_JustBuilt
Animation
AnimationName = Bats_SKL.Bats_SMNA
AnimationMode = ONCE
AnimationBlendTime = 0
End
End
AnimationState = DYING DEATH_1 ; Killed
Animation
AnimationName = Bats_SKL.Bats_SMNB
AnimationMode = ONCE
AnimationBlendTime = 15
End
End
AnimationState = MOVING
Animation = RunA
AnimationName = Bats_SKL.Bats_MOV
AnimationMode = LOOP
AnimationBlendTime = 30
; Distance = 35
End
End
AnimationState = SELECTED
StateName = State_Selected
Animation = AtAttention
AnimationName = Bats_SKL.Bats_IDLA
AnimationMode = LOOP
AnimationBlendTime = 30
End
End
End
Draw = W3DScriptedModelDraw DustEffects
DefaultModelConditionState
Model = None
End
IdleAnimationState
End
AnimationState = MOVING WADING
ParticleSysBone = None FootstepSlash
End
AnimationState = MOVING ACCELERATE
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING DECELERATE
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING
End
End
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = 0.0
CommandPoints = 0
ShockwaveResistance = SHOCKWAVE_RESISTANCE_IMMUNE
VisionRange = 200.0
DisplayName = OBJECT:VampireBats
CommandSet = VampireBatCommandSet
; *** AUDIO Parameters ***
EvaEnemyObjectSightedEvent = None ; Don't bother player about this object showing up over their base -- happens too much to bother
SoundAmbient = CaveBatsAmbientLoop
SoundMoveStart = CaveBatsSelect
VoiceSelect = CaveBatsSelect
; *** ENGINEERING Parameters ***
RadarPriority = UNIT
KindOf = SELECTABLE NO_COLLIDE SCARY MONSTER MOVE_ONLY HERO IGNORE_FOR_EVA_SPEECH_POSITION SCORE
SelectionPriority = SELECTION_PRIORITY_CREBAIN
Body = ActiveBody ModuleTag_02
MaxHealth = 1000000
MaxHealthDamaged = 750
;RecoveryTime = 5000
End
Behavior = AIUpdateInterface ModuleTag_AIUpdateInterface
End
Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
End
LocomotorSet
Locomotor = CrebainLocomotor
Condition = SET_NORMAL
Speed = 200
End
Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
MinLifetime = 60000
MaxLifetime = 60000
End
Behavior = AttributeModifierAuraUpdate ModuleTag_FearMe
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = EyeOfSauronFear
RefreshDelay = 1000
Range = 150.0
ObjectFilter = ANY +INFANTRY +CAVALRY
TargetEnemy = Yes
MaxActiveRank = 1 ;Only affects level 1 rank units
End
Behavior = AttributeModifierAuraUpdate ModuleTag_Debuff
StartsActive = Yes
BonusName = GenericDebuff
AntiCategory = LEADERSHIP BUFF
Range = 200
RefreshDelay = 2000
ObjectFilter = ANY +INFANTRY +CAVALRY -STRUCTURE -BASE_FOUNDATION -HORDE -HERO
TargetEnemy = Yes
End
; Detects other stealth units
Behavior = StealthDetectorUpdate StealthDetectorUpdateModuleTag
DetectionRate = 500 ; how often to rescan for stealthed things in my sight (msec)
End
Behavior = SlowDeathBehavior ModuleTag_NormalDeath ; Nuked
DeathTypes = ALL
DeathFlags = DEATH_1
DestructionDelay = 2000
SinkDelay = 2000
;SinkRate = 0.64 ; in Dist/Sec
Sound = INITIAL SpellGenericUnsummonFasterMS
End
Geometry = CYLINDER
GeometryMajorRadius = 50.0
GeometryMinorRadius = 50.0
GeometryHeight = 61.0
GeometryIsSmall = No
;AttackContactPoint = X:0 Y:0 Z:60
AttackContactPoint = X:40 Y:40 Z:60
AttackContactPoint = X:-40 Y:40 Z:60
AttackContactPoint = X:-40 Y:-40 Z:60
AttackContactPoint = X:40 Y:-40 Z:60
Shadow = SHADOW_ADDITIVE_DECAL_DYNAMIC
ShadowSizeX = 400;
ShadowSizeY = 400;
ShadowTexture = MUSauronEye;
ShadowOpacityStart = 0
ShadowOpacityFadeInTime = 1000
ShadowOpacityPeak = 255
ShadowOpacityFadeOutTime = 1000
ShadowOpacityEnd = 0
ShadowOverrideLODVisibility = yes
End
;---------BAT MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = Kain
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
; --------- LEADERSHIP -----------------------------------------------------------------
Behavior = AttributeModifierAuraUpdate ModuleTag_Leadership
StartsActive = Yes ;If no, requires upgrade to turn on.
BonusName = GenericHeroLeadership
RefreshDelay = 2000
Range = 200
AntiCategory = BUFF
ObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER
End
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
End
Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate
SpecialPowerTemplate = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack = No
StartsPaused = Yes
End
; --------- HEALING -----------------------------------------------------------------
Behavior = AutoHealBehavior ModuleTag_ElvenGiftHealing
StartsActive = Yes
HealingAmount = ELVEN_GIFT_REGEN_AMOUNT
HealingDelay = ELVEN_GIFT_REGEN_DELAY
StartHealingDelay = HERO_HEAL_DELAY
HealOnlyIfNotInCombat = No
End
Behavior = AttributeModifierUpgrade ModuleTag_ElvenGiftBonus
AttributeModifier = SpellBookElvenGifts
End
RemoveModule ModuleTag_LifetimeUpdate
End
[/codebox]
here's the Vampire Werewolf object ini (VampireWolf) -
[codebox]
ChildObject VampireWolf NeutralWarg
; *** ART Parameters ***
; This is required for garrisoned objects - please put in all objects.
ButtonImage = BIWargSentry_Warg
SelectPortrait = UPLoneWarg
Draw = W3DHordeModelDraw ModuleTag_01
OkToChangeModelColor = Yes
StaticModelLODMode = Yes
; specify options for static LODs
LodOptions = LOW
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_LOW
MaxRandomTextures = MAX_RANDOM_TEXTURES_LOW
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_LOW
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_LOW
End
LodOptions = MEDIUM
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_MED
MaxRandomTextures = MAX_RANDOM_TEXTURES_MED
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_MED
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_MED
End
LodOptions = HIGH
AllowMultipleModels = ALLOW_MULTIPLE_MODELS_HIGH
MaxRandomTextures = MAX_RANDOM_TEXTURES_HIGH
MaxRandomAnimations = MAX_RANDOM_ANIMATIONS_HIGH
MaxAnimFrameDelta = MAX_ANIM_FRAME_DELTA_HIGH
End
RandomTexture = IUWargSntryA.tga 0 IUWargSntryA.tga
RandomTexture = IUWargSntryB.tga 0 IUWargSntryA.tga
DefaultModelConditionState
Model = IUWarg_SKN
Skeleton = IUWarg_SKL
End
; -------------- STUNNED ANIMS ----------------
AnimationState = PASSENGER
Animation = Grabbed
AnimationName = IUWarg_GBDA
AnimationMode = LOOP
End
End
AnimationState = FREEFALL
Animation = freefall
AnimationName = IUWarg_FLYA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
AnimationState = DYING BURNINGDEATH
Animation
AnimationName = IUWarg_DIEA
AnimationMode = ONCE
AnimationBlendTime = 10
End
End
AnimationState = DYING SPLATTED
Animation = splatted
AnimationName = IUWarg_LNDA
AnimationMode = ONCE
End
End
AnimationState = STUNNED_FLAILING
Animation = JustDie
AnimationName = IUWarg_FLYA
AnimationMode = LOOP
End
End
AnimationState = DYING
Animation = JustDie
AnimationName = IUWarg_DIEA
AnimationMode = ONCE
End
End
AnimationState = BURNINGDEATH
Animation
AnimationName = IUWarg_MFDA
AnimationMode = LOOP
Distance = 50
End
End
AnimationState = STUNNED
Animation = Land
AnimationName = IUWarg_LNDA
AnimationMode = ONCE
End
End
AnimationState = STUNNED_STANDING_UP
Animation = StandUp
AnimationName = IUWarg_GTPA
AnimationMode = ONCE
End
End
; -------------- MOVING ANIMS ---------------
AnimationState = TURN_LEFT_HIGH_SPEED
Animation = MTurnLeft
AnimationName = IUWarg_TNL1
AnimationMode = LOOP
End
End
AnimationState = TURN_RIGHT_HIGH_SPEED
Animation = MTurnRight
AnimationName = IUWarg_TNR1
AnimationMode = LOOP
End
End
AnimationState = TURN_LEFT
Animation = TurnRight
AnimationName = IUWarg_TRNL
AnimationMode = LOOP
AnimationSpeedFactorRange = 2.0 2.0
End
End
AnimationState = TURN_RIGHT
Animation = TurnRight
AnimationName = IUWarg_TRNR
AnimationMode = LOOP
AnimationSpeedFactorRange = 2.0 2.0
End
End
AnimationState = MOVING ACCELERATE
Animation = Accelerate
AnimationName = IUWarg_ACCL
AnimationMode = ONCE
End
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING DECELERATE
Animation = Decelerate
AnimationName = IUWarg_DECL
AnimationMode = ONCE
End
ParticleSysBone = None GenericSiegeTrailDust
End
AnimationState = MOVING BACKING_UP
Animation = BackingUp
AnimationName = IUWarg_BAKA
AnimationMode = LOOP
End
End
AnimationState = MOVING
ShareAnimation = Yes
Animation = RunA
AnimationName = IUWarg_RUNA
AnimationMode = LOOP
End
;ParticleSysBone = None CalvaryDustTrails
End
; ----------- ATTACKING ANIMS --------------
AnimationState = BETWEEN_FIRING_SHOTS_A
Animation = BetweenFiringShots
AnimationName = IUWarg_IDLA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
AnimationState = FIRING_OR_PREATTACK_A
Animation = AttackA3
AnimationName = IUWarg_ATKA
AnimationMode = ONCE
UseWeaponTiming = Yes
AnimationBlendTime = 10
End
End
AnimationState = ATTACKING
Animation = AttackA3
AnimationName = IUWarg_ATKA
AnimationMode = LOOP
AnimationBlendTime = 10
End
End
; ----------- WAR CHANT ANIMS -------------
AnimationState = WAR_CHANT
Animation = Chant
AnimationName = IUWarg_TNTA
AnimationMode = LOOP
End
End
; ----------- EMOTION ANIMS ---------------
AnimationState = EMOTION_TAUNTING
Animation = TNTA
AnimationName = IUWarg_TNTA
AnimationMode = LOOP
End
End
AnimationState = EMOTION_CELEBRATING
Animation = CHRA
AnimationName = IUWarg_CHRA
AnimationMode = ONCE
End
End
; ----------- IDLE ANIMS ---------------
AnimationState = EMOTION_ALERT
StateName = STATE_Ready
Animation = ALERT
AnimationName = IUWarg_IDLA
AnimationMode = LOOP
End
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Selected" then CurDrawableSetTransitionAnimState("Selected_to_Ready") end
EndScript
End
; ----------- SELECTED ANIMS --------------
AnimationState = SELECTED
SimilarRestart = Yes
Animation = AtAttention
AnimationName = IUWarg_ATNB
AnimationMode = LOOP
End
StateName = Selected
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Idle" then CurDrawableSetTransitionAnimState("Idle_to_Selected") end
if Prev == "STATE_Ready" then CurDrawableSetTransitionAnimState("Ready_to_Selected") end
EndScript
End
IdleAnimationState
Animation
AnimationName = IUWarg_IDLC
AnimationMode = ONCE
AnimationBlendTime = 10
AnimationPriority = 20
End
Animation
AnimationName = IUWarg_IDLB
AnimationMode = ONCE
AnimationBlendTime = 10
AnimationPriority = 1
End
StateName = Idle
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Selected" then CurDrawableSetTransitionAnimState("Selected_to_Idle") end
EndScript
End
;------------ TRANSITION ANIMS ----------------
TransitionState = Selected_to_Idle
Animation = ATNE
AnimationName = IUWarg_ATNC
AnimationMode = ONCE
AnimationSpeedFactorRange = 0.7 1.3
End
End
TransitionState = Idle_to_Selected
Animation = ATND
AnimationName = IUWarg_ATNA
AnimationMode = ONCE
AnimationSpeedFactorRange = 0.7 1.3
End
End
End
; ***DESIGN parameters ***
Side = Elves
EditorSorting = UNIT
ThreatLevel = GLORFINDEL_THREAT_LEVEL
TransportSlotCount = TRANSPORTSLOTCOUNT_UNIT
BuildCost = GLORFINDEL_BUILDCOST
BuildTime = GLORFINDEL_BUILDTIME
CommandPoints = 100
WeaponSet
Conditions = None
Weapon = PRIMARY VampireWolfWeapon
End
ArmorSet
Conditions = None
Armor = CavalryArmor
DamageFX = NormalDamageFX
End
VisionRange = CREEP_VISION
ShroudClearingRange = CREEP_VISION
BountyValue = ISENGARD_WARGRIDER_BOUNTY_VALUE
DisplayName = OBJECT:VampireWolf
CrushableLevel = 1 ;What am I?: 0 = for infantry, 1 = for trees, 2 = general vehicles
CrusherLevel = 0
IsTrainable = Yes
CommandSet = VampireWolfCommandSet
; ******************************************* AUDIO Parameters ***********************************;
VoiceSelect = NeutralWargVoxSelect
VoiceMove = NeutralWargVoxMove
VoiceAttack = NeutralWargVoxAttack
SoundAmbient = WargAmbienceVOX
SoundImpact = ImpactHorse
;SoundMoveLoop = WargMoveFootsteps
;SoundCrushing = WargRiderCrushing ; Sound made when crushing another unit underhoof
;#include "..\includes\StandardUnitEvaEvents.inc"
EvaEnemyObjectSightedEvent = WargRiderCreepSighted ; Special event for wargs showing up. Helps distinguish the real enemies from random creeps
EvaEnemyObjectSightedAfterRespawnEvent = WargRiderCreepSighted ; Event to run after the Cave Troll Lair is respawned. WARNING: This INI field only works for "SlavedUpdate.UseSlaverAsControlForEvaObjectSightedEvents = Yes" units
;EvaEventDieOwner = GroupWargRiderDie ;Eva event to trigger on unit's death. NOTICE THAT this is only for permanent deaths
;For deaths you can respawn from, use the DeathFX
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:WargMoveFootsteps Animation:IUWarg_SKL.IUWarg_RUNA Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TNL1 Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TNR1 Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TRNL Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_TRNR Frames:0
AnimationSound = Sound:WargMoveFootsteps Animation:IUWARG_SKL.IUWARG_ACCL Frames:0
; AnimationSound = Sound:WargRiderTauntCallouts Animation:IUWarg_SKL.IUWarg_TNTA Frames:27
AnimationSound = Sound:WargTauntCallouts Animation:IUWarg_SKL.IUWarg_TNTA Frames:26 Animation:IUWarg_SKL.IUWarg_ATND Frames:7 Animation:IUWarg_SKL.IUWarg_HWLA Frames:17
AnimationSound = Sound:WargTauntFootstep Animation:IUWarg_SKL.IUWarg_TNTA Frames:7 12 64 73
;AnimationSound = Sound:WargSaddleFoleySingles Animation:IUWarg_SKL.IUWarg_TNTA Frames:25 Animation:IUWarg_SKL.IUWarg_RUNA Frames:5 Animation:IUWarg_SKL.IUWarg_TNL1 Frames:5 Animation:IUWarg_SKL.IUWarg_TNR1 Frames:5 Animation:IUWarg_SKL.IUWarg_ACCL Frames:5 Animation:IUWarg_SKL.IUWarg_ATNA Frames:5 Animation:IUWarg_SKL.IUWarg_ATND Frames:5 Animation:IUWarg_SKL.IUWarg_GTPA Frames:5 101 Animation:IUWarg_SKL.IUWarg_HWLA Frames:15 Animation:IUWarg_SKL.IUWarg_RDYA Frames:5 Animation:IUWarg_SKL.IUWarg_RDYB Frames:5
End
; Tie into LargeGroupAudio system
Behavior = LargeGroupAudioUpdate ModuleTag_LGAU
Key = Warg
End
; *** ENGINEERING Parameters ***
RadarPriority = UNIT
ThingClass = CAVALRY_UNIT
KindOf = CAVALRY GRAB_AND_DROP HERO PRELOAD SELECTABLE ATTACK_NEEDS_LINE_OF_SIGHT PATH_THROUGH_EACH_OTHER SCARY MONSTER SCORE ARMY_SUMMARY HEAVY_MELEE_HITTER
Body = ActiveBody BodyModuleTag
MaxHealth = 1000000
BurningDeathBehavior = Yes
BurningDeathFX = FX_CavalryBurningFlame
End
Behavior = EmotionTrackerUpdate Module_EmotionTracker
End
Behavior = StancesBehavior ModuleTag_StancesBehavior
StanceTemplate = FighterHorde
End
Behavior = AIUpdateInterface ModuleTag_03
AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS
AILuaEventsList = WargRiderFunctions
BurningDeathTime = BURNINGDEATH_DURATION_CAVALRY
End
LocomotorSet
Locomotor = WargLocomotor
Condition = SET_NORMAL
Speed = 80 ;80
End
LocomotorSet
Locomotor = BurningDeathLocomotorCavalry
Condition = SET_BURNINGDEATH
Speed = BURNINGDEATH_WANDERSPEED_CAVALRY
End
Behavior = PhysicsBehavior ModuleTag_04
GravityMult = 1.0
ShockStandingTime = 3800 ;msec
End
Behavior = SquishCollide ModuleTag_06
;nothing
End
Behavior = SpecialPowerModule ModuleTag_HowlUpdate
SpecialPowerTemplate = SpecialAbilityWargHowl
UpdateModuleStartsAttack = No
AttributeModifier = IsengardWargHowl
; AttributeModifierRange = 200
AttributeModifierAffectsSelf = Yes
; AttributeModifierAffects = ANY + INFANTRY +CAVALRY
AttributeModifierFX = FX_WargHowl
End
Behavior = SlowDeathBehavior ModuleTag_08
; Die and don't spawn horse
DeathTypes = ALL
SinkDelay = 5000
SinkRate = 1.50 ; in Dist/Sec
DestructionDelay = 17000
Sound = INITIAL WargVoxDie
End
Behavior = SlavedUpdate ModuleTag_Slave
GuardMaxRange = 250
GuardWanderRange = 80
UseSlaverAsControlForEvaObjectSightedEvents = Yes
End
Geometry = CYLINDER
GeometryMajorRadius = 15
GeometryHeight = 20.0
GeometryIsSmall = Yes
Shadow = SHADOW_DECAL
ShadowSizeX = 30;
ShadowSizeY = 20;
ShadowTexture = ShadowI;
End
;---------Wolf MOUNT------------------------------------------------------------------------
Behavior = SpecialPowerModule ModuleTag_HorseToggleStarter
SpecialPowerTemplate = SpecialAbilityToggleMounted
UpdateModuleStartsAttack = Yes
StartsPaused = No
;InitiateSound = FellBeastVoiceMove
End
Behavior = ToggleMountedSpecialAbilityUpdate ModuleTag_HorseToggle
SpecialPowerTemplate = SpecialAbilityToggleMounted
MountedTemplate = Kain
SynchronizeTimerOnSpecialPower = SpecialAbilityWargHowl
UnpackTime = 2000
PreparationTime = 0 ; none, cause we hop onto our mount in no time at all
PackTime = 0 ; none, cause we hop onto our mount in no time at all
OpacityTarget = .0 ; How see-thru to be at peak of change
AwardXPForTriggering = 0
IgnoreFacingCheck = Yes
;TriggerSound = FellBeastVoiceMove
End
[/codebox]
Here's the Command Buttons (Commandbutton.ini) -
[codebox]
CommandButton Command_ConstructKain
Command = UNIT_BUILD
Object = Kain
Options = CANCELABLE
TextLabel = CONTROLBAR:KainRecruit
ButtonImage = HIGlorfindel
ButtonBorderType = BUILD
DescriptLabel = CONTROLBAR:LW_ToolTip_Kain
Radial = Yes
InPalantir = Yes
ShowProductionCount = Yes
; UnitSpecificSound = GondorArcherVoiceBuy
End
CommandButton Command_VampireBatToggleMounted
Command = SPECIAL_POWER
SpecialPower = SpecialAbilityToggleMounted
TextLabel = CONTROLBAR:TheodenMount
Options = TOGGLE_IMAGE_ON_WEAPONSET ON_GROUND_ONLY OK_FOR_MULTI_SELECT ; Not really image, just audio
FlagsUsedForToggle = MOUNTED ; What we really want is to toggle Theoden's audio if he is mounted or unmounted. Ya, this is a hack
ButtonImage = HICaveBats HICaveBats
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:GenericMountTooltip
InPalantir = Yes
End
CommandButton Command_VampireWolfToggleMounted
Command = SPECIAL_POWER
SpecialPower = SpecialAbilityToggleMounted
TextLabel = CONTROLBAR:TheodenMount
Options = TOGGLE_IMAGE_ON_WEAPONSET ON_GROUND_ONLY OK_FOR_MULTI_SELECT ; Not really image, just audio
FlagsUsedForToggle = MOUNTED ; What we really want is to toggle Theoden's audio if he is mounted or unmounted. Ya, this is a hack
ButtonImage = BIWargSentry_Warg BIWargSentry_Warg
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:GenericMountTooltip
InPalantir = Yes
End
[/codebox]
Here's the Command Sets (commandset.ini) -
[codebox]
CommandSet KainCommandSet
1 = Command_ToggleStance
2 = Command_MountHorseGlorfindel
3 = Command_VampireBatToggleMounted
4 = Command_VampireWolfToggleMounted
5 = Command_CreateAHero_Blink
6 = Command_SpawnOathbreakers
12 = Command_CaptureBuilding
13 = Command_AttackMove
14 = Command_Stop
End
CommandSet VampireBatCommandSet
1 = Command_ToggleStance
2 = Command_VampireBatToggleMounted
13 = Command_AttackMove
14 = Command_Stop
End
CommandSet VampireWolfCommandSet
1 = Command_ToggleStance
2 = Command_VampireWolfToggleMounted
13 = Command_AttackMove
14 = Command_Stop
End
[/codebox]
here's the Experience Levels -
[codebox]
;------------------ Kain ------------------------
ExperienceLevel KainLevel1
TargetNames = Kain
RequiredExperience = 1
ExperienceAward = GLORFINDEL_LVL1_EXP_AWARD
Rank = 1
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel2
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL2_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL2_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 2
AttributeModifiers = HeroLevelUpDamage1
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel3
TargetNames = Kain
RequiredExperience = Glorfindel_LVL3_EXP_NEEDED
ExperienceAward = Glorfindel_LVL3_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 3
AttributeModifiers = HeroLevelUpDamage2
Upgrades = Upgrade_AragornLeadership
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel4
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL4_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL4_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 4
AttributeModifiers = HeroLevelUpDamage3
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel5
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL5_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL5_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 5
AttributeModifiers = HeroLevelUpDamage4
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel6
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL6_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL6_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 6
AttributeModifiers = HeroLevelUpDamage5
Upgrades = Upgrade_ElvenGift
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel7
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL7_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL7_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 7
AttributeModifiers = HeroLevelUpDamage6
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel8
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL8_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL8_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 8
AttributeModifiers = HeroLevelUpDamage7
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel9
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL9_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL9_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Rank = 9
Upgrades = Upgrade_DainRoyalGuard
AttributeModifiers = HeroLevelUpDamage8
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
ExperienceLevel KainLevel10
TargetNames = Kain
RequiredExperience = GLORFINDEL_LVL10_EXP_NEEDED
ExperienceAward = GLORFINDEL_LVL10_EXP_AWARD
LevelUpFx = FX:GandalfLevelUp1FX
;LevelUpOCL = OCL_GandalfLevelUp1OCL
Upgrades = Upgrade_AragornOathbreakers
Rank = 10
AttributeModifiers = HeroLevelUpDamage9
SelectionDecal
Texture = decal_hero_good
Style = SHADOW_ALPHA_DECAL
OpacityMin = 50%
OpacityMax = 100%
MinRadius = 40
MaxRadius = 200
MaxSelectedUnits = 40
End
End
[/codebox]
And here's Kain's new weapon and the Vampire Wolf new weapon from Weapon.ini -
[codebox]
;-------------------------------------------------------------------------------
Weapon KainSoulReaverSword
LeechRangeWeapon = Yes
AttackRange = 20.0
MeleeWeapon = Yes
DelayBetweenShots = GLORFINDEL_SWORD_DELAYBETWEENSHOTS
PreAttackDelay = GLORFINDEL_SWORD_PREATTACKDELAY
PreAttackType = PER_SHOT
FireFX = FX_GondorSwordHit
FiringDuration = GLORFINDEL_SWORD_FIRINGDURATION
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR
DamageNugget
Damage = GLORFINDEL_SWORD_DAMAGE
Radius = 10.0
DelayTime = 0
DamageType = HERO
DamageFXType = SWORD_SLASH
DeathType = Normal
DrainLife = Yes
DrainLifeMultiplier = 1.5
End
End
;------------------------------------------------------------------------------
Weapon VampireWolfWeapon
LeechRangeWeapon = Yes
AttackRange = STANDARD_MELEE_ATTACK_RANGE
MeleeWeapon = Yes
PreAttackDelay = ISENGARD_WARGRIDER_WARG_PREATTACKDELAY
DelayBetweenShots = ISENGARD_WARGRIDER_WARG_DELAYBETWEENSHOTS ; time between shots, msec
FiringDuration = ISENGARD_WARGRIDER_WARG_FIRINGDURATION
FireFX = FX_WargRiderlessAttack
DamageNugget ; A basic Nugget that just does damage
Damage = ISENGARD_WARGRIDER_WARG_DAMAGE
Radius = 0.0
DelayTime = 0
DamageType = CAVALRY
;DamageFXType = SWORD_SLASH
DeathType = NORMAL
DamageScalar = 10% ANY +STRUCTURE
DrainLife = Yes
DrainLifeMultiplier = 1.5
End
End
[/codebox]
That should be it...(I hope)....
Thanks for offering to take a look Solinx, much appreciated.
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users