Jump to content
Sign in to follow this  
Egozi44

More mod questions

Recommended Posts

So what does that mean for the textures used ingame? What would you recommend then for Diffuse, spec and normal maps?

 

the game auto defaults to dxt1 iirc, and it seems most of the art assets use nvidea dds format but i assume the latter is more for compression and saving space and memory, seeing as the game is a decade old almost and with advances in pc rigs....what would you recommend for a good quality/performance ratio? As far as i understand dxt1 isnt suited for greyscale alpha channel, its basicly black or white, show or hide, correct?

with the unit scale as it is , dxt1 would seem ok for difuse maps, dxt3/5 would seem better for normal maps due to a more explicit alpha resulting in less artifacting right? specular maps use (more or less) a dominant red spectrum, where blue is used for glow/highlight and green for reflection, so does a 5:6:5 still matter seeing how under accentuated the green channel is?

Edited by Ravendark

Share this post


Link to post

DXT is still basically the file format if you're working with DirectX. With multiple objects layered on top of each other etc it's basically impossible to see that the base textures only have 16 bit colors. Esp with all post effects and calculations that change the final pixel color.

You are correct, DXT1 is either on or off. So yes it's the goto for diffuse, assuming it's not a half transparent/translucent unit, otherwise as needed DXT3 or 5. Depending if you have clear cut transparencies or not.

Spec maps usually don't use alpha (obv alpha could still be used there, but I don't think it is in any standard shader). You also have to consider all the things spm stuff does is basically the setting of how intense the result is, it's still mixed with the other stuff, so 5 bit are usually enough. Using green for reflections is actually a wise choice as they can be the most distracting and thus you have just a little more control over them.

Normal maps do not use alpha at all, the color of the normal is the direction of the vector that pixel will have. It's RGB used as XYZ, subtracted by 0.5 (so you go from 0 to 1.0 to -0.5 to 0.5), and normalized via multiplied by 2 (so it's the normalized vector from -1.0 to 1.0).

As you can see you usually don't even need anything but DXT1, and as this saves to 1/8th of the original this is a lot of small texture sizes. Still if you look at a lot of games you see they have thousands of textures (where a lot of them have to be loaded into the graphic cards memory) which still take up a lot of space, also you need to consider if the players graphics card can hold all textures you need on the map it only needs to load them once instead of swapping them out and in again and again which takes time (also your graphics ram is usually the fastest memory in your pc, excluding cpu cache, so you want to have everything in there at once).

 

A dxtn file can be loaded and used in your memory as it's still a direct draw surface (hence the dds file extension), other non dds files might need to be expanded to an uncompressed format even when not used to prep them for being used, depending on usage, tga for example doesn't need to be expanded if just read.

Even if your usual low end graphics card has 2GB of memory now keep in mind the textures you send in there aren't the only things stored there. All the surfaces you draw on need their space too, and multiple times because of swap chains, and these are often floating point images, so 4*32 bits per pixel which means for 1024x1024 alone 134217728 bits (aka 16MB) but you usually now render in even larger 1920x1080 or 2048x2048 (about 32 and 64MB respectively) sizes. And your game probably isn't the only thing in there.

Share this post


Link to post

Reading the tutorial in the first part he states a few times something likeThis gives the reader the idea that you would expect DXT3/5 to compress colors better than DXT1 (this was not my intention) while he fails to understand that they all use the same compression, he even fails to understand, or at least express, that the compression used in DXTn isn't just reducing the size to 5:6:5. (I have no idea what you mean with this)

What he also doesn't understand is a reason why it's 5:6:5 and not 6:5:5 nor 5:5:6 nor 5:5:5 (what he used in his examples) the human eye can distinguish shades of green the best of all colors, thus a bit more is given (5:5:5 would waste 1 bit anyway). This is a huge difference and his 5 bit picture is not representative of the actual result of 5:6:5. (This is absolutely true and a large error on my part) The resulting image also varies a lot depending on which method is used to fill the last 2 or 3 bits.

It doesn't help that you cannot view his pictures in full size because his account is set to private (Again this is another major error on my part, I did not think about the effect on the article when I made my profile private) but keep in mind: in the previews one already cannot really see much difference, now remember the object is even smaller in the game itself.

He does not know what DXTn actually does, thus in his conclusion he still thinks DXT5 compresses color slightly better while it's the same exact compression. (Where do I say that it compresses colour better in the conclusion?, completely false) He also states that there isn't a point to using DXT3 over DXT5 while there certainly is, as stated in my explanation above. (I now know better, and will change this).

 

All in all he fails to understand what he is talking about, even from an artists perspective as 5:6:5 cannot be compared to 5:5:5 (yes self taught artists often miss the thing about how the human eye works, but learning about perception is one of the most important things).

(This error has been covered above)

The point of a compression format is to have big textures, which can be read in real time, with relative small file sizes. He mentions the tga format and says it's superior (No I do not say it is superior), but he doesn't know how that works either. Targa is nice, it's lossless, but the problem with targa is it's a runlength encoded compression, thus if you've got lots of pixels of the same color in one horizontal line it works incredibly well, but as soon as you start to have a more natural image the size explodes. In the worst case, where each pixel has a different color than the one in front of it it's even slightly bigger than uncompressed. As graphics evolve to be more and more realistic the textures are becoming more and more natural and less favorable for tga's rle.

 

My final judgement:

Nicely written lecture, but with no basis it's sadly just a waste of time, especially as it gives you the wrong ideas how stuff works. Sorry.

The article is a visual look at what happens to a texture from the various texture options that C&C3 has. There are indeed errors that nation need to be corrected, so I thank you for the corrections.

 

