diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index e92664825f..ba122626d5 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -60,6 +60,7 @@ + diff --git a/OpenRA.Mods.Cnc/RenderGunboat.cs b/OpenRA.Mods.Cnc/RenderGunboat.cs new file mode 100644 index 0000000000..743e1bcb1e --- /dev/null +++ b/OpenRA.Mods.Cnc/RenderGunboat.cs @@ -0,0 +1,71 @@ +#region Copyright & License Information +/* + * Copyright 2007-2010 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see LICENSE. + */ +#endregion + +using OpenRA.Graphics; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA.Render +{ + class RenderGunboatInfo : RenderUnitInfo + { + public override object Create(ActorInitializer init) { return new RenderGunboat(init.self); } + } + + class RenderGunboat : RenderSimple, INotifyDamage + { + IFacing facing; + public RenderGunboat(Actor self) + : base(self, () => self.HasTrait() ? self.Trait().turretFacing : 0) + { + facing = self.Trait(); + + anim.Play("left"); + anims.Add( "smoke", new AnimationWithOffset( new Animation( "smoke_m" ), null, () => !isSmoking ) ); + } + + string lastDir = "left"; + string lastDamage = ""; + public override void Tick(Actor self) + { + var dir = (facing.Facing > 128) ? "right" : "left"; + if (dir != lastDir) + anim.ReplaceAnim((lastDir = dir)+lastDamage); + + base.Tick(self); + } + + bool isSmoking; + public void Damaged(Actor self, AttackInfo e) + { + // Damagestate + if (e.DamageStateChanged) + { + if (e.DamageState >= DamageState.Critical) + lastDamage = "-critical"; + else if (e.DamageState >= DamageState.Heavy) + lastDamage = "-damaged"; + else if (e.DamageState < DamageState.Heavy) + lastDamage = ""; + anim.ReplaceAnim(lastDir+lastDamage); + } + + // Smoking + if (e.DamageState < DamageState.Heavy) return; + if (isSmoking) return; + + isSmoking = true; + var smoke = anims[ "smoke" ].Animation; + smoke.PlayThen( "idle", + () => smoke.PlayThen( "loop", + () => smoke.PlayBackwardsThen( "end", + () => isSmoking = false ) ) ); + } + } +} diff --git a/mods/cnc/defaults.yaml b/mods/cnc/defaults.yaml index c8c7787cb6..41d0c94290 100644 --- a/mods/cnc/defaults.yaml +++ b/mods/cnc/defaults.yaml @@ -136,6 +136,8 @@ Crushes: crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 0%, 0%, 0%, 0%, 100%, 0%, 0%, 0%, 0%, 0% + Selectable: + Voice: GenericVoice Targetable: TargetTypes: Ground, Water HiddenUnderFog: diff --git a/mods/cnc/sequences-vehicles.xml b/mods/cnc/sequences-vehicles.xml index 9008b570e9..a84e3c2569 100644 --- a/mods/cnc/sequences-vehicles.xml +++ b/mods/cnc/sequences-vehicles.xml @@ -109,14 +109,12 @@ - - - - - - - - + + + + + + diff --git a/mods/cnc/vehicles.yaml b/mods/cnc/vehicles.yaml index 34fb8e7eb4..d312de8dbb 100644 --- a/mods/cnc/vehicles.yaml +++ b/mods/cnc/vehicles.yaml @@ -533,7 +533,9 @@ BOAT: ROT: 7 AttackTurreted: PrimaryWeapon: BoatMissile - RenderUnitTurreted: + PrimaryOffset: 0,-15,0,-4 + PrimaryLocalOffset: -3,-5,0,3,-5,0,0,-5,0 + RenderGunboat: AutoTarget: LST: diff --git a/mods/cnc/weapons.yaml b/mods/cnc/weapons.yaml index 550ad26a71..e4f85b6f16 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -382,6 +382,8 @@ MachineGun: BoatMissile: ROF: 35 Range: 8 + Burst: 6 + BurstDelay: 7 Report: ROCKET2 Missile: Arm: 5 @@ -401,7 +403,7 @@ BoatMissile: Explosion: 5 ImpactSound: xplos SmudgeType: Crater - Damage: 60 + Damage: 10 Tomahawk: ROF: 40