Unpacking bfme1 castle in bfme2
- Please log in to reply
#1 Samuel R. Kinsey
Posted 09 August 2020 - 09:24 PM
#2 Samuel R. Kinsey
Posted 12 August 2020 - 09:33 PM
#3 malvack
Posted 13 August 2020 - 06:28 AM
For what is worth, I recently made an implementation of a bfme1-style camp through an OCL. I haven't tried with castles though, but maybe this could help you.
objectcreationlist.ini
;--------------------------------------------------------------------------------------- ObjectCreationList OCL_SamanenKillCampPing // The egg is going to die (hatch) immediately, and play the FXLists, then wait, then do the Finish below CreateObject ObjectNames = SamanenKillCampPing Count =1 End End ;--------------------------------------------------------------------------------------- ObjectCreationList OCL_SpecialAbilityKingMalvackSpawnCamp CreateObject ObjectNames = SamanenMalvackKeep Count = 1 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 90.0 End CreateObject ObjectNames = SamanenCampFloor Count = 1 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = SamanenCampWall ;1 Count = 1 Offset = X:-102.91 Y:224.85 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 112.30 End CreateObject ObjectNames = SamanenCampWall ;2 Count = 1 Offset = X:-205.72 Y:139.95 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 146.75 End CreateObject ObjectNames = SamanenCampWall ;3 Count = 1 Offset = X:-247.60 Y:12.63 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 176.77 End CreateObject ObjectNames = SamanenCampWall ;4 Count = 1 Offset = X:-218.00 Y:-117.66 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = -151.08 End CreateObject ObjectNames = SamanenCampWall ;5 Count = 1 Offset = X:-124.03 Y:-213.52 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = -120.04 End CreateObject ObjectNames = SamanenCampWall ;6 Count = 1 Offset = X:4.87 Y:-246.49 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = -88.62 End CreateObject ObjectNames = SamanenCampWall ;7 Count = 1 Offset = X:132.77 Y:-207.12 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = -56.78 End CreateObject ObjectNames = SamanenCampWall ;8 Count = 1 Offset = X:220.91 Y:-106.99 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = -26.06 End CreateObject ObjectNames = SamanenCampWall ;9 Count = 1 Offset = X:244.79 Y:25.11 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 5.52 End CreateObject ObjectNames = SamanenCampWall ;10 Count = 1 Offset = X:197.30 Y:150.28 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 36.09 End CreateObject ObjectNames = SamanenCampWall ;11 Count = 1 Offset = X:100.08 Y:227.84 Z:0.0 ClearRemovables = Yes Disposition = ABSOLUTE_ANGLE DispositionAngle = 67.04 End CreateObject ObjectNames = GondorSentryTower;1 Count = 1 Offset = X:45.76 Y=259.76 Z:0.0 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = GondorSentryTower;2 Count = 1 Offset = X:-39.67 Y:263.23 Z:0.0 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = GondorSentryTower;3 Count = 1 Offset = X:-227.40 Y:-0.49 Z:0.0 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = GondorSentryTower;4 Count = 1 Offset = X:-14.58 Y:-231.38 Z:0.0 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = GondorSentryTower;5 Count = 1 Offset = X:120.52 Y:186.83 Z:0.0 ClearRemovables = Yes Disposition = LIKE_EXISTING End CreateObject ObjectNames = SamanenHousePing Count = 6 SpreadFormation = Yes Disposition = SPAWN_AROUND DispositionAngle = 60 ;SpawnAround uses this as the arc between guys DispositionIntensity = 800 ; and this for distance from center End End
malvapolis.ini (I'm not even close to being sorry for that file name)
;---------------------------------- secondary GondorCitadel ------------------------------------------------------ Object SamanenMalvackKeep SelectPortrait = BPCMinasTirithKeep ; *** ART Parameters *** Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBCCenter ; ParticleSysBone = glowbone01 TorchGlow ; ParticleSysBone = glowbone02 furnaceSmoke End IdleAnimationState ;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("CampSoldierCompleteGeneric") ; end ; end ;EndScript End ;------------Build Up States ;ModelConditionState = ACTIVELY_BEING_CONSTRUCTED PARTIALLY_CONSTRUCTED ; Model = GBCCenter_A ; ParticleSysBone = NONE BuildingDoughnutCloud ; ParticleSysBone = NONE BuildingContructDust ; End ModelConditionState = ACTIVELY_BEING_CONSTRUCTED Model = GBCCenter_A ; ParticleSysBone = NONE BuildingDoughnutCloud ParticleSysBone = NONE BuildingContructDust End AnimationState = ACTIVELY_BEING_CONSTRUCTED Animation AnimationName = GBCCenter_A.GBCCenter_A AnimationMode = MANUAL End BeginScript CurDrawablePlaySound("GondorBarracksBeginConstruction") CurDrawablePlaySound("BuildingTopple") ;CurDrawableHideSubObject("FIRE02") EndScript End ;------------Build Up States ModelConditionState = BASE_BUILD Model = GBCCenter_A ; ParticleSysBone = NONE BuildingDoughnutCloud ParticleSysBone = NONE BuildingContructDust End AnimationState = BASE_BUILD Animation AnimationName = GBCCenter_A.GBCCenter_A AnimationMode = ONCE AnimationBlendTime = 0 AnimationSpeedFactorRange = 2.0 2.0 ; 300 frame anim, but need to shrink down to 5 seconds End BeginScript CurDrawablePlaySound("GondorBarracksBeginConstruction") CurDrawablePlaySound("BuildingTopple") EndScript End ModelConditionState = JUST_BUILT Model = GBCCenter_A End AnimationState = JUST_BUILT Animation AnimationName = GBCCenter_A.GBCCenter_A AnimationMode = MANUAL AnimationBlendTime = 0 End Flags = START_FRAME_FIRST ; BeginScript ; CurDrawableHideSubObject("FIRE02") ; EndScript End ModelConditionState = DAMAGED Model = GBCCenter_D1 ParticleSysBone dustbone01 TrebuchetImpactDebris ; ParticleSysBone = glowbone01 TorchGlow ; ParticleSysBone = glowbone02 furnaceSmoke End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBCCenter_D2 ParticleSysBone = glowbone02 TrebuchetImpactDebris ParticleSysBone = glowbone01 Explosion5 End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBCCenter_D2 ParticleSysBone dustbone01 TrebuchetImpactDebris ParticleSysBone = glowbone01 Explosion5 ParticleSysBone = glowbone02 BuildingChunkDebris End AnimationState = RUBBLE End ModelConditionState = POST_RUBBLE Model = GBGenRubble ParticleSysBone NONE SmokeBuildingMediumRubble End AnimationState = POST_RUBBLE End ModelConditionState = POST_COLLAPSE Model = GBGenRubble ParticleSysBone NONE SmokeBuildingMediumRubble End AnimationState = POST_COLLAPSE End End ; *** AUDIO Parameters *** #include "..\..\..\Includes\StandardBuildingEvaEvents.inc" VoiceSelect = GondorCitadelSelect SoundAmbient = CitadelSignalFireLoop SoundOnDamaged = BuildingLightDamageStone SoundOnReallyDamaged = BuildingHeavyDamageStone VoiceSelectUnderConstruction = BuildingGoodVoiceSelectUnderConstruction 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 EvaEventDieOwner = CitadelDie CampnessValue = CAMPNESS_FORTRESS ; ***DESIGN parameters *** DisplayName = OBJECT:GondorCampKeep Side = Men EditorSorting = STRUCTURE ThreatLevel = 1.0 BuildCost = 1000 BuildTime = 30.0 ; in seconds CommandSet = SamanenCampCommandSet ArmorSet Conditions = None Armor = CitadelArmor DamageFX = None End ; *** ENGINEERING Parameters *** //----------------------------------------------- KindOf = VITAL_FOR_BASE_SURVIVAL STRUCTURE SELECTABLE IMMOBILE COMMANDCENTER MP_COUNT_FOR_VICTORY FS_FACTORY AUTO_RALLYPOINT MADE_OF_STONE SCORE DOZER_FACTORY //CAMP_KEEP RadarPriority = STRUCTURE KeepSelectableWhenDead = Yes Body = ActiveBody ModuleTag_02 MaxHealth = GONDOR_CENTRAL_CAMP_KEEP_HEALTH End Behavior = GettingBuiltBehavior ModuleTag_04 ; WorkerName = GondorWorkerNoSelect ; SpawnTimer = 120 ; RebuildWhenDead = Yes SelfBuildingLoop = BuildingBigConstructionLoop ; 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 = BuildingBigConstructionLoop End Behavior = CastleMemberBehavior ModuleTag_CMB BeingBuiltSound = BuildingBigConstructionLoop End ;----------------------------------------------- ;Used for hero revival and initial construction Behavior = ProductionUpdate ProductionUpdateModuleTag ; nothing, but is required if we have any Object-level Upgrades! End Behavior = QueueProductionExitUpdate ModuleTag_QueuePEU UnitCreatePoint = X:0.0 Y:-20.0 Z:0.0 NaturalRallyPoint = X:28.8 Y:-80.0 Z:0.0;NaturalRallyPointX must always match GeometryMajorRadius! ExitDelay = 300 ; Mainly for the multiple produced Red Guard. Make them come out one at a time. 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 = MordorSlaughterhouseEnterSound EntryOffset = X:40.0 Y:0.0 Z:0.0 EntryPosition = X:0.0 Y:0.0 Z:0.0 ExitOffset = X:40.0 Y:0.0 Z:0.0 StatusForRingEntry = HOLDING_THE_RING UpgradeForRingEntry = Upgrade_RingHero Upgrade_FortressRingHero ObjectToDestroyForRingEntry = NONE +TheDroppedRing FXForRingEntry = FX_OneRingFlare End ; Note that structures with "RUBBLE" states should not use DestroyDie; such buildings are ; never truly destroyed, even when reduced to zero health. Also note that garrisonable ; buildings automatically stick around because GarrisonContain has it's own DieModule Behavior = KeepObjectDie ModuleTag_IWantRubble End Behavior = AutoDepositUpdate AutoDepositModuleTag DepositTiming = GENERIC_KEEP_MONEY_TIME ; in milliseconds DepositAmount = GENERIC_KEEP_MONEY_AMOUNT ; cash amount to deposit every DepositTiming InitialCaptureBonus = 0 ; no initial bonus End Behavior = StructureCollapseUpdate ModuleTag_06 MinCollapseDelay = 000 MaxCollapseDelay = 000 CollapseDamping = .5 MaxShudder = 0.6 MinBurstDelay = 250 MaxBurstDelay = 800 BigBurstFrequency = 4 FXList = INITIAL FX_StructureMediumCollapse End Behavior = RubbleRiseUpdate ModuleTag_07 MinRubbleRiseDelay = 000 MaxRubbleRiseDelay = 000 ;RubbleRiseDamping = .5 RubbleHeight = 4.0 MaxShudder = 0.6 MinBurstDelay = 250 MaxBurstDelay = 800 BigBurstFrequency = 4 FXList = INITIAL FX_StructureMediumPostCollapse End #include "..\..\..\FortressRingFunc.inc" Behavior = CreateObjectDie ModuleTag_MakeLoadsOfTreasure DeathTypes = ALL CreationList = OCL_SamanenKillCampPing End Behavior = InvisibilityUpdate ModuleTag_BroadcastCamouflage InvisibilityNugget InvisibilityType = CAMOUFLAGE DetectionRange = 270.0 End UpdatePeriod = 1000 Broadcast = Yes BroadcastRange = 270.0 BroadcastObjectFilter = ELVEN_MIST_OBJECT_FILTER StartsActive = Yes End Behavior = PassiveAreaEffectBehavior ModuleTag_SplashOfHealingWater_Ahh EffectRadius = 270.0 ;GONDOR_WELL_AOE_RADIUS ; please update the decal size in experience lvl INI if you change this... the value there is about 2.2x the value here PingDelay = 3000 ;2000;msec HealPercentPerSecond = 3% AllowFilter = ANY +INFANTRY +CAVALRY +HERO -MACHINE +MONSTER -IMMOBILE +DOZER NonStackable = Yes HealFX = FX_SpellHealUnitHealBuff End Behavior = BannerCarrierUpdate BannerCarrierUpdateModuleTag IdleSpawnRate = 10000 ;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 = 270.0 End Behavior = AttributeModifierAuraUpdate ModuleTag_BannerLeadership StartsActive = Yes ;If no, requires upgrade to turn on. BonusName = DwarvenFortressBannersLeadership RefreshDelay = 2000 Range = 270.0 ObjectFilter = KAF_GENERIC_BUFF_RECIPIENT_OBJECT_FILTER End Geometry = BOX GeometryMajorRadius = 7.0 GeometryMinorRadius = 7.0 GeometryHeight = 113.0 AdditionalGeometry = BOX GeometryMajorRadius = 14.0 GeometryMinorRadius = 14.0 GeometryHeight = 38.0 AdditionalGeometry = CYLINDER ; this is needed so melee units can reach athe citidel to attack it GeometryMajorRadius = 30.0 GeometryMinorRadius = 30.0 GeometryHeight = 10.0 GeometryIsSmall = No Shadow = SHADOW_VOLUME GeometryContactPoint = X:0.407 Y:-0.489 Z:122.392 Swoop AttackContactPoint = X:0 Y:0 Z:0 End ;------------------------------------------------------------------------------ Object SamanenCampWall SelectPortrait = BPGCampWall ; *** ART Parameters *** Draw = W3DScriptedModelDraw ModuleTag_01 OkToChangeModelColor = Yes DefaultModelConditionState Model = GBCampWall_A End IdleAnimationState Animation AnimationName = GBCampWall_A.GBCampWall_A AnimationMode = MANUAL AnimationBlendTime = 0 End Flags = START_FRAME_LAST End ;------------Build Up States ModelConditionState = BASE_BUILD Model = GBCampWall_A ; ParticleSysBone = NONE BuildingDoughnutCloud ParticleSysBone = NONE BuildingContructDust End AnimationState = BASE_BUILD Animation AnimationName = GBCampWall_A.GBCampWall_A AnimationMode = ONCE AnimationSpeedFactorRange = 2.0 2.5 ; keep range wide to avoid lockstep anims End End AnimationState = JUST_BUILT Animation AnimationName = GBCampWall_A.GBCampWall_A AnimationMode = MANUAL AnimationBlendTime = 0 End Flags = START_FRAME_FIRST End ModelConditionState = DAMAGED UPGRADE_NUMENOR_STONEWORK Model = GBCampWall_UD1 ParticleSysBone emberBone01 SmokeBuildingLarge End ModelConditionState = DAMAGED Model = GBCampWall_D1 ParticleSysBone emberBone01 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED UPGRADE_NUMENOR_STONEWORK Model = GBCampWall_UD2 ParticleSysBone emberBone01 SmokeBuildingLarge End ModelConditionState = REALLYDAMAGED Model = GBCampWall_D2 ParticleSysBone emberBone01 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE UPGRADE_NUMENOR_STONEWORK Model = GBCampWall_UD3 ParticleSysBone emberBone01 GondorWallDebris ParticleSysBone emberBone01 SmokeBuildingLarge ParticleSysBone emberBone01 PCTMediumDust End AnimationState = RUBBLE UPGRADE_NUMENOR_STONEWORK EnteringStateFX = FX_WallStoneDie End ModelConditionState = RUBBLE Model = GBCampWall_D3 ParticleSysBone emberBone01 GondorWallDebris ParticleSysBone emberBone01 SmokeBuildingLarge ParticleSysBone emberBone01 PCTMediumDust End AnimationState = RUBBLE EnteringStateFX = FX_WallStoneDie End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = UPGRADE_NUMENOR_STONEWORK Model = GBCampWall_U End AnimationState = UPGRADE_NUMENOR_STONEWORK EnteringStateFX = GenericBuildingUpgrade End End ; *** AUDIO Parameters *** #include "..\..\..\Includes\StandardBuildingEvaEvents.inc" SoundOnDamaged = BuildingLightDamageStone SoundOnReallyDamaged = BuildingHeavyDamageStone ;ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior ; MaxUpdateRangeCap = 800 ; AnimationSound = Sound:BuildingDebris Animation:GBCampWall_A.GBCampWall_D3 Frames:0 ; AnimationSound = Sound:BuildingDebris Animation:GBCampWall_A.GBCampWall_UD3 Frames:0 ;End CampnessValue = CAMPNESS_WALL ; ***DESIGN parameters *** DisplayName = OBJECT:GBCampWall Side = Men EditorSorting = STRUCTURE ArmorSet Conditions = None Armor = SamanenCampWallArmor DamageFX = None End CommandSet = EmptyCommandSet ; *** ENGINEERING Parameters *** KindOf = STRUCTURE SELECTABLE IMMOBILE DEFENSIVE_WALL NOT_AUTOACQUIRABLE MADE_OF_STONE RadarPriority = NOT_ON_RADAR Body = ActiveBody ModuleTag_03 MaxHealth = 3000.0 End ThreatBreakdown GBCampWall_DetailedThreat AIKindOf = WALL End ; Note that structures with "RUBBLE" states should not use DestroyDie; such buildings are ; never truly destroyed, even when reduced to zero health. Also note that garrisonable ; buildings automatically stick around because GarrisonContain has it's own DieModule ; Behavior = SlowDeathBehavior ModuleTag_SlowDeathWithoutRubble ; DestructionDelay = 5000 ; End Behavior = StructureCollapseUpdate ModuleTag_06 MinCollapseDelay = 000 MaxCollapseDelay = 000 CollapseDamping = .5 MaxShudder = 0.6 MinBurstDelay = 250 MaxBurstDelay = 800 BigBurstFrequency = 4 ; FXList = INITIAL FX_StructureMediumCollapse ; FXList = ALMOST_FINAL FX_StructureAlmostCollapse DestroyObjectWhenDone = Yes CollapseHeight = 80 ;Weapon = FINAL RingHeroDeathShockwave End Behavior = CastleMemberBehavior ModuleTag_CMB End Behavior = AttributeModifierUpgrade ModuleTag_Reinforced TriggeredBy = Upgrade_NumenorStonework AttributeModifier = NumenorStoneworkKeep_Bonus CustomAnimAndDuration = AnimState:UPGRADE_NUMENOR_STONEWORK AnimTime:0 End Geometry = BOX GeometryMajorRadius = 4.0 GeometryMinorRadius = 72.0 GeometryHeight = 24.0 GeometryIsSmall = No ;GeometryRotationAnchorOffset = X:1037.871 Y:0 Shadow = SHADOW_VOLUME End ;------------------------------------------------------------------------------ Object SamanenCampFloor ; *** ART Parameters *** Draw = W3DFloorDraw ModuleTag_01 ModelName = GBCampFloor ForceToBack = Yes End ; *** AUDIO Parameters *** VoiceSelect = Gui_PlotSelect2 ;Gui_PlotSelect ; ***DESIGN parameters *** DisplayName = OBJECT:CampFloor Side = Men EditorSorting = STRUCTURE ; Browser = CINEMATICS UNIT ArmorSet Conditions = None Armor = SamanenCampFloorArmor DamageFX = None End ; *** ENGINEERING Parameters *** ; The STRUCTURE KindOf is needed so this object will be given to the base ; owner when it's unpacked and show up in the right color on the radar map. KindOf = STRUCTURE SELECTABLE IMMOBILE DEFENSIVE_WALL NOT_AUTOACQUIRABLE MADE_OF_STONE ;STRUCTURE IMMOBILE NOT_AUTOACQUIRABLE ;//UNATTACKABLE NO_COLLIDE INERT RadarPriority = NOT_ON_RADAR Body = ActiveBody ModuleTag_03 MaxHealth = 10000.0 End ; Note that structures with "RUBBLE" states should not use DestroyDie; such buildings are ; never truly destroyed, even when reduced to zero health. Also note that garrisonable ; buildings automatically stick around because GarrisonContain has it's own DieModule Behavior = SlowDeathBehavior ModuleTag_SlowDeathWithoutRubble DestructionDelay = 1000 End Geometry = BOX GeometryMajorRadius = 0.8 GeometryMinorRadius = 0.8 GeometryHeight = 0.8 GeometryIsSmall = Yes End ;------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;Angmar mill Object SamanenHouseInterface ; ***DESIGN parameters *** DisplayName = OBJECT:ForBuilding Description = CONTROLBAR:ToolTipConstructAngmarMill Side = Angmar EditorSorting = STRUCTURE ThreatLevel = 1.0 CommandPointBonus = GENERIC_ECONOMY_COMMAND_POINT_BONUS CommandSet = SellableCommandSet BuildCost = ANGMAR_MILL_BUILDCOST BuildTime = ANGMAR_MILL_BUILDTIME VisionRange = MORDOR_SLAUGHTERHOUSE_VISION_RANGE ShroudClearingRange = ANGMAR_MILL_SHROUD_CLEAR BountyValue = ANGMAR_MILL_BOUNTY_VALUE ArmorSet Conditions = None Armor = StructureArmor End WeaponSet Conditions = None End ; *** AUDIO Parameters *** #include "..\..\..\Includes\StandardBuildingEvaEvents.inc" VoiceSelect = WildDefiledMineSelect 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_RESOURCE_BUILDING ; *** ENGINEERING Parameters *** RadarPriority = STRUCTURE KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE NEED_BASE_FOUNDATION IGNORE_FOR_VICTORY FS_FACTORY CAN_ATTACK LIVING_WORLD_BUILDING_MIRROR ECONOMY_STRUCTURE MADE_OF_STONE Behavior = GettingBuiltBehavior GetBuiltBehaviorTag WorkerName = MordorWorkerNoSelect SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY End Body = StructureBody ModuleTag_Body MaxHealth = 1500.0 MaxHealthDamaged = 750.0 MaxHealthReallyDamaged = 200.0 End Behavior = KeepObjectDie ModuleTag_IWantRubble End Behavior = StructureCollapseUpdate ModuleTag_Collapse MinCollapseDelay = 000 MaxCollapseDelay = 000 CollapseDamping = .5 MaxShudder = 0.6 MinBurstDelay = 250 MaxBurstDelay = 800 BigBurstFrequency = 4 FXList = INITIAL FX_StructureMediumCollapseNoSound FXList = ALMOST_FINAL FX_StructureAlmostCollapse DestroyObjectWhenDone = Yes CollapseHeight = 120 End Behavior = ProductionUpdate ModuleTag_UpgradeProducer End Behavior = TerrainResourceBehavior ModuleTag_MoneyProduction Radius = 20; ; How far we try to claim ground MaxIncome = GOBLIN_MINE_MONEY_AMOUNT ; If we were to get all we wanted, how much we would earn. Linear slope to 0 at 0% claim IncomeInterval = GOBLIN_MINE_MONEY_TIME ; How often (in msec) we give that much money End ClientBehavior = TerrainResourceClientBehavior ModuleTag_MoneyProductionClient End Behavior = BuildingBehavior BuildingModuleTag NightWindowName = N_Window ;FireWindowName = WINDOW_F01 End Behavior = CreateObjectDie ModuleTag_MakeLoadsOfTreasure DeathTypes = ALL -FADED CreationList = OCL_SpawnFornostTreasure_Small End End ;------------------------------------------------------------ ChildObject SamanenHouse_1 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN01 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN01 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR04 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR04 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 46 GeometryMinorRadius = 40 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_2 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN02 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN02 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR05 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR05 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 41 GeometryMinorRadius = 44 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_3 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN03 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN03 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR06 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR06 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 25 GeometryMinorRadius = 25 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_4 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN04 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN04 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR07 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR07 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 25 GeometryMinorRadius = 41 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_5 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN05 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN05 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR08 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR08 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 40 GeometryMinorRadius = 40 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_6 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN06 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN06 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR01 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR01 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 35 GeometryMinorRadius = 30 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_7 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN07 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN07 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR02 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR02 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 41 GeometryMinorRadius = 40 GeometryHeight = 40 GeometryOffset = X:6 Y:-9 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;------------------------------------------------------------ ChildObject SamanenHouse_8 SamanenHouseInterface Draw = W3DScriptedModelDraw ModuleTag_Draw OkToChangeModelColor = Yes UseStandardModelNames = Yes DefaultModelConditionState Model = GBGenN08 End ;--damaged building ModelConditionState = DAMAGED Model = GBGenN08 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingMedium ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 FireBuildingSmall ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = DAMAGED EnteringStateFX = FX_BuildingDamaged End ModelConditionState = REALLYDAMAGED Model = GBGenNR03 ParticleSysBone FireSmall01 FireBuildingLarge ParticleSysBone FireSmall02 FireBuildingLarge ParticleSysBone FireSmall03 FireBuildingMedium ParticleSysBone FireSmall04 SmokeBuildingLarge ParticleSysBone FireSmall05 SmokeBuildingLarge End AnimationState = REALLYDAMAGED EnteringStateFX = FX_BuildingReallyDamaged End ModelConditionState = RUBBLE Model = GBGenNR03 ParticleSysBone SmokeLarge01 SmokeBuildingLarge End AnimationState = RUBBLE EnteringStateFX = FX_BuildingReallyDamagedWithSound ;FX_BuildingReallyDamaged End ModelConditionState = POST_RUBBLE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End ModelConditionState = POST_COLLAPSE Model = None ParticleSysBone NONE SmokeBuildingMediumRubble End End Geometry = BOX GeometryMajorRadius = 35 GeometryMinorRadius = 20 GeometryHeight = 40 GeometryOffset = X:0 Y:0 Z:0 GeometryIsSmall = No Shadow = SHADOW_VOLUME End ;-------------------------------------------------------------------------------------- Object SamanenHousePing BuildVariations = SamanenHouse_1 SamanenHouse_2 SamanenHouse_3 SamanenHouse_4 SamanenHouse_5 SamanenHouse_6 SamanenHouse_7 SamanenHouse_8 End ;-------------------------------------------------------------------------------------- Object SamanenKillCampPing Draw = W3DScriptedModelDraw ModuleTag_Draw DefaultModelConditionState Model = None End End KindOf = INERT IMMOBILE UNATTACKABLE Body = ActiveBody ModuleTag_MakesKillWork MaxHealth = 1 End Behavior = LifetimeUpdate ModuleTag_HatchTrigger MinLifetime = 0.0 MaxLifetime = 0.0 End Behavior = SlowDeathBehavior ModuleTag_HatchProcess DestructionDelay = 0 Weapon = FINAL SamanenSelfDestructButton End End
weapon.ini (Basically, a self-destruct for when the keep is destroyed)
;------------------------------------------------------------------------------ Weapon SamanenSelfDestructButton IdleAfterFiringDelay = 0 AttackRange = 120 MinimumAttackRange = 0.8 WeaponSpeed = 401 ; dist/sec MinWeaponSpeed = 241 MaxWeaponSpeed = 601 ; dist/sec Upper limit on scaling, when attacking past nominal "max" range ScaleWeaponSpeed = Yes ; Used for lob weapons, scales speed proportional to range RadiusDamageAffects = ALLIES NOT_SIMILAR DelayBetweenShots = 0;1000 ; time between shots, msec PreAttackDelay = 0 PreAttackType = PER_ATTACK ; Do the delay each time we attack a new target FiringDuration = 0 DamageNugget ; A basic Nugget that just does damage Damage = 9999999 Radius = 270.0 DamageType = UNDEFINED DamageFXType = FLOOD_HORSE DeathType = NORMAL DamageScalar = 0% ALL -SamanenCampFloor -SamanenCampWall -GondorSentryTower -SamanenHouse_1 -SamanenHouse_2 -SamanenHouse_3 -SamanenHouse_4 -SamanenHouse_5 -SamanenHouse_6 -SamanenHouse_7 -SamanenHouse_8 ; only meta impact affects allied units. End End
armor.ini (in order for the self-destruct to work)
;------------------------------------------------------------------------------ Armor SamanenCampFloorArmor Armor = DEFAULT 0% ; 100% Armor = UNDEFINED 100% ; 100% End ;------------------------------------------------------------------------------ Armor SamanenCampWallArmor ;Nigh-invulnerable and ancient walls and wall structures -JBender Armor = DEFAULT 0% ;this sets the level for all nonspecified damage types Armor = FLAME 50% Armor = FROST 50% ; Armor = SIEGE 100% ;siege damage Armor = STRUCTURAL 200% ;structural damage - Grond inflicts this kind of damage Armor = LOGICAL_FIRE 10% Armor = UNDEFINED 100% ; 100% End
Edit: I gave the keep some abilities, feel free to ignore them. I know this is not what you want, but maybe later on the development of what you're working on, this OCL approach might result useful. Good luck and happy modding!
Edited by malvack, 13 August 2020 - 06:33 AM.
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users