The article is from 2013, I hope he learned a bit more in the meantime and if not and reads this post takes it as constructive criticism and not an attack or anything!I know you can force the format, but I just cannot recommend using uncompressed but instead just increase the texture size (size of a 16x16 uncompressed block is 512 bits, with dxt it's 128, so you can have a 32x32 that takes up the same space which means you can get more details and less artifacts for the same size).

I can only recommend using uncompressed formats for the UI, nothing else.

 

One note: regardless of compression diagonal lines are always a problem, because of rasterization and resulting aliasing, esp if you zoom in more. As an artist one should try to have all edges aligned to be either horizontal or vertical if possile, this will reduce issues 100% (Not if your are using DXTn it won't), if completely horizontal/vertical, even if fully zoomed in.

Most games do not support the dxt normal map thingy as it's mostly just a pain in the butt for negligible results.

Share this post


Link to post

Where do I say that it compresses colour better in the conclusion?, completely false

You've already changed the text, so I am not able to quote it.

Not if your are using DXTn it won't

The things you pointed out on the lower corners of the quad is a very special case that only occurs in the size you've chosen, this happens very rarely but it's because it uses 4x4 blocks and there's just no way to cover these 3 colors.

You have lots of artifacts, even on the diffuse in your uncompressed picture, which are the result of aliasing. If you'd aligned the vertices of the uv in a way that these would have been axis aligned they would all be sharp as a razor.

 

I see you already started to change some stuff like changing 5:6:5 in the text and pictures, hope you don't just use the old ones and paint them over. Also I hope you're saving the jpg with full quality, otherwise it kills the whole purpose.

 

For a nice reference for axis aligned lines:

You don't need to be as extreme as they are, but it can certainly help in a few cases.

Edited by Lauren

Share this post


Link to post

You've already changed the text, so I am not able to quote it. (That's OK, PPM ( http://www.ppmforums.com/viewtopic.php?t=36296 ) has a copy\pasted version that was last edited in 2013, you can check that, before I edit it has well).

The things you pointed out on the lower corners of the quad is a very special case that only occurs in the size you've chosen, this happens very rarely but it's because it uses 4x4 blocks and there's just no way to cover these 3 colors.

So the provided visual example proved that your statement was hyperbole then?

I see you already started to change some stuff like changing 5:6:5 in the text and pictures, hope you don't just use the old ones and paint them over. Also I hope you're saving the jpg with full quality, otherwise it kills the whole purpose.

There is a clear difference between honest, and dishonest mistakes, would you not agree? And I am of course using full quality jpegs, I always do!

Again thanks for your corrections, feedback is always essential.

Edited by Madin

Share this post


Link to post

 

Normal maps do not use alpha at all, the color of the normal is the direction of the vector that pixel will have. It's RGB used as XYZ, subtracted by 0.5 (so you go from 0 to 1.0 to -0.5 to 0.5), and normalized via multiplied by 2 (so it's the normalized vector from -1.0 to 1.0).

 

Think i read somewhere that you could put any of the xyz components into the alpha channel, iirc it was an article about shader writing and using compressed normal maps, can't remember the forum it was on tho. could be it was in regards to using a custom writen shader to achieve that particular function. iirc the issue brought up was that normal maps handled compression awefully. Probably i mixed 2 different things in my head.

Share this post


Link to post

Yeah sure you can do that, but the standard shaders use RGB.

Theoretically it would be enough to save only 2 axis as the third can be calculated from them, but then you'd need a much longer time doing the calculations.

Edited by Lauren

Share this post


Link to post

Wow a lot happened here when I been away, I don't really think I can understand any of it :0 but I will try

Share this post


Link to post

Sorry for the delay

 

 

2. I tried anything I know and it keep happening

here GIF so you can see what I'm talking about (the smoke sort of cover it... so I may reupload new one if you won't see the issue)

 

 

 

 

l41lFCvfD0ChiARfG.gif

 

Bigger res

http://giphy.com/gifs/l41lFCvfD0ChiARfG

 

 

3. I don't know how to mess with the upgrades, is there anything I can use or change in the Definitions folder in order to add new death type or new rule that could spawn viscroid from single unit?

 

 

4. here the xmls (most credit belong to zocom7, I just edit the xml a bit)

 

<?xml version="1.0" encoding="utf-8"?>
<AssetDeclaration xmlns="uri:ea.com:eala:asset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude">
	<Includes>
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_SKN.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_AIDA.W3X" />			
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_AIDB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_AIFA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_AIFB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_ATKA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_ATKB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BATA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BATB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BATC.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BIDA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BIFA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_BIFB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_DIEA.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_DIEB.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_DIED.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_DIEE.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_DSEL.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_JMP1.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_JMP2.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_JMP3.W3X" />
		<Include type="all" source="ART:Ironback/FUM_INFANTRYB_MOVA.W3X" />
		<Include type="all" source="ART:FXInvisBone.w3x" />
		<Include type="all" source="ART:FXspotlight.w3x" />
		<Include type="instance" source="DATA:BaseObjects/BaseVehicle.xml" />
	</Includes>
	<GameObject
		id="WildMutantIronback"
		inheritFrom="BaseVehicle"
		SelectPortrait="Portrait_Ironback"
		ButtonImage="Portrait_Ironback"
		Side="Neutral"
		EditorSorting="UNIT"
		TransportSlotCount="1"
		BuildCost="1200"
		BuildTime="12"
		CommandSet="MutantIronbackCommandSet"
		CommandPoints="100" 
		KindOf="PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS SCORE VALID_TARGET_FOR_C4 VEHICLE CAN_SHOOT_OVER_WALLS CAN_BE_FAVORITE_UNIT"
		RadarPriority="UNIT"
		ProductionQueueType="INFANTRY"
		UnitCategory="VEHICLE"
		WeaponCategory="CANNON"
		VoicePriority="224"
		EditorName="WildMutantIronback"
		Description="Desc:MutantIronback"
		TypeDescription="Type:MutantIronback">
		<DisplayName
			xai:joinAction="Replace" xmlns:xai="uri:ea.com:eala:asset:instance">Name:WildMutantIronback</DisplayName>
		<ArmorSet
			Armor="NODAvatarArmor"
			DamageFX="VehicleDamageFX" />
		<LocomotorSet
			Locomotor="NODAvatarLocomotor"
			Condition="NORMAL"
			Speed="50.0" />
		<SkirmishAIInformation
			UnitBuilderStandardCombatUnit="true" />
		<Draws>
			<ScriptedModelDraw
				id="ModuleTag_Draw"
				OkToChangeModelColor="true"
				ExtraPublicBone="FT_Turret FT_Pitch NUBEAM B_CLAWHANDR">
				<ModelConditionState
					ParseCondStateType="PARSE_DEFAULT">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<WeaponFireFXBone
						WeaponSlotID="1"
						WeaponSlotType="PRIMARY_WEAPON"
						BoneName="B_CLAWHANDR" />
					<WeaponLaunchBone
						WeaponSlotID="1"
						WeaponSlotType="PRIMARY_WEAPON"
						BoneName="B_CLAWHANDR" />
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="FORMATION_PREVIEW">
					<Model
						Name="" />
				</ModelConditionState>

				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DAMAGED USER_6">
					<Model
						Name="FUM_INFANTRYB_SKN" />
<Texture Original="FUM_InfantryB" New="FUM_InfantryB_DMG"/>						
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="REALLYDAMAGED USER_6">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<Texture Original="FUM_InfantryB" New="FUM_InfantryB_DMG"/>
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DYING USER_6">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<Texture Original="FUM_InfantryB" New="FUM_InfantryB_DMG"/>						
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
				</ModelConditionState>
				
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DAMAGED">
					<Model
						Name="FUM_INFANTRYB_SKN" />
<Texture Original="FUM_InfantryB" New="FUM_InfantryB_DMG"/>
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="REALLYDAMAGED">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<Texture Original="FUM_InfantryB" New="FUM_InfantryB_DMG"/>
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DYING">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_UArmL"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FArmR"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallFire"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallFireDistortion"
						FollowBone="true" />
					<ParticleSysBone
						BoneName="B_FlameTank"
						FXParticleSystemTemplate="GDIDebrisSmallSmoke"
						FollowBone="true" />
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="USER_6">
					<Model
						Name="FUM_INFANTRYB_SKN" />
					<Texture
						Original="FUM_InfantryB" />							
				</ModelConditionState>				
				<AnimationState
					ParseCondStateType="PARSE_DEFAULT"
					Flags="RANDOMSTART"
					StateName="STATE_bored">
					<Animation
						AnimationName="FUM_INFANTRYB_BIDA"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
					<Script>
						Prev = CurDrawablePrevAnimationState()
						if Prev == "STATE_SelectedPose" then
						CurDrawableSetTransitionAnimState("TRANS_SelectedToIdle")
						end
					</Script>
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="COMING_OUT_OF_FACTORY"
					StateName="STATE_built">
					<Animation
						AnimationName="FUM_INFANTRYB_MOVA"
						AnimationBlendTime="0"
						AnimationMode="ONCE" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DYING">
					<Animation
						AnimationName="FUM_INFANTRYB_DIEB"
						AnimationMode="ONCE" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="AFFECTED_BY_EMP">
					<Animation
						AnimationName="FUM_INFANTRYB_BIDA"
						AnimationMode="MANUAL"
						AnimationBlendTime="15" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="TURN_LEFT_HIGH_SPEED"
					Flags="MAINTAIN_FRAME_ACROSS_STATES">
					<Animation
						AnimationName=""
						AnimationMode="LOOP"
						Distance="45" />
					<FXEvent
						Frame="1"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTL" />
					<FXEvent
						Frame="25"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTR" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="TURN_RIGHT_HIGH_SPEED"
					Flags="MAINTAIN_FRAME_ACROSS_STATES">
					<Animation
						AnimationName=""
						AnimationMode="LOOP"
						Distance="45" />
					<FXEvent
						Frame="1"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTL" />
					<FXEvent
						Frame="25"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTR" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="TURN_LEFT">
					<Animation
						AnimationName="FUM_INFANTRYB_MOVA"
						AnimationMode="LOOP" />
					<FXEvent
						Frame="0"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTL" />
					<FXEvent
						Frame="20"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTR" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="TURN_RIGHT">
					<Animation
						AnimationName="FUM_INFANTRYB_MOVA"
						AnimationMode="LOOP" />
					<FXEvent
						Frame="0"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTR" />
					<FXEvent
						Frame="20"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTL" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="ACCELERATE">
					<Animation
						AnimationName="FUM_INFANTRYB_MOVA"
						AnimationMode="ONCE" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="DECELERATE">
					<Animation
						AnimationName="FUM_INFANTRYB_MOVA"
						AnimationMode="ONCE" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="MOVING"
					Flags="MAINTAIN_FRAME_ACROSS_STATES">
				<Animation
					AnimationName="FUM_INFANTRYB_MOVA"
					AnimationMode="LOOP"
					Distance="45" 
					AnimationSpeedFactorMin="0.8"
					AnimationSpeedFactorMax="1.0"
					AnimationBlendTime="15" />
					<FXEvent
						Frame="1"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTL" />
					<FXEvent
						Frame="25"
						FireWhenSkipped="true"
						Effect="FX_NODAvatarFootprint"
						Bone="B_FOOTR" />
					<Script>
						Prev = CurDrawablePrevAnimationState()
						if Prev == "STATE_built" then
						CurDrawableSetTransitionAnimState("TRANS_built")
						end
					</Script>						
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="USING_WEAPON_A USER_10 WEAPONSLOTID_01">
					<Animation
						AnimationName="FUM_INFANTRYB_ATKB"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="USING_WEAPON_B WEAPONSLOTID_01">
					<Animation
						AnimationName="FUM_INFANTRYB_ATKB"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="USING_WEAPON_A WEAPONSLOTID_01">
					<Animation
						AnimationName="FUM_INFANTRYB_ATKA"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="ATTACKING USER_10">
					<Animation
						AnimationName="FUM_INFANTRYB_ATKB"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="ATTACKING">
					<Animation
						AnimationName="FUM_INFANTRYB_ATKA"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
				</AnimationState>
				<!-- SELECTED -->
				<AnimationState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="SELECTED"
					StateName="STATE_SelectedPose">
					<Animation
						AnimationName="FUM_INFANTRYB_AIDA"
						AnimationMode="LOOP"
						AnimationBlendTime="15" />
					<Script>
						Prev = CurDrawablePrevAnimationState()
						if Prev == "STATE_bored" then
						CurDrawableSetTransitionAnimState("TRANS_IdleToSelected")
						end
					</Script>
				</AnimationState>
				<!-- TRANSITIONS -->
				<AnimationState
					ParseCondStateType="PARSE_TRANSITION"
					StateName="TRANS_IdleToSelected">
					<Animation
						AnimationName="FUM_INFANTRYB_BATA"
						AnimationMode="ONCE" />
				</AnimationState>
				<AnimationState
					ParseCondStateType="PARSE_TRANSITION"
					StateName="TRANS_SelectedToIdle">
					<Animation
						AnimationName="FUM_INFANTRYB_BATA"
						AnimationMode="ONCE" />
				</AnimationState>
				<!--   Transitions -->
				<AnimationState
					ParseCondStateType="PARSE_TRANSITION"
					StateName="TRANS_built">
					<Animation
						AnimationName="FUM_INFANTRYB_BIDA"
						AnimationBlendTime="0"
						AnimationMode="ONCE"></Animation>
				</AnimationState>
			</ScriptedModelDraw>
			
			<ScriptedModelDraw
				id="ModuleTag_DrawFX"
				AttachToBoneInAnotherModule="FT_Pitch">
				<ModelConditionState
					ParseCondStateType="PARSE_DEFAULT">
					<Model
						Name="FXInvisBone" />
				</ModelConditionState>
				<AnimationState
					ParseCondStateType="PARSE_DEFAULT"></AnimationState>
			</ScriptedModelDraw>
			
			<SpotlightDraw
				id="ModuleTag_Spotlight"
				AttachToBoneInAnotherModule="s_generator"
				RefreshTime="2.0s"
				SweepTime="1.0s">
				<ModelConditionState
					ParseCondStateType="PARSE_DEFAULT">
					<Model
						Name="FXspotlight" />
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="BUILD_PLACEMENT_CURSOR">
					<Model
						Name="" />
				</ModelConditionState>
				<ModelConditionState
					ParseCondStateType="PARSE_NORMAL"
					ConditionsYes="FORMATION_PREVIEW">
						<Model
						Name="W3DContainer:GUBEHEMOTH_FP" />
				</ModelConditionState>
			</SpotlightDraw>
		</Draws>
		<Behaviors>
<FireWeaponUpdate id="ModuleTag_Fireweapon">
<FireWeaponNugget OneShot="true" Firedelay="0.1s" WeaponName="IronBackSelfDamage"/>
</FireWeaponUpdate>
<RandomModelCondition id="Random_Model" Conditions="USER_6"/>
<AttributeModifierPoolUpdate id="0x513BC476"/>
<SquishCollide id="0x8CCB269A"/>
<FireWeaponWhenDead id="0xDDED328F" InitiallyActive="True" DeathWeapon="CatalystInfantryDeathWeapon">
<DieMuxData DeathTypes="CATALYST"/>
</FireWeaponWhenDead>
<AutoHealBehavior id="0xC07BF5C0" StartHealingDelay="1s" HealingDelay="0.5s" HealingAmount="100">
<TriggeredBy>Upgrade_Veterancy_HEROIC</TriggeredBy>
</AutoHealBehavior>
<AttributeModifierUpgrade id="0xAA36A1AA" AttributeModifier="Modifier_MultifunctionUpgradeCenterSpeed">
<TriggeredBy>Upgrade_MultifunctionUpgradeCenterSpeed</TriggeredBy>
</AttributeModifierUpgrade>
<AttributeModifierUpgrade id="0x81C6F752" AttributeModifier="Modifier_MultifunctionUpgradeCenterDamage">
<TriggeredBy>Upgrade_MultifunctionUpgradeCenterDamage</TriggeredBy>
</AttributeModifierUpgrade>
<AttributeModifierUpgrade id="0xE35F7EC4" AttributeModifier="Modifier_MultifunctionUpgradeCenterArmor">
<TriggeredBy>Upgrade_MultifunctionUpgradeCenterArmor</TriggeredBy>
</AttributeModifierUpgrade>
<LevelUpUpgrade id="0xA92GFBDFEA" LevelCap="4" LevelsToGain="1">
<TriggeredBy>Upgrade_ProductionVeterancy_VETERAN</TriggeredBy>
</LevelUpUpgrade>
<LevelUpUpgrade id="0x5C3F2D16A" LevelCap="4" LevelsToGain="2">
<TriggeredBy>Upgrade_ProductionVeterancy_ELITE</TriggeredBy>
</LevelUpUpgrade>
<LevelUpUpgrade id="0x379F3DCE2" LevelCap="4" LevelsToGain="3">
<TriggeredBy>Upgrade_ProductionVeterancy_HEROIC</TriggeredBy>
</LevelUpUpgrade>
<InvisibilityUpdate id="0x3BD7GFDF2F5" UpdatePeriod="0.5s">
<InvisibilityNugget ForbiddenStatus="IS_FIRING_WEAPON USING_ABILITY IS_AIMING_WEAPON SPECIAL_ABILITY_PACKING_UNPACKING_OR_USING" ForbiddenConditions="PREATTACK_A FIRING_A FIRING_OR_PREATTACK_A RELOADING_A PREATTACK_B FIRING_B FIRING_OR_PREATTACK_B RELOADING_B PREATTACK_C FIRING_C FIRING_OR_PREATTACK_C RELOADING_C USING_WEAPON_A USING_WEAPON_B USING_WEAPON_C"/><RequiresUpgrade>Upgrade_CloakingFieldInvisibility</RequiresUpgrade></InvisibilityUpdate>
<StealthUpgrade id="0xF2GFB9DFBE">
<TriggeredBy>Upgrade_CloakingFieldInvisibility</TriggeredBy>
</StealthUpgrade>
			<WeaponSetUpdate
				id="ModuleTag_WeaponSetUpdate">
				<WeaponSlotHardpoint
					ID="1">
					<Weapon
						Ordering="PRIMARY_WEAPON"
						Template="WildMutantIronbackMelee" />
				</WeaponSlotHardpoint>
			</WeaponSetUpdate>
			<Physics
				id="ModuleTag_Physics" />
			<StancesBehavior
				id="ModuleTag_Stance"
				StanceTemplate="AggressiveOnly" />
			<FXListBehavior
				id="ModuleTag_FXList">
				<DieMuxData
					DeathTypes="ALL" />
				<Event
					Index="onDeath"
					FX="FX_CarsExplode" />
			</FXListBehavior>
<SlowDeath id="0x734225542D4A" DestructionDelay="4.5s" SinkDelay="3s" SinkRate="2.4">
<Sound List=""/>
<DieMuxData DeathTypes="ALL"/>
</SlowDeath>
			<StatusBitsUpgrade
				id="ModuleTag_VeterancyUpgrade"
				StatusToSet="WEAPON_UPGRADED_03">
				<TriggeredBy>Upgrade_Veterancy_HEROIC</TriggeredBy>
			</StatusBitsUpgrade>								
		</Behaviors>
<AI>
		<WanderAIUpdate
				id="12FA48BA"
				AutoAcquireEnemiesWhenIdle="YES"
				StopChaseDistance="500"
				HoldGroundCloseRangeDistance="100"
				MinCowerTime="0s"
				MaxCowerTime="0s"
				RampageTime="0s"
				BurningDeathTime="0s"
				TimeToEjectPassengersOnRampage="0"
				ComboLocomotorSet="NORMAL"
				ComboLocoAttackDistance="80"
				IdleTargetTime="0s"
				MaxCombineChildren="1"
				SpawnOffsetRadius="0"
				StandGround="True"
				CanAttackWhileContained="False"
				RampageRequiresAflame="False"
				FadeOnPortals="False"
				EntryCondition=""
				WanderDistance="100"
				AttackAll="True"
				Selectable="True">
				<UnitAITargetChooserData
					IdleScanDelay="0.8s"
					ReacquireDelay="5s"
					StartupDelay="0s"
					SympathyRange="25"
					CheckVisionRange="False"
					CanPickDynamicTargets="True"
					RotateToTargetWhenAiming="True"
					CanAutoAcquireNonAutoAcquirable="True"
					TargetingCompareList="DefaultTargetingCompareList" />
			</WanderAIUpdate>
</AI>
		<Body>
			<ActiveBody
				id="ModuleTag_Body"
				InitialHealth="5500" MaxHealth="12500.0" />
		</Body>
		<ClientBehaviors>
			<AnimationSoundClientBehavior
				id="ModuleTag_ASCB">
				<Sound Sound="NOD_AvatarWarMech_Commandeer" Animation="NUMECH_GRBA" Frame="50" />
				<Sound Sound="NOD_AvatarWarMech_Commandeer" Animation="NUMECH_GRBB" Frame="53" />
				<Sound Sound="NOD_AvatarWarMech_Commandeer" Animation="NUMECH_GRBC" Frame="48" />
				<Sound Sound="NOD_AvatarWarMech_Commandeer" Animation="NUMECH_GRBD" Frame="54" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_ABTA" Frame="22 44" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_AIDA" Frame="139 168" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_ACCL" Frame="14" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_BATA" Frame="16 31" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_DECL" Frame="15" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_GRBA" Frame="18 59" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_GRBB" Frame="17 60" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_GRBC" Frame="17 60" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_GRBD" Frame="18 59" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_GTPA" Frame="45 53 76" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_TRNL" Frame="22 45" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_TRNR" Frame="22 45" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_WLKA" Frame="1 25" />
				<Sound Sound="NOD_AvatarWarMech_Footstep" Animation="NUMECH_WLKB" Frame="23 46" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Short" Animation="NUMECH_GRBA" Frame="7 51" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Long" Animation="NUMECH_GRBA" Frame="14 34 66" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Short" Animation="NUMECH_GRBB" Frame="10 51" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Long" Animation="NUMECH_GRBB" Frame="11 37" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Short" Animation="NUMECH_GRBC" Frame="10 53" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Long" Animation="NUMECH_GRBC" Frame="12 35" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Short" Animation="NUMECH_GRBD" Frame="10 54" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Long" Animation="NUMECH_GRBD" Frame="24 42" />
				<Sound Sound="NOD_AvatarWarMech_Recovered2" Animation="NUMECH_GTPA" Frame="25" />
				<Sound Sound="NOD_AvatarWarMech_Recovered1" Animation="NUMECH_GTPA" Frame="50" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Short" Animation="NUMECH_AIDA" Frame="47 76 88" />
				<Sound Sound="NOD_AvatarWarMech_GearMovement_Long" Animation="NUMECH_AIDA" Frame="47 103" />
			</AnimationSoundClientBehavior>
		</ClientBehaviors>
		<Geometry
			IsSmall="true">
			<Shape
				Type="CYLINDER"
				MajorRadius="20.0"
				Height="50.0"
				ContactPointGeneration="INFANTRY" />
		</Geometry>
		<AudioArrayVoice>
			<AudioEntry
				Sound="CIV_Mutant_VoiceAttack"
				AudioType="voiceAttack" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceCreate"
				AudioType="voiceFullyCreated" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceMove"
				AudioType="voiceGuard" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceMove"
				AudioType="voiceMove" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceMoveAttack"
				AudioType="voiceAttackAfterMoving" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceRetreat"
				AudioType="voiceRetreatToCastle" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceSelectMS"
				AudioType="voiceSelect" />
			<AudioEntry
				Sound="CIV_Mutant_VoiceSelectBattleMS"
				AudioType="voiceSelectBattle" />
		</AudioArrayVoice>
		<AudioArraySound>
			<AudioEntry
				Sound="NOD_AvatarWarMech_MoveStart"
				AudioType="soundMoveStart" />
			<AudioEntry
				Sound="NOD_AvatarWarMech_IdleLoop"
				AudioType="soundAmbient" />
		</AudioArraySound>
<EvaEvents EvaEventPromotedOwner="UnitPromoted" EvaEventBuildCancelled="BuildCancelled" EvaEventBuildOnHold="BuildOnHold" EvaEventProductionStarted="UnitConstructionStarted" EvaEventAvailableForProduction="NewConstructionOptions" EvaEventSecondDamageFarFromFirstTimeoutMS="155" EvaEventDamagedOwner="UnitUnderAttack"/>
		<ShadowInfo
			Type="VOLUME" />
		<VisionInfo
			VisionRange="450"
			ShroudClearingRange="500" />
		<CrusherInfo
			CrusherLevel="3"
			CrushableLevel="3" />
	</GameObject>
</AssetDeclaration>

Here the weapon

 

 

<?xml version="1.0" encoding="utf-8"?>
<AssetDeclaration xmlns="uri:ea.com:eala:asset">
<WeaponTemplate
		id="WildMutantIronbackMelee"
		Name="WildMutantIronbackMelee" 
		AttackRange="14.0"
		MeleeWeapon="true"
ChaseWeapon="true"
 CanFireWhileMoving="true" AntiMask="ANTI_VEHICLE ANTI_INFANTRY ANTI_GROUND ANTI_STRUCTURE">
		<FiringDuration
			MinSeconds="1.2s"
			MaxSeconds="1.2s" />
		<Nuggets>
			<DamageNugget
				Damage="300.0"
				Radius="14.0"
				DamageType="MAGIC"
				DamageFXType="ALIEN_BUZZER"
				DeathType="NORMAL" >
<SpecialObjectFilter Exclude="TIBERIUM_FIELD CIVILIAN_BUILDING TIBERIUM" Rule="ANY">
<ExcludeThing>TiberiumCrystal</ExcludeThing>
<ExcludeThing>TiberiumCrystalBlue</ExcludeThing>
<ExcludeThing>WildMutantIronback</ExcludeThing>
</SpecialObjectFilter>
</DamageNugget>
		</Nuggets>		
	</WeaponTemplate>
</AssetDeclaration>
Edited by Egozi44

Share this post


Link to post

from what i can see from that gif, the lid of the pillbox doesnt disapear like you cliamed it did, it seems to transition into a really damaged state or rubble state, from what i can tell even it does this 2 times once for reallydamaged and once for rubble if i see it correctly. it looks more like a animation/model issue then a texture issue. have a look at your coding there....also did you maybe export the model and reused? could be you renamed the model wrong?

Share this post


Link to post

The smoke sort of hide stuff and the tank destroy the thing before you could see it didn't help much



Basically the "head" of the bunker either disappeared or fall from the "body"
Leaving it "headless"




I didn't extract the model and reuse it
Similar bug can be seen with the marv hub facility after I tried to change it's icon and it happened with all wed versions so far




As for the ironback, someone told me to try and add dummy weapon
Does it have chances to work? And what I need to add in there? (Never really mass with dummy weapon before)

Edited by Egozi44

Share this post


Link to post

Can someone help with 3 and 4?

 

 

3. Relate to the viscorids, is there anything I can add to the Definitions folder to make it work rather than use upgrade?

 

 

 

 

4. Does adding a dummy weapon can make it works?

Edited by Egozi44

Share this post


Link to post

Ok I understand that no one really interested anymore in my last questions... Could anyone at last answer on two new questions I got?

 

 

1. I've notice something weird though, ZT can't garrison at building (which suppose to be like that) While ZR Can garrison at building, is it bug? How can I give unit the option to garrison or ungarrison in building?

 

 

 

2. The traveler's mastermind (forgot how to spell it's name) area mind control work on enemy's units only for a few seconds, does anyone remeber if it was like that in ver 1.00 and know where I can increase the duration or make the ability "timeles" like the normal mind control?

 

 

