Merge pull request #8012 from reaperrr/voiceset
Extracted actor Voices from Selectable into own Voiced trait
This commit is contained in:
@@ -179,6 +179,7 @@
|
|||||||
<Compile Include="Traits\World\Shroud.cs" />
|
<Compile Include="Traits\World\Shroud.cs" />
|
||||||
<Compile Include="World.cs" />
|
<Compile Include="World.cs" />
|
||||||
<Compile Include="WorldUtils.cs" />
|
<Compile Include="WorldUtils.cs" />
|
||||||
|
<Compile Include="VoiceExts.cs" />
|
||||||
<Compile Include="Network\ReplayRecorderConnection.cs" />
|
<Compile Include="Network\ReplayRecorderConnection.cs" />
|
||||||
<Compile Include="Traits\DebugPauseState.cs" />
|
<Compile Include="Traits\DebugPauseState.cs" />
|
||||||
<Compile Include="Network\UPnP.cs" />
|
<Compile Include="Network\UPnP.cs" />
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ namespace OpenRA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var voicedUnit = actors.FirstOrDefault(a => a.Owner == world.LocalPlayer && a.IsInWorld && a.HasVoices());
|
var voicedActor = actors.FirstOrDefault(a => a.Owner == world.LocalPlayer && a.IsInWorld && a.HasTrait<IVoiced>());
|
||||||
if (voicedUnit != null)
|
if (voicedActor != null)
|
||||||
Sound.PlayVoice("Select", voicedUnit, voicedUnit.Owner.Country.Race);
|
voicedActor.PlayVoice("Select");
|
||||||
|
|
||||||
foreach (var a in newSelection)
|
foreach (var a in newSelection)
|
||||||
foreach (var sel in a.TraitsImplementing<INotifySelected>())
|
foreach (var sel in a.TraitsImplementing<INotifySelected>())
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ namespace OpenRA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if played successfully
|
// Returns true if played successfully
|
||||||
public static bool PlayPredefined(Ruleset ruleset, Player p, Actor voicedUnit, string type, string definition, string variant,
|
public static bool PlayPredefined(Ruleset ruleset, Player p, Actor voicedActor, string type, string definition, string variant,
|
||||||
bool relative, WPos pos, float volumeModifier, bool attenuateVolume)
|
bool relative, WPos pos, float volumeModifier, bool attenuateVolume)
|
||||||
{
|
{
|
||||||
if (ruleset == null)
|
if (ruleset == null)
|
||||||
@@ -312,17 +312,17 @@ namespace OpenRA
|
|||||||
if (ruleset.Voices == null || ruleset.Notifications == null)
|
if (ruleset.Voices == null || ruleset.Notifications == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var rules = (voicedUnit != null) ? ruleset.Voices[type] : ruleset.Notifications[type];
|
var rules = (voicedActor != null) ? ruleset.Voices[type] : ruleset.Notifications[type];
|
||||||
if (rules == null)
|
if (rules == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var id = voicedUnit != null ? voicedUnit.ActorID : 0;
|
var id = voicedActor != null ? voicedActor.ActorID : 0;
|
||||||
|
|
||||||
string clip;
|
string clip;
|
||||||
var suffix = rules.DefaultVariant;
|
var suffix = rules.DefaultVariant;
|
||||||
var prefix = rules.DefaultPrefix;
|
var prefix = rules.DefaultPrefix;
|
||||||
|
|
||||||
if (voicedUnit != null)
|
if (voicedActor != null)
|
||||||
{
|
{
|
||||||
if (!rules.VoicePools.Value.ContainsKey("Attack"))
|
if (!rules.VoicePools.Value.ContainsKey("Attack"))
|
||||||
rules.VoicePools.Value.Add("Attack", rules.VoicePools.Value["Move"]);
|
rules.VoicePools.Value.Add("Attack", rules.VoicePools.Value["Move"]);
|
||||||
@@ -364,32 +364,6 @@ namespace OpenRA
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool PlayVoice(string phrase, Actor voicedUnit, string variant)
|
|
||||||
{
|
|
||||||
if (voicedUnit == null || phrase == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var mi = voicedUnit.Info.Traits.GetOrDefault<SelectableInfo>();
|
|
||||||
if (mi == null || mi.Voice == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var type = mi.Voice.ToLowerInvariant();
|
|
||||||
return PlayPredefined(voicedUnit.World.Map.Rules, null, voicedUnit, type, phrase, variant, true, WPos.Zero, 1f, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool PlayVoiceLocal(string phrase, Actor voicedUnit, string variant, WPos pos, float volume)
|
|
||||||
{
|
|
||||||
if (voicedUnit == null || phrase == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var mi = voicedUnit.Info.Traits.GetOrDefault<SelectableInfo>();
|
|
||||||
if (mi == null || mi.Voice == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var type = mi.Voice.ToLowerInvariant();
|
|
||||||
return PlayPredefined(voicedUnit.World.Map.Rules, null, voicedUnit, type, phrase, variant, false, pos, volume, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool PlayNotification(Ruleset rules, Player player, string type, string notification, string variant)
|
public static bool PlayNotification(Ruleset rules, Player player, string type, string notification, string variant)
|
||||||
{
|
{
|
||||||
if (rules == null)
|
if (rules == null)
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ namespace OpenRA.Traits
|
|||||||
public readonly bool Selectable = true;
|
public readonly bool Selectable = true;
|
||||||
public readonly int Priority = 10;
|
public readonly int Priority = 10;
|
||||||
public readonly int[] Bounds = null;
|
public readonly int[] Bounds = null;
|
||||||
[VoiceReference] public readonly string Voice = null;
|
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new Selectable(init.Self, this); }
|
public object Create(ActorInitializer init) { return new Selectable(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,6 +109,14 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
public interface ISeedableResource { void Seed(Actor self); }
|
public interface ISeedableResource { void Seed(Actor self); }
|
||||||
|
|
||||||
|
public interface IVoiced
|
||||||
|
{
|
||||||
|
string VoiceSet { get; }
|
||||||
|
bool PlayVoice(Actor self, string phrase, string variant);
|
||||||
|
bool PlayVoiceLocal(Actor self, string phrase, string variant, float volume);
|
||||||
|
bool HasVoice(Actor self, string voice);
|
||||||
|
}
|
||||||
|
|
||||||
public interface IDemolishableInfo { bool IsValidTarget(ActorInfo actorInfo, Actor saboteur); }
|
public interface IDemolishableInfo { bool IsValidTarget(ActorInfo actorInfo, Actor saboteur); }
|
||||||
public interface IDemolishable
|
public interface IDemolishable
|
||||||
{
|
{
|
||||||
|
|||||||
75
OpenRA.Game/VoiceExts.cs
Normal file
75
OpenRA.Game/VoiceExts.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2015 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 COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA
|
||||||
|
{
|
||||||
|
public static class VoiceExts
|
||||||
|
{
|
||||||
|
public static void PlayVoice(this Actor self, string phrase)
|
||||||
|
{
|
||||||
|
if (phrase == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var voiced in self.TraitsImplementing<IVoiced>())
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(voiced.VoiceSet))
|
||||||
|
return;
|
||||||
|
|
||||||
|
voiced.PlayVoice(self, phrase, self.Owner.Country.Race);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PlayVoiceLocal(this Actor self, string phrase, float volume)
|
||||||
|
{
|
||||||
|
if (phrase == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var voiced in self.TraitsImplementing<IVoiced>())
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(voiced.VoiceSet))
|
||||||
|
return;
|
||||||
|
|
||||||
|
voiced.PlayVoiceLocal(self, phrase, self.Owner.Country.Race, volume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool HasVoice(this Actor self, string voice)
|
||||||
|
{
|
||||||
|
return self.TraitsImplementing<IVoiced>().Any(x => x.HasVoice(self, voice));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PlayVoiceForOrders(this World w, Order[] orders)
|
||||||
|
{
|
||||||
|
// Find an actor with a phrase to say
|
||||||
|
foreach (var o in orders)
|
||||||
|
{
|
||||||
|
if (o == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var orderSubject = o.Subject;
|
||||||
|
if (orderSubject.Destroyed)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (var voice in orderSubject.TraitsImplementing<IVoiced>())
|
||||||
|
foreach (var v in orderSubject.TraitsImplementing<IOrderVoice>())
|
||||||
|
{
|
||||||
|
if (voice.PlayVoice(orderSubject, v.VoicePhraseForOrder(orderSubject, o),
|
||||||
|
orderSubject.Owner.Country.Race))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,44 +42,6 @@ namespace OpenRA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool HasVoices(this Actor a)
|
|
||||||
{
|
|
||||||
var selectable = a.Info.Traits.GetOrDefault<SelectableInfo>();
|
|
||||||
return selectable != null && selectable.Voice != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool HasVoice(this Actor a, string voice)
|
|
||||||
{
|
|
||||||
var v = GetVoices(a);
|
|
||||||
return v != null && v.Voices.ContainsKey(voice);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SoundInfo GetVoices(this Actor a)
|
|
||||||
{
|
|
||||||
var selectable = a.Info.Traits.GetOrDefault<SelectableInfo>();
|
|
||||||
if (selectable == null) return null;
|
|
||||||
var v = selectable.Voice;
|
|
||||||
return (v == null) ? null : a.World.Map.Rules.Voices[v.ToLowerInvariant()];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void PlayVoiceForOrders(this World w, Order[] orders)
|
|
||||||
{
|
|
||||||
// Find an actor with a phrase to say
|
|
||||||
foreach (var o in orders)
|
|
||||||
{
|
|
||||||
if (o == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (o.Subject.Destroyed)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>())
|
|
||||||
if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o),
|
|
||||||
o.Subject, o.Subject.Owner.Country.Race))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void DoTimed<T>(this IEnumerable<T> e, Action<T> a, string text)
|
public static void DoTimed<T>(this IEnumerable<T> e, Action<T> a, string text)
|
||||||
{
|
{
|
||||||
// Note - manual enumeration here for performance due to high call volume.
|
// Note - manual enumeration here for performance due to high call volume.
|
||||||
|
|||||||
@@ -443,6 +443,7 @@
|
|||||||
<Compile Include="Traits\Upgrades\UpgradeActorsNear.cs" />
|
<Compile Include="Traits\Upgrades\UpgradeActorsNear.cs" />
|
||||||
<Compile Include="Traits\Upgrades\UpgradeManager.cs" />
|
<Compile Include="Traits\Upgrades\UpgradeManager.cs" />
|
||||||
<Compile Include="Traits\Valued.cs" />
|
<Compile Include="Traits\Valued.cs" />
|
||||||
|
<Compile Include="Traits\Voiced.cs" />
|
||||||
<Compile Include="Traits\Wanders.cs" />
|
<Compile Include="Traits\Wanders.cs" />
|
||||||
<Compile Include="Traits\World\BridgeLayer.cs" />
|
<Compile Include="Traits\World\BridgeLayer.cs" />
|
||||||
<Compile Include="Traits\World\CrateSpawner.cs" />
|
<Compile Include="Traits\World\CrateSpawner.cs" />
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Terrain types that this actor is allowed to eject actors onto. Leave empty for all terrain types.")]
|
[Desc("Terrain types that this actor is allowed to eject actors onto. Leave empty for all terrain types.")]
|
||||||
public readonly string[] UnloadTerrainTypes = { };
|
public readonly string[] UnloadTerrainTypes = { };
|
||||||
|
|
||||||
|
[Desc("Voice to play when ordered to unload the passengers.")]
|
||||||
|
public readonly string UnloadVoice = "Unload";
|
||||||
|
|
||||||
[Desc("Which direction the passenger will face (relative to the transport) when unloading.")]
|
[Desc("Which direction the passenger will face (relative to the transport) when unloading.")]
|
||||||
public readonly int PassengerFacing = 128;
|
public readonly int PassengerFacing = 128;
|
||||||
|
|
||||||
@@ -204,10 +207,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
if (order.OrderString != "Unload" || IsEmpty(self))
|
if (order.OrderString != "Unload" || IsEmpty(self) || !self.HasVoice(Info.UnloadVoice))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return self.HasVoice("Unload") ? "Unload" : "Move";
|
return Info.UnloadVoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool MoveDisabled(Actor self) { return reserves.Any(); }
|
public bool MoveDisabled(Actor self) { return reserves.Any(); }
|
||||||
|
|||||||
@@ -13,13 +13,26 @@ using OpenRA.Traits;
|
|||||||
namespace OpenRA.Mods.Common.Traits
|
namespace OpenRA.Mods.Common.Traits
|
||||||
{
|
{
|
||||||
[Desc("Play the Build voice of this actor when trained.")]
|
[Desc("Play the Build voice of this actor when trained.")]
|
||||||
public class AnnounceOnBuildInfo : TraitInfo<AnnounceOnBuild> { }
|
public class AnnounceOnBuildInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
[Desc("Voice to use when built/trained.")]
|
||||||
|
public readonly string BuildVoice = "Build";
|
||||||
|
|
||||||
|
public object Create(ActorInitializer init) { return new AnnounceOnBuild(init.Self, this); }
|
||||||
|
}
|
||||||
|
|
||||||
public class AnnounceOnBuild : INotifyBuildComplete
|
public class AnnounceOnBuild : INotifyBuildComplete
|
||||||
{
|
{
|
||||||
|
readonly AnnounceOnBuildInfo info;
|
||||||
|
|
||||||
|
public AnnounceOnBuild(Actor self, AnnounceOnBuildInfo info)
|
||||||
|
{
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
public void BuildingComplete(Actor self)
|
public void BuildingComplete(Actor self)
|
||||||
{
|
{
|
||||||
Sound.PlayVoice("Build", self, self.Owner.Country.Race);
|
self.PlayVoice(info.BuildVoice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Minimum duration (in seconds) between sound events.")]
|
[Desc("Minimum duration (in seconds) between sound events.")]
|
||||||
public readonly int Interval = 5;
|
public readonly int Interval = 5;
|
||||||
|
|
||||||
|
[Desc("Voice to use when killing something.")]
|
||||||
|
public readonly string KillVoice = "Kill";
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new AnnounceOnKill(init.Self, this); }
|
public object Create(ActorInitializer init) { return new AnnounceOnKill(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +42,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (e.DamageState == DamageState.Dead && damaged != e.Attacker)
|
if (e.DamageState == DamageState.Dead && damaged != e.Attacker)
|
||||||
{
|
{
|
||||||
if (self.World.WorldTick - lastAnnounce > info.Interval * 25)
|
if (self.World.WorldTick - lastAnnounce > info.Interval * 25)
|
||||||
Sound.PlayVoice("Kill", self, self.Owner.Country.Race);
|
self.PlayVoice(info.KillVoice);
|
||||||
|
|
||||||
lastAnnounce = self.World.WorldTick;
|
lastAnnounce = self.World.WorldTick;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,11 +40,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (e.Warhead == null)
|
if (e.Warhead == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var cp = self.CenterPosition;
|
if (info.DeathTypes.Contains(e.Warhead.DeathType) || (!info.DeathTypes.Any() &&
|
||||||
|
!self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
|
||||||
if (info.DeathTypes.Contains(e.Warhead.DeathType) ||
|
self.PlayVoiceLocal(info.DeathSound, info.VolumeMultiplier);
|
||||||
(!info.DeathTypes.Any() && !self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
|
|
||||||
Sound.PlayVoiceLocal(info.DeathSound, self, self.Owner.Country.Race, cp, info.VolumeMultiplier);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
75
OpenRA.Mods.Common/Traits/Voiced.cs
Normal file
75
OpenRA.Mods.Common/Traits/Voiced.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2015 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 COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.GameRules;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("This actor has a voice.")]
|
||||||
|
public class VoicedInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
[Desc("Which voice set to use.")]
|
||||||
|
[VoiceReference] public readonly string VoiceSet = null;
|
||||||
|
|
||||||
|
[Desc("Multiply volume with this factor.")]
|
||||||
|
public readonly float Volume = 1f;
|
||||||
|
|
||||||
|
public object Create(ActorInitializer init) { return new Voiced(init.Self, this); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Voiced : IVoiced
|
||||||
|
{
|
||||||
|
public readonly VoicedInfo Info;
|
||||||
|
|
||||||
|
public Voiced(Actor self, VoicedInfo info)
|
||||||
|
{
|
||||||
|
Info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string VoiceSet { get { return Info.VoiceSet; } }
|
||||||
|
|
||||||
|
public bool PlayVoice(Actor self, string phrase, string variant)
|
||||||
|
{
|
||||||
|
if (phrase == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(Info.VoiceSet))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var type = Info.VoiceSet.ToLowerInvariant();
|
||||||
|
var volume = Info.Volume;
|
||||||
|
return Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, true, WPos.Zero, volume, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool PlayVoiceLocal(Actor self, string phrase, string variant, float volume)
|
||||||
|
{
|
||||||
|
if (phrase == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(Info.VoiceSet))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var type = Info.VoiceSet.ToLowerInvariant();
|
||||||
|
return Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, false, self.CenterPosition, volume, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasVoice(Actor self, string voice)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Info.VoiceSet))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var voices = self.World.Map.Rules.Voices[Info.VoiceSet.ToLowerInvariant()];
|
||||||
|
return voices != null && voices.Voices.ContainsKey(voice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -943,6 +943,28 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
node.Key = node.Key.Replace("ProvidesCustomPrerequisite", "ProvidesPrerequisite");
|
node.Key = node.Key.Replace("ProvidesCustomPrerequisite", "ProvidesPrerequisite");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineVersion < 20150509)
|
||||||
|
{
|
||||||
|
if (depth == 0 && node.Value.Nodes.Exists(n => n.Key == "Selectable"))
|
||||||
|
{
|
||||||
|
var selectable = node.Value.Nodes.FirstOrDefault(n => n.Key == "Selectable");
|
||||||
|
var selectableNodes = selectable.Value.Nodes;
|
||||||
|
var voice = selectableNodes.FirstOrDefault(n => n.Key == "Voice");
|
||||||
|
var selectableVoice = voice != null ? FieldLoader.GetValue<string>("Voice", voice.Value.Value) : "";
|
||||||
|
|
||||||
|
if (voice != null)
|
||||||
|
{
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("Voiced", "", new List<MiniYamlNode>
|
||||||
|
{
|
||||||
|
new MiniYamlNode("VoiceSet", selectableVoice),
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.Key.StartsWith("Selectable"))
|
||||||
|
node.Value.Nodes.RemoveAll(p => p.Key == "Voice");
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ VehicleVoice:
|
|||||||
Voices:
|
Voices:
|
||||||
Select: vehic1,yessir1,report1,await1,unit1
|
Select: vehic1,yessir1,report1,await1,unit1
|
||||||
Move: ackno,affirm1,movout1
|
Move: ackno,affirm1,movout1
|
||||||
|
Unload: movout1
|
||||||
|
|
||||||
CivilianMaleVoice:
|
CivilianMaleVoice:
|
||||||
Voices:
|
Voices:
|
||||||
|
|||||||
@@ -381,12 +381,14 @@ BRIDGEHUT:
|
|||||||
C1:
|
C1:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianMaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianMaleVoice
|
||||||
|
|
||||||
C2:
|
C2:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C3:
|
C3:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -394,7 +396,8 @@ C3:
|
|||||||
C4:
|
C4:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C5:
|
C5:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -402,7 +405,8 @@ C5:
|
|||||||
C6:
|
C6:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C7:
|
C7:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -410,7 +414,8 @@ C7:
|
|||||||
C8:
|
C8:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C9:
|
C9:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -418,7 +423,8 @@ C9:
|
|||||||
C10:
|
C10:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
VICE:
|
VICE:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -439,7 +445,6 @@ VICE:
|
|||||||
BlueTiberium: 100
|
BlueTiberium: 100
|
||||||
Beach: 60
|
Beach: 60
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: DinoVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
@@ -472,4 +477,6 @@ VICE:
|
|||||||
QuantizedFacings: 8
|
QuantizedFacings: 8
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
Weapon: Heal
|
Weapon: Heal
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: DinoVoice
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -51,6 +50,8 @@
|
|||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
UpgradeManager:
|
UpgradeManager:
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -66,7 +67,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -108,6 +108,8 @@
|
|||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
UpgradeManager:
|
UpgradeManager:
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -117,7 +119,6 @@
|
|||||||
GroundedTargetTypes: Ground
|
GroundedTargetTypes: Ground
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
Helicopter:
|
Helicopter:
|
||||||
RepairBuildings: hpad
|
RepairBuildings: hpad
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
@@ -152,6 +153,8 @@
|
|||||||
WithShadow:
|
WithShadow:
|
||||||
Hovers:
|
Hovers:
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -177,7 +180,6 @@
|
|||||||
Beach: 80
|
Beach: 80
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: GenericVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
TakeCover:
|
TakeCover:
|
||||||
@@ -241,6 +243,8 @@
|
|||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
UpgradeManager:
|
UpgradeManager:
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
^CivInfantry:
|
^CivInfantry:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -249,7 +253,6 @@
|
|||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianMaleVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 70
|
Cost: 70
|
||||||
@@ -271,6 +274,8 @@
|
|||||||
ScaredyCat:
|
ScaredyCat:
|
||||||
Crushable:
|
Crushable:
|
||||||
CrushSound: squish2.aud
|
CrushSound: squish2.aud
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianMaleVoice
|
||||||
|
|
||||||
^DINO:
|
^DINO:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -299,7 +304,6 @@
|
|||||||
BlueTiberium: 70
|
BlueTiberium: 70
|
||||||
Beach: 80
|
Beach: 80
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: DinoVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -321,13 +325,14 @@
|
|||||||
DeathSounds:
|
DeathSounds:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Palette: terrain
|
Palette: terrain
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: DinoVoice
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
UseLocation: yes
|
UseLocation: yes
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: GenericVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -350,6 +355,8 @@
|
|||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
UpgradeManager:
|
UpgradeManager:
|
||||||
WithShadow:
|
WithShadow:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
^Ship:
|
^Ship:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -359,7 +366,6 @@
|
|||||||
Water: 100
|
Water: 100
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -384,6 +390,8 @@
|
|||||||
UpgradeTypes: selfheal
|
UpgradeTypes: selfheal
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
UpgradeManager:
|
UpgradeManager:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Building:
|
^Building:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
|
|||||||
@@ -185,7 +185,6 @@ RMBO:
|
|||||||
Queue: Infantry.GDI
|
Queue: Infantry.GDI
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
Voice: CommandoVoice
|
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 71
|
Speed: 71
|
||||||
Health:
|
Health:
|
||||||
@@ -206,6 +205,8 @@ RMBO:
|
|||||||
StandSequences: stand, stand2
|
StandSequences: stand, stand2
|
||||||
AnnounceOnBuild:
|
AnnounceOnBuild:
|
||||||
AnnounceOnKill:
|
AnnounceOnKill:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CommandoVoice
|
||||||
|
|
||||||
PVICE:
|
PVICE:
|
||||||
Inherits: VICE
|
Inherits: VICE
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, C4
|
TargetTypes: Ground, C4
|
||||||
Passenger:
|
Passenger:
|
||||||
@@ -52,6 +51,8 @@
|
|||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyUnitsDetected
|
Notification: EnemyUnitsDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -68,7 +69,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, C4
|
TargetTypes: Ground, C4
|
||||||
Passenger:
|
Passenger:
|
||||||
@@ -107,6 +107,8 @@
|
|||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyUnitsDetected
|
Notification: EnemyUnitsDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Husk:
|
^Husk:
|
||||||
Health:
|
Health:
|
||||||
@@ -190,7 +192,6 @@
|
|||||||
Rough: 70
|
Rough: 70
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: InfantryVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
@@ -241,13 +242,14 @@
|
|||||||
TerrainModifiesDamage:
|
TerrainModifiesDamage:
|
||||||
TerrainModifier:
|
TerrainModifier:
|
||||||
Rough: 80
|
Rough: 80
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: InfantryVoice
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
UseLocation: yes
|
UseLocation: yes
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: GenericVoice
|
|
||||||
TargetableAircraft:
|
TargetableAircraft:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground
|
GroundedTargetTypes: Ground
|
||||||
@@ -277,6 +279,8 @@
|
|||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyUnitsDetected
|
Notification: EnemyUnitsDetected
|
||||||
RenderUnit:
|
RenderUnit:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits: ^Plane
|
Inherits: ^Plane
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ engineer:
|
|||||||
Description: Infiltrates and captures enemy structures\n Strong vs Buildings\n Weak vs Everything
|
Description: Infiltrates and captures enemy structures\n Strong vs Buildings\n Weak vs Everything
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,0
|
Bounds: 12,17,0,0
|
||||||
Voice: EngineerVoice
|
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -52,6 +51,8 @@ engineer:
|
|||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
AttractsWorms:
|
AttractsWorms:
|
||||||
Intensity: 180
|
Intensity: 180
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: EngineerVoice
|
||||||
|
|
||||||
bazooka:
|
bazooka:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -94,7 +95,6 @@ medic:
|
|||||||
Description: Heals nearby infantry\n Strong vs Nothing\n Weak vs Everything
|
Description: Heals nearby infantry\n Strong vs Nothing\n Weak vs Everything
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,0
|
Bounds: 12,17,0,0
|
||||||
Voice: EngineerVoice
|
|
||||||
Health:
|
Health:
|
||||||
HP: 60
|
HP: 60
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -112,6 +112,8 @@ medic:
|
|||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
AttractsWorms:
|
AttractsWorms:
|
||||||
Intensity: 180
|
Intensity: 180
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: EngineerVoice
|
||||||
|
|
||||||
fremen:
|
fremen:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -126,7 +128,6 @@ fremen:
|
|||||||
Prerequisites: ~barracks.atreides, palace, ~techlevel.high
|
Prerequisites: ~barracks.atreides, palace, ~techlevel.high
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,0
|
Bounds: 12,17,0,0
|
||||||
Voice: FremenVoice
|
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 53
|
Speed: 53
|
||||||
Health:
|
Health:
|
||||||
@@ -151,6 +152,8 @@ fremen:
|
|||||||
CloakSound: STEALTH1.WAV
|
CloakSound: STEALTH1.WAV
|
||||||
UncloakSound: STEALTH2.WAV
|
UncloakSound: STEALTH2.WAV
|
||||||
-MustBeDestroyed:
|
-MustBeDestroyed:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: FremenVoice
|
||||||
|
|
||||||
grenadier:
|
grenadier:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -199,7 +202,6 @@ sardaukar:
|
|||||||
Description: Elite asssault infantry\n Strong vs Infantry, Vehicles\n Weak vs Artillery
|
Description: Elite asssault infantry\n Strong vs Infantry, Vehicles\n Weak vs Artillery
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,0
|
Bounds: 12,17,0,0
|
||||||
Voice: GenericVoice
|
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -217,6 +219,8 @@ sardaukar:
|
|||||||
AttackFrontal:
|
AttackFrontal:
|
||||||
AttractsWorms:
|
AttractsWorms:
|
||||||
Intensity: 180
|
Intensity: 180
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
saboteur:
|
saboteur:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -230,7 +234,6 @@ saboteur:
|
|||||||
Name: Saboteur
|
Name: Saboteur
|
||||||
Description: Sneaky infantry, armed with explosives\n Strong vs Buildings\n Weak vs Everything\n Special Ability: destroy buildings
|
Description: Sneaky infantry, armed with explosives\n Strong vs Buildings\n Weak vs Everything\n Special Ability: destroy buildings
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: SaboteurVoice
|
|
||||||
Bounds: 12,17,0,0
|
Bounds: 12,17,0,0
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
@@ -243,4 +246,6 @@ saboteur:
|
|||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
AttractsWorms:
|
AttractsWorms:
|
||||||
Intensity: 120
|
Intensity: 120
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: SaboteurVoice
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ VehicleVoice:
|
|||||||
Voices:
|
Voices:
|
||||||
Select: vehic1,yessir1,report1,await1
|
Select: vehic1,yessir1,report1,await1
|
||||||
Move: ackno,affirm1
|
Move: ackno,affirm1
|
||||||
|
Unload: ackno,affirm1
|
||||||
|
|
||||||
EngineerVoice:
|
EngineerVoice:
|
||||||
Voices:
|
Voices:
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ C1:
|
|||||||
C2:
|
C2:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C3:
|
C3:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -12,10 +13,11 @@ C3:
|
|||||||
C4:
|
C4:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: C2
|
Image: C2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C5:
|
C5:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -26,10 +28,11 @@ C5:
|
|||||||
C6:
|
C6:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: C2
|
Image: C2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C7:
|
C7:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -40,10 +43,11 @@ C7:
|
|||||||
C8:
|
C8:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: C2
|
Image: C2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
C9:
|
C9:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -54,10 +58,11 @@ C9:
|
|||||||
C10:
|
C10:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianFemaleVoice
|
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: C2
|
Image: C2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemaleVoice
|
||||||
|
|
||||||
FCOM:
|
FCOM:
|
||||||
Inherits: ^TechBuilding
|
Inherits: ^TechBuilding
|
||||||
|
|||||||
@@ -48,7 +48,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Repair, Vehicle
|
TargetTypes: Ground, Repair, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -83,6 +82,8 @@
|
|||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyDetected
|
Notification: EnemyDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
@@ -101,7 +102,6 @@
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, C4, Repair, Tank
|
TargetTypes: Ground, C4, Repair, Tank
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -145,6 +145,8 @@
|
|||||||
WaterCorpsePalette:
|
WaterCorpsePalette:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyDetected
|
Notification: EnemyDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
@@ -168,7 +170,6 @@
|
|||||||
Beach: 80
|
Beach: 80
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: GenericVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Infantry, Disguise
|
TargetTypes: Ground, Infantry, Disguise
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
@@ -221,6 +222,8 @@
|
|||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyDetected
|
Notification: EnemyDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
^Ship:
|
^Ship:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
@@ -232,7 +235,6 @@
|
|||||||
Water: 100
|
Water: 100
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: VehicleVoice
|
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Water, Repair
|
TargetTypes: Ground, Water, Repair
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -254,6 +256,8 @@
|
|||||||
Notification: EnemyDetected
|
Notification: EnemyDetected
|
||||||
EditorTilesetFilter:
|
EditorTilesetFilter:
|
||||||
ExcludeTilesets: INTERIOR
|
ExcludeTilesets: INTERIOR
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: VehicleVoice
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
@@ -263,7 +267,6 @@
|
|||||||
UseLocation: true
|
UseLocation: true
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: GenericVoice
|
|
||||||
TargetableAircraft:
|
TargetableAircraft:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground, Repair
|
GroundedTargetTypes: Ground, Repair
|
||||||
@@ -290,6 +293,8 @@
|
|||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
AnnounceOnSeen:
|
AnnounceOnSeen:
|
||||||
Notification: EnemyDetected
|
Notification: EnemyDetected
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits: ^Plane
|
Inherits: ^Plane
|
||||||
@@ -446,7 +451,6 @@
|
|||||||
^CivInfantry:
|
^CivInfantry:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianMaleVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 70
|
Cost: 70
|
||||||
@@ -466,6 +470,8 @@
|
|||||||
Types: CivilianInfantry
|
Types: CivilianInfantry
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
ScaredyCat:
|
ScaredyCat:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianMaleVoice
|
||||||
|
|
||||||
^CivBuilding:
|
^CivBuilding:
|
||||||
Inherits: ^TechBuilding
|
Inherits: ^TechBuilding
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ DOG:
|
|||||||
Name: Attack Dog
|
Name: Attack Dog
|
||||||
Description: Anti-infantry unit.\nCan detect cloaked units and spies.\n Strong vs Infantry\n Weak vs Vehicles
|
Description: Anti-infantry unit.\nCan detect cloaked units and spies.\n Strong vs Infantry\n Weak vs Vehicles
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: DogVoice
|
|
||||||
Bounds: 12,17,-1,-4
|
Bounds: 12,17,-1,-4
|
||||||
Health:
|
Health:
|
||||||
HP: 12
|
HP: 12
|
||||||
@@ -29,6 +28,8 @@ DOG:
|
|||||||
IgnoresDisguise:
|
IgnoresDisguise:
|
||||||
DetectCloaked:
|
DetectCloaked:
|
||||||
Range: 5
|
Range: 5
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: DogVoice
|
||||||
|
|
||||||
E1:
|
E1:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -184,7 +185,6 @@ E6:
|
|||||||
Name: Engineer
|
Name: Engineer
|
||||||
Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything
|
Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: EngineerVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
@@ -204,6 +204,8 @@ E6:
|
|||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
IdleSequences: idle1,idle2
|
IdleSequences: idle1,idle2
|
||||||
StandSequences: stand,stand2
|
StandSequences: stand,stand2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: EngineerVoice
|
||||||
|
|
||||||
SPY:
|
SPY:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -220,7 +222,6 @@ SPY:
|
|||||||
GenericName: Soldier
|
GenericName: Soldier
|
||||||
Description: Infiltrates enemy structures for intel or\nsabotage. Exact effect depends on the\nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised
|
Description: Infiltrates enemy structures for intel or\nsabotage. Exact effect depends on the\nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: SpyVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
@@ -245,6 +246,8 @@ SPY:
|
|||||||
Armament:
|
Armament:
|
||||||
Weapon: SilencedPPK
|
Weapon: SilencedPPK
|
||||||
AttackFrontal:
|
AttackFrontal:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: SpyVoice
|
||||||
|
|
||||||
SPY.England:
|
SPY.England:
|
||||||
Inherits: SPY
|
Inherits: SPY
|
||||||
@@ -272,7 +275,6 @@ E7:
|
|||||||
Name: Tanya
|
Name: Tanya
|
||||||
Description: Elite commando infantry. Armed with\ndual pistols and C4.\n Strong vs Infantry, Buildings\n Weak vs Vehicles\n Special Ability: Destroy Building with C4\n\nMaximum 1 can be trained
|
Description: Elite commando infantry. Armed with\ndual pistols and C4.\n Strong vs Infantry, Buildings\n Weak vs Vehicles\n Special Ability: Destroy Building with C4\n\nMaximum 1 can be trained
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: TanyaVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
@@ -302,6 +304,8 @@ E7:
|
|||||||
IdleSequences: idle1,idle2
|
IdleSequences: idle1,idle2
|
||||||
AnnounceOnBuild:
|
AnnounceOnBuild:
|
||||||
AnnounceOnKill:
|
AnnounceOnKill:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: TanyaVoice
|
||||||
|
|
||||||
MEDI:
|
MEDI:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -316,7 +320,6 @@ MEDI:
|
|||||||
Name: Medic
|
Name: Medic
|
||||||
Description: Heals nearby infantry.\n Strong vs Nothing\n Weak vs Everything
|
Description: Heals nearby infantry.\n Strong vs Nothing\n Weak vs Everything
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: MedicVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 80
|
HP: 80
|
||||||
@@ -340,6 +343,8 @@ MEDI:
|
|||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
IdleSequences: idle1,idle2
|
IdleSequences: idle1,idle2
|
||||||
AttackSequence: heal
|
AttackSequence: heal
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: MedicVoice
|
||||||
|
|
||||||
MECH:
|
MECH:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -354,7 +359,6 @@ MECH:
|
|||||||
Name: Mechanic
|
Name: Mechanic
|
||||||
Description: Repairs nearby vehicles and restores\nhusks to working condition.\n Strong vs Nothing\n Weak vs Everything
|
Description: Repairs nearby vehicles and restores\nhusks to working condition.\n Strong vs Nothing\n Weak vs Everything
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: MechanicVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 80
|
HP: 80
|
||||||
@@ -380,11 +384,12 @@ MECH:
|
|||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
IdleSequences: idle1,idle2
|
IdleSequences: idle1,idle2
|
||||||
AttackSequence: heal
|
AttackSequence: heal
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: MechanicVoice
|
||||||
|
|
||||||
EINSTEIN:
|
EINSTEIN:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: EinsteinVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 10
|
Cost: 10
|
||||||
@@ -401,11 +406,12 @@ EINSTEIN:
|
|||||||
Types: CivilianInfantry
|
Types: CivilianInfantry
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
ScaredyCat:
|
ScaredyCat:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: EinsteinVoice
|
||||||
|
|
||||||
DELPHI:
|
DELPHI:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: CivilianMaleVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 10
|
Cost: 10
|
||||||
@@ -422,6 +428,8 @@ DELPHI:
|
|||||||
Types: CivilianInfantry
|
Types: CivilianInfantry
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
ScaredyCat:
|
ScaredyCat:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: CivilianMaleVoice
|
||||||
|
|
||||||
CHAN:
|
CHAN:
|
||||||
Inherits: ^CivInfantry
|
Inherits: ^CivInfantry
|
||||||
@@ -433,7 +441,8 @@ GNRL:
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
Name: General
|
Name: General
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: StavrosVoice
|
Voiced:
|
||||||
|
VoiceSet: StavrosVoice
|
||||||
|
|
||||||
THF:
|
THF:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -443,7 +452,6 @@ THF:
|
|||||||
Name: Thief
|
Name: Thief
|
||||||
Description: Steals enemy credits.\n Strong vs Nothing\n Weak vs Everything\n
|
Description: Steals enemy credits.\n Strong vs Nothing\n Weak vs Everything\n
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: ThiefVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
@@ -460,6 +468,8 @@ THF:
|
|||||||
Prone50Percent: 50
|
Prone50Percent: 50
|
||||||
DamageTriggers: TriggerProne
|
DamageTriggers: TriggerProne
|
||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: ThiefVoice
|
||||||
|
|
||||||
HIJACKER:
|
HIJACKER:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -474,7 +484,6 @@ HIJACKER:
|
|||||||
Name: Hijacker
|
Name: Hijacker
|
||||||
Description: Hijacks enemy vehicles. Unarmed\n Strong vs Tanks\n Weak vs Infantry, Aircraft
|
Description: Hijacks enemy vehicles. Unarmed\n Strong vs Tanks\n Weak vs Infantry, Aircraft
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: ThiefVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 50
|
HP: 50
|
||||||
@@ -487,6 +496,8 @@ HIJACKER:
|
|||||||
Captures:
|
Captures:
|
||||||
CaptureTypes: vehicle
|
CaptureTypes: vehicle
|
||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: ThiefVoice
|
||||||
|
|
||||||
SHOK:
|
SHOK:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -501,7 +512,6 @@ SHOK:
|
|||||||
Name: Shock Trooper
|
Name: Shock Trooper
|
||||||
Description: Elite infantry with portable tesla coils.\n Strong vs Infantry\n Weak vs Aircraft
|
Description: Elite infantry with portable tesla coils.\n Strong vs Infantry\n Weak vs Aircraft
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: ShokVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
@@ -523,6 +533,8 @@ SHOK:
|
|||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
IdleSequences: idle1,idle2
|
IdleSequences: idle1,idle2
|
||||||
StandSequences: stand,stand2
|
StandSequences: stand,stand2
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: ShokVoice
|
||||||
|
|
||||||
SNIPER:
|
SNIPER:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -584,7 +596,6 @@ Zombie:
|
|||||||
BuildPaletteOrder: 200
|
BuildPaletteOrder: 200
|
||||||
Prerequisites: ~bio
|
Prerequisites: ~bio
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: AntVoice
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 250
|
HP: 250
|
||||||
@@ -595,6 +606,8 @@ Zombie:
|
|||||||
AttackFrontal:
|
AttackFrontal:
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: claw
|
Weapon: claw
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: AntVoice
|
||||||
|
|
||||||
Ant:
|
Ant:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -608,7 +621,6 @@ Ant:
|
|||||||
BuildPaletteOrder: 1954
|
BuildPaletteOrder: 1954
|
||||||
Prerequisites: ~bio
|
Prerequisites: ~bio
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: AntVoice
|
|
||||||
Bounds: 30,30,0,-2
|
Bounds: 30,30,0,-2
|
||||||
Health:
|
Health:
|
||||||
HP: 750
|
HP: 750
|
||||||
@@ -626,4 +638,6 @@ Ant:
|
|||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
WithDeathAnimation:
|
WithDeathAnimation:
|
||||||
UseDeathTypeSuffix: false
|
UseDeathTypeSuffix: false
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: AntVoice
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ Vehicle:
|
|||||||
Select: 25-I000, 25-I002, 25-I004, 25-I006
|
Select: 25-I000, 25-I002, 25-I004, 25-I006
|
||||||
Move: 25-I012, 25-I014, 25-I016, 25-I018, 25-I022
|
Move: 25-I012, 25-I014, 25-I016, 25-I018, 25-I022
|
||||||
Attack: 25-I014, 25-I022, 25-I024, 25-I026
|
Attack: 25-I014, 25-I022, 25-I024, 25-I026
|
||||||
|
Unload: 25-I018
|
||||||
|
|
||||||
Mech:
|
Mech:
|
||||||
Voices:
|
Voices:
|
||||||
|
|||||||
@@ -207,7 +207,8 @@ SCRIN:
|
|||||||
Prerequisites: ~nahpad, natech
|
Prerequisites: ~nahpad, natech
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 30,24
|
Bounds: 30,24
|
||||||
Voice: Scrin
|
Voiced:
|
||||||
|
VoiceSet: Scrin
|
||||||
Plane:
|
Plane:
|
||||||
MaximumPitch: 90
|
MaximumPitch: 90
|
||||||
ROT: 3
|
ROT: 3
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ WEEDGUY:
|
|||||||
Name: Chem Spray Infantry
|
Name: Chem Spray Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
Voice: Weed
|
Voiced:
|
||||||
|
VoiceSet: Weed
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 42
|
Speed: 42
|
||||||
Health:
|
Health:
|
||||||
@@ -35,7 +36,8 @@ UMAGON:
|
|||||||
Name: Umagon
|
Name: Umagon
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
Voice: Umagon
|
Voiced:
|
||||||
|
VoiceSet: Umagon
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 71
|
Speed: 71
|
||||||
Health:
|
Health:
|
||||||
@@ -65,8 +67,9 @@ CHAMSPY:
|
|||||||
Cost: 700
|
Cost: 700
|
||||||
DisguiseToolTip:
|
DisguiseToolTip:
|
||||||
Name: Chameleon Spy
|
Name: Chameleon Spy
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: Spy
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: Spy
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Health:
|
Health:
|
||||||
HP: 120
|
HP: 120
|
||||||
@@ -99,7 +102,8 @@ MUTANT:
|
|||||||
Name: Mutant
|
Name: Mutant
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Mutant
|
Voiced:
|
||||||
|
VoiceSet: Mutant
|
||||||
Health:
|
Health:
|
||||||
HP: 50
|
HP: 50
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
@@ -130,7 +134,8 @@ MWMN:
|
|||||||
Name: Mutant Soldier
|
Name: Mutant Soldier
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: CivilianFemale
|
Voiced:
|
||||||
|
VoiceSet: CivilianFemale
|
||||||
Health:
|
Health:
|
||||||
HP: 50
|
HP: 50
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
@@ -161,7 +166,8 @@ MUTANT3:
|
|||||||
Name: Mutant Sergeant
|
Name: Mutant Sergeant
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Mutant
|
Voiced:
|
||||||
|
VoiceSet: Mutant
|
||||||
Health:
|
Health:
|
||||||
HP: 50
|
HP: 50
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
@@ -192,7 +198,8 @@ TRATOS:
|
|||||||
Name: Tratos
|
Name: Tratos
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Tratos
|
Voiced:
|
||||||
|
VoiceSet: Tratos
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
@@ -221,7 +228,8 @@ OXANNA:
|
|||||||
Name: Oxanna
|
Name: Oxanna
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Oxanna
|
Voiced:
|
||||||
|
VoiceSet: Oxanna
|
||||||
Health:
|
Health:
|
||||||
HP: 50
|
HP: 50
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -248,7 +256,8 @@ SLAV:
|
|||||||
Name: Slavick
|
Name: Slavick
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Slavick
|
Voiced:
|
||||||
|
VoiceSet: Slavick
|
||||||
Health:
|
Health:
|
||||||
HP: 300
|
HP: 300
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -284,8 +293,8 @@ DOGGIE:
|
|||||||
Range: 4c0
|
Range: 4c0
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 113
|
Speed: 113
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Fiend
|
VoiceSet: Fiend
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
Armament:
|
Armament:
|
||||||
@@ -314,8 +323,8 @@ VISSML:
|
|||||||
Speed: 113
|
Speed: 113
|
||||||
ROT: 16
|
ROT: 16
|
||||||
-Crushable:
|
-Crushable:
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Fiend
|
VoiceSet: Fiend
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
@@ -342,8 +351,8 @@ VISLRG:
|
|||||||
Speed: 113
|
Speed: 113
|
||||||
ROT: 16
|
ROT: 16
|
||||||
-Crushable:
|
-Crushable:
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Fiend
|
VoiceSet: Fiend
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
Armament:
|
Armament:
|
||||||
|
|||||||
@@ -185,7 +185,8 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: Infantry
|
Voiced:
|
||||||
|
VoiceSet: Infantry
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
@@ -250,8 +251,9 @@
|
|||||||
^CivilianInfantry:
|
^CivilianInfantry:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Voice: Civilian
|
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: Civilian
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 10
|
Cost: 10
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -281,10 +283,11 @@
|
|||||||
Tiberium: 80
|
Tiberium: 80
|
||||||
BlueTiberium: 80
|
BlueTiberium: 80
|
||||||
ROT: 5
|
ROT: 5
|
||||||
|
Selectable:
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Vehicle
|
VoiceSet: Vehicle
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -365,10 +368,11 @@
|
|||||||
Tiberium: 80
|
Tiberium: 80
|
||||||
BlueTiberium: 80
|
BlueTiberium: 80
|
||||||
ROT: 5
|
ROT: 5
|
||||||
|
Selectable:
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Vehicle
|
VoiceSet: Vehicle
|
||||||
TargetableUnit:
|
TargetableUnit:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
@@ -442,10 +446,11 @@
|
|||||||
TargetableAircraft:
|
TargetableAircraft:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground
|
GroundedTargetTypes: Ground
|
||||||
|
Selectable:
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Heli
|
VoiceSet: Heli
|
||||||
Helicopter:
|
Helicopter:
|
||||||
RepairBuildings: gadept
|
RepairBuildings: gadept
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ MEDIC:
|
|||||||
Prerequisites: ~gapile
|
Prerequisites: ~gapile
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
Voice: Medic
|
Voiced:
|
||||||
|
VoiceSet: Medic
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 56
|
Speed: 56
|
||||||
Health:
|
Health:
|
||||||
|
|||||||
@@ -106,8 +106,9 @@ SMECH:
|
|||||||
Weapon: AssaultCannon
|
Weapon: AssaultCannon
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: Mech
|
||||||
Selectable:
|
Selectable:
|
||||||
Voices: Mech
|
|
||||||
Bounds: 20, 32, 0, -8
|
Bounds: 20, 32, 0, -8
|
||||||
|
|
||||||
MMCH:
|
MMCH:
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ E3:
|
|||||||
Description: Anti-tank infantry.\n Strong vs Vehicles, Aircraft, Buildings\n Weak vs Infantry
|
Description: Anti-tank infantry.\n Strong vs Vehicles, Aircraft, Buildings\n Weak vs Infantry
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Rocket
|
Voiced:
|
||||||
|
VoiceSet: Rocket
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -47,7 +48,8 @@ CYBORG:
|
|||||||
-Crushable:
|
-Crushable:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 14,30,0,-7
|
Bounds: 14,30,0,-7
|
||||||
Voice: Cyborg
|
Voiced:
|
||||||
|
VoiceSet: Cyborg
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 56
|
Speed: 56
|
||||||
Health:
|
Health:
|
||||||
@@ -88,7 +90,8 @@ CYC2:
|
|||||||
-Crushable:
|
-Crushable:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 14,30,0,-7
|
Bounds: 14,30,0,-7
|
||||||
Voice: CyborgCommando
|
Voiced:
|
||||||
|
VoiceSet: CyborgCommando
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 56
|
Speed: 56
|
||||||
Health:
|
Health:
|
||||||
@@ -126,7 +129,8 @@ MHIJACK:
|
|||||||
Description: Hijacks enemy vehicles.\n Unarmed
|
Description: Hijacks enemy vehicles.\n Unarmed
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-9
|
Bounds: 12,17,0,-9
|
||||||
Voice: Hijacker
|
Voiced:
|
||||||
|
VoiceSet: Hijacker
|
||||||
Health:
|
Health:
|
||||||
HP: 300
|
HP: 300
|
||||||
PoisonedByTiberium:
|
PoisonedByTiberium:
|
||||||
|
|||||||
@@ -165,6 +165,8 @@ GATICK:
|
|||||||
Type: Concrete
|
Type: Concrete
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 5c0
|
Range: 5c0
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: Vehicle
|
||||||
Turreted:
|
Turreted:
|
||||||
ROT: 6
|
ROT: 6
|
||||||
InitialFacing: 128
|
InitialFacing: 128
|
||||||
@@ -215,8 +217,8 @@ GAARTY:
|
|||||||
Type: Light
|
Type: Light
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 9c0
|
Range: 9c0
|
||||||
Selectable:
|
Voiced:
|
||||||
Voice: Vehicle
|
VoiceSet: Vehicle
|
||||||
Turreted:
|
Turreted:
|
||||||
ROT: 5
|
ROT: 5
|
||||||
InitialFacing: 128
|
InitialFacing: 128
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ ENGINEER:
|
|||||||
Prerequisites: ~barracks
|
Prerequisites: ~barracks
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
Voice: Engineer
|
Voiced:
|
||||||
|
VoiceSet: Engineer
|
||||||
Mobile:
|
Mobile:
|
||||||
Speed: 56
|
Speed: 56
|
||||||
Health:
|
Health:
|
||||||
|
|||||||
Reference in New Issue
Block a user