Hi there,
I managed to add an "hobbit" fortress for my hobbit faction, and doing this i followed a tutorial called:
"New factions in BFME2, a tutorial by fingulfin, Part 2 Fortresses"
Well i done what he said and it works incredibly well, expect for one particoular: when i start a game with my faction the fortress does appear but get destroyed after few seconds.
If anyone has some tips it'll be amazing
Here some screenshots:
Here is the fortress ini:
Spoiler
;//------------------------------------------------------------------------------
;// This is the magic thing in the .bse file that tells how to center the base layout compared to the game position of the fortress
Object HobbitFortressCenterGeneric
SelectPortrait = BPCGreenDragon
Draw = W3DScriptedModelDraw ModuleTag_01
DefaultModelConditionState
Model = None
End
ModelConditionState = WORLD_BUILDER
Model = NBasePin
End
End
Side = Hobbit
EditorSorting = STRUCTURE
KindOf = IMMOBILE BASE_FOUNDATION CASTLE_CENTER
Behavior = CastleBehavior ModuleTag_castle
;//Anything that does not fit this filter will be given to the neutral player, so the template can have rocks and props.
FilterValidOwnedEntries = ANY +STRUCTURE +WALK_ON_TOP_OF_WALL +BASE_FOUNDATION +TACTICAL_MARKER
End
End
;//------------------------------------------------------------------------------
;// These are the four corner buildplots. Difference is just the BuildVariation flag they give the Expansion.
Object HobbitFortressExpansionPadCorner
SelectPortrait = BPEFortress_BuildPlot
;// *** ART Parameters ***
Draw = W3DFloorDraw DrawFloorBase
ModelName = EBFoundation
End
Draw = W3DScriptedModelDraw ModuleTag_DrawMain
DefaultModelConditionState
Model = WBFoundationP
End
;//Remove the buildplot when it's been constructed on
ModelConditionState = CONSTRUCTION_COMPLETE
Model = None
End
End
;//PlacementViewAngle = 0
;// ***DESIGN parameters ***
DisplayName = OBJECT:ElvenBuildingFoundation
Side = Hobbit
EditorSorting = STRUCTURE
ThreatLevel = 1.0
BuildCost = 1
BuildTime = 5.0 ;// in seconds
VisionRange = 0.0 ;// Shroud clearing distance
ShroudClearingRange = 0
CommandSet = ElvenFortressExpansionPadCornerCommandSet
;// *** AUDIO Parameters ***
VoiceSelect = Gui_PlotSelect2 ;MenFortressSelect
;// *** ENGINEERING Parameters ***
KindOf = STRUCTURE SELECTABLE IMMOBILE BASE_FOUNDATION UNATTACKABLE MP_COUNT_FOR_VICTORY NO_COLLIDE DO_NOT_CLASSIFY EXPANSION_PAD
Behavior = FoundationAIUpdate ModuleTag_foundationAI
BuildVariation = 2 ;// Will give BUILD_VARIATION_TWO to anything built on it
End
Behavior = CastleMemberBehavior ModuleTag_CMB
End
Body = ImmortalBody ModuleTag_05
MaxHealth = 15000.0
End
Geometry = CYLINDER
GeometryMajorRadius = 15.0
GeometryMinorRadius = 15.0
GeometryHeight = 0.8
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End
;// And these are the 3 on the sides.
ChildObject ElvenFortressExpansionPadSide ElvenFortressExpansionPadCorner
; Draw = W3DScriptedModelDraw ModuleTag_DrawMain
; DefaultModelConditionState
; Model = EBFoundation
; End
; End
CommandSet = ElvenFortressExpansionPadSideCommandSet
Behavior = FoundationAIUpdate ModuleTag_foundationAI
BuildVariation = 1 ;// Will give BUILD_VARIATION_ONE to anything built on it
End
End
;//------------------------------------------------------------------------------
;// Elven Fortress Citadel
;// This is the center part of the full Fortress. This plus the buildplots make up the full fortress
Object HobbitCitadel
SelectPortrait = BPEFortress
Draw = W3DScriptedModelDraw ModuleTag_Draw
ExtraPublicBone = ARROW_01
ExtraPublicBone = ARROW_02
ExtraPublicBone = ARROW_03
ExtraPublicBone = ARROW_04
ExtraPublicBone = ARROW_05
ExtraPublicBone = ARROW_06
ExtraPublicBone = ARROW_07
ExtraPublicBone = ARROW_08
ExtraPublicBone = ARROW_09
ExtraPublicBone = ARROW_10
ExtraPublicBone = ARROW_11
ExtraPublicBone = ARROW_12
ExtraPublicBone = ARROW_13
ExtraPublicBone = ARROW_14
ExtraPublicBone = ARROW_15
ExtraPublicBone = ARROW_16
ExtraPublicBone = ARROW_17
ExtraPublicBone = ARROW_18
ExtraPublicBone = ARROW_19
ExtraPublicBone = ARROW_20
ExtraPublicBone = ARROW_21
ExtraPublicBone = ARROW_22
ExtraPublicBone = ARROW_23
ExtraPublicBone = ARROW_24
ExtraPublicBone = ARROW_25
ExtraPublicBone = ARROW_26
ExtraPublicBone = ARROW_27
ExtraPublicBone = ARROW_28
ExtraPublicBone = ARROW_29
ExtraPublicBone = ARROW_30
ExtraPublicBone = ARROW_31
ExtraPublicBone = ARROW_32
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = SBGrnDrg
WeaponLaunchBone = PRIMARY ARROW_
End
ModelConditionState = DAMAGED
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = DAMAGED
Animation = Fortress_ReallyDamaged
AnimationName = WBFortress_D2S.WBFortress_D2A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressDamaged
End
ModelConditionState = REALLYDAMAGED
Model = EBFortress_D2
End
AnimationState = REALLYDAMAGED
Animation = Fortress_ReallyDamaged
AnimationName = EBFortress_D2S.EBFortress_D2A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressReallyDamaged
End
ModelConditionState = RUBBLE
Model = EBFortress_D3
End
AnimationState = RUBBLE
Animation = Fortress_Rubble
AnimationName = EBFortress_D3S.EBFortress_D3A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressCollapse
End
ModelConditionState = POST_RUBBLE
Model = None
ParticleSysBone NONE SmokeBuildingMediumRubble
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
ParticleSysBone NONE SmokeBuildingMediumRubble
End
AnimationState = POST_COLLAPSE
End
//---Vines---
ModelConditionState = SNOW UPGRADE_NUMENOR_STONEWORK
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_U_Snow.tga
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_U.tga
End
//---Snow---
ModelConditionState = SNOW
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_snow.tga
Texture = CBHarlindonruins.tga CBHarlindonruins_S.tga
End
End
Draw = W3DScriptedModelDraw ModuleTag_Draw_HCBanner
OkToChangeModelColor = Yes
DefaultModelConditionState
Model = EBHCFortress
End
MultiPlayerOnly = Yes
End
//Eagle's Nest
Draw = W3DScriptedModelDraw ModuleTag_EaglesNestDraw
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//Build up
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 DAMAGED
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 REALLYDAMAGED
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 SNOW
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_snow.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2
Model = EBFENest_A
End
AnimationState = UPGRADE_FORTRESS_MONUMENT USER_2
Animation = RiseUp
AnimationName = EBFENest_ASKL.EBFENest_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 5.0 5.0
End
End
//Damage States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT DAMAGED
Model = EBFENest
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT REALLYDAMAGED
Model = EBFENest_D2
End
AnimationState = UPGRADE_FORTRESS_MONUMENT REALLYDAMAGED
Animation = EBFENest_ReallyDamaged
AnimationName = EBFENest_D2SKL.EBFENest_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT RUBBLE
Model = EBFENest_D3
End
AnimationState = UPGRADE_FORTRESS_MONUMENT RUBBLE
Animation = EBFENest_Rubble
AnimationName = EBFENest_D3SKL.EBFENest_D3AN
AnimationMode = ONCE
End
End
// snow state
ModelConditionState = SNOW UPGRADE_FORTRESS_MONUMENT
Model = EBFENest
Texture = EBFortress.tga EBFortress_snow.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT
Model = EBFENest
End
End
;//Eagles Nest Eagle Model
Draw = W3DScriptedModelDraw ModuleTag_DrawEagle
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
IdleAnimationState
StateName = NoEagle
; --- below worked but a little too much delay ---
;
; BeginScript
; Prev = CurDrawablePrevAnimationState()
; if Prev == "BeingConstructed" then
; ; Don't play completed sound when canceling build-in-progress or when
; ; destroyed halfway
; if not CurDrawableModelcondition( "DYING" ) then
; CurDrawablePlaySound("UpgradeElfFortressEaglesNest")
; end
; end
; EndScript
End
//Build up
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2 DAMAGED
Model = EBFE_A
Texture = EBFortress.tga EBFortress_D.tga
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2 REALLYDAMAGED
Model = EBFE_A
Texture = EBFortress.tga EBFortress_D.tga
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2
Model = EBFE_A
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2
Animation = RiseUp
AnimationName = EBFE_ASKL.EBFE_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 5.0 5.0
End
StateName = BeingConstructed
End
//Damage States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE DAMAGED
Model = EBFE
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE REALLYDAMAGED
Model = EBFE_D2
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE REALLYDAMAGED
Animation = EBFENest_ReallyDamaged
AnimationName = EBFE_D2SKL.EBFE_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE RUBBLE
Model = EBFE_D3
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE RUBBLE
Animation = EBFENest_Rubble
AnimationName = EBFE_D3SKL.EBFE_D3AN
AnimationMode = ONCE
End
End
//Normal States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE
Model = EBFE
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
Model = None
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
StateName = EagleGone
End
End
//Mystic Fountains
Draw = W3DScriptedModelDraw ModuleTag_DrawMysticFountains
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//Build Up
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3 DAMAGED
Model = EBFMFount_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3 REALLYDAMAGED
Model = EBFMFount_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3
Model = EBFMFount_A
End
AnimationState = FORTRESS_IMPROVEMENT_2 USER_3
Animation = UpAndStill
AnimationName = EBFMFount_ASKL.EBFMFount_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 30.0 30.0
End
End
//Damage States
ModelConditionState = FORTRESS_IMPROVEMENT_2 DAMAGED
Model = EBFMFount
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 REALLYDAMAGED
Model = EBFMFount_D2
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = FORTRESS_IMPROVEMENT_2 REALLYDAMAGED
Animation = MysticFountains_ReallyDamaged
AnimationName = EBFMFount_D2SK.EBFMFount_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 RUBBLE
Model = EBFMFount_D3
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = FORTRESS_IMPROVEMENT_2 RUBBLE
Animation = MysticFountains_ReallyDamaged
AnimationName = EBFMFount_D3SK.EBFMFount_D3AN
AnimationMode = ONCE
End
End
//Normal
ModelConditionState = FORTRESS_IMPROVEMENT_2
Model = EBFMFount
End
End
//Enchanted Anvil
Draw = W3DScriptedModelDraw ModuleTag_DrawEnchantedAnvil
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//---Build up Damaged---
ModelConditionState = FORTRESS_IMPROVEMENT_3 DAMAGED USER_1
Model = EBFAnvil_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED USER_1
Model = EBFAnvil_A
Texture = EBFortress.tga EBFortress_D.tga
End
//Build up
ModelConditionState = FORTRESS_IMPROVEMENT_3 USER_1
Model = EBFAnvil_A
End
AnimationState = FORTRESS_IMPROVEMENT_3 USER_1
Animation = RiseUp
AnimationName = EBFAnvil_ASKL.EBFAnvil_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 7.0 7.0
End
End
//---Damaged---
ModelConditionState = FORTRESS_IMPROVEMENT_3 DAMAGED
Model = EBFAnvil
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED
Model = EBFAnvil_D2
End
AnimationState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED
Animation = EBFAnvil_ReallyDamaged
AnimationName = EBFAnvil_D2SKL.EBFAnvil_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 RUBBLE
Model = EBFAnvil_D3
End
AnimationState = FORTRESS_IMPROVEMENT_3 RUBBLE
Animation = EBFAnvil_ReallyDamaged
AnimationName = EBFAnvil_D3SKL.EBFAnvil_D3AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_3
Model = EBFAnvil
End
End
Draw = W3DScriptedModelDraw ModuleTag_DrawAnvilGuy
AttachToBoneInAnotherModule = PositionBone
DefaultModelConditionState
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 USER_1
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 RUBBLE
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3
Model = EBFAnvlGuy_SKN
End
AnimationState = FORTRESS_IMPROVEMENT_3
Animation = IDLA
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLA
AnimationMode = ONCE
AnimationPriority = 20
End
Animation = IDLB
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLB
AnimationMode = ONCE
AnimationPriority = 1
End
Animation = IDLC
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLC
AnimationMode = ONCE
AnimationPriority = 1
End
Flags = RESTART_ANIM_WHEN_COMPLETE
End
End
//Blessed Mist
Draw = W3DScriptedModelDraw ModuleTag_DrawMist
DefaultModelConditionState
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_8
Model = None
ParticleSysBone = NONE EnshroudingMist
End
End
;// Draw = W3DFloorDraw ModuleTag_DrawFloor
;// StaticModelLODMode = Yes ;// THIS NEEDS TO BE COMMENTED OUT WHEN ENGINEERING ENABLES LOD'S IN THE FLOOR DRAW
;// ModelName = GBWorkshop_Bib
;// End
PlacementViewAngle = 0
;// ***DESIGN parameters ***
DisplayName = OBJECT:ElvenFortress
Description = OBJECT:ElvenFortressDescription
Side = Hobbit
EditorSorting = STRUCTURE
ThreatLevel = 1.0
CommandPointBonus = GENERIC_FORTRESS_COMMAND_POINT_BONUS
CommandSet = HobbitFortressCommandSet
BuildCost = ELVEN_FORTRESS_BUILDCOST
BuildTime = ELVEN_FORTRESS_BUILDTIME
BountyValue = ELVEN_FORTRESS_BOUNTY_VALUE
VisionRange = ELVEN_FORTRESS_VISION_RANGE ;// Shroud clearing distance
ShroudClearingRange = ELVEN_FORTRESS_SHROUD_CLEAR
WeaponSet
Weapon = PRIMARY GoodStructureBow
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
ArmorSet
Conditions = None
Armor = FortressArmor
;DamageFX = StructureDamageFXNoShake
End
;// *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
EvaEventDieOwner = EvaFortressDie
VoiceSelect = ElfFortressSelect ;GondorWorkshopSelect
VoiceSelectUnderConstruction = BuildingGoodVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingBigConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingBigConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:UpgradeElfFortressEaglesNest Animation:EBFE_ASKL.EBFE_ABLD Frames:1250
End
CampnessValue = CAMPNESS_FORTRESS
;// *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD COMMANDCENTER VITAL_FOR_BASE_SURVIVAL STRUCTURE IMMOBILE CASTLE_KEEP MP_COUNT_FOR_VICTORY SELECTABLE FS_FACTORY AUTO_RALLYPOINT MADE_OF_WOOD SCORE DOZER_FACTORY
Behavior = GettingBuiltBehavior GetBuiltBehaviorTag
WorkerName = ElvenWorkerNoSelect
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
End
Behavior = CastleMemberBehavior ModuleTag_CMB
End
Body = StructureBody ModuleTag_05
MaxHealth = ELVEN_FORTRESS_HEALTH
MaxHealthDamaged = ELVEN_FORTRESS_HEALTH_DAMAGED
MaxHealthReallyDamaged = ELVEN_FORTRESS_HEALTH_REALLY_DAMAGED
; DamageCreationList = OCL_BuildingDamageList01 CATAPULT_ROCK
; DamageCreationList = OCL_GBStable_Chunk1 CATAPULT_ROCK FRONT_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk2 CATAPULT_ROCK RIGHT_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk3 CATAPULT_ROCK BACK_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk4 CATAPULT_ROCK LEFT_DESTROYED
End
Behavior = BuildingBehavior BuildingModuleTag
; NightWindowName = GBWORKSHOPN
; FireWindowName = WINDOW_F01
; GlowWindowName = WINDOW_G01
; FireName = FIRE01
End
Behavior = StructureCollapseUpdate ModuleTag_06
MinCollapseDelay = 000
MaxCollapseDelay = 000
CollapseDamping = .5
MaxShudder = 0.6
MinBurstDelay = 250
MaxBurstDelay = 800
BigBurstFrequency = 4
FXList = INITIAL FX_FortressCollapse
;FXList = ALMOST_FINAL FX_FortressCollapse
DestroyObjectWhenDone = Yes
CollapseHeight = 120
End
Behavior = ProductionUpdate ProductionUpdateModuleTag
ProductionModifier
RequiredUpgrade = Upgrade_ElvenFortressMysticFountains
TimeMultiplier = 0.75
HeroRevive = Yes
End
End
Behavior = QueueProductionExitUpdate QueueProductionModuleTag
UnitCreatePoint = X:41.0 Y:0.00 Z:0.0
NaturalRallyPoint = X:109.0 Y:0.00 Z:0.0
//AllowAirborneCreation = Yes
ExitDelay = 50
End
//Eagles Nest Behaviors
Behavior = GrantUpgradeCreate ModuleTag_ActLikeAnOldUpgrade
UpgradeToGrant = Upgrade_EaglesNestEagleButtonEnable
GiveOnBuildComplete = Yes ;// The ExemptStatus UnderConstruction hack doesn't work on foundation buildings.
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheEaglesNest
TriggeredBy = Upgrade_ElvenFortressEaglesNest
AddConditionFlags = UPGRADE_FORTRESS_MONUMENT
AddTempConditionFlag = ModelConditionState:USER_2 //For buildup
TempConditionTime = 11.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = AudioLoopUpgrade ModuleTag_EaglesNestBuildLoop
; Play a "build loop" while the Eagle's Nest is building up
TriggeredBy = Upgrade_ElvenFortressEaglesNest
;ConflictsWith = Upgrade_PosternGate Upgrade_WallBanner
SoundToPlay = BuildingBigConstructionLoop
KillOnDeath = Yes
KillAfterMS = 9000 ; Should match the length of the build-up animation [Or a little shorter since sounds take a little while to die]
End
Behavior = GeometryUpgrade TowerGeom
TriggeredBy = Upgrade_ElvenFortressEaglesNest
ShowGeometry = HighTowerGeom
End
Behavior = AudioLoopUpgrade ModuleTag_EagleCreated
; Play a "build loop" while the Eagle's Nest is building up
TriggeredBy = Upgrade_HasEaglesNestEagle
SoundToPlay = ElvenFortressEagleCreated
End
Behavior = ObjectCreationUpgrade MaketheEagle
TriggeredBy = Upgrade_HasEaglesNestEagle
Delay = 0.0
RemoveUpgrade = Upgrade_EaglesNestEagleButtonEnable
ThingToSpawn = ElvenFortressEagle
//Offset = X:90.0 Y:0.0 Z:120.0
FadeInTime = 600
UseBuildingProduction = Yes
End
Behavior = SlaveWatcherBehavior WatchTheEagle
RemoveUpgrade = Upgrade_HasEaglesNestEagle ;//when our slave dies, remove this upgrade, so we can get the upgrade again.
GrantUpgrade = Upgrade_EaglesNestEagleButtonEnable ;//when our slave dies, enable the button that allows us to buy a new one
LetSlaveLive = Yes
End
Behavior = ModelConditionUpgrade ModuleTag_AnimateEagle
TriggeredBy = Upgrade_EaglesNestEagleButtonEnable
AddConditionFlags = FORTRESS_MONUMENT_CREATURE_AVAILABLE
RemoveConditionFlags = FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
Permanent = Yes
End
Behavior = ModelConditionUpgrade ModuleTag_HideEagle
TriggeredBy = Upgrade_HasEaglesNestEagle
AddConditionFlags = FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
RemoveConditionFlags = FORTRESS_MONUMENT_CREATURE_AVAILABLE
Permanent = Yes
End
//This behavior allows me to queue this unit up for the citadel to build. Otherwise I would need a hidden command button.
//The production behavior checks to see if there is actually a commandset button setup to build this unit. This bypasses that.
Behavior = SpawnUnitBehavior ModuleTag_allowMeToBuildDrakeFromCitadel
UnitName = ElvenFortressEagle
End
//End Eagles Nest Behaviors
;//Encasing Vines improvement
Behavior = CastleUpgrade ModuleTag_PassOutEncasingVinesUpgrade
TriggeredBy = Upgrade_ElvenFortressEncasingVinesTrigger
Upgrade = Upgrade_ElvenFortressEncasingVines
WallUpgradeRadius = ELVEN_FORTRESS_WALL_EFFECTIVE_RADIUS
End
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_ElvenFortressEncasingVines
AttributeModifier = EncasingVines_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheVines
TriggeredBy = Upgrade_ElvenFortressEncasingVines
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
;//Mystic Fountains improvement
Behavior = ModelConditionUpgrade ModuleTag_ShowMysticFountains
TriggeredBy = Upgrade_ElvenFortressMysticFountains
AddConditionFlags = FORTRESS_IMPROVEMENT_2
AddTempConditionFlag = ModelConditionState:USER_3 //For buildup
TempConditionTime = 10.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = StatusBitsUpgrade ModuleTag_FakeOutMysticFountains ;// Visual only upgrade needs a fake out to react to it.
TriggeredBy = Upgrade_ElvenFortressMysticFountains
End
Behavior = PassiveAreaEffectBehavior ModuleTag_MysticFountainsHealing
UpgradeRequired = Upgrade_ElvenFortressMysticFountains
EffectRadius = 200 // please update the decal size in experience lvl INI if you change this... the value there is about 2.2x the value here
PingDelay = 2000;msec
HealPercentPerSecond = 3%
AllowFilter = ANY +INFANTRY +CAVALRY +HERO -MACHINE +MONSTER -IMMOBILE +DOZER
NonStackable = Yes
HealFX = FX_SpellHealUnitHealBuff
End
Behavior = BannerCarrierUpdate BannerCarrierUpdateModuleTag
UpgradeRequired = Upgrade_ElvenFortressMysticFountains
IdleSpawnRate = 5000 // spawn a new member every n seconds when idle (in miliseconds)
UnitSpawnFX = FX_BannerCarrierSpawnUnit // name of particle FX to use when the BannerCarrier spawns a new unit
// This well object acts like a banner carrier except it spawns unit on nearby hordes instead of itself.
ReplenishNearbyHorde = Yes
ScanHordeDistance = 200
End
;//Enchanted Anvil improvement
Behavior = CostModifierUpgrade ModuleTag_EnchantedAnvilUpgrades
LabelForPalantirString = GUI:UPGRADE_DISCOUNT
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
UpgradeDiscount = Yes
ApplyToTheseUpgrades = Upgrade_ElvenSilverthornArrows Upgrade_ElvenForgedBlades Upgrade_ElvenHeavyArmor Upgrade_ElvenBasicTraining
Percentage = -10%
Percentage = -20%
Percentage = -25%
Percentage = -30%
Percentage = -35%
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheAnvil
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
AddConditionFlags = FORTRESS_IMPROVEMENT_3
AddTempConditionFlag = ModelConditionState:USER_1 //For buildup
TempConditionTime = 5.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = AudioLoopUpgrade ModuleTag_EnchantedAnvilBuildLoop
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
;ConflictsWith = Upgrade_PosternGate Upgrade_WallBanner
SoundToPlay = BuildingConstructionLoop
KillOnDeath = Yes
KillAfterMS = 3500 ; Should match the length of the build-up animation [Or a little shorter since sounds take a little while to die]
End
;//Blessed Mist improvement
Behavior = InvisibilityUpdate ModuleTag_BroadcastCamouflage
InvisibilityNugget
InvisibilityType = CAMOUFLAGE
DetectionRange = ELVEN_MIST_CAMOUFLAGE_DETECTION_RANGE
End
UpdatePeriod = 1000
Broadcast = Yes
BroadcastRange = 300
BroadcastObjectFilter = ELVEN_MIST_OBJECT_FILTER
StartsActive = Yes
RequiredUpgrades = Upgrade_ElvenFortressBlessedMist
End
Behavior = ModelConditionUpgrade ModuleTag_AnimateNestDrake
TriggeredBy = Upgrade_ElvenFortressBlessedMist
AddConditionFlags = FORTRESS_IMPROVEMENT_8
Permanent = Yes
End
;//Crystal Moat
Behavior = ObjectCreationUpgrade CreateTheMoat
TriggeredBy = Upgrade_ElvenFortressCrystalMoat
Delay = 0.0
ThingToSpawn = ElvenFortressCrystalMoat
FadeInTime = 600
End
Behavior = CitadelSlaughterHordeContain ModuleTag_SlaughterMe
PassengerFilter = GENERIC_FACTION_SLAUGHTERABLE
ObjectStatusOfContained = UNSELECTABLE ENCLOSED
CashBackPercent = 200%
ContainMax = 99;// give it a huge capacity, just in case player sends his whole army in at once
AllowEnemiesInside = No
AllowAlliesInside = No
AllowNeutralInside = No
AllowOwnPlayerInsideOverride = Yes
EnterSound = GUI_RingReturned
EntryOffset = X:129.0 Y:5.0 Z:0.0
EntryPosition = X:100.0 Y:0.0 Z:0.0 // entry position needs to be offset from the root transform, otherwise fortress obscures point.
ExitOffset = X:129.0 Y:0.0 Z:0.0
StatusForRingEntry = HOLDING_THE_RING
UpgradeForRingEntry = Upgrade_RingHero Upgrade_FortressRingHero
ObjectToDestroyForRingEntry = NONE +TheDroppedRing
FXForRingEntry = FX_OneRingFlare
End
Behavior = AIUpdateInterface ModuleTag_AI
AILuaEventsList = FortressFunctions
AutoAcquireEnemiesWhenIdle = Yes
MoodAttackCheckRate = 250
End
;//Money Maker
Behavior = AutoDepositUpdate AutoDepositModuleTag
DepositTiming = GENERIC_KEEP_MONEY_TIME
DepositAmount = GENERIC_KEEP_MONEY_AMOUNT
InitialCaptureBonus = 0 ;// no initial bonus
End
Behavior = TerrainResourceBehavior ModuleTag_NewMoneyDeadSpot
Radius = GENERIC_KEEP_MONEY_RANGE ;// How far we try to claim ground
MaxIncome = 0 ;// If we were to get all we wanted, how much we would earn. Linear slope to 0 at 0% claim
IncomeInterval = 999999 ;// How often (in msec) we give that much money
HighPriority = Yes ;// A high priority claim gets to pretend it was there first.
End
#include "..\..\..\FortressRingFunc.inc"
//Main
Geometry = CYLINDER
GeometryName = Geom_Orig
GeometryMajorRadius = 50.0
GeometryHeight = 55.0
GeometryOffset = X:0 Y:0 Z:0
//Towers
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:25 Y:25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:-25 Y:25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:-25 Y:-25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:25 Y:-25 Z:0
//Front
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 15.0
GeometryMinorRadius = 20.0
GeometryHeight = 80.0
GeometryOffset = X:60 Y:0 Z:0
//Ramp (So units can attack it when the moat is in place)
AdditionalGeometry = BOX
GeometryMajorRadius = 12.0
GeometryMinorRadius = 16.0
GeometryHeight = 22.0
GeometryOffset = X:85 Y:0 Z:0
AdditionalGeometry = BOX
GeometryName = HighTowerGeom
GeometryMajorRadius = 12
GeometryMinorRadius = 12
GeometryHeight = 150
GeometryOffset = X:0 Y:0 Z:0
GeometryUsedForHealthBox = No
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
GeometryContactPoint = X:-50.348 Y:26.9 Z:0 Repair
GeometryContactPoint = X:47.546 Y:-38.677 Z:0 Repair
GeometryContactPoint = X:47.546 Y:36.435 Z:0
GeometryContactPoint = X:-32.763 Y:-46.121 Z:0
;GeometryContactPoint = X:26.753 Y:26.753 Z:67.933 Swoop
GeometryContactPoint = X:0 Y:0 Z:180 Swoop
End
;//------------------------------------------------------------------------------
;//Elven Fortress
;// This is the one object that you would place on a map and that the porter builds.
;// It unpacks in to the citadel and the buildplots. It's an old CampFlag.
Object HobbitFortress
SelectPortrait = BPCGreenDragon
Draw = W3DScriptedModelDraw ModuleTag_01
OkToChangeModelColor = Yes
StaticModelLODMode = Yes // Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
;dummy idle animation state for audio
IdleAnimationState
;StateName = STATE_Idle
End
;//Need this since the default condition is none
ModelConditionState = WORLD_BUILDER
Model = SBGrnDrg
End
;//Phantom structure when placing a new building to be build
ModelConditionState = BUILD_PLACEMENT_CURSOR
Model = None //EBFortress
End
;//Structure that stays where you will be building until the porter reaches the place to start building.
ModelConditionState = PHANTOM_STRUCTURE
Model = SBGrnDrg
End
ModelConditionState = RUBBLE
Model = SBGrnDrg_D3
End
AnimationState = RUBBLE
Animation = Fortress_Rubble
AnimationName = SBGrnDrg_D3.SBGrnDrg_D3
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressCollapse
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED SNOW
Model = EBFortress_A
Texture = EBFortress.tga EBFortress_U_Snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED
Model = EBFortress_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED
Animation = UpAndStill
AnimationName = EBFortress_ASK.EBFortress_ABL
AnimationMode = MANUAL
End
ParticleSysBone = NONE BuildingContructDustCastles FollowBone:YES
ParticleSysBone = NONE FortressElven FollowBone:YES
StateName = BeingConstructed
BeginScript
CurDrawablePlaySound("GondorBarracksBeginConstruction")
EndScript
End
End
ArmorSet
Conditions = None
Armor = FortressArmor
;//DamageFX = StructureDamageFXNoShake
End
Side = Hobbit
EditorSorting = STRUCTURE
PlacementViewAngle = -45 ;// A -90 makes the door of the base face natural south. 0 would have it to the East.
BuildCost = ELVEN_FORTRESS_BUILDCOST
BuildTime = ELVEN_FORTRESS_BUILDTIME //0
DisplayName = OBJECT:ElvenFortress
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceFullyCreated = EVA:FortressComplete-Builder-Elf
VoiceSelect = ElfFortressSelect
VoiceSelectUnderConstruction = BuildingGoodVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingBigConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingBigConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
ModelCondition = REQUIRED:RUBBLE Sound:BuildingSink
End
// *** AUTO RESOLVE DATA ***
; When fighting an auto-resolve battle, a World Map castle actually becomes this unit
AutoResolveUnitType = AutoResolveUnit_Fortress
AutoResolveBody = AutoResolve_ElvenFortressBody
AutoResolveArmor
Armor = AutoResolve_ElvenFortressArmor
End
AutoResolveWeapon
Weapon = AutoResolve_ElvenFortressWeapon
End
;// *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = STRUCTURE SELECTABLE IMMOBILE BASE_FOUNDATION MP_COUNT_FOR_VICTORY BASE_SITE CAN_SEE_THROUGH_STRUCTURE LIVING_WORLD_BUILDING_MIRROR
//We can now take damage and die but only during construction. The castle system will make us invulnerable when construction completes.
Body = StructureBody ModuleTag_05
MaxHealth = ELVEN_FORTRESS_HEALTH
End
Behavior = CastleBehavior ModuleTag_castle
CastleToUnpackForFaction = Elves Fortress_Hobbit
CastleToUnpackForFaction = Dwarves Fortress_Hobbit
CastleToUnpackForFaction = Men Fortress_Hobbit
CastleToUnpackForFaction = Wild Fortress_Hobbit
CastleToUnpackForFaction = Isengard Fortress_Hobbit
CastleToUnpackForFaction = Mordor Fortress_Hobbit
CastleToUnpackForFaction = Angmar Fortress_Hobbit
CastleToUnpackForFaction = Arnor Fortress_Hobbit
CastleToUnpackForFaction = Hobbit Fortress_Hobbit
;//Anything that does not fit this filter will be given to the neutral player, so the template can have rocks and props.
FilterValidOwnedEntries = ANY +STRUCTURE +WALK_ON_TOP_OF_WALL +BASE_FOUNDATION +TACTICAL_MARKER
MaxCastleRadius = 130.0
InstantUnpack = Yes
KeepDeathKillsEverything = Yes
EvaEnemyCastleSightedEvent = EnemyFortressSighted
End
Behavior = StructureCollapseUpdate ModuleTag_06
MinCollapseDelay = 000
MaxCollapseDelay = 000
CollapseDamping = .5
MaxShudder = 0.6
MinBurstDelay = 250
MaxBurstDelay = 800
BigBurstFrequency = 4
FXList = INITIAL FX_FortressCollapse
;FXList = ALMOST_FINAL FX_FortressCollapse
DestroyObjectWhenDone = Yes
CollapseHeight = 120
End
Behavior = GettingBuiltBehavior ModuleTag_GettingBuiltBehavior
WorkerName = ElvenWorkerNoSelect
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
End
Behavior = AIUpdateInterface ModuleTag_AI
AILuaEventsList = FortressFunctions
End
//Main
Geometry = CYLINDER
GeometryName = Geom_Orig
GeometryMajorRadius = 85.0
GeometryHeight = 55.0
//Plot locations
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:66.49 Y:-66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:0 Y:-94.0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-66.49 Y:-66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-94.0 Y:0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-66.49 Y:66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:0 Y:94.0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:66.49 Y:66.49 Z:0
//Ramp (So units can attack it when the moat is in place)
AdditionalGeometry = BOX
GeometryMajorRadius = 12.0
GeometryMinorRadius = 16.0
GeometryHeight = 22.0
GeometryOffset = X:85 Y:0 Z:0
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
End
;// This is the magic thing in the .bse file that tells how to center the base layout compared to the game position of the fortress
Object HobbitFortressCenterGeneric
SelectPortrait = BPCGreenDragon
Draw = W3DScriptedModelDraw ModuleTag_01
DefaultModelConditionState
Model = None
End
ModelConditionState = WORLD_BUILDER
Model = NBasePin
End
End
Side = Hobbit
EditorSorting = STRUCTURE
KindOf = IMMOBILE BASE_FOUNDATION CASTLE_CENTER
Behavior = CastleBehavior ModuleTag_castle
;//Anything that does not fit this filter will be given to the neutral player, so the template can have rocks and props.
FilterValidOwnedEntries = ANY +STRUCTURE +WALK_ON_TOP_OF_WALL +BASE_FOUNDATION +TACTICAL_MARKER
End
End
;//------------------------------------------------------------------------------
;// These are the four corner buildplots. Difference is just the BuildVariation flag they give the Expansion.
Object HobbitFortressExpansionPadCorner
SelectPortrait = BPEFortress_BuildPlot
;// *** ART Parameters ***
Draw = W3DFloorDraw DrawFloorBase
ModelName = EBFoundation
End
Draw = W3DScriptedModelDraw ModuleTag_DrawMain
DefaultModelConditionState
Model = WBFoundationP
End
;//Remove the buildplot when it's been constructed on
ModelConditionState = CONSTRUCTION_COMPLETE
Model = None
End
End
;//PlacementViewAngle = 0
;// ***DESIGN parameters ***
DisplayName = OBJECT:ElvenBuildingFoundation
Side = Hobbit
EditorSorting = STRUCTURE
ThreatLevel = 1.0
BuildCost = 1
BuildTime = 5.0 ;// in seconds
VisionRange = 0.0 ;// Shroud clearing distance
ShroudClearingRange = 0
CommandSet = ElvenFortressExpansionPadCornerCommandSet
;// *** AUDIO Parameters ***
VoiceSelect = Gui_PlotSelect2 ;MenFortressSelect
;// *** ENGINEERING Parameters ***
KindOf = STRUCTURE SELECTABLE IMMOBILE BASE_FOUNDATION UNATTACKABLE MP_COUNT_FOR_VICTORY NO_COLLIDE DO_NOT_CLASSIFY EXPANSION_PAD
Behavior = FoundationAIUpdate ModuleTag_foundationAI
BuildVariation = 2 ;// Will give BUILD_VARIATION_TWO to anything built on it
End
Behavior = CastleMemberBehavior ModuleTag_CMB
End
Body = ImmortalBody ModuleTag_05
MaxHealth = 15000.0
End
Geometry = CYLINDER
GeometryMajorRadius = 15.0
GeometryMinorRadius = 15.0
GeometryHeight = 0.8
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End
;// And these are the 3 on the sides.
ChildObject ElvenFortressExpansionPadSide ElvenFortressExpansionPadCorner
; Draw = W3DScriptedModelDraw ModuleTag_DrawMain
; DefaultModelConditionState
; Model = EBFoundation
; End
; End
CommandSet = ElvenFortressExpansionPadSideCommandSet
Behavior = FoundationAIUpdate ModuleTag_foundationAI
BuildVariation = 1 ;// Will give BUILD_VARIATION_ONE to anything built on it
End
End
;//------------------------------------------------------------------------------
;// Elven Fortress Citadel
;// This is the center part of the full Fortress. This plus the buildplots make up the full fortress
Object HobbitCitadel
SelectPortrait = BPEFortress
Draw = W3DScriptedModelDraw ModuleTag_Draw
ExtraPublicBone = ARROW_01
ExtraPublicBone = ARROW_02
ExtraPublicBone = ARROW_03
ExtraPublicBone = ARROW_04
ExtraPublicBone = ARROW_05
ExtraPublicBone = ARROW_06
ExtraPublicBone = ARROW_07
ExtraPublicBone = ARROW_08
ExtraPublicBone = ARROW_09
ExtraPublicBone = ARROW_10
ExtraPublicBone = ARROW_11
ExtraPublicBone = ARROW_12
ExtraPublicBone = ARROW_13
ExtraPublicBone = ARROW_14
ExtraPublicBone = ARROW_15
ExtraPublicBone = ARROW_16
ExtraPublicBone = ARROW_17
ExtraPublicBone = ARROW_18
ExtraPublicBone = ARROW_19
ExtraPublicBone = ARROW_20
ExtraPublicBone = ARROW_21
ExtraPublicBone = ARROW_22
ExtraPublicBone = ARROW_23
ExtraPublicBone = ARROW_24
ExtraPublicBone = ARROW_25
ExtraPublicBone = ARROW_26
ExtraPublicBone = ARROW_27
ExtraPublicBone = ARROW_28
ExtraPublicBone = ARROW_29
ExtraPublicBone = ARROW_30
ExtraPublicBone = ARROW_31
ExtraPublicBone = ARROW_32
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = SBGrnDrg
WeaponLaunchBone = PRIMARY ARROW_
End
ModelConditionState = DAMAGED
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = DAMAGED
Animation = Fortress_ReallyDamaged
AnimationName = WBFortress_D2S.WBFortress_D2A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressDamaged
End
ModelConditionState = REALLYDAMAGED
Model = EBFortress_D2
End
AnimationState = REALLYDAMAGED
Animation = Fortress_ReallyDamaged
AnimationName = EBFortress_D2S.EBFortress_D2A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressReallyDamaged
End
ModelConditionState = RUBBLE
Model = EBFortress_D3
End
AnimationState = RUBBLE
Animation = Fortress_Rubble
AnimationName = EBFortress_D3S.EBFortress_D3A
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressCollapse
End
ModelConditionState = POST_RUBBLE
Model = None
ParticleSysBone NONE SmokeBuildingMediumRubble
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
ParticleSysBone NONE SmokeBuildingMediumRubble
End
AnimationState = POST_COLLAPSE
End
//---Vines---
ModelConditionState = SNOW UPGRADE_NUMENOR_STONEWORK
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_U_Snow.tga
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_U.tga
End
//---Snow---
ModelConditionState = SNOW
Model = SBGrnDrg
Texture = EBFortress.tga EBFortress_snow.tga
Texture = CBHarlindonruins.tga CBHarlindonruins_S.tga
End
End
Draw = W3DScriptedModelDraw ModuleTag_Draw_HCBanner
OkToChangeModelColor = Yes
DefaultModelConditionState
Model = EBHCFortress
End
MultiPlayerOnly = Yes
End
//Eagle's Nest
Draw = W3DScriptedModelDraw ModuleTag_EaglesNestDraw
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//Build up
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 DAMAGED
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 REALLYDAMAGED
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2 SNOW
Model = EBFENest_A
Texture = EBFortress.tga EBFortress_snow.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_2
Model = EBFENest_A
End
AnimationState = UPGRADE_FORTRESS_MONUMENT USER_2
Animation = RiseUp
AnimationName = EBFENest_ASKL.EBFENest_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 5.0 5.0
End
End
//Damage States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT DAMAGED
Model = EBFENest
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT REALLYDAMAGED
Model = EBFENest_D2
End
AnimationState = UPGRADE_FORTRESS_MONUMENT REALLYDAMAGED
Animation = EBFENest_ReallyDamaged
AnimationName = EBFENest_D2SKL.EBFENest_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT RUBBLE
Model = EBFENest_D3
End
AnimationState = UPGRADE_FORTRESS_MONUMENT RUBBLE
Animation = EBFENest_Rubble
AnimationName = EBFENest_D3SKL.EBFENest_D3AN
AnimationMode = ONCE
End
End
// snow state
ModelConditionState = SNOW UPGRADE_FORTRESS_MONUMENT
Model = EBFENest
Texture = EBFortress.tga EBFortress_snow.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT
Model = EBFENest
End
End
;//Eagles Nest Eagle Model
Draw = W3DScriptedModelDraw ModuleTag_DrawEagle
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
IdleAnimationState
StateName = NoEagle
; --- below worked but a little too much delay ---
;
; BeginScript
; Prev = CurDrawablePrevAnimationState()
; if Prev == "BeingConstructed" then
; ; Don't play completed sound when canceling build-in-progress or when
; ; destroyed halfway
; if not CurDrawableModelcondition( "DYING" ) then
; CurDrawablePlaySound("UpgradeElfFortressEaglesNest")
; end
; end
; EndScript
End
//Build up
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2 DAMAGED
Model = EBFE_A
Texture = EBFortress.tga EBFortress_D.tga
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2 REALLYDAMAGED
Model = EBFE_A
Texture = EBFortress.tga EBFortress_D.tga
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2
Model = EBFE_A
ParticleSysBone = NONE EaglesNestbuildleaves
ParticleSysBone = NONE EaglesNestbuilddust
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE USER_2
Animation = RiseUp
AnimationName = EBFE_ASKL.EBFE_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 5.0 5.0
End
StateName = BeingConstructed
End
//Damage States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE DAMAGED
Model = EBFE
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE REALLYDAMAGED
Model = EBFE_D2
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE REALLYDAMAGED
Animation = EBFENest_ReallyDamaged
AnimationName = EBFE_D2SKL.EBFE_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE RUBBLE
Model = EBFE_D3
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE RUBBLE
Animation = EBFENest_Rubble
AnimationName = EBFE_D3SKL.EBFE_D3AN
AnimationMode = ONCE
End
End
//Normal States
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_AVAILABLE
Model = EBFE
End
ModelConditionState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
Model = None
End
AnimationState = UPGRADE_FORTRESS_MONUMENT FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
StateName = EagleGone
End
End
//Mystic Fountains
Draw = W3DScriptedModelDraw ModuleTag_DrawMysticFountains
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//Build Up
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3 DAMAGED
Model = EBFMFount_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3 REALLYDAMAGED
Model = EBFMFount_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 USER_3
Model = EBFMFount_A
End
AnimationState = FORTRESS_IMPROVEMENT_2 USER_3
Animation = UpAndStill
AnimationName = EBFMFount_ASKL.EBFMFount_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 30.0 30.0
End
End
//Damage States
ModelConditionState = FORTRESS_IMPROVEMENT_2 DAMAGED
Model = EBFMFount
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 REALLYDAMAGED
Model = EBFMFount_D2
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = FORTRESS_IMPROVEMENT_2 REALLYDAMAGED
Animation = MysticFountains_ReallyDamaged
AnimationName = EBFMFount_D2SK.EBFMFount_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_2 RUBBLE
Model = EBFMFount_D3
Texture = EBFortress.tga EBFortress_D.tga
End
AnimationState = FORTRESS_IMPROVEMENT_2 RUBBLE
Animation = MysticFountains_ReallyDamaged
AnimationName = EBFMFount_D3SK.EBFMFount_D3AN
AnimationMode = ONCE
End
End
//Normal
ModelConditionState = FORTRESS_IMPROVEMENT_2
Model = EBFMFount
End
End
//Enchanted Anvil
Draw = W3DScriptedModelDraw ModuleTag_DrawEnchantedAnvil
OkToChangeModelColor = Yes
StaticModelLODMode = Yes ;// Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
//---Build up Damaged---
ModelConditionState = FORTRESS_IMPROVEMENT_3 DAMAGED USER_1
Model = EBFAnvil_A
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED USER_1
Model = EBFAnvil_A
Texture = EBFortress.tga EBFortress_D.tga
End
//Build up
ModelConditionState = FORTRESS_IMPROVEMENT_3 USER_1
Model = EBFAnvil_A
End
AnimationState = FORTRESS_IMPROVEMENT_3 USER_1
Animation = RiseUp
AnimationName = EBFAnvil_ASKL.EBFAnvil_ABLD
AnimationMode = ONCE
AnimationSpeedFactorRange = 7.0 7.0
End
End
//---Damaged---
ModelConditionState = FORTRESS_IMPROVEMENT_3 DAMAGED
Model = EBFAnvil
Texture = EBFortress.tga EBFortress_D.tga
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED
Model = EBFAnvil_D2
End
AnimationState = FORTRESS_IMPROVEMENT_3 REALLYDAMAGED
Animation = EBFAnvil_ReallyDamaged
AnimationName = EBFAnvil_D2SKL.EBFAnvil_D2AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 RUBBLE
Model = EBFAnvil_D3
End
AnimationState = FORTRESS_IMPROVEMENT_3 RUBBLE
Animation = EBFAnvil_ReallyDamaged
AnimationName = EBFAnvil_D3SKL.EBFAnvil_D3AN
AnimationMode = ONCE
End
End
ModelConditionState = FORTRESS_IMPROVEMENT_3
Model = EBFAnvil
End
End
Draw = W3DScriptedModelDraw ModuleTag_DrawAnvilGuy
AttachToBoneInAnotherModule = PositionBone
DefaultModelConditionState
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 USER_1
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3 RUBBLE
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_3
Model = EBFAnvlGuy_SKN
End
AnimationState = FORTRESS_IMPROVEMENT_3
Animation = IDLA
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLA
AnimationMode = ONCE
AnimationPriority = 20
End
Animation = IDLB
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLB
AnimationMode = ONCE
AnimationPriority = 1
End
Animation = IDLC
AnimationName = EBFAnvlGuy_SKL.EBFAnvlGuy_IDLC
AnimationMode = ONCE
AnimationPriority = 1
End
Flags = RESTART_ANIM_WHEN_COMPLETE
End
End
//Blessed Mist
Draw = W3DScriptedModelDraw ModuleTag_DrawMist
DefaultModelConditionState
Model = None
End
ModelConditionState = FORTRESS_IMPROVEMENT_8
Model = None
ParticleSysBone = NONE EnshroudingMist
End
End
;// Draw = W3DFloorDraw ModuleTag_DrawFloor
;// StaticModelLODMode = Yes ;// THIS NEEDS TO BE COMMENTED OUT WHEN ENGINEERING ENABLES LOD'S IN THE FLOOR DRAW
;// ModelName = GBWorkshop_Bib
;// End
PlacementViewAngle = 0
;// ***DESIGN parameters ***
DisplayName = OBJECT:ElvenFortress
Description = OBJECT:ElvenFortressDescription
Side = Hobbit
EditorSorting = STRUCTURE
ThreatLevel = 1.0
CommandPointBonus = GENERIC_FORTRESS_COMMAND_POINT_BONUS
CommandSet = HobbitFortressCommandSet
BuildCost = ELVEN_FORTRESS_BUILDCOST
BuildTime = ELVEN_FORTRESS_BUILDTIME
BountyValue = ELVEN_FORTRESS_BOUNTY_VALUE
VisionRange = ELVEN_FORTRESS_VISION_RANGE ;// Shroud clearing distance
ShroudClearingRange = ELVEN_FORTRESS_SHROUD_CLEAR
WeaponSet
Weapon = PRIMARY GoodStructureBow
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
ArmorSet
Conditions = None
Armor = FortressArmor
;DamageFX = StructureDamageFXNoShake
End
;// *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
EvaEventDieOwner = EvaFortressDie
VoiceSelect = ElfFortressSelect ;GondorWorkshopSelect
VoiceSelectUnderConstruction = BuildingGoodVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingBigConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingBigConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior
MaxUpdateRangeCap = 800
AnimationSound = Sound:UpgradeElfFortressEaglesNest Animation:EBFE_ASKL.EBFE_ABLD Frames:1250
End
CampnessValue = CAMPNESS_FORTRESS
;// *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD COMMANDCENTER VITAL_FOR_BASE_SURVIVAL STRUCTURE IMMOBILE CASTLE_KEEP MP_COUNT_FOR_VICTORY SELECTABLE FS_FACTORY AUTO_RALLYPOINT MADE_OF_WOOD SCORE DOZER_FACTORY
Behavior = GettingBuiltBehavior GetBuiltBehaviorTag
WorkerName = ElvenWorkerNoSelect
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
End
Behavior = CastleMemberBehavior ModuleTag_CMB
End
Body = StructureBody ModuleTag_05
MaxHealth = ELVEN_FORTRESS_HEALTH
MaxHealthDamaged = ELVEN_FORTRESS_HEALTH_DAMAGED
MaxHealthReallyDamaged = ELVEN_FORTRESS_HEALTH_REALLY_DAMAGED
; DamageCreationList = OCL_BuildingDamageList01 CATAPULT_ROCK
; DamageCreationList = OCL_GBStable_Chunk1 CATAPULT_ROCK FRONT_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk2 CATAPULT_ROCK RIGHT_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk3 CATAPULT_ROCK BACK_DESTROYED
; DamageCreationList = OCL_GBStable_Chunk4 CATAPULT_ROCK LEFT_DESTROYED
End
Behavior = BuildingBehavior BuildingModuleTag
; NightWindowName = GBWORKSHOPN
; FireWindowName = WINDOW_F01
; GlowWindowName = WINDOW_G01
; FireName = FIRE01
End
Behavior = StructureCollapseUpdate ModuleTag_06
MinCollapseDelay = 000
MaxCollapseDelay = 000
CollapseDamping = .5
MaxShudder = 0.6
MinBurstDelay = 250
MaxBurstDelay = 800
BigBurstFrequency = 4
FXList = INITIAL FX_FortressCollapse
;FXList = ALMOST_FINAL FX_FortressCollapse
DestroyObjectWhenDone = Yes
CollapseHeight = 120
End
Behavior = ProductionUpdate ProductionUpdateModuleTag
ProductionModifier
RequiredUpgrade = Upgrade_ElvenFortressMysticFountains
TimeMultiplier = 0.75
HeroRevive = Yes
End
End
Behavior = QueueProductionExitUpdate QueueProductionModuleTag
UnitCreatePoint = X:41.0 Y:0.00 Z:0.0
NaturalRallyPoint = X:109.0 Y:0.00 Z:0.0
//AllowAirborneCreation = Yes
ExitDelay = 50
End
//Eagles Nest Behaviors
Behavior = GrantUpgradeCreate ModuleTag_ActLikeAnOldUpgrade
UpgradeToGrant = Upgrade_EaglesNestEagleButtonEnable
GiveOnBuildComplete = Yes ;// The ExemptStatus UnderConstruction hack doesn't work on foundation buildings.
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheEaglesNest
TriggeredBy = Upgrade_ElvenFortressEaglesNest
AddConditionFlags = UPGRADE_FORTRESS_MONUMENT
AddTempConditionFlag = ModelConditionState:USER_2 //For buildup
TempConditionTime = 11.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = AudioLoopUpgrade ModuleTag_EaglesNestBuildLoop
; Play a "build loop" while the Eagle's Nest is building up
TriggeredBy = Upgrade_ElvenFortressEaglesNest
;ConflictsWith = Upgrade_PosternGate Upgrade_WallBanner
SoundToPlay = BuildingBigConstructionLoop
KillOnDeath = Yes
KillAfterMS = 9000 ; Should match the length of the build-up animation [Or a little shorter since sounds take a little while to die]
End
Behavior = GeometryUpgrade TowerGeom
TriggeredBy = Upgrade_ElvenFortressEaglesNest
ShowGeometry = HighTowerGeom
End
Behavior = AudioLoopUpgrade ModuleTag_EagleCreated
; Play a "build loop" while the Eagle's Nest is building up
TriggeredBy = Upgrade_HasEaglesNestEagle
SoundToPlay = ElvenFortressEagleCreated
End
Behavior = ObjectCreationUpgrade MaketheEagle
TriggeredBy = Upgrade_HasEaglesNestEagle
Delay = 0.0
RemoveUpgrade = Upgrade_EaglesNestEagleButtonEnable
ThingToSpawn = ElvenFortressEagle
//Offset = X:90.0 Y:0.0 Z:120.0
FadeInTime = 600
UseBuildingProduction = Yes
End
Behavior = SlaveWatcherBehavior WatchTheEagle
RemoveUpgrade = Upgrade_HasEaglesNestEagle ;//when our slave dies, remove this upgrade, so we can get the upgrade again.
GrantUpgrade = Upgrade_EaglesNestEagleButtonEnable ;//when our slave dies, enable the button that allows us to buy a new one
LetSlaveLive = Yes
End
Behavior = ModelConditionUpgrade ModuleTag_AnimateEagle
TriggeredBy = Upgrade_EaglesNestEagleButtonEnable
AddConditionFlags = FORTRESS_MONUMENT_CREATURE_AVAILABLE
RemoveConditionFlags = FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
Permanent = Yes
End
Behavior = ModelConditionUpgrade ModuleTag_HideEagle
TriggeredBy = Upgrade_HasEaglesNestEagle
AddConditionFlags = FORTRESS_MONUMENT_CREATURE_UNAVAILABLE
RemoveConditionFlags = FORTRESS_MONUMENT_CREATURE_AVAILABLE
Permanent = Yes
End
//This behavior allows me to queue this unit up for the citadel to build. Otherwise I would need a hidden command button.
//The production behavior checks to see if there is actually a commandset button setup to build this unit. This bypasses that.
Behavior = SpawnUnitBehavior ModuleTag_allowMeToBuildDrakeFromCitadel
UnitName = ElvenFortressEagle
End
//End Eagles Nest Behaviors
;//Encasing Vines improvement
Behavior = CastleUpgrade ModuleTag_PassOutEncasingVinesUpgrade
TriggeredBy = Upgrade_ElvenFortressEncasingVinesTrigger
Upgrade = Upgrade_ElvenFortressEncasingVines
WallUpgradeRadius = ELVEN_FORTRESS_WALL_EFFECTIVE_RADIUS
End
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_ElvenFortressEncasingVines
AttributeModifier = EncasingVines_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheVines
TriggeredBy = Upgrade_ElvenFortressEncasingVines
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
;//Mystic Fountains improvement
Behavior = ModelConditionUpgrade ModuleTag_ShowMysticFountains
TriggeredBy = Upgrade_ElvenFortressMysticFountains
AddConditionFlags = FORTRESS_IMPROVEMENT_2
AddTempConditionFlag = ModelConditionState:USER_3 //For buildup
TempConditionTime = 10.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = StatusBitsUpgrade ModuleTag_FakeOutMysticFountains ;// Visual only upgrade needs a fake out to react to it.
TriggeredBy = Upgrade_ElvenFortressMysticFountains
End
Behavior = PassiveAreaEffectBehavior ModuleTag_MysticFountainsHealing
UpgradeRequired = Upgrade_ElvenFortressMysticFountains
EffectRadius = 200 // please update the decal size in experience lvl INI if you change this... the value there is about 2.2x the value here
PingDelay = 2000;msec
HealPercentPerSecond = 3%
AllowFilter = ANY +INFANTRY +CAVALRY +HERO -MACHINE +MONSTER -IMMOBILE +DOZER
NonStackable = Yes
HealFX = FX_SpellHealUnitHealBuff
End
Behavior = BannerCarrierUpdate BannerCarrierUpdateModuleTag
UpgradeRequired = Upgrade_ElvenFortressMysticFountains
IdleSpawnRate = 5000 // spawn a new member every n seconds when idle (in miliseconds)
UnitSpawnFX = FX_BannerCarrierSpawnUnit // name of particle FX to use when the BannerCarrier spawns a new unit
// This well object acts like a banner carrier except it spawns unit on nearby hordes instead of itself.
ReplenishNearbyHorde = Yes
ScanHordeDistance = 200
End
;//Enchanted Anvil improvement
Behavior = CostModifierUpgrade ModuleTag_EnchantedAnvilUpgrades
LabelForPalantirString = GUI:UPGRADE_DISCOUNT
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
UpgradeDiscount = Yes
ApplyToTheseUpgrades = Upgrade_ElvenSilverthornArrows Upgrade_ElvenForgedBlades Upgrade_ElvenHeavyArmor Upgrade_ElvenBasicTraining
Percentage = -10%
Percentage = -20%
Percentage = -25%
Percentage = -30%
Percentage = -35%
End
Behavior = ModelConditionUpgrade ModuleTag_ShowTheAnvil
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
AddConditionFlags = FORTRESS_IMPROVEMENT_3
AddTempConditionFlag = ModelConditionState:USER_1 //For buildup
TempConditionTime = 5.0 //try to match buildup anim time
Permanent = Yes
End
Behavior = AudioLoopUpgrade ModuleTag_EnchantedAnvilBuildLoop
TriggeredBy = Upgrade_ElvenFortressEnchantedAnvil
;ConflictsWith = Upgrade_PosternGate Upgrade_WallBanner
SoundToPlay = BuildingConstructionLoop
KillOnDeath = Yes
KillAfterMS = 3500 ; Should match the length of the build-up animation [Or a little shorter since sounds take a little while to die]
End
;//Blessed Mist improvement
Behavior = InvisibilityUpdate ModuleTag_BroadcastCamouflage
InvisibilityNugget
InvisibilityType = CAMOUFLAGE
DetectionRange = ELVEN_MIST_CAMOUFLAGE_DETECTION_RANGE
End
UpdatePeriod = 1000
Broadcast = Yes
BroadcastRange = 300
BroadcastObjectFilter = ELVEN_MIST_OBJECT_FILTER
StartsActive = Yes
RequiredUpgrades = Upgrade_ElvenFortressBlessedMist
End
Behavior = ModelConditionUpgrade ModuleTag_AnimateNestDrake
TriggeredBy = Upgrade_ElvenFortressBlessedMist
AddConditionFlags = FORTRESS_IMPROVEMENT_8
Permanent = Yes
End
;//Crystal Moat
Behavior = ObjectCreationUpgrade CreateTheMoat
TriggeredBy = Upgrade_ElvenFortressCrystalMoat
Delay = 0.0
ThingToSpawn = ElvenFortressCrystalMoat
FadeInTime = 600
End
Behavior = CitadelSlaughterHordeContain ModuleTag_SlaughterMe
PassengerFilter = GENERIC_FACTION_SLAUGHTERABLE
ObjectStatusOfContained = UNSELECTABLE ENCLOSED
CashBackPercent = 200%
ContainMax = 99;// give it a huge capacity, just in case player sends his whole army in at once
AllowEnemiesInside = No
AllowAlliesInside = No
AllowNeutralInside = No
AllowOwnPlayerInsideOverride = Yes
EnterSound = GUI_RingReturned
EntryOffset = X:129.0 Y:5.0 Z:0.0
EntryPosition = X:100.0 Y:0.0 Z:0.0 // entry position needs to be offset from the root transform, otherwise fortress obscures point.
ExitOffset = X:129.0 Y:0.0 Z:0.0
StatusForRingEntry = HOLDING_THE_RING
UpgradeForRingEntry = Upgrade_RingHero Upgrade_FortressRingHero
ObjectToDestroyForRingEntry = NONE +TheDroppedRing
FXForRingEntry = FX_OneRingFlare
End
Behavior = AIUpdateInterface ModuleTag_AI
AILuaEventsList = FortressFunctions
AutoAcquireEnemiesWhenIdle = Yes
MoodAttackCheckRate = 250
End
;//Money Maker
Behavior = AutoDepositUpdate AutoDepositModuleTag
DepositTiming = GENERIC_KEEP_MONEY_TIME
DepositAmount = GENERIC_KEEP_MONEY_AMOUNT
InitialCaptureBonus = 0 ;// no initial bonus
End
Behavior = TerrainResourceBehavior ModuleTag_NewMoneyDeadSpot
Radius = GENERIC_KEEP_MONEY_RANGE ;// How far we try to claim ground
MaxIncome = 0 ;// If we were to get all we wanted, how much we would earn. Linear slope to 0 at 0% claim
IncomeInterval = 999999 ;// How often (in msec) we give that much money
HighPriority = Yes ;// A high priority claim gets to pretend it was there first.
End
#include "..\..\..\FortressRingFunc.inc"
//Main
Geometry = CYLINDER
GeometryName = Geom_Orig
GeometryMajorRadius = 50.0
GeometryHeight = 55.0
GeometryOffset = X:0 Y:0 Z:0
//Towers
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:25 Y:25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:-25 Y:25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:-25 Y:-25 Z:0
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 12.0
GeometryMinorRadius = 10.0
GeometryHeight = 120.0
GeometryOffset = X:25 Y:-25 Z:0
//Front
AdditionalGeometry = BOX
GeometryName = Geom_V2
GeometryMajorRadius = 15.0
GeometryMinorRadius = 20.0
GeometryHeight = 80.0
GeometryOffset = X:60 Y:0 Z:0
//Ramp (So units can attack it when the moat is in place)
AdditionalGeometry = BOX
GeometryMajorRadius = 12.0
GeometryMinorRadius = 16.0
GeometryHeight = 22.0
GeometryOffset = X:85 Y:0 Z:0
AdditionalGeometry = BOX
GeometryName = HighTowerGeom
GeometryMajorRadius = 12
GeometryMinorRadius = 12
GeometryHeight = 150
GeometryOffset = X:0 Y:0 Z:0
GeometryUsedForHealthBox = No
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
GeometryContactPoint = X:-50.348 Y:26.9 Z:0 Repair
GeometryContactPoint = X:47.546 Y:-38.677 Z:0 Repair
GeometryContactPoint = X:47.546 Y:36.435 Z:0
GeometryContactPoint = X:-32.763 Y:-46.121 Z:0
;GeometryContactPoint = X:26.753 Y:26.753 Z:67.933 Swoop
GeometryContactPoint = X:0 Y:0 Z:180 Swoop
End
;//------------------------------------------------------------------------------
;//Elven Fortress
;// This is the one object that you would place on a map and that the porter builds.
;// It unpacks in to the citadel and the buildplots. It's an old CampFlag.
Object HobbitFortress
SelectPortrait = BPCGreenDragon
Draw = W3DScriptedModelDraw ModuleTag_01
OkToChangeModelColor = Yes
StaticModelLODMode = Yes // Will append M or L to the skin name depending on GameLOD
DefaultModelConditionState
Model = None
End
;dummy idle animation state for audio
IdleAnimationState
;StateName = STATE_Idle
End
;//Need this since the default condition is none
ModelConditionState = WORLD_BUILDER
Model = SBGrnDrg
End
;//Phantom structure when placing a new building to be build
ModelConditionState = BUILD_PLACEMENT_CURSOR
Model = None //EBFortress
End
;//Structure that stays where you will be building until the porter reaches the place to start building.
ModelConditionState = PHANTOM_STRUCTURE
Model = SBGrnDrg
End
ModelConditionState = RUBBLE
Model = SBGrnDrg_D3
End
AnimationState = RUBBLE
Animation = Fortress_Rubble
AnimationName = SBGrnDrg_D3.SBGrnDrg_D3
AnimationMode = ONCE
End
EnteringStateFX = FX_FortressCollapse
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED SNOW
Model = EBFortress_A
Texture = EBFortress.tga EBFortress_U_Snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED
Model = EBFortress_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED
Animation = UpAndStill
AnimationName = EBFortress_ASK.EBFortress_ABL
AnimationMode = MANUAL
End
ParticleSysBone = NONE BuildingContructDustCastles FollowBone:YES
ParticleSysBone = NONE FortressElven FollowBone:YES
StateName = BeingConstructed
BeginScript
CurDrawablePlaySound("GondorBarracksBeginConstruction")
EndScript
End
End
ArmorSet
Conditions = None
Armor = FortressArmor
;//DamageFX = StructureDamageFXNoShake
End
Side = Hobbit
EditorSorting = STRUCTURE
PlacementViewAngle = -45 ;// A -90 makes the door of the base face natural south. 0 would have it to the East.
BuildCost = ELVEN_FORTRESS_BUILDCOST
BuildTime = ELVEN_FORTRESS_BUILDTIME //0
DisplayName = OBJECT:ElvenFortress
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceFullyCreated = EVA:FortressComplete-Builder-Elf
VoiceSelect = ElfFortressSelect
VoiceSelectUnderConstruction = BuildingGoodVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingBigConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingBigConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
ModelCondition = REQUIRED:RUBBLE Sound:BuildingSink
End
// *** AUTO RESOLVE DATA ***
; When fighting an auto-resolve battle, a World Map castle actually becomes this unit
AutoResolveUnitType = AutoResolveUnit_Fortress
AutoResolveBody = AutoResolve_ElvenFortressBody
AutoResolveArmor
Armor = AutoResolve_ElvenFortressArmor
End
AutoResolveWeapon
Weapon = AutoResolve_ElvenFortressWeapon
End
;// *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = STRUCTURE SELECTABLE IMMOBILE BASE_FOUNDATION MP_COUNT_FOR_VICTORY BASE_SITE CAN_SEE_THROUGH_STRUCTURE LIVING_WORLD_BUILDING_MIRROR
//We can now take damage and die but only during construction. The castle system will make us invulnerable when construction completes.
Body = StructureBody ModuleTag_05
MaxHealth = ELVEN_FORTRESS_HEALTH
End
Behavior = CastleBehavior ModuleTag_castle
CastleToUnpackForFaction = Elves Fortress_Hobbit
CastleToUnpackForFaction = Dwarves Fortress_Hobbit
CastleToUnpackForFaction = Men Fortress_Hobbit
CastleToUnpackForFaction = Wild Fortress_Hobbit
CastleToUnpackForFaction = Isengard Fortress_Hobbit
CastleToUnpackForFaction = Mordor Fortress_Hobbit
CastleToUnpackForFaction = Angmar Fortress_Hobbit
CastleToUnpackForFaction = Arnor Fortress_Hobbit
CastleToUnpackForFaction = Hobbit Fortress_Hobbit
;//Anything that does not fit this filter will be given to the neutral player, so the template can have rocks and props.
FilterValidOwnedEntries = ANY +STRUCTURE +WALK_ON_TOP_OF_WALL +BASE_FOUNDATION +TACTICAL_MARKER
MaxCastleRadius = 130.0
InstantUnpack = Yes
KeepDeathKillsEverything = Yes
EvaEnemyCastleSightedEvent = EnemyFortressSighted
End
Behavior = StructureCollapseUpdate ModuleTag_06
MinCollapseDelay = 000
MaxCollapseDelay = 000
CollapseDamping = .5
MaxShudder = 0.6
MinBurstDelay = 250
MaxBurstDelay = 800
BigBurstFrequency = 4
FXList = INITIAL FX_FortressCollapse
;FXList = ALMOST_FINAL FX_FortressCollapse
DestroyObjectWhenDone = Yes
CollapseHeight = 120
End
Behavior = GettingBuiltBehavior ModuleTag_GettingBuiltBehavior
WorkerName = ElvenWorkerNoSelect
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
End
Behavior = AIUpdateInterface ModuleTag_AI
AILuaEventsList = FortressFunctions
End
//Main
Geometry = CYLINDER
GeometryName = Geom_Orig
GeometryMajorRadius = 85.0
GeometryHeight = 55.0
//Plot locations
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:66.49 Y:-66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:0 Y:-94.0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-66.49 Y:-66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-94.0 Y:0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:-66.49 Y:66.49 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:0 Y:94.0 Z:0
AdditionalGeometry = BOX
GeometryName = Plots
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 0.8
GeometryOffset = X:66.49 Y:66.49 Z:0
//Ramp (So units can attack it when the moat is in place)
AdditionalGeometry = BOX
GeometryMajorRadius = 12.0
GeometryMinorRadius = 16.0
GeometryHeight = 22.0
GeometryOffset = X:85 Y:0 Z:0
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
End
Edited by knight errant, 14 June 2017 - 04:53 PM.