I look in all MM abilities and found nothing

Edited by Egozi44

Share this post


Link to post

Ok I understand that no one really interested anymore in my last questions... Could anyone at last answer on two new questions I got?

 

Personaly it has nothing to do with not being interested, i just ran out of things to suggest, and you didnt want to try what was suggested because it was to hard or didnt comprehend the jist of it.

I just ran out of ideas, not interest. And posting for the sake of posting would've been pointless and just going arround in circles.

 

 

1. I've notice something weird though, ZT can't garrison at building (which suppose to be like that) While ZR Can garrison at building, is it bug? How can I give unit the option to garrison or ungarrison in building?

 

Zoneraiders are basicly women, now ea only completed the kitchen in buildings, they didnt completed the garage or the mancave due to budget reasons, So zone-men don't have a quiet place to sit, they tried the kitchen once but zone-women kept telling them to take out the (Nod)trash. True story bro.

 

Anyway: i still havent bothered getting KW to work on my pc again, so can't test this but: from a quick inspection of a few worldbuilder buildings, it seems <ExcludeThing>ZOCOMZoneRaiderSquad</ExcludeThing> is inside of the hordegarrison code, so theoreticly ZR shouldnt be able to garrison. I havent and wont inspect all the structures so can't be sure.

 

Any specific building you noticed this bug on? But basicly if the building has <ExcludeThing>ZOCOMZoneRaiderSquad</ExcludeThing> in it hordegarrison code it shouldnt be able to let ZR inside, it could be a bug then.

 

 

