Jump to content


Photo

Fortress upgrades causing catapult destruction

fortress upgrades catapult destruction

  • Please log in to reply
No replies to this topic

#1 Koo294

Koo294
  • Members
  • 16 posts
  • Location:Installation 01
  • Projects:Speak of a ring travels far...
  •  Top Hobbitses

Posted 20 July 2013 - 11:29 PM

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.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users