Jump to content


Koo294

Member Since 10 Apr 2010
Offline Last Active Jan 09 2015 12:48 PM

Topics I've Started

Ranged banner carriers?

03 August 2013 - 10:44 PM

Are they possible? Whenever I try to add a ranged weapon to a banner carrier it won't use it. The closest I've got is making a fake banner carrier by slaving a unit to a horde when it reaches level 2, but it's really glitchy and not a great fix at all.


The ANY object filter

01 August 2013 - 11:17 AM

So I basically understand object filters, for example

 

ObjectFilter = NONE +INFANTRY

 

will only allow infantry through. But how does ANY work? I've been searching a bit and i can't find anything to explain it. For example:

 

ObjectFilter = ANY +INFANTRY -MONSTER -MACHINE -CAVALRY -ARMY_OF_DEAD

 

So it allows infantry through, and not monsters, machines, cavalry or army of the dead. But what about everything else? Do they pass or fail this filter? If they all pass why have +anything, and if they fail why have -anything? Or is there a specific list of unit types that pass the ANY filter?


Fortress upgrades causing catapult destruction

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

Animated textures?

19 July 2013 - 11:13 PM

I can't seem to find any tutorials on how to implement these, so I'm asking here. I've messed around with the options in the 3ds max and renx W3D material editors, and with niether can I make working animated textures. Even simply importing a flame model and re-exporting it results in a static texture.