2. The traveler's mastermind (forgot how to spell it's name) area mind control work on enemy's units only for a few seconds, does anyone remeber if it was like that in ver 1.00 and know where I can increase the duration or make the ability "timeles" like the normal mind control?

 

 

I look in all MM abilities and found nothing

try adding PermanentlyConvert="true"

 

to the DominateEnemySpecialPower in the prodigy

 

you might be able to use AttributeModifierDuration="0s" this to effect the duration but im not sure about that.

Share this post


Link to post

Zoneraiders are basicly women, now ea only completed the kitchen in buildings, they didnt completed the garage or the mancave due to budget reasons, So zone-men don't have a quiet place to sit, they tried the kitchen once but zone-women kept telling them to take out the (Nod)trash. True story bro.

I lol'd, though still didn't like the notion :P

Share this post


Link to post

I lol'd, though still didn't like the notion :P

If you can make'em laugh , you can get away with it!

Share this post


Link to post

Personaly it has nothing to do with not being interested, i just ran out of things to suggest, and you didnt want to try what was suggested because it was to hard or didnt comprehend the jist of it.

I just ran out of ideas, not interest. And posting for the sake of posting would've been pointless and just going arround in circles.

 

 

 

Zoneraiders are basicly women, now ea only completed the kitchen in buildings, they didnt completed the garage or the mancave due to budget reasons, So zone-men don't have a quiet place to sit, they tried the kitchen once but zone-women kept telling them to take out the (Nod)trash. True story bro.

 

