When regular wall sections are destroyed in BFME2 they leave a pile of rubble which, when selected, are able to be rebuilt exactly as they were for 100. Regarding wall hubs when one is destroyed in the game it simply disappears and you have to build another one in its place manually (wall towers and other upgrades don't allow for the rebuild option either). The problem is sometimes the new hub won't fit in the existing gap or it won't prevent units from passing through.
A====1====B
|
|
|
2
|
|
|
C
Lets say walltower 1 is destroyed. No biggy, we'll just drag a new wall section in between hubs A and B to replace the gap with fresh wall. Thats not a big deal. But when hub A is destroyed there's no way to plug the gap and the only way to get everything the way it was before is by building another hub on a wall section somewhere between 2 and where A once was and making a new wall over top of the original. And gradually as more hubs are built and destroyed the problem gets worse and worse. So why not make wall hubs rebuildable? That would definitely address one of the issues with this game. So how do I do it?
Here's the wall hub ini followed by the regular wall ini. Im thinking it has something to do with "KeepSelectableWhenDead = Yes" and the following lines in the regular wall ini but I can't figure out how to use it. If anyone could help me out it would be great.
Hub
Code:
//------------------------------------------------------------------------------
//For the fortress hub... this is for the corners of the fortress
Object IsengardCastleWallHubExpansion
// *** ART Parameters ***
SelectPortrait = BPIFortress_WallHub
Draw = W3DScriptedModelDraw ModuleTag_Draw
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = IBFWHub
End
IdleAnimationState
; Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
; Animation = ReallyDamagedanimation
; AnimationName = GBWallrampart.GBWallrampart
; AnimationMode = LOOP
; End
StateName = STATE_None
End
;------------ New Build Up States coming soon.
ModelConditionState = SNOW AWAITING_CONSTRUCTION
Model = IBFWHub_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = AWAITING_CONSTRUCTION
Model = IBFWHub_A
End
AnimationState = AWAITING_CONSTRUCTION
Animation = IBFWHub_A
AnimationName = IBFWHub_A.IBFWHub_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBFWHub_A
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBFWHub_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBFWHub_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Animation = IBFWHub_A
AnimationName = IBFWHub_A.IBFWHub_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
StateName = BeingConstructed
BeginScript
CurDrawablePlaySound("GondorBarracksBeginConstruction")
EndScript
ParticleSysBone = NONE BuildingContructDustExpB
ParticleSysBone = NONE ExpIsengard
End
;--damaged building
ModelConditionState = DAMAGED
Model = IBFWHub_D1
End
AnimationState = DAMAGED
EnteringStateFX = FX_BuildingDamaged ;FX_HubDamaged
End
ModelConditionState = REALLYDAMAGED
Model = IBFWHub_D2
End
AnimationState = REALLYDAMAGED
Animation = RubbleAnimation
AnimationName = IBFWHub_D2.IBFWHub_D2
AnimationMode = ONCE
End
EnteringStateFX = FX_BuildingReallyDamaged ;FX_HubDamaged
End
ModelConditionState = COLLAPSING
Model = IBFWHub_D3
End
AnimationState = COLLAPSING
Animation = RubbleAnimation
AnimationName = IBFWHub_D3.IBFWHub_D3
AnimationMode = ONCE
End
EnteringStateFX = FX_StructureMediumCollapseNoSound
ParticleSysBone NONE HubDestructionDust
End
ModelConditionState = RUBBLE
Model = None
End
ModelConditionState = POST_RUBBLE
Model = NONE
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
End
AnimationState = POST_COLLAPSE
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = IBFWHub
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW
Model = IBFWHub
Texture = IBFortress.tga IBFortress_Snow.tga
End
End
// Draw = W3DFloorDraw ModuleTag_DrawFloor
// StaticModelLODMode = yes ; Will append M or L to the skin name depending on GameLOD
// ModelName = GBGFWHub_bib
// End
BuildCost = ISENGARD_CASTLE_WALLHUB_BUILDCOST
BuildTime = ISENGARD_CASTLE_WALLHUB_BUILDTIME
VisionRange = ISENGARD_CASTLE_WALLHUB_VISION_RANGE
ShroudClearingRange = ISENGARD_CASTLE_WALLHUB_SHROUD_CLEAR
CommandSet = IsengardCastleWallHubCommandSet
KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE WALL_HUB MADE_OF_STONE NEED_BASE_FOUNDATION
Body = StructureBody ModuleTag_05
MaxHealth = ISENGARD_CASTLE_WALLHUB_HEALTH
MaxHealthDamaged = ISENGARD_CASTLE_WALLHUB_HEALTH_DAMAGED
MaxHealthReallyDamaged = ISENGARD_CASTLE_WALLHUB_HEALTH_REALLY_DAMAGED
End
ArmorSet
Conditions = None
Armor = IsenWallArmor
DamageFX = None
End
DisplayName = OBJECT:IsengardWallHubExpansion
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceSelect = NeutralWallHubSelect ;Gui_PlotSelect2
VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingConstructionLoop ; Repaired from completely destroyed (not used???)
End
CampnessValue = CAMPNESS_FORTRESS_EXPANSION ; Even though this is a wall, it is also a fortress expansion
// *** ENGINEERING Parameters ***
Behavior = WallHubBehavior ModuleTag_WALL_HUB
Options = OPTION_ONE
MaxBuildoutDistance = MEN_FORTRESS_WALL_EFFECTIVE_RADIUS
StaggeredBuildFactor = STANDARD_WALL_STAGGERED_BUILD_FACTOR
;;This defines the pattern built on flat terrain
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallHub
HubCapTemplateName = IsengardCastleWallHub
DefaultSegmentTemplateName = IsengardCastleWallSegment
CliffCapTemplateName = IsengardWallCliffCap
;ShoreCapTemplateName = [NAME]
;BorderCapTemplateName = [NAME]
;ElevatedSegmentTemplateName = [NAME]
End
Behavior = TerrainResourceBehavior ModuleTag_NewMoneyDeadSpot
Radius = 100 ;// 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.
Visible = No ;// Don't show decal when a resource building is selected.
End
Behavior = GettingBuiltBehavior ModuleTag_GettingBuiltBehavior
WorkerName = MordorWorkerNoSelect
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
End
Behavior = CastleMemberBehavior ModuleTag_CMB
End
Behavior = StructureCollapseUpdate ModuleTag_StructureCollapseUpdate
MinCollapseDelay = 5000
MaxCollapseDelay = 5000
CollapseDamping = .5
MaxShudder = 0.6
MinBurstDelay = 250
MaxBurstDelay = 800
BigBurstFrequency = 4
FXList = INITIAL FX_StructureMediumCollapse
FXList = ALMOST_FINAL FX_StructureAlmostCollapse
DestroyObjectWhenDone = Yes
CollapseHeight = 100
End
Behavior = KeepObjectDie ModuleTag_IWantRubble
End
//Iron Plating
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_IsengardFortressIronPlating
AttributeModifier = IronPlatingExpansion_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowThePlating
TriggeredBy = Upgrade_IsengardFortressIronPlating
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
Geometry = CYLINDER
GeometryMajorRadius = 20.0 ;
GeometryMinorRadius = 20.0 ;
GeometryHeight = 70.0
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End
Wall
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; CASTLE WALL PIECES FOR THE NEW WALL BUILD SYSTEM ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Object IsengardCastleWallSegment
// *** ART Parameters ***
SelectPortrait = BPIWall
Draw = W3DScriptedModelDraw ModuleTag_Draw
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = IBWallN
End
IdleAnimationState
; Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
; Animation = ReallyDamagedanimation
; ;AnimationName = IBWallRamp2.IBWallRamp2
; AnimationName = GBWallN.GBWallN
; AnimationMode = LOOP
; End
StateName = STATE_None
End
//------------ New Build Up States coming soon.
ModelConditionState = SNOW AWAITING_CONSTRUCTION
Model = IBWallN_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = AWAITING_CONSTRUCTION
Model = IBWallN_A
End
AnimationState = AWAITING_CONSTRUCTION
Animation = DBWallN_A
AnimationName = IBWallN_A.IBWallN_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallN_A
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallN_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallN_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Animation = DBWallN_A
AnimationName = IBWallN_A.IBWallN_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
StateName = BeingConstructed
ParticleSysBone = NONE WallConstructDust FollowBone:Yes
End
//--damaged building
ModelConditionState = DAMAGED
Model = IBWallN_D1
End
AnimationState = DAMAGED
EnteringStateFX = FX_WallDamaged
End
ModelConditionState = REALLYDAMAGED
Model = IBWallN_D2
End
AnimationState = REALLYDAMAGED
Animation = RubbleAnimation
AnimationName = IBWallN_D2.IBWallN_D2
AnimationMode = ONCE
End
EnteringStateFX = FX_WallDamaged
End
ModelConditionState = COLLAPSING
Model = IBWallN_D3
End
AnimationState = COLLAPSING
Animation = RubbleAnimation
AnimationName = IBWallN_D3.IBWallN_D3
AnimationMode = ONCE
End
ParticleSysBone NONE WallDestructionDust
End
ModelConditionState = RUBBLE
Model = None ;GBWall_Rubble
End
ModelConditionState = POST_RUBBLE
Model = None ;GBWall_Rubble
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
End
AnimationState = POST_COLLAPSE
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = IBWallN
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW
Model = IBWallN
Texture = IBFortress.tga IBFortress_snow.tga
End
End
Draw = W3DScriptedModelDraw ModuleTag_Draw_Rubble
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = None
End
ModelConditionState = COLLAPSING
Model = GBWall_Rubble
End
ModelConditionState = RUBBLE
Model = GBWall_Rubble
End
ModelConditionState = POST_RUBBLE
Model = GBWall_Rubble
End
ModelConditionState = POST_COLLAPSE
Model = None
End
End
// ***DESIGN parameters ***
DisplayName = OBJECT:IsengardCastleWallSegment
Side = Isengard
EditorSorting = STRUCTURE
ThreatLevel = 1.0
BuildCost = ISENGARD_CASTLE_WALLSEGMENT_BUILDCOST
BuildTime = ISENGARD_CASTLE_WALLSEGMENT_BUILDTIME
VisionRange = 160.0 // Shroud clearing distance
ShroudClearingRange = 160
CommandSet = IsengardWallUpgradeNodeCommandSet
// *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceSelect = Gui_PlotSelect2
VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = WallConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = WallConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
ModelCondition = REQUIRED:RUBBLE Sound:BuildingSink
End
CampnessValue = CAMPNESS_WALL
// *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE WALL_SEGMENT SCALEABLE_WALL MADE_OF_STONE
ThreatBreakdown ThreatBreakdown_ModuleTag
AIKindOf = WALL
End
//This is important to let the user select the rubble to begin self repair
KeepSelectableWhenDead = Yes
Behavior = GettingBuiltBehavior ModuleTag_04
SelfBuildingLoop = WallConstructionLoop // Only played if we DON'T spawn a worker
SelfRepairFromDamageLoop = NoSound // This doesn't cause an animation, so don't bother playing a sound
SelfRepairFromRubbleLoop = WallConstructionLoop
UseSpawnTimerWithoutWorker = Yes
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
RebuildTimeSeconds = ISENGARD_CASTLE_WALLSEGMENT_BUILDTIME
End
Body = StructureBody ModuleTag_05
MaxHealth = ISENGARD_CASTLE_WALLSEGMENT_HEALTH
MaxHealthDamaged = ISENGARD_CASTLE_WALLSEGMENT_HEALTH_DAMAGED
MaxHealthReallyDamaged = ISENGARD_CASTLE_WALLSEGMENT_HEALTH_REALLY_DAMAGED
End
// These should always appear together on wall segments
Behavior = KeepObjectDie ModuleTag_IWantRubble
DeathTypes = ALL -SUICIDED
End
Behavior = SlowDeathBehavior ModuleTag_SlowDeath
DeathTypes = NONE +SUICIDED
DestructionDelay = 5000
End
// These should always appear together on wall segments
Behavior = ReplaceSelfUpgrade ModuleTag_Replace_With_Hub
ReplaceWith = IsengardCastleWallHub
TriggeredBy = Upgrade_IsengardWallHub
ConflictsWith = Upgrade_IsengardWallRegularGate
End
Behavior = ReplaceSelfUpgrade ModuleTag_Replace_With_Gate
ReplaceWith = IsengardCastleWallGate
TriggeredBy = Upgrade_IsengardWallRegularGate
ConflictsWith = Upgrade_IsengardWallHub
End
Behavior = ProductionUpdate ModuleTag_RequiredForUpgradeProduction
End
Behavior = InheritUpgradeCreate ModuleTag_InheritStonework
Radius = ISENGARD_FORTRESS_WALL_EFFECTIVE_RADIUS
Upgrade = Upgrade_IsengardFortressIronPlating
ObjectFilter = ANY +IsengardFortressCitadel
End
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_IsengardFortressIronPlating
AttributeModifier = IronPlatingExpansion_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowThePlating
TriggeredBy = Upgrade_IsengardFortressIronPlating
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
ArmorSet
Conditions = None
Armor = IsenWallArmor
DamageFX = None
End
;// Geometry for the temp men small wall segment
Geometry = BOX
GeometryMajorRadius = 5.0 ;10.0
GeometryMinorRadius = 20.0
GeometryHeight = 40.0 ;47
GeometryIsSmall = No
;Geometry = BOX
;GeometryMajorRadius = 25.0
;GeometryMinorRadius = 20.0
;GeometryHeight = 50
;GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End
;---------------------------------------------
Object IsengardCastleWallHub
; *** ART Parameters ***
SelectPortrait = BPIWall_WallHub
Draw = W3DScriptedModelDraw ModuleTag_Draw
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = IBWallRmprtN
End
IdleAnimationState
; Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
; Animation = ReallyDamagedanimation
; ;AnimationName = IBWallRmprt.IBWallRmprt
; AnimationName = GBWallRmprtN.GBWallRmprtN
; AnimationMode = LOOP
; End
StateName = STATE_None
End
;------------ New Build Up States coming soon.
ModelConditionState = SNOW AWAITING_CONSTRUCTION
Model = IBWallRmprtN_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = AWAITING_CONSTRUCTION
Model = IBWallRmprtN_A
End
AnimationState = AWAITING_CONSTRUCTION
Animation = DBWallN_A
AnimationName = IBWallRmprtN_A.IBWallRmprtN_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallRmprtN_A
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallRmprtN_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallRmprtN_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Animation = IBWallRmprtN_A
AnimationName = IBWallRmprtN_A.IBWallRmprtN_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
StateName = BeingConstructed
ParticleSysBone = NONE WallConstructDust FollowBone:Yes
BeginScript
CurDrawablePlaySound("GondorBarracksBeginConstruction")
EndScript
End
;--damaged building
ModelConditionState = DAMAGED
Model = IBWallRmprtN_D1
End
AnimationState = DAMAGED
EnteringStateFX = FX_HubDamaged
End
ModelConditionState = REALLYDAMAGED
Model = IBWallRmprtN_D2
End
AnimationState = REALLYDAMAGED
Animation = RubbleAnimation
AnimationName = IBWallRmprtN_D2.IBWallRmprtN_D2
AnimationMode = ONCE
End
EnteringStateFX = FX_HubDamaged
End
ModelConditionState = COLLAPSING
Model = IBWallRmprtN_D3
End
AnimationState = COLLAPSING
Animation = RubbleAnimation
AnimationName = IBWallRmprtN_D3.IBWallRmprtN_D3
AnimationMode = ONCE
End
ParticleSysBone NONE HubDestructionDust
EnteringStateFX = FX_StructureMediumCollapse
End
ModelConditionState = DYING
Model = IBWallRmprtN_D3
End
AnimationState = DYING
Animation = RubbleAnimation
AnimationName = IBWallRmprtN_D3.IBWallRmprtN_D3
AnimationMode = ONCE
End
ParticleSysBone NONE HubDestructionDust
EnteringStateFX = FX_StructureMediumCollapse
End
ModelConditionState = RUBBLE
Model = None
End
ModelConditionState = POST_RUBBLE
Model = NONE
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
End
AnimationState = POST_COLLAPSE
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = IBWallRmprtN
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW
Model = IBWallRmprtN
Texture = IBFortress.tga IBFortress_snow.tga
End
End
; ***DESIGN parameters ***
RadarPriority = STRUCTURE
DisplayName = OBJECT:IsengardCastleWallHub
Side = Isengard
EditorSorting = STRUCTURE
ThreatLevel = 1.0
BuildCost = ISENGARD_CASTLE_WALLHUB_BUILDCOST
BuildTime = ISENGARD_CASTLE_WALLHUB_BUILDTIME
VisionRange = 160.0 ; Shroud clearing distance
ShroudClearingRange = 160
CommandSet = IsengardCastleWallHubCommandSet
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceSelect = NeutralWallHubSelect ;Gui_PlotSelect2
VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingConstructionLoop ; Repaired from completely destroyed (not used???)
End
ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
ModelCondition = REQUIRED:COLLAPSING Sound:BuildingSink
End
CampnessValue = CAMPNESS_WALL
; *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE WALL_HUB MADE_OF_STONE WALL_UPGRADE
ThreatBreakdown ThreatBreakdown_ModuleTag
AIKindOf = WALL
End
Behavior = GettingBuiltBehavior ModuleTag_04
UseSpawnTimerWithoutWorker = Yes
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
;SelfBuildingLoop = BuildingConstructionLoop ; Only played if we DON'T spawn a worker
SelfRepairFromDamageLoop = WallConstructionLoop
SelfRepairFromRubbleLoop = BuildingConstructionLoop
End
Body = StructureBody ModuleTag_05
MaxHealth = ISENGARD_CASTLE_WALLHUB_HEALTH
MaxHealthDamaged = ISENGARD_CASTLE_WALLHUB_HEALTH_DAMAGED
MaxHealthReallyDamaged = ISENGARD_CASTLE_WALLHUB_HEALTH_REALLY_DAMAGED
End
Behavior = SlowDeathBehavior ModuleTag_SlowDeath
DeathTypes = ALL
DestructionDelay = 5000
;Sound = INITIAL BuildingSink
End
Behavior = WallHubBehavior ModuleTag_WALL_HUB
Options = OPTION_ONE
MaxBuildoutDistance = MEN_FORTRESS_WALL_EFFECTIVE_RADIUS
StaggeredBuildFactor = STANDARD_WALL_STAGGERED_BUILD_FACTOR
;;This defines the pattern built on flat terrain
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallSegment
SegmentTemplateName = IsengardCastleWallHub
BuilderRadius = 20
HubCapTemplateName = IsengardCastleWallHub
DefaultSegmentTemplateName = IsengardCastleWallSegment
CliffCapTemplateName = IsengardWallCliffCap
;ShoreCapTemplateName = [NAME]
;BorderCapTemplateName = [NAME]
;ElevatedSegmentTemplateName = [NAME]
End
Behavior = TerrainResourceBehavior ModuleTag_NewMoneyDeadSpot
Radius = 60 ;// 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.
Visible = No ;// Don't show decal when a resource building is selected.
End
Behavior = InheritUpgradeCreate ModuleTag_InheritStonework
Radius = ISENGARD_FORTRESS_WALL_EFFECTIVE_RADIUS
Upgrade = Upgrade_IsengardFortressIronPlating
ObjectFilter = ANY +IsengardFortressCitadel
End
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_IsengardFortressIronPlating
AttributeModifier = IronPlatingExpansion_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowThePlating
TriggeredBy = Upgrade_IsengardFortressIronPlating
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
ArmorSet
Conditions = None
Armor = IsenWallArmor
DamageFX = None
End
;// Geometry for the temp small men wall hub
Geometry = CYLINDER
GeometryMajorRadius = 20.0 ;
GeometryMinorRadius = 20.0 ;
GeometryHeight = 70.0
GeometryIsSmall = No
AdditionalGeometry = BOX
GeometryMajorRadius = 5.0 ;10.0
GeometryMinorRadius = 20.0
GeometryHeight = 40.0 ;47
GeometryIsSmall = No
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
GeometryContactPoint = X:-21 Y:22 Z:0 Repair
GeometryContactPoint = X:23 Y:-20 Z:0 Repair
GeometryContactPoint = X:5.576 Y:44.987 Z:0
GeometryContactPoint = X:-38.348 Y:-42.113 Z:0
GeometryContactPoint = X:-28.448 Y:-0.003 Z:75.14 Swoop
End
;---------------------------------------------------------
Object IsengardCastleWallGate
; *** ART Parameters ***
SelectPortrait = BPIWall_MainGate
Draw = W3DScriptedModelDraw ModuleTag_Draw
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = IBWallGateN_SKN
End
;--------- damage states for the gate
ModelConditionState = DAMAGED
Model = IBWallGateN_D1
End
ModelConditionState = REALLYDAMAGED
Model = IBWallGateN_D2
End
ModelConditionState = COLLAPSING DOOR_1_OPENING
Model = IBWallGateN_D4
End
AnimationState = COLLAPSING DOOR_1_OPENING
Animation = RubbleAnimation
AnimationName = IBWallGateN_D4.IBWallGateN_D4
AnimationMode = ONCE
End
End
ModelConditionState = COLLAPSING
Model = IBWallGateN_D3
End
AnimationState = COLLAPSING
Animation = RubbleAnimation
AnimationName = IBWallGateN_D3.IBWallGateN_D3
AnimationMode = ONCE
End
End
ModelConditionState = DYING
Model = IBWallGateN_D3
End
AnimationState = DYING
Animation = RubbleAnimation
AnimationName = IBWallGateN_D3.IBWallGateN_D3
AnimationMode = ONCE
End
EnteringStateFX = FX_StructureMediumCollapse
ParticleSysBone NONE HubDestructionDust
End
ModelConditionState = RUBBLE
Model = None
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
;------ Door Animations
AnimationState = DOOR_1_OPENING
Flags = START_FRAME_LAST
StateName = Door_Open
Animation = Death
AnimationName = IBWallGateN_SKL.IBWallGateN_OP
AnimationMode = ONCE
End
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Door_Close" then CurDrawableSetTransitionAnimState("TRANS_Closed_To_Open") end
EndScript
End
TransitionState = TRANS_Closed_To_Open
Animation = Open
AnimationName = IBWallGateN_SKL.IBWallGateN_OPN
AnimationMode = ONCE
End
End
AnimationState = DOOR_1_CLOSING
Flags = START_FRAME_LAST
StateName = Door_Close
Animation = Death
AnimationName = IBWallGateN_SKL.IBWallGateN_CL
AnimationMode = ONCE
End
BeginScript
Prev = CurDrawablePrevAnimationState()
if Prev == "Door_Open" then CurDrawableSetTransitionAnimState("TRANS_Open_To_Closed") end
EndScript
End
TransitionState = TRANS_Open_To_Closed
Animation = Open
AnimationName = IBWallGateN_SKL.IBWallGateN_CLS
AnimationMode = ONCE
End
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = IBWallGateN_SKN
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW
Model = IBWallGateN_SKN
Texture = IBFortress.tga IBFortress_snow.tga
End
End
; ***DESIGN parameters ***
DisplayName = OBJECT:IsengardCastleWallGate
Side = Isengard
EditorSorting = STRUCTURE
ThreatLevel = 1.0
BuildCost = ISENGARD_CASTLE_WALLGATE_BUILDCOST
BuildTime = ISENGARD_CASTLE_WALLGATE_BUILDTIME
VisionRange = 160.0 ; Shroud clearing distance
ShroudClearingRange = 160
CommandSet = CastleGateCommandSet
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
VoiceSelect = GateSelect
VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
UnitSpecificSounds
UnderConstruction = BuildingConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = BuildingConstructionLoop ; Repaired from completely destroyed (not used???)
End
;ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
; ModelCondition = REQUIRED:RUBBLE Sound:BuildingSink
;End
CampnessValue = CAMPNESS_WALL
; *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE WALL_UPGRADE MADE_OF_STONE BLOCKING_GATE WALL_GATE
Behavior = GettingBuiltBehavior ModuleTag_04
SelfBuildingLoop = WallConstructionLoop // Only played if we DON'T spawn a worker
SelfRepairFromDamageLoop = NoSound // This doesn't cause an animation, so don't bother playing a sound
SelfRepairFromRubbleLoop = WallConstructionLoop
SpawnTimer = -1.0 // Negative means no 'autoheal'
RebuildTimeSeconds = ISENGARD_CASTLE_WALLGATE_BUILDTIME
End
Body = StructureBody ModuleTag_05
MaxHealth = ISENGARD_CASTLE_WALLGATE_HEALTH
MaxHealthDamaged = ISENGARD_CASTLE_WALLGATE_HEALTH_DAMAGED
MaxHealthReallyDamaged = ISENGARD_CASTLE_WALLGATE_HEALTH_REALLY_DAMAGED
End
Behavior = SlowDeathBehavior ModuleTag_SlowDeath
DeathTypes = ALL
DestructionDelay = 5000
End
Behavior = GateOpenAndCloseBehavior ModuleTag_GATE
ResetTimeInMilliseconds = 3000 ;important! this must be longer than the gates animation, ir it will twitch
OpenByDefault = No
PercentOpenForPathing = 50
SoundOpeningGateLoop = GateOpenStart
SoundClosingGateLoop = GateCloseStart
SoundFinishedOpeningGate = GateOpenEnd
SoundFinishedClosingGate = GateCloseEnd
TimeBeforePlayingOpenSound = 9500
TimeBeforePlayingClosedSound = 9500
End
Behavior = FakePathfindPortalBehaviour ModuleTag_FAKEPATHFIND
AllowEnemies = No
AllowNonSkirmishAIUnits = No
End
Behavior = AIGateUpdate ModuleTage_AIGateUpdate
TriggerWidthX = 200.0
TriggerWidthY = 100.0
End
Behavior = InheritUpgradeCreate ModuleTag_InheritStonework
Radius = ISENGARD_FORTRESS_WALL_EFFECTIVE_RADIUS
Upgrade = Upgrade_IsengardFortressIronPlating
ObjectFilter = ANY +IsengardFortressCitadel
End
Behavior = AttributeModifierUpgrade ModuleTag_Reinforced
TriggeredBy = Upgrade_IsengardFortressIronPlating
AttributeModifier = IronPlatingExpansion_Bonus
End
Behavior = ModelConditionUpgrade ModuleTag_ShowThePlating
TriggeredBy = Upgrade_IsengardFortressIronPlating
AddConditionFlags = UPGRADE_NUMENOR_STONEWORK
Permanent = Yes
End
ArmorSet
Conditions = None
Armor = IsenWallArmor
DamageFX = None
End
;// Geometry from small men wall gate
GeometryIsSmall = No
; right pillar
Geometry = BOX
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 75
GeometryOffset = X:0 Y:50 Z:0
; left pillar
AdditionalGeometry = BOX
GeometryMajorRadius = 10.0
GeometryMinorRadius = 10.0
GeometryHeight = 75
GeometryOffset = X:0 Y:-50 Z:0
; Main
AdditionalGeometry = BOX
GeometryName = "Closed"
GeometryMajorRadius = 9.0
GeometryMinorRadius = 50.0
GeometryHeight = 50
; Left open
AdditionalGeometry = BOX
GeometryName = "OpenLeft"
GeometryMajorRadius = 9.0
GeometryMinorRadius = 10.0
GeometryHeight = 40
GeometryOffset = X:0 Y:-30 Z:0
; Right open
AdditionalGeometry = BOX
GeometryName = "OpenRight"
GeometryMajorRadius = 9.0
GeometryMinorRadius = 10.0
GeometryHeight = 40
GeometryOffset = X:0 Y:30 Z:0
// need some geometry points to tell enemy weapons where to hit.
GeometryContactPoint = X:0 Y:50 Z:75
GeometryContactPoint = X:0 Y:50 Z:10
GeometryContactPoint = X:0 Y:-50 Z:10
GeometryContactPoint = X:0 Y:-50 Z:75
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End
;----------------------------------------------------------------------
Object IsengardWallCliffCap
SelectPortrait = BPIWall
; *** ART Parameters ***
Draw = W3DScriptedModelDraw ModuleTag_Draw
OkToChangeModelColor = Yes
UseStandardModelNames = Yes
DefaultModelConditionState
Model = IBWallNE
End
IdleAnimationState
StateName = STATE_None
End
//------------ New Build Up States coming soon.
ModelConditionState = SNOW AWAITING_CONSTRUCTION
Model = IBWallNE_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = AWAITING_CONSTRUCTION
Model = IBWallNE_A
End
AnimationState = AWAITING_CONSTRUCTION
Animation = IBWallNE_A
AnimationName = IBWallNE_A.IBWallNE_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallNE_A
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallNE_A
Texture = IBFortress.tga IBFortress_snow.tga
End
ModelConditionState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Model = IBWallNE_A
End
AnimationState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED
Animation = IBWallNE_A
AnimationName = IBWallNE_A.IBWallNE_A
AnimationMode = MANUAL
AnimationBlendTime = 0
End
Flags = START_FRAME_FIRST
StateName = BeingConstructed
ParticleSysBone = NONE WallConstructDust FollowBone:Yes
End
;--damaged building
ModelConditionState = DAMAGED
Model = IBWallNE_D1
End
AnimationState = DAMAGED
EnteringStateFX = FX_WallDamaged
End
ModelConditionState = REALLYDAMAGED
Model = IBWallNE_D2
End
AnimationState = REALLYDAMAGED
Animation = RubbleAnimation
AnimationName = IBWallNE_D2.IBWallNE_D2
AnimationMode = ONCE
End
EnteringStateFX = FX_WallDamaged
End
ModelConditionState = COLLAPSING
Model = IBWallNE_D3
End
AnimationState = COLLAPSING
Animation = RubbleAnimation
AnimationName = IBWallNE_D3.IBWallNE_D3
AnimationMode = ONCE
End
ParticleSysBone NONE WallDestructionDust
EnteringStateFX = FX_StructureMediumCollapse
End
ModelConditionState = RUBBLE
Model = None ;GBWall_Rubble
End
AnimationState = RUBBLE
End
ModelConditionState = POST_RUBBLE
Model = None ;GBWall_Rubble
End
AnimationState = POST_RUBBLE
End
ModelConditionState = POST_COLLAPSE
Model = None
End
AnimationState = POST_COLLAPSE
End
ModelConditionState = UPGRADE_NUMENOR_STONEWORK
Model = IBWallNE
Texture = IBFortress.tga IBFortress_U.tga
End
ModelConditionState = SNOW
Model = IBWallNE
Texture = IBFortress.tga IBFortress_snow.tga
End
End
; Draw = W3DFloorDraw ModuleTag_DrawFloor
;; StaticModelLODMode = yes ; Will append M or L to the skin name depending on GameLOD
; ModelName = GBWallN_Bib
; End
; ***DESIGN parameters ***
DisplayName = OBJECT:IsengardWallCliffCap
Side = Isengard
EditorSorting = STRUCTURE
ThreatLevel = 1.0
CommandSet = IsengardWallCliffCapCommandSet
BuildCost = MEN_WALLSEGMENT_SMALL_BUILDCOST
BuildTime = MEN_WALLSEGMENT_SMALL_BUILDTIME
VisionRange = MEN_WALLSEGMENT_SMALL_VISION_RANGE
ShroudClearingRange = MEN_WALLSEGMENT_SMALL_SHROUD_CLEAR
; *** AUDIO Parameters ***
#include "..\..\..\Includes\StandardBuildingEvaEvents.inc"
SoundOnDamaged = BuildingLightDamageStone
SoundOnReallyDamaged = BuildingHeavyDamageStone
VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction
UnitSpecificSounds
UnderConstruction = WallConstructionLoop ; Built first time
; UnderRepairFromDamage = NoSound ; Repaired No animation on the building, so don't bother playing sound
UnderRepairFromRubble = WallConstructionLoop ; Repaired from completely destroyed (not used???)
End
;ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_PlayCollapseSound
; ModelCondition = REQUIRED:RUBBLE Sound:BuildingSink
;End
CampnessValue = CAMPNESS_WALL
; *** ENGINEERING Parameters ***
RadarPriority = STRUCTURE
KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE DEFENSIVE_WALL MADE_OF_STONE CAN_CAST_REFLECTIONS
ThreatBreakdown ThreatBreakdown_ModuleTag
AIKindOf = WALL
End
Behavior = GettingBuiltBehavior ModuleTag_04
UseSpawnTimerWithoutWorker = Yes
SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY
SelfBuildingLoop = WallConstructionLoop ; Only played if we DON'T spawn a worker
SelfRepairFromDamageLoop = NoSound ; This doesn't cause an animation, so don't bother playing a sound
SelfRepairFromRubbleLoop = WallConstructionLoop
End
Body = StructureBody ModuleTag_05
MaxHealth = MEN_WALLSEGMENT_SMALL_HEALTH
End
; Behavior = DestroyDie ModuleTag_07
; ;nothing
; End
// These should always appear together on wall segments
Behavior = KeepObjectDie ModuleTag_IWantRubble
DeathTypes = ALL -SUICIDED
End
Behavior = SlowDeathBehavior ModuleTag_SlowDeath
DeathTypes = NONE +SUICIDED
DestructionDelay = 5000
End
ArmorSet
Conditions = None
Armor = IsenWallArmor
DamageFX = None
End
Geometry = BOX
GeometryMajorRadius = 10.0
GeometryMinorRadius = 40.0
GeometryHeight = 80
GeometryIsSmall = No
GeometryOffset = X:0 Y:-20 Z:-40
Shadow = SHADOW_VOLUME
BuildCompletion = PLACED_BY_PLAYER
End