I have an interesing bug which i can't really figure out. I've created a new faction, with a new fortress that has an upgrade similar to the dwarven mighty catapult (most of the code was just copied across). However, whenever i upgrade the fortress (any upgrade) after I've upgraded to the catapult, the catapult self-destructs. I have no idea what's causing this, my best guess at the moment is that it's somehow related to the slave relationship.
E: After more testing i have determined it is a problem with the fortress code, not the catapult, as if i swap catapults with the dwarven fort then the dwarven catapult on my fort will self-destruct whereas the artillery catapult on the dwarven fort won't.
E2: If I remove the
Behavior = SlaveWatcherBehavior WatchTheTreb End
lines, it no longer self-destructs, but it no longer fires when you tell it to either.
E3: It seems to be a conflict with the spike moat upgrade. As soon as i research the spike moat upgrade the bug disappears and the catapult no longer self-destructs
E4: SOLVED: it was the DestroyedWhenSold for the spike moat that was destroying the catapults. Only problem now is that building spike moat disables the catapult.
Fortress code:
Object CovenantFortressCitadel // *** ART Parameters *** SelectPortrait = cov_fort_portrait ButtonImage = cov_fort_butimg //-------------------------------- //-------------------------------- Draw = W3DScriptedModelDraw ModuleTag_MainDraw 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 OkToChangeModelColor = Yes StaticModelLODMode = Yes // Will append M or L to the skin name depending on GameLOD DefaultModelConditionState Model = COV_FORTRESS WeaponLaunchBone = PRIMARY ARROW_ WeaponLaunchBone = SECONDARY BARRELOUT1 //For Oil casks WeaponLaunchBone = TERTIARY BARRELOUT2 WeaponLaunchBone = QUATERNARY BARRELOUT3 WeaponLaunchBone = QUINARY BARRELOUT4 End ;// Animation state for build placement cursor AnimationState = BUILD_PLACEMENT_CURSOR BeginScript CurDrawableHideSubObject("COV_SHIELD") EndScript End ;// Animation state for phantom structure AnimationState = PHANTOM_STRUCTURE BeginScript CurDrawableHideSubObject("COV_SHIELD") EndScript End //--Damage States--- ModelConditionState = DAMAGED Model = COV_FORTRESS Texture = cov_fortress.tga cov_fortress_dam.tga End AnimationState = DAMAGED EnteringStateFX = FX_FortressDamaged End ModelConditionState = REALLYDAMAGED Model = COV_FORT_D1 Texture = cov_fortress.tga cov_fortress_dam.tga End AnimationState = REALLYDAMAGED Animation = Fortress_ReallyDamaged AnimationName = COV_FORT_D1SKL.COV_FORT_D1A AnimationMode = ONCE End EnteringStateFX = FX_FortressReallyDamaged End ModelConditionState = RUBBLE Model = COV_FORT_D2 Texture = cov_fortress.tga cov_fortress_dam.tga End AnimationState = RUBBLE Animation = Fortress_ReallyDamaged AnimationName = COV_FORT_D2SKL.COV_FORT_D2A AnimationMode = ONCE End EnteringStateFX = FX_FortressCollapse End //---Stonework--- ; ModelConditionState = UPGRADE_NUMENOR_STONEWORK ; Model = COV_FORTRESS ; Texture = KBFortress.tga KBFortress_Ice.tga ; Texture = KBFortress_NRM.tga KBFortressNRM_Ice.tga ; End //---Snow--- ; ModelConditionState = SNOW ; Model = KBFortress ; Texture = KBFortress.tga KBFortress_Snow.tga ; End End ; Draw = W3DScriptedModelDraw ModuleTag_Draw_HCBanner ; OkToChangeModelColor = Yes ; DefaultModelConditionState ; Model = KBHCFortress ; End ; MultiPlayerOnly = Yes ; End ;-------------------------------- Draw = W3DScriptedModelDraw ModuleTag_HouseOfHealingDraw OkToChangeModelColor = Yes StaticModelLODMode = Yes // Will append M or L to the skin name depending on GameLOD DefaultModelConditionState Model = NONE End //---Build Up--- ModelConditionState = UPGRADE_HOUSE_OF_HEALING USER_3 DAMAGED Model = KBFHoLa_D1 End ModelConditionState = UPGRADE_HOUSE_OF_HEALING USER_3 REALLYDAMAGED Model = KBFHoLa_D2 ; Texture = GBFortress1.tga GBFortress1D.tga End ModelConditionState = UPGRADE_HOUSE_OF_HEALING USER_3 UPGRADE_NUMENOR_STONEWORK Model = KBFHoLa_A ; Texture = GBFortress1.tga GBFortress1_U.tga End ModelConditionState = UPGRADE_HOUSE_OF_HEALING USER_3 SNOW Model = KBFHoLa_A Texture = KBFortressX.tga KBFortressX_Snow.tga End ModelConditionState = UPGRADE_HOUSE_OF_HEALING USER_3 Model = KBFHoLa_A End AnimationState = UPGRADE_HOUSE_OF_HEALING USER_3 Animation = RiseUp AnimationName = KBFHoLa_ASKL.KBFHoLa_ABLD AnimationMode = ONCE AnimationSpeedFactorRange = 5.0 5.0 End End //---Damage States--- ModelConditionState = UPGRADE_HOUSE_OF_HEALING DAMAGED Model = KBFHoLa_D1 ;Texture = KBFortressX.tga KBFortressX_D1.tga End ModelConditionState = UPGRADE_HOUSE_OF_HEALING REALLYDAMAGED Model = KBFHoLa_D2 ;Texture = KBFortressX.tga KBFortressX_D1.tga End AnimationState = UPGRADE_HOUSE_OF_HEALING REALLYDAMAGED Animation = ReallyDamaged AnimationName = GBFHeal_D2SKL.GBFHeal_D2AN AnimationMode = ONCE End End ModelConditionState = UPGRADE_HOUSE_OF_HEALING RUBBLE Model = KBFHoLa_D3 ;Texture = KBFortressX.tga KBFortressX_D1.tga End AnimationState = UPGRADE_HOUSE_OF_HEALING RUBBLE Animation = Destroyed AnimationName = KBFHoLa_D3SKL.KBFHoLa_D3AN AnimationMode = ONCE End End //---Stonework upgrade ModelConditionState = UPGRADE_NUMENOR_STONEWORK UPGRADE_HOUSE_OF_HEALING Model = KBFHoLa ; Texture = KBFortressX.tga KBFortressX_Ice.tga ; Texture = KBFortressX_NRM.tga KBFortressX_Ice_NRM.tga End //---Snow--- ModelConditionState = SNOW UPGRADE_HOUSE_OF_HEALING Model = KBFHoLa Texture = KBFortressX.tga KBFortressX_Snow.tga End //---Default Purchased States ModelConditionState = UPGRADE_HOUSE_OF_HEALING Model = KBFHoLa End End Behavior = BuildingBehavior BuildingModuleTag NightWindowName = N_Window ;FireWindowName = WINDOW_F01 ; End End ;//-------------------------------- ;//Artillery Tower Draw = W3DScriptedModelDraw ModuleTag_ArtilleryTowerDraw 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_1 DAMAGED Model = COV_FORT_GTB Texture = cov_fort_GTbase.tga cov_fort_GTbase_d.tga End ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_1 REALLYDAMAGED Model = COV_FORT_GTB Texture = cov_fort_GTbase.tga cov_fort_GTbase_d.tga End ModelConditionState = UPGRADE_FORTRESS_MONUMENT USER_1 Model = COV_FORT_GTB End AnimationState = UPGRADE_FORTRESS_MONUMENT USER_1 Animation = RiseUp AnimationName = COV_FORT_GTBS.COV_FORT_GTBA AnimationMode = ONCE ; AnimationSpeedFactorRange = 4.0 4.0 End ParticleSysBone = NONE CovBuildingContructDustCastles FollowBone:YES ParticleSysBone = NONE CovBuildingContructDustCastles2 FollowBone:YES End //--Damage States--- ModelConditionState = UPGRADE_FORTRESS_MONUMENT DAMAGED Model = COV_FORT_GT Texture = cov_fort_GTbase.tga cov_fort_GTbase_d.tga End ModelConditionState = UPGRADE_FORTRESS_MONUMENT REALLYDAMAGED Model = COV_FORT_GT Texture = cov_fort_GTbase.tga cov_fort_GTbase_d.tga End ModelConditionState = UPGRADE_FORTRESS_MONUMENT RUBBLE Model = COV_FORT_GT Texture = cov_fort_GTbase.tga cov_fort_GTbase_d.tga End //Snow ModelConditionState = SNOW UPGRADE_FORTRESS_MONUMENT Model = COV_FORT_GT ; Texture = DBFortress1.tga DBFortress1_Snow.tga End //Normal ModelConditionState = UPGRADE_FORTRESS_MONUMENT Model = COV_FORT_GT End End ;//-------------------------------- ;//Fortress Door Draw = W3DScriptedModelDraw ModuleTag_DrawDoor DefaultModelConditionState Model = COV_FORT_DRC End //---Damage States--- ModelConditionState = DAMAGED DOOR_1_WAITING_OPEN Model = COV_FORT_DRO End ModelConditionState = DAMAGED Model = COV_FORT_DRC End ModelConditionState = REALLYDAMAGED Model = COV_FORT_DRC End ; ModelConditionState = RUBBLE ; Model = DBFDoor_D3 ; End ; ; AnimationState = RUBBLE ; Animation = Door_ReallyDamaged ; AnimationName = DBFDoor_D3.DBFDoor_D3 ; AnimationMode = ONCE ; AnimationBlendTime = 50 ; End ; End //--normal states ModelConditionState = DOOR_1_OPENING Model = COV_FORT_DROA End AnimationState = DOOR_1_OPENING Animation = COV_FORT_DRO AnimationName = COV_FORT_DROA.COV_FORT_DROA AnimationMode = ONCE AnimationBlendTime = 0 End ;// Flags = START_FRAME_FIRST End ModelConditionState = DOOR_1_CLOSING Model = COV_FORT_DRCA ParticleSysBone = NONE trollCageDust End; AnimationState = DOOR_1_CLOSING Animation = COV_FORT_DRCA AnimationName = COV_FORT_DRCA.COV_FORT_DRCA AnimationMode = ONCE AnimationBlendTime = 0 End ; Flags = START_FRAME_FIRST End ModelConditionState = DOOR_1_WAITING_OPEN Model = COV_FORT_DRO ;ParticleSysBone = NONE BuildingDoughnutCloud End AnimationState = DOOR_1_WAITING_OPEN End ModelConditionState = POST_RUBBLE Model = None End ModelConditionState = POST_COLLAPSE Model = None End End ; //Icy Mist //Blessed Mist ; Draw = W3DScriptedModelDraw ModuleTag_DrawMist ; ; DefaultModelConditionState ; Model = None ; End ; ; ModelConditionState = UPGRADE_NUMENOR_STONEWORK ;Upgrade_AngmarFortressIceWalls ; Model = None ; ParticleSysBone = NONE IceWallMist ;EnshroudingMist ; ParticleSysBone = NONE IceWallMist02 ;EnshroudingMist ; End ; End //----------the Bib Draw = W3DFloorDraw ModuleTag_DrawFloor ModelName = COV_FORT_BIB End ; ***DESIGN parameters *** DisplayName = OBJECT:AngmarFortress Description = OBJECT:CovenantFortressDescription Side = Covenant EditorSorting = STRUCTURE ThreatLevel = 1.0 CommandPointBonus = GENERIC_FORTRESS_COMMAND_POINT_BONUS BuildCost = 0 BuildTime = ANGMAR_FORTRESS_BUILDTIME ; in seconds VisionRange = ANGMAR_FORTRESS_VISION_RANGE ShroudClearingRange = ANGMAR_FORTRESS_SHROUD_CLEAR CommandSet = CovenantFortressCommandSet WeaponSet Conditions = None Weapon = PRIMARY AngmarFortressBattleTowerBow 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 = MordorFortressSelect SoundOnDamaged = BuildingLightDamageStone SoundOnReallyDamaged = BuildingHeavyDamageStone VoiceSelectUnderConstruction = BuildingEvilVoiceSelectUnderConstruction UnitSpecificSounds UnderConstruction = BuildingBigConstructionLoop ;// Built first time UnderRepairFromDamage = BuildingBigConstructionLoop ;// 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:StatueHeroicBuildStoneDebris2 Animation:DBFGCAP_A.DBFGCAP_A Frames:116 AnimationSound = Sound:StatueHeroicBuildStoneDebris1 Animation:DBFGCAP_A.DBFGCAP_A Frames:130 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 ModuleTag_GettingBuiltBehavior WorkerName = AngmarWorkerNoSelect SpawnTimer = DEFAULT_STRUCTURE_HEALDELAY End Behavior = CastleMemberBehavior ModuleTag_CMB BeingBuiltSound = BuildingBigConstructionLoop End ;//----------------------------------------------- ;//Used for hero revival and initial construction Behavior = ProductionUpdate ProductionUpdateModuleTag ProductionModifier ;// An object-local discount. RequiredUpgrade = Upgrade_AngmarFortressBanners CostMultiplier = 0.80 ModifierFilter = NONE +AngmarPorter End ProductionModifier RequiredUpgrade = Upgrade_AngmarFortressBanners CostMultiplier = 0.90 TimeMultiplier = 0.90 HeroPurchase = Yes ; Instead of an object filter, needs to be explicitly hero-revival-system compatible ModifierFilter = NONE +HERO End ProductionModifier RequiredUpgrade = Upgrade_AngmarFortressBanners CostMultiplier = 0.80 TimeMultiplier = 0.80 HeroRevive = Yes ModifierFilter = NONE +HERO End NumDoorAnimations = 1 DoorOpeningTime = 3000 ;//in mSeconds how long you want doors to be in open state DoorWaitOpenTime = 3000 ;//in mSeconds time the door stays open, so units can exit DoorCloseTime = 3000 ;//in mSeconds how long you want doors to be in open state End Behavior = QueueProductionExitUpdate ModuleTag_QueuePEU UnitCreatePoint = X:57.0 Y:0.0 Z:0.0 NaturalRallyPoint = X:109.0 Y:0.0 Z:0.0 ;//NaturalRallyPointX must always match GeometryMajorRadius! ExitDelay = 400 ;// Mainly for the multiple produced Red Guard. Make them come out one at a time. End ;//----------------------------------------------- Body = StructureBody ModuleTag_05 MaxHealth = ANGMAR_FORTRESS_HEALTH MaxHealthDamaged = ANGMAR_FORTRESS_HEALTH_DAMAGED MaxHealthReallyDamaged = ANGMAR_FORTRESS_HEALTH_REALLY_DAMAGED End Behavior = StructureCollapseUpdate ModuleTag_08 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 = 155 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:125.0 Y:0.0 Z:0.0 EntryPosition = X:30.0 Y:0.0 Z:0.0 ExitOffset = X:125.0 Y:0.0 Z:0.0 StatusForRingEntry = HOLDING_THE_RING UpgradeForRingEntry = Upgrade_RingHero Upgrade_FortressRingHero ObjectToDestroyForRingEntry = NONE +TheDroppedRing FXForRingEntry = FX_OneRingFlare End // Oil Casks special power, bought as improvement Behavior = ObjectCreationUpgrade CreateTheMoat TriggeredBy = Upgrade_AngmarFortressSpikes Delay = 0.0 ThingToSpawn = AngmarFortressSpikes DestroyWhenSold = Yes FadeInTime = 600 End // Angmar Stonework improvement, just an upgrade Behavior = CastleUpgrade ModuleTag_PassOutCovenantShieldsUpgrade TriggeredBy = Upgrade_CovenantFortressShieldsTrigger Upgrade = Upgrade_CovenantFortressShields WallUpgradeRadius = MEN_FORTRESS_WALL_EFFECTIVE_RADIUS End Behavior = AttributeModifierUpgrade ModuleTag_Reinforced TriggeredBy = Upgrade_CovenantFortressShields AttributeModifier = CovenantShieldsKeep_Bonus End // Hide the shields by default Behavior = SubObjectsUpgrade ModuleTag_HideShields TriggeredBy = Upgrade_StructureLevel1 HideSubObjects = COV_SHIELD End Behavior = SubObjectsUpgrade ModuleTag_ShowShields TriggeredBy = Upgrade_CovenantFortressShields ShowSubObjects = COV_SHIELD End Behavior = ModelConditionUpgrade ModuleTag_ShowTheShields TriggeredBy = Upgrade_CovenantFortressShields AddConditionFlags = UPGRADE_NUMENOR_STONEWORK Permanent = Yes End // Flaming Munitions improvement, just an upgrade, but doesn't do anything for us. Behavior = ModelConditionUpgrade ModuleTag_ShowFlamingMunitions TriggeredBy = Upgrade_AngmarFortressIceMunitions AddConditionFlags = FORTRESS_IMPROVEMENT_1 //AddTempConditionFlag = ModelConditionState:USER_2 //For buildup TempConditionTime = 8.0 //try to match buildup anim time End Behavior = CastleUpgrade ModuleTag_PassOutFlamingMunitionsUpgrade TriggeredBy = Upgrade_AngmarFortressIceMunitionsTrigger Upgrade = Upgrade_AngmarFortressIceMunitions End Behavior = AudioLoopUpgrade ModuleTag_FlamingMunitionsBuildLoop ; Play a "build loop" while the Mighty Catapult is building up TriggeredBy = Upgrade_AngmarFortressIceMunitions ;ConflictsWith = SoundToPlay = BuildingConstructionLoop KillOnDeath = Yes KillAfterMS = 3500 RequiresAllTriggers = Yes End Behavior = WeaponSetUpgrade ModuleTag_FlamingAttack TriggeredBy = Upgrade_AngmarFortressIceMunitions End Behavior = SubObjectsUpgrade ModuleTag_ShowIceMunitions TriggeredBy = Upgrade_AngmarFortressIceMunitions ShowSubObjects = IceMunitions01 IceMunitions02 IceMunitions03 IceMunitions04 IceMunMist_01 IceMunMist_02 IceMunMist_03 IceMunMist_04 IceM1_1 IceM1_2 IceM3_1 IceM3_2 IceMunMist_01D2 IceMunMist_03AD2 IceMunMist_03BD2 End Behavior = StatusBitsUpgrade ModuleTag_FakeOut ;// I need to react to the upgrade, so I can have it for when new construction asks me for all the upgrades TriggeredBy = Upgrade_AngmarFortressIceMunitions End ;// No subobject for the torches right now. ;// Behavior = SubObjectsUpgrade ModuleTag_ShowTorches ;// TriggeredBy = Upgrade_GoodFortressFlamingMunitions ;// ShowSubObjects = GBFFLAMING ;// End // Banners improvement, the half that gives an aura bonus, not the purchase discount part (that is in the ProductionUpdate) Behavior = AttributeModifierAuraUpdate ModuleTag_BannerLeadership StartsActive = No ;If no, requires upgrade to turn on. BonusName = AngmarFortressBannersLeadership TriggeredBy = Upgrade_AngmarFortressBanners RefreshDelay = 2000 Range = 300 ObjectFilter = GENERIC_BUFF_RECIPIENT_OBJECT_FILTER End Behavior = SubObjectsUpgrade ModuleTag_ShowBanners TriggeredBy = Upgrade_AngmarFortressBanners ShowSubObjects = KBTorches MBFDPF ;MBFDPFG End // House of Lamentation improvement, Purchase discount is in ProductionUpdate Behavior = ModelConditionUpgrade ModuleTag_ShowHouseOfLamentation TriggeredBy = Upgrade_AngmarFortressHouseOfLamentation AddConditionFlags = UPGRADE_HOUSE_OF_HEALING AddTempConditionFlag = ModelConditionState:USER_3 //For buildup TempConditionTime = 7.0 //try to matc Permanent = Yes End ; Behavior = UnpauseSpecialPowerUpgrade ModuleTag_HouseOfLamentationUnpause ; SpecialPowerTemplate = SpecialAbilityFakeLeadership ; StartsPaused = Yes ; TriggeredBy = Upgrade_AngmarFortressHouseOfLamentation ; End Behavior = SpecialPowerModule ModuleTag_HouseOfLamentationUpdate SpecialPowerTemplate = SpecialAbilityFakeLeadership UpdateModuleStartsAttack = Yes End Behavior = AttributeModifierAuraUpdate ModuleTag_HouseOfLamentation StartsActive = No ;If no, requires upgrade to turn on. BonusName = DeathMaskModifier TriggeredBy = Upgrade_AngmarFortressHouseOfLamentation RefreshDelay = 2000 Range = ANGMAR_FORTRESS_DEATH_MASK_RANGE TargetEnemy = Yes AntiCategory = LEADERSHIP BUFF ; This means cancel all previous leadership bonuses ObjectFilter = ANY +INFANTRY +CAVALRY -STRUCTURE -BASE_FOUNDATION +HERO +HORDE End Behavior = AudioLoopUpgrade ModuleTag_HouseOfHealingBuildLoop // Play a "build loop" while the House of Healing is building up TriggeredBy = Upgrade_AngmarFortressHouseOfLamentation //ConflictsWith = Upgrade_PosternGate Upgrade_WallBanner SoundToPlay = BuildingConstructionLoop KillOnDeath = Yes KillAfterMS = 5000 ; Should match the length of the build-up animation [Or a little shorter since sounds take a little while to die] End Behavior = CastleUpgrade ModuleTag_PassOutHouseOfHealingUpgrade TriggeredBy = Upgrade_AngmarFortressHouseOfLamentation Upgrade = Upgrade_AngmarFortressHouseOfLamentation End //Artillery Tower Behavior = ModelConditionUpgrade ModuleTag_ShowTheTower TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields RequiresAllTriggers = Yes AddConditionFlags = UPGRADE_FORTRESS_MONUMENT AddTempConditionFlag = ModelConditionState:USER_1 //For buildup TempConditionTime = 10.0 //try to match buildup anim time End //Delay the button being available with this little trick wait some time before granting the upgrade to allow for buildup. Behavior = ObjectCreationUpgrade CatapultReady TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields RequiresAllTriggers = Yes Delay = 8500 GrantUpgrade = Upgrade_DwarvenFortressMightyCatapultReady End Behavior = AudioLoopUpgrade ModuleTag_MightyCatapultBuildLoop ; Play a "build loop" while the Mighty Catapult is building up TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields ;ConflictsWith = SoundToPlay = BuildingBigConstructionLoop ;BuildingConstructionLoop KillOnDeath = Yes KillAfterMS = 8500 RequiresAllTriggers = Yes End Behavior = UnpauseSpecialPowerUpgrade ModuleTag_CatapultEnabler SpecialPowerTemplate = SpecialAbilityCovenantArtilleryTower TriggeredBy = Upgrade_DwarvenFortressMightyCatapultReady End Behavior = SpecialPowerModule ModuleTag_CatapultStarter SpecialPowerTemplate = SpecialAbilityCovenantArtilleryTower UpdateModuleStartsAttack = Yes StartsPaused = Yes InitiateSound = MightyCatapultStarterMS End Behavior = WeaponFireSpecialAbilityUpdate ModuleTag_SpireWeaponFireUpdate SpecialPowerTemplate = SpecialAbilityCovenantArtilleryTower WhichSpecialWeapon = 1 UnpackTime = 10 PackTime = 10 SpecialWeapon = CovenantArtilleryFortressWeapon TriggerSound = MightyCatapultRotateMS ApproachRequiresLOS = No End Behavior = AutoAbilityBehavior ModuleTag_AutoAbilityLightningBehavior SpecialAbility = SpecialAbilityCovenantArtilleryTower // Use this ability End ; Behavior = GeometryUpgrade ModueTag_CatapultGeom ; TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields ; ConflictsWith = Upgrade_PosternGate Upgrade_OpenGarrison ; RequiresAllTriggers = Yes ; ShowGeometry = TrebGeom ; HideGeometry = TowerGeom DummyGeom ; WallBoundsMesh = P1 ; End Behavior = ObjectCreationUpgrade FirstCatapult TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields RequiresAllTriggers = Yes Delay = 9000 ThingToSpawn = CovenantFortressGun Offset = X:0.0 Y:0.0 Z:60.0 FadeInTime = 600 End Behavior = SlaveWatcherBehavior WatchTheTreb End Behavior = GeometryUpgrade TowerGeom TriggeredBy = Upgrade_CovenantFortressGun Upgrade_CovenantFortressShields RequiresAllTriggers = Yes ShowGeometry = HighTowerGeom 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. Visible = No ;// Don't show decal when a resource building is selected. End #include "..\..\..\FortressRingFunc.inc" Geometry = CYLINDER GeometryMajorRadius = 84 GeometryHeight = 60 AdditionalGeometry = CYLINDER GeometryName = Spike1 GeometryMajorRadius = 18 GeometryHeight = 150 GeometryOffset = X:56 Y:56 Z:0 AdditionalGeometry = CYLINDER GeometryName = Spike2 GeometryMajorRadius = 18 GeometryHeight = 150 GeometryOffset = X:56 Y:-56 Z:0 AdditionalGeometry = CYLINDER GeometryName = Spike3 GeometryMajorRadius = 18 GeometryHeight = 150 GeometryOffset = X:-56 Y:56 Z:0 AdditionalGeometry = CYLINDER GeometryName = Spike4 GeometryMajorRadius = 18 GeometryHeight = 150 GeometryOffset = X:-56 Y:-56 Z:0 AdditionalGeometry = CYLINDER GeometryName = HighTowerGeom GeometryMajorRadius = 15 GeometryHeight = 150 GeometryOffset = X:0 Y:0 Z:0 GeometryUsedForHealthBox = No GeometryIsSmall = No Shadow = SHADOW_VOLUME BuildCompletion = PLACED_BY_PLAYER GeometryContactPoint = X:-104 Y:79 Z:0 Repair GeometryContactPoint = X:41 Y:-42 Z:0 GeometryContactPoint = X:41 Y:-42 Z:45 GeometryContactPoint = X:-41 Y:-42 Z:45 GeometryContactPoint = X:-41 Y:-42 Z:0 GeometryContactPoint = X:-80 Y:0 Z:0 GeometryContactPoint = X:-80 Y:0 Z:45 GeometryContactPoint = X:-41 Y:42 Z:45 GeometryContactPoint = X:-41 Y:42 Z:0 GeometryContactPoint = X:41 Y:42 Z:0 GeometryContactPoint = X:41 Y:42 Z:45 GeometryContactPoint = X:80 Y:0 Z:45 GeometryContactPoint = X:80 Y:0 Z:0 GeometryContactPoint = X:0 Y:0 Z:180 Swoop End
Artillery is the catapult
Artillery code:
Object CovenantFortressGun ;DwarvenCatapult Draw = W3DTruckDraw ModuleTag_01 OkToChangeModelColor = Yes StaticModelLODMode = No //All LOD's use this model or require manual setup. DefaultModelConditionState Model = COV_FORT_GUN WeaponLaunchBone = PRIMARY BOLT End IdleAnimationState StateName = Stand Animation = IDLES AnimationName = GUFCatapA_SKL.GUFCatapA_IDLA AnimationMode = ONCE AnimationBlendTime = 15 End End //Firing Lightning ModelConditionState = FIRING_OR_PREATTACK_A Model = COV_FORT_GUN End AnimationState = FIRING_OR_PREATTACK_A ;ParticleSysBone = BOLT AngSanctumCharge FollowBone:Yes ;ParticleSysBone = BOLT AngSanctumCharge02 FollowBone:Yes ParticleSysBone = BOLT AngSanctumCharge03 FollowBone:Yes ParticleSysBone = BOLT AngSanctumCharge04 FollowBone:Yes Animation AnimationName = COV_FORT_GUNS.COV_FORT_GUNA AnimationMode = ONCE AnimationBlendTime = 10 End FrameForPristineBonePositions = 70 ; Animation = Normal ; AnimationName = GUFCatapA_SKL.GUFCatapA_ATKA ; AnimationMode = ONCE ; ;UseWeaponTiming = Yes ; End ; Animation = NoBlend ; AnimationName = GUFCatapA_SKL.GUFCatapA_ATKA ; AnimationMode = ONCE ; ;UseWeaponTiming = Yes ; End ; Flags = MAINTAIN_FRAME_ACROSS_STATES ; StateName = Attack ; FrameForPristineBonePositions = 31 ; BeginScript ; Prev = CurDrawablePrevAnimationState() ; if Prev == "Stand" or Prev == "Attack" ; then ; return "NoBlend" ; else ; return "Normal" ; end ; EndScript End End ;--------------- // ***DESIGN parameters *** Side = Covenant EditorSorting = UNIT ThreatLevel = DWARVEN_CATAPULT_THREAT_LEVEL ThreatBreakdown DwarvenCatapult_DetailedThreat AIKindOf = SIEGEWEAPON End TransportSlotCount = TRANSPORTSLOTCOUNT_SIEGE ShowHealthInSelectionDecal = Yes ThingClass = MACHINE // No command points for this as it's free. CommandPoints = 0 ShockwaveResistance = SHOCKWAVE_RESISTANCE_ALWAYS // Needs a specialised command set without move based commands. CommandSet = EmptyCommandSet // This is required so that the build phase lasts as long as the anim. BuildFadeInOnCreateTime = 7.0 BuildCost = DWARVEN_CATAPULT_BUILDCOST BuildTime = DWARVEN_CATAPULT_BUILDTIME VisionRange = DWARVEN_CATAPULT_VISION_RANGE ShroudClearingRange = SHROUD_CLEAR_ARTILLERY MaxVisionBonusPercent = 300% VisionBonusTestRadius = 200 VisionBonusPercentPerFoot = 1.0% BountyValue = DWARVEN_CATAPULT_BOUNTY_VALUE DisplayName = OBJECT:DwarvenCatapult CrushableLevel = 2 ;What am I?: 0 = for infantry, 1 = for trees, 2 = general vehicles CrusherLevel = 0 ;What can I crush?: 0 = small animals, 1 = infantry, 2 = trees, 3 = vehicles ShockwaveResistance = SHOCKWAVE_RESISTANCE_IMMUNE CamouflageDetectionMultiplier = CAMOUFLAGE_DETECTION_DISTANCE_SHORTISH // *** ENGINEERING Parameters *** RadarPriority = UNIT KindOf = PRELOAD CAN_CAST_REFLECTIONS MACHINE SCORE CAN_ATTACK CAN_ATTACK_WALLS IGNORES_SELECT_ALL NOT_AUTOACQUIRABLE UNATTACKABLE SIEGEENGINE // *** AUDIO Parameters *** VoiceAttack = DwarfCatapultFoleySelect VoiceAttackCharge = DwarfCatapultFoleySelect VoiceAttackMachine = DwarfCatapultFoleySelect VoiceAttackStructure = DwarfCatapultFoleySelect VoiceCreated = UpgradeDwarfFortressMightyCatapult VoiceFullyCreated = UpgradeDwarfFortressMightyCatapult VoiceGuard = NoSound VoiceMove = NoSound VoiceMoveToCamp = NoSound VoiceMoveToHigherGround = NoSound VoiceMoveWhileAttacking = NoSound VoicePriority = 4 VoiceRetreatToCastle = NoSound VoiceSelect = DwarfCatapultFoleySelect VoiceSelectBattle = DwarfCatapultFoleySelect SoundImpact = ImpactHorse SoundMoveLoop = NoSound SoundMoveStart = MightyCatapultMoveStart ;CatapultMoveStart UnitSpecificSounds VoiceGarrison = NoSound VoiceEnterUnitElvenTransportShip = NoSound VoiceInitiateCaptureBuilding = NoSound End #include "..\..\..\includes\StandardUnitEvaEvents.inc" CrowdResponseKey = Dwarf Behavior = LargeGroupAudioUpdate ModuleTag_LGAU ; Tie into LargeGroupAudio system Key = Humanoid_Male Dwarf Dwarf_Male SiegeWeapon Catapult Dwarf_Siege UnitWeight = 2 End ClientBehavior = ModelConditionAudioLoopClientBehavior ModuleTag_foo ModelCondition = Required:EMOTION_CELEBRATING Excluded:DYING ENGAGED Sound:EmotionDwarfCompilationVoxCheerSinglesLoop ;MOVING ATTACKING ModelCondition = Required:EMOTION_POINTING Excluded:DYING ENGAGED Sound:EmotionDwarfCompilationVoxTauntSinglesLoop ;MOVING ATTACKING ModelCondition = Required:EMOTION_TAUNTING Excluded:DYING ENGAGED Sound:EmotionDwarfCompilationVoxTauntSinglesLoop ;MOVING ATTACKING End ClientBehavior = AnimationSoundClientBehavior ModuleTag_AnimAudioBehavior MaxUpdateRangeCap = 800 AnimationSound = Sound:CatapultCreate Animation:MUCatapult_A.MUCatapult_A Frames:130 AnimationSound = Sound:BodyFallOrc Animation:MUCatapltD_SKL.MUCatapltD_ANM Frames:35 End WeaponSet Conditions = None Weapon = PRIMARY CovenantArtilleryShot //AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI End ArmorSet Conditions = None Armor = FortressSiegeEngineArmor DamageFX = None End //Behaviors Body = HighlanderBody ModuleTag_10 //Can take damage, but won't die. Can only die from ::kill() or other unresistable damage MaxHealth = 50.0 End Behavior = AIUpdateInterface ModuleTag_03 AutoAcquireEnemiesWhenIdle = No //AILuaEventsList = TrebuchetFunctions End LocomotorSet Locomotor = FloatingCatapultLocomotor Condition = SET_NORMAL Speed = 0 End Behavior = PhysicsBehavior ModuleTag_04 End //Just explode and go away really really fast Behavior = DestroyDie ModuleTag_Die End Behavior = TransitionDamageFX ModuleTag_8 DamagedFXList1 = Loc: X:0 Y:0 Z:5 FXList:FX_TrebDamage // ReallyDamagedParticleSystem1 = Bone:None RandomBone:No PSys:FireBuildingLarge ReallyDamagedFXList1 = Loc: X:0 Y:0 Z:5 FXList:FX_TrebDamage // RubbleParticleSystem1 = Bone:None RandomBone:No PSys:FireBuildingLarge RubbleFXList1 = Loc: X:0 Y:0 Z:5 FXList:FX_TrebDamage End //We should die when the fortress does! Behavior = SlavedUpdate ModuleTag_Slave DieOnMastersDeath = Yes MarkUnselectable = No End Geometry = CYLINDER GeometryMajorRadius = 95.0 ; fudged to match the fortress' radius so the 'can I' and 'will I' are both the same. GeometryHeight = 18.0 GeometryIsSmall = Yes End
Edited by Koo294, 21 July 2013 - 03:29 PM.