Anyway: i still havent bothered getting KW to work on my pc again, so can't test this but: from a quick inspection of a few worldbuilder buildings, it seems <ExcludeThing>ZOCOMZoneRaiderSquad</ExcludeThing> is inside of the hordegarrison code, so theoreticly ZR shouldnt be able to garrison. I havent and wont inspect all the structures so can't be sure.

 

Any specific building you noticed this bug on? But basicly if the building has <ExcludeThing>ZOCOMZoneRaiderSquad</ExcludeThing> in it hordegarrison code it shouldnt be able to let ZR inside, it could be a bug then.

 

 

try adding PermanentlyConvert="true"

 

to the DominateEnemySpecialPower in the prodigy

 

you might be able to use AttributeModifierDuration="0s" this to effect the duration but im not sure about that.

 

 

Well if you have no clue what to do in regard to my pervious questions just say so ; )

It will be better than give people false hope : P

 

 

Many thanks for the help, will test things out and report~ I pretty sure now that ZR garrison is a bug now because the bunkers don't have kitchens :D

 

 

Share this post


Link to post

Well if you have no clue what to do in regard to my pervious questions just say so ; )

It will be better than give people false hope : P

I suggested you looked into the createdie and the upgrade system to overcome you viceroid/cyborg spawn problems, you clearly stated you didnt like to work with that.

 

Or to put it in perspective:

You have a hole in your backyard, i am your neighbour..you asked me: how do it fill that hole, i say: use dirt and a shovel, you said i dont like dirt and you never used a shovel before, then we dont speak for a week, and suddenly you are yelling at me over the fence that you still have a hole in your yard and kinda magicly expected your neighbours to fill it for you. My answer would still be use dirt and a shovel, wether you like that aswer or not.

If it was my hole i would've started to shovel and move that dirt, i might hit myself a few times in the face with my own shovel but by the end of the day i learned to use a shovel and mayb filled a hole in my yard.

starting to get the metafore?

 

No false hope there imo.

Edited by Ravendark
  • Upvote 1

Share this post


Link to post

Ah you really like to give these funny examples aren't you xD
Well I don't dislike them one bit to be honest (well aside from the previous one which could sound to some people like sort of feminism discrimination)


I didn't however yelled at you (if you somehow really reached to this conclusion) But you right in a way and I got your point, though I wish that coding was easier and have narrow methods as shovel ._.


But anyway let go back to the cyborg and viscoid thing, I didn't really understood how that upgrade thing is going to help in the first place, can you explain to me how it going to work and try to tell me deeply what to do?
Do I need to "put" upgrade in the redemption SP and script on the engineers to get upgraded upon the used of the redemption on them and it will change their death script? what will happened if they die after the SP end though? and how it even going to work with the viscoid who don't need any SP to begin with?

I think that in other mods people discovered how to add new deathtype but don't sure


Oh and the thing with the ZR was bug but only for the GDI's foxhole xD fixed it



The PermanentlyConvert="true" worked for the prodigy but there's any way to make it revert upon the prodigy's death? because units that stay mindcontrol forever is sound sort of OP... if they were under timer which longer from what EA originally done it was other story, may try to mess with the AttributeModifierDuration but if you know a way to revert upon death it will be better

Edited by Egozi44

Share this post


Link to post

Ah you really like to give these funny examples aren't you xD

Well I don't dislike them one bit to be honest (well aside from the previous one which sound like some sort of feminism discrimination)

 

Without starting some age all discussion about men vs women that happens on every forum or youtube vid these days.....imo there was nothing sexist in my joke, it was aimed at the garrison bug that occurs between ZR (female voiced) and ZT (male voiced). The joke practicly told itself imo. And imo kitchen references are practicly memes these days....maybe if i made it in Red Alert it would've been sexist because the chronosphere can make a 1960 kitchen reference valid again :ra:

 

 

I didn't however yelled at you (if you somehow really reached to this conclusion) But you right in a way and I got your point, though I wish that coding was easier and have narrow methods as shovel ._.

 

the yelling was metaphoricly aswell...like yelling to your neighbours over the fence.

 

 

 

But anyway let go back to the cyborg and viscoid thing, I didn't really understood how that upgrade thing is going to help in the first place, can you explain to me how it going to work and try to tell me deeply what to do?

Do I need to "put" upgrade in the redemption SP and script on the engineers to get upgraded upon the used of the redemption on them and it will change their death script? what will happened if they die after the SP end though? and how it even going to work with the viscoid who don't need any SP to begin with?

 

Once again with feeling:

 

Taken from the juggernaught:

when it dies it leaves a husk..it does that through the createobjectdiemodule:

 

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie"
                CreationList="GDIJuggernaughtDieOCL">
                <DieMuxData
                    DeathTypes="ALL" />
 </CreateObjectDie>
 

while

 

<DieMuxData
                    DeathTypes="ALL" />
 

This part basicly says: spawn the husk for ALL the possible deathtypes

 

Possible KW deathtypes:

 

 

    <EnumAsset
        id="DeathType"
        IsUsingAll="true">
        <Entry>NONE</Entry>
        <Entry>NORMAL</Entry>
        <Entry>CRUSHED</Entry>
        <Entry>BURNED</Entry>
        <Entry>EXPLODED</Entry>
        <Entry>POISONED</Entry>
        <Entry>TOPPLED</Entry>
        <Entry>FLOODED</Entry>
        <Entry>SUICIDED</Entry>
        <Entry>LASERED</Entry>
        <Entry>DETONATED</Entry>
        <Entry>SPLATTED</Entry>
        <Entry>POISONED_BETA</Entry>
        <Entry>EXTRA_2</Entry>
        <Entry>EXTRA_3</Entry>
        <Entry>EXTRA_4</Entry>
        <Entry>EXTRA_5</Entry>
        <Entry>EXTRA_6</Entry>
        <Entry>EXTRA_7</Entry>
        <Entry>EXTRA_8</Entry>
        <Entry>KNOCKBACK</Entry>
        <Entry>SUPERNATURAL</Entry>
        <Entry>FADED</Entry>
        <Entry>SLAUGHTERED</Entry>
        <Entry>CATALYST</Entry>
    </EnumAsset>
 

So lets say you want to spawn a viceroid:

 

You make a weapon that inflicts a sertain deathtype, you could add a new deathtype to the above list (found in \Tools\Games\Kane's Wrath\Includes\objectstatus.xml) or use a obscure/hardlyused existing one from that list...like EXTRA_#

 

 

<DamageNugget
                Damage="30.0"
                Radius="0.0"
                DelayTimeSeconds="0.0s"
                DamageType="GUN"
                DamageFXType="GDI_MACHINEGUN"        
                DeathType="EXTRA_8" />
 

More then likely you would add this kind of damagenugget to a tiberium based weapon like the corruptors weapon or the tib crystal weapon or so. When ever that weapon kills a unit, that units createobjectdie module will spawn a viceroid:

 

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie_gooeythingy"
                CreationList="OCL_Spawn_viceroid">
                <DieMuxData
                    DeathTypes="EXTRA_8" />
 </CreateObjectDie>
 

 

 

Now lets say you don't want units to start with this, you want to do a upgrade first...like the cyborg thing:

 

same effect:

 

death by a sertain weapontype:

 

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie_cyborg"
                CreationList="OCL_Amelia_clarke_was_hot_in_gynesis">  <-- spawns your cyborg
                <DieMuxData
                    DeathTypes="ALL"                                                          <--  we have the technology, we can rebuild them 
                    DeathTypesForbidden="DETONATED EXTRA_8"  />                        <--  except grenades, because **** him and everything near him 'aight? And viceroids
                                                                                            don't share corpses aswell
 </CreateObjectDie>

now if you would add a upgrade requirement to that:

 

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie_cyborg"
                CreationList="OCL_Amelia_clarke_was_hot_in_gynesis">  <-- spawns your cyborg
                <UpgradeRequired>Upgrade_NanoBot_cocktails_for_everyone</UpgradeRequired>       <--  need to have this upgrade done before all the stuff  below will work
                <DieMuxData
                    DeathTypes="ALL"                                                          <--  we have the technology, we can rebuild them
                    DeathTypesForbidden="DETONATED EXTRA_8"  />                        <--  except grenades, because **** him and everything near him 'aight? And viceroids
don't share corpses aswell
 </CreateObjectDie>
 

 

 

 

 

<UpgradeTemplate
        id="Upgrade_NanoBot_cocktails_for_everyone"
        Type="PLAYER"   <-- player upgrades happen to a army, while object upgrades happen from and to a single unit
        BuildCost="1000"  <--  price of the nanobot cocktail
        BuildTime="60.0s" <--  shaken not stirred, takes longer
</UpgradeTemplate>
 

something like this should work more or less.

Share this post


Link to post

 

Oh and the thing with the ZR was bug but only for the GDI's foxhole xD fixed it

 

The PermanentlyConvert="true" worked for the prodigy but there's any way to make it revert upon the prodigy's death? because units that stay mindcontrol forever is sound sort of OP... if they were under timer which longer from what EA originally done it was other story, may try to mess with the AttributeModifierDuration but if you know a way to revert upon death it will be better

figured it was something like that, where they forgot to add the exludething to a structure.

 

Alot of the aoe mindcontrol is new KW coding...some of it specialy created to do a sertain thing, as im not in the possesion of bfme coding i cant see if its pre existing or not, so if its created for Kw with the purpose of doing what it does im afraid the duration and tempdefect condition is hardcoded into the engine. Basicly the dominatemodule is a extention of the specialpower module but with a few unique atributes, it could be the attribute duration might do the trick, but honostly im doubting it...the timing seems hardcoded.

Share this post


Link to post

The AoE Minecontroll is a leftover from BFME (its basicly a direct copy of Sarumans special abillity). It even works in TW, but there it seems to ignore PermanentlyConvert as the units stay converted for ever.

Edited by Stygs

Share this post


Link to post

Ok the viscriod deathtype worked

 

on the cyborgs however I didn't understood some things

 

1. where do I put the UpgradeTemplate ? inside the cyborg's game objects?

 

2. why do I need to put the DeathTypesForbidden+viscorid deathtype

 

3. Why the upgrade cost money and build time? can i set them to zero? it something that suppose to come out from the Redemption suppoprt power....

 

4. Is this upgrade going to be rest each time I re-train the unit? Because if it one time thing it will cause each unit to turn into cyborg each time they will die Without the Redemption suppoprt power

 

 

 

 

Also as for the prodigy, the AttributeModifierDuration="0s" didn't worked, any idea if there's a way to increase the timer somehow Stygs?

Share this post


Link to post

This might be a longshot is i am not a 100% sure these 2 are related but....

 

try setting

 

 

<TemporarilyDefectUpdate
                id="3473AFD2"
                DefectionFrameCount="100" />
 

this is basicly in frames...default its 30 frames per second so if you want to set it to a minute its 60x30= 1800 for DefectionFrameCount.

 

Unfortunatly if this works its something you have to add to each unit, as i dont think inherits work (yet?) in wrathed?

 

The cyborg was more a general example of how to trigger that on upgrade. The above coding is a example on how to trigger a spawn from a death.

 

 

1. You probably can put the upgrade template inside a units xml file, or you could create a new xml that just holds upgrades abd just reference that xml file in your static.xml...the same thing you have been doing for units, buildings,commandsets etc.

 

2. you dont need to put that there, i put that there as an example that you could if you wanted too. If you use the visc+cyborg thing together WITHOUT telling it NOT to spawn a cyborg on EXTRA_8...the moment the tiberium weapons kills something (with extra_8) it will spawn both a visc AND a cyborg...hence the forbidden thing. Because tib weapons should only spawn visc and not cyborgs...in that code example.

 

3. yes if its not a purchase upgrade you can set time and costs to zero, or just remove them from the template. And the upgrade example is independant of the specialpower, don't compare them to eachother.

 

4. If you use such a upgrade system, then yes, you wont need the specialpower. If you use the existing specialpower...wich works fine...dont bother with the upgrades.

 

You cant use the existing redemption special power in its current form tho for non-squad units. Basicly the SP just fires a weapon that triggers a attribute modifier that gives those squads the PARACHUTING modelcondition, wich through a specialcode section unique to the horde module....spawns a cyborg on death. Single units dont have that code section:

 

 

<OnDeathBehavior
                    RequiredStatus="PARACHUTING">
                    <OCL>OCL_RedemptionSpawn</OCL>
                </OnDeathBehavior>
 

not sure to what extend it is possible to add this as a seperate module, but i doubt that, it looks hardcoded inside the horde module imo.

 

Hence the upgrade+createobjectdie module.

 

but if you want to trigger that upgrade through a area specialpower....you basicly need to create that specialpower....you can use the stealthfield to base it of.

 

 

<GrantUpgradeAreaOfEffectSpecialPower
                id="AEA6EE73" /** call this moduletag_NewRedemption or such
                SpecialPowerTemplate="SpecialPower_CloakingField"  /** call this Specialpower_NewRedemption or such
                AntiCategory=""
                AntiFX=""
                AttributeModifier=""
                AttributeModifierRange="0"
                AttributeModifierFX=""
                WeatherDuration="0"
                InitiateFX=""
                TriggerFX="FX_NodCloakingField"
                SetModelCondition="TOPPLED"
                SetModelConditionTime="0s"
                GiveLevels="0"
                ChangeWeather="NORMAL"
                OnTriggerRechargeSpecialPower=""
                BurnDecayModifier="0"
                MaxDistanceFromCommandCenter="0"
                UpdateModuleStartsAttack="True"
                StartsPaused="False"
                ReEnableAntiCategory="False"
                AttributeModifierAffectsSelf="False"
                AttributeModifierWeatherBased="False"
                TargetEnemy="False"
                TargetAllSides="False"
                DisableDuringAnimDuration="False"
                IdleWhenStartingPower="False"
                AffectGood="False"
                AffectEvil="False"
                AffectAllies="True"
                AvailableAtStart="True"
                AdjustVictim="False"
                UseDistanceFromCommandCenter="False"
                ChildModuleHandlesFX="False"
                Radius="100">
                <AttributeModifierAffects
                    Rule="UNPARSED"
                    Relationship=""
                    Alignment="NONE"
                    Include=""
                    Exclude=""
                    StatusBitFlags=""
                    RejectStatusBitFlags=""
                    AcceptModelCondition=""
                    RejectModelCondition="" />
                <RequirementsFilterMP
                    Rule="UNPARSED"
                    Relationship=""
                    Alignment="NONE"
                    Include=""
                    Exclude=""
                    StatusBitFlags=""
                    RejectStatusBitFlags=""
                    AcceptModelCondition=""
                    RejectModelCondition="" />
                <RequirementsFilterStrategic
                    Rule="UNPARSED"
                    Relationship=""
                    Alignment="NONE"
                    Include=""
                    Exclude=""
                    StatusBitFlags=""
                    RejectStatusBitFlags=""
                    AcceptModelCondition=""
                    RejectModelCondition="" />
                <AcceptObjectFilter
                    Rule="ANY"
                    Relationship="ALLIES"
                    Alignment="NONE"
                    Include="HUGE_VEHICLE VEHICLE"   /*** change to INFANTRY HORDE
                    Exclude="AIRCRAFT"               /*** add HUGE_VEHICLE VEHICLE
                    StatusBitFlags=""
                    RejectStatusBitFlags=""
                    AcceptModelCondition=""
                    RejectModelCondition="" />
                <UpgradeTemplate>Upgrade_CloakingFieldInvisibility</UpgradeTemplate>   /*** change that to: Upgrade_NanoBot_cocktails_for_everyone
            </GrantUpgradeAreaOfEffectSpecialPower>
 

 

 

 

change the existing redemption command to :

 

 

<LogicCommand
        id="Command_Redemption"
        Type="SPECIAL_POWER"
        Options="NEED_TARGET_POS">
        <SpecialPower>SpecialPower_Redemption</SpecialPower> /** change to SpecialPower_NewRedemption
    </LogicCommand>
 

and the redemption specialpower into :

 

 

<SpecialPowerTemplate
        id="SpecialPower_Redemption"  /** into SpecialPower_NewRedemption
        TargetType="LOCATION"
        Flags="WATER_OK SHARED_SYNC IS_PLAYER_POWER"
        ReloadTime="140s"
        InitiateSound=""
        InitiateAtLocationSound="NOD_Redemption"
        ViewObjectDuration="0s"
        ViewObjectRange="0"
        RadiusCursorRadius="250"
        PreventConditions=""
        RequiredConditions=""
        DisallowedTargetModelStates=""
        RequiredTargetObjectStatus=""
        DisallowedTargetObjectStatus=""
        MaxCastRange="1000000"
        MinCastRange="0"
        ForbiddenObjectRange="0"
        EvaEventToPlayWhenSelectingTarget="SelectSpecialPowerTarget"
        RestrictionType="UNRESTRICTED"
        Money="-750"
        TimerImage=""
        ReachableTargetsCircleDisplayRadius="0"
        MetaGameOperation="INVALID"
        ActiveMetaGamePhases=""
        StrikeForceRejectStatus=""
        WaypointModeTerminal="True"
        StrikeForceRejectMatchAll="False">
        <ObjectFilter
            Rule="UNPARSED"
            Relationship=""
            Alignment="NONE"
            Include=""
            Exclude=""
            StatusBitFlags=""
            RejectStatusBitFlags=""
            AcceptModelCondition=""
            RejectModelCondition="" />
        <ForbiddenObjectFilter
            Rule="UNPARSED"
            Relationship=""
            Alignment="NONE"
            Include=""
            Exclude=""
            StatusBitFlags=""
            RejectStatusBitFlags=""
            AcceptModelCondition=""
            RejectModelCondition="" />
    </SpecialPowerTemplate>



 

and you add the follwoing to every SINGLE unit you want effected by redeption:

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie_cyborg_single"
CreationList="OCL_spawn_single_cyborg">                                     /** just 1 cyborg for single infantry
<UpgradeRequired>Upgrade_NanoBot_cocktails_for_everyone</UpgradeRequired> 
                <DieMuxData
                    DeathTypes="ALL"                                                         
                    DeathTypesForbidden="EXTRA_8"  />                       
 </CreateObjectDie>
 

and add this to horde(squad) templates...add this to the squad not the unit in the squad!

 

 

<CreateObjectDie
                id="ModuleTag_CreateObjectDie_cyborg_squad"
CreationList="OCL_spawn_cyborg_sqaud">                                                                                 /** for full squads
<UpgradeRequired>Upgrade_NanoBot_cocktails_for_everyone</UpgradeRequired>
                <DieMuxData
                    DeathTypes="ALL"                                                         
                    DeathTypesForbidden="EXTRA_8"  />                       
 </CreateObjectDie>
 

should be something like that, needs testing tho

Edited by Ravendark

Share this post


Link to post

Really sorry for the delay (I will let you know that watching spongebob didn't was easy as you think!.... just kidding)

 

Didn't had time to mod lately

 

 

1. So wait, the DefectionFrameCount thing was in regard to the area mind control correct? Will test it out, however won't it effect the units with other stuff? Like increasing their time for all the other attributes that in the games?

 

2. From my experience with kw, wed don't always let me add SP, don't sure what I miss though Can you plese tell me all the places that I will need to add or replace that support power into? Just so I be sure I done everything right

 

 

3. Also are you sure that redemption is hardcoded? Can't I just add the upgrade xml to the game (via static and etc), and then add the upgrade to the redemption weapon, add to it's xml filter the word infantry (next to the horde... if it don't have one already), and then just add required upgrade ocl for each single inf?

Edited by Egozi44

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×