check voice actor references

This commit is contained in:
Matthias Mailänder
2015-06-20 12:09:58 +02:00
parent 264a63e58c
commit 50e5e9df24
52 changed files with 390 additions and 81 deletions

View File

@@ -57,9 +57,21 @@ namespace OpenRA
} }
} }
var voicedActor = actors.FirstOrDefault(a => a.Owner == world.LocalPlayer && a.IsInWorld && a.HasTrait<IVoiced>()); // Play the selection voice from one of the selected actors
if (voicedActor != null) // TODO: This probably should only be considering the newly selected actors
voicedActor.PlayVoice("Select"); // TODO: Ship this into an INotifySelection trait to remove the engine dependency on Selectable
foreach (var actor in actors)
{
if (actor.Owner != world.LocalPlayer || !actor.IsInWorld)
continue;
var selectable = actor.Info.Traits.GetOrDefault<SelectableInfo>();
if (selectable == null || !actor.HasVoice(selectable.Voice))
continue;
actor.PlayVoice(selectable.Voice);
break;
}
foreach (var a in newSelection) foreach (var a in newSelection)
foreach (var sel in a.TraitsImplementing<INotifySelected>()) foreach (var sel in a.TraitsImplementing<INotifySelected>())

View File

@@ -324,12 +324,6 @@ namespace OpenRA
if (voicedActor != null) if (voicedActor != null)
{ {
if (!rules.VoicePools.Value.ContainsKey("Attack"))
rules.VoicePools.Value.Add("Attack", rules.VoicePools.Value["Move"]);
if (!rules.VoicePools.Value.ContainsKey("AttackMove"))
rules.VoicePools.Value.Add("AttackMove", rules.VoicePools.Value["Move"]);
if (!rules.VoicePools.Value.ContainsKey(definition)) if (!rules.VoicePools.Value.ContainsKey(definition))
throw new InvalidOperationException("Can't find {0} in voice pool.".F(definition)); throw new InvalidOperationException("Can't find {0} in voice pool.".F(definition));

View File

@@ -20,6 +20,9 @@ namespace OpenRA.Traits
[AttributeUsage(AttributeTargets.Field)] [AttributeUsage(AttributeTargets.Field)]
public sealed class WeaponReferenceAttribute : Attribute { } public sealed class WeaponReferenceAttribute : Attribute { }
[AttributeUsage(AttributeTargets.Field)]
public sealed class VoiceSetReferenceAttribute : Attribute { }
[AttributeUsage(AttributeTargets.Field)] [AttributeUsage(AttributeTargets.Field)]
public sealed class VoiceReferenceAttribute : Attribute { } public sealed class VoiceReferenceAttribute : Attribute { }
} }

View File

@@ -22,6 +22,8 @@ namespace OpenRA.Traits
+ "Defaults to the actor name when not defined or inherited.")] + "Defaults to the actor name when not defined or inherited.")]
public readonly string Class = null; public readonly string Class = null;
[VoiceReference] public readonly string Voice = "Select";
public object Create(ActorInitializer init) { return new Selectable(init.Self, this); } public object Create(ActorInitializer init) { return new Selectable(init.Self, this); }
} }
@@ -29,9 +31,12 @@ namespace OpenRA.Traits
{ {
public readonly string Class = null; public readonly string Class = null;
public SelectableInfo Info;
public Selectable(Actor self, SelectableInfo info) public Selectable(Actor self, SelectableInfo info)
{ {
Class = string.IsNullOrEmpty(info.Class) ? self.Info.Name : info.Class; Class = string.IsNullOrEmpty(info.Class) ? self.Info.Name : info.Class;
Info = info;
} }
} }
} }

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Lint
CheckReference(actorInfo, traitInfo, field, map.Rules.Actors, "actor"); CheckReference(actorInfo, traitInfo, field, map.Rules.Actors, "actor");
if (field.HasAttribute<WeaponReferenceAttribute>()) if (field.HasAttribute<WeaponReferenceAttribute>())
CheckReference(actorInfo, traitInfo, field, map.Rules.Weapons, "weapon"); CheckReference(actorInfo, traitInfo, field, map.Rules.Weapons, "weapon");
if (field.HasAttribute<VoiceReferenceAttribute>()) if (field.HasAttribute<VoiceSetReferenceAttribute>())
CheckReference(actorInfo, traitInfo, field, map.Rules.Voices, "voice"); CheckReference(actorInfo, traitInfo, field, map.Rules.Voices, "voice");
} }
} }

View File

@@ -0,0 +1,64 @@
#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;
using System.Linq;
using System.Reflection;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Lint
{
public class CheckVoiceReferences : ILintPass
{
public void Run(Action<string> emitError, Action<string> emitWarning, Map map)
{
foreach (var actorInfo in map.Rules.Actors)
{
foreach (var traitInfo in actorInfo.Value.Traits.WithInterface<ITraitInfo>())
{
var fields = traitInfo.GetType().GetFields().Where(f => f.HasAttribute<VoiceSetReferenceAttribute>());
foreach (var field in fields)
{
var voiceSets = LintExts.GetFieldValues(traitInfo, field, emitError);
foreach (var voiceSet in voiceSets)
{
if (string.IsNullOrEmpty(voiceSet))
continue;
CheckVoices(actorInfo.Value, emitError, map, voiceSet);
}
}
}
}
}
void CheckVoices(ActorInfo actorInfo, Action<string> emitError, Map map, string voiceSet)
{
var soundInfo = map.Rules.Voices[voiceSet.ToLowerInvariant()];
foreach (var traitInfo in actorInfo.Traits.WithInterface<ITraitInfo>())
{
var fields = traitInfo.GetType().GetFields().Where(f => f.HasAttribute<VoiceReferenceAttribute>());
foreach (var field in fields)
{
var voices = LintExts.GetFieldValues(traitInfo, field, emitError);
foreach (var voice in voices)
{
if (string.IsNullOrEmpty(voice))
continue;
if (!soundInfo.Voices.Keys.Contains(voice))
emitError("Actor {0} using voice set {1} does not define {2} voice required by {3}.".F(actorInfo.Name, voiceSet, voice, traitInfo));
}
}
}
}
}
}

View File

@@ -185,6 +185,7 @@
<Compile Include="Lint\CheckSyncAnnotations.cs" /> <Compile Include="Lint\CheckSyncAnnotations.cs" />
<Compile Include="Lint\CheckTraitPrerequisites.cs" /> <Compile Include="Lint\CheckTraitPrerequisites.cs" />
<Compile Include="Lint\CheckDeathTypes.cs" /> <Compile Include="Lint\CheckDeathTypes.cs" />
<Compile Include="Lint\CheckVoiceReferences.cs" />
<Compile Include="Lint\LintBuildablePrerequisites.cs" /> <Compile Include="Lint\LintBuildablePrerequisites.cs" />
<Compile Include="Lint\LintExts.cs" /> <Compile Include="Lint\LintExts.cs" />
<Compile Include="LoadScreens\ModChooserLoadScreen.cs" /> <Compile Include="LoadScreens\ModChooserLoadScreen.cs" />

View File

@@ -44,6 +44,8 @@ namespace OpenRA.Mods.Common.Traits
public int GetInitialFacing() { return InitialFacing; } public int GetInitialFacing() { return InitialFacing; }
public WRange GetCruiseAltitude() { return CruiseAltitude; } public WRange GetCruiseAltitude() { return CruiseAltitude; }
[VoiceReference] public readonly string Voice = "Action";
public IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { return new ReadOnlyDictionary<CPos, SubCell>(); } public IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { return new ReadOnlyDictionary<CPos, SubCell>(); }
bool IOccupySpaceInfo.SharesCell { get { return false; } } bool IOccupySpaceInfo.SharesCell { get { return false; } }
} }
@@ -300,7 +302,7 @@ namespace OpenRA.Mods.Common.Traits
case "Enter": case "Enter":
case "ReturnToBase": case "ReturnToBase":
case "Stop": case "Stop":
return "Move"; return info.Voice;
default: return null; default: return null;
} }
} }

View File

@@ -32,6 +32,8 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Does not care about shroud or fog. Enables the actor to launch an attack against a target even if he has no visibility of it.")] [Desc("Does not care about shroud or fog. Enables the actor to launch an attack against a target even if he has no visibility of it.")]
public readonly bool IgnoresVisibility = false; public readonly bool IgnoresVisibility = false;
[VoiceReference] public readonly string Voice = "Action";
public abstract object Create(ActorInitializer init); public abstract object Create(ActorInitializer init);
} }
@@ -141,7 +143,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "Attack" ? "Attack" : null; return order.OrderString == "Attack" ? Info.Voice : null;
} }
public abstract Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove); public abstract Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove);

View File

@@ -18,6 +18,8 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Provides access to the attack-move command, which will make the actor automatically engage viable targets while moving to the destination.")] [Desc("Provides access to the attack-move command, which will make the actor automatically engage viable targets while moving to the destination.")]
class AttackMoveInfo : ITraitInfo class AttackMoveInfo : ITraitInfo
{ {
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new AttackMove(init.Self, this); } public object Create(ActorInitializer init) { return new AttackMove(init.Self, this); }
} }
@@ -27,16 +29,18 @@ namespace OpenRA.Mods.Common.Traits
public CPos? TargetLocation = null; public CPos? TargetLocation = null;
readonly IMove move; readonly IMove move;
readonly AttackMoveInfo info;
public AttackMove(Actor self, AttackMoveInfo info) public AttackMove(Actor self, AttackMoveInfo info)
{ {
move = self.Trait<IMove>(); move = self.Trait<IMove>();
this.info = info;
} }
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
if (order.OrderString == "AttackMove") if (order.OrderString == "AttackMove")
return "AttackMove"; return info.Voice;
return null; return null;
} }

View File

@@ -22,16 +22,21 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Delay to demolish the target once the C4 is planted." + [Desc("Delay to demolish the target once the C4 is planted." +
"Measured in game ticks. Default is 1.8 seconds.")] "Measured in game ticks. Default is 1.8 seconds.")]
public readonly int C4Delay = 45; public readonly int C4Delay = 45;
[Desc("Number of times to flash the target")] [Desc("Number of times to flash the target")]
public readonly int Flashes = 3; public readonly int Flashes = 3;
[Desc("Delay before the flashing starts")] [Desc("Delay before the flashing starts")]
public readonly int FlashesDelay = 4; public readonly int FlashesDelay = 4;
[Desc("Interval between each flash")] [Desc("Interval between each flash")]
public readonly int FlashInterval = 4; public readonly int FlashInterval = 4;
[Desc("Duration of each flash")] [Desc("Duration of each flash")]
public readonly int FlashDuration = 3; public readonly int FlashDuration = 3;
[Desc("Voice string when planting explosive charges.")] [Desc("Voice string when planting explosive charges.")]
public readonly string Voice = "Attack"; [VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new C4Demolition(this); } public object Create(ActorInitializer init) { return new C4Demolition(this); }
} }

View File

@@ -26,6 +26,8 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Only used if Sabotage=true. Sabotage damage expressed as a percentage of enemy health removed.")] [Desc("Only used if Sabotage=true. Sabotage damage expressed as a percentage of enemy health removed.")]
public readonly float SabotageHPRemoval = 0.5f; public readonly float SabotageHPRemoval = 0.5f;
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new Captures(init.Self, this); } public object Create(ActorInitializer init) { return new Captures(init.Self, this); }
} }
@@ -59,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "CaptureActor" ? "Attack" : null; return order.OrderString == "CaptureActor" ? Info.Voice : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits
public readonly string[] UnloadTerrainTypes = { }; public readonly string[] UnloadTerrainTypes = { };
[Desc("Voice to play when ordered to unload the passengers.")] [Desc("Voice to play when ordered to unload the passengers.")]
public readonly string UnloadVoice = "Unload"; [VoiceReference] public readonly string UnloadVoice = "Action";
[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;

View File

@@ -17,10 +17,22 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
[Desc("Can instantly repair other actors, but gets consumed afterwards.")] [Desc("Can instantly repair other actors, but gets consumed afterwards.")]
class EngineerRepairInfo : TraitInfo<EngineerRepair> { } class EngineerRepairInfo : ITraitInfo
{
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new EngineerRepair(init, this); }
}
class EngineerRepair : IIssueOrder, IResolveOrder, IOrderVoice class EngineerRepair : IIssueOrder, IResolveOrder, IOrderVoice
{ {
readonly EngineerRepairInfo info;
public EngineerRepair(ActorInitializer init, EngineerRepairInfo info)
{
this.info = info;
}
public IEnumerable<IOrderTargeter> Orders public IEnumerable<IOrderTargeter> Orders
{ {
get { yield return new EngineerRepairOrderTargeter(); } get { yield return new EngineerRepairOrderTargeter(); }
@@ -63,7 +75,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "EngineerRepair" && IsValidOrder(self, order) return order.OrderString == "EngineerRepair" && IsValidOrder(self, order)
? "Attack" : null; ? info.Voice : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -21,9 +21,12 @@ namespace OpenRA.Mods.Common.Traits
{ {
[Desc("Types of actors that it can capture, as long as the type also exists in the ExternalCapturable Type: trait.")] [Desc("Types of actors that it can capture, as long as the type also exists in the ExternalCapturable Type: trait.")]
public readonly string[] CaptureTypes = { "building" }; public readonly string[] CaptureTypes = { "building" };
[Desc("Destroy the unit after capturing.")] [Desc("Destroy the unit after capturing.")]
public readonly bool ConsumeActor = false; public readonly bool ConsumeActor = false;
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new ExternalCaptures(init.Self, this); } public object Create(ActorInitializer init) { return new ExternalCaptures(init.Self, this); }
} }
@@ -83,7 +86,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "ExternalCaptureActor" && IsValidOrder(self, order) return order.OrderString == "ExternalCaptureActor" && IsValidOrder(self, order)
? "Attack" : null; ? Info.Voice : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Traits
[Desc("The player can give this unit the order to follow and protect friendly units with the Guardable trait.")] [Desc("The player can give this unit the order to follow and protect friendly units with the Guardable trait.")]
public class GuardInfo : ITraitInfo public class GuardInfo : ITraitInfo
{ {
public readonly string Voice = "Move"; [VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new Guard(this); } public object Create(ActorInitializer init) { return new Guard(this); }
} }

View File

@@ -22,23 +22,35 @@ namespace OpenRA.Mods.Common.Traits
public class HarvesterInfo : ITraitInfo public class HarvesterInfo : ITraitInfo
{ {
public readonly string[] DeliveryBuildings = { }; public readonly string[] DeliveryBuildings = { };
[Desc("How much resources it can carry.")] [Desc("How much resources it can carry.")]
public readonly int Capacity = 28; public readonly int Capacity = 28;
public readonly int LoadTicksPerBale = 4; public readonly int LoadTicksPerBale = 4;
[Desc("How fast it can dump it's carryage.")] [Desc("How fast it can dump it's carryage.")]
public readonly int UnloadTicksPerBale = 4; public readonly int UnloadTicksPerBale = 4;
[Desc("How many squares to show the fill level.")] [Desc("How many squares to show the fill level.")]
public readonly int PipCount = 7; public readonly int PipCount = 7;
public readonly int HarvestFacings = 0; public readonly int HarvestFacings = 0;
[Desc("Which resources it can harvest.")] [Desc("Which resources it can harvest.")]
public readonly string[] Resources = { }; public readonly string[] Resources = { };
[Desc("Percentage of maximum speed when fully loaded.")] [Desc("Percentage of maximum speed when fully loaded.")]
public readonly int FullyLoadedSpeed = 85; public readonly int FullyLoadedSpeed = 85;
[Desc("Initial search radius (in cells) from the refinery that created us.")] [Desc("Initial search radius (in cells) from the refinery that created us.")]
public readonly int SearchFromProcRadius = 24; public readonly int SearchFromProcRadius = 24;
[Desc("Search radius (in cells) from the last harvest order location to find more resources.")] [Desc("Search radius (in cells) from the last harvest order location to find more resources.")]
public readonly int SearchFromOrderRadius = 12; public readonly int SearchFromOrderRadius = 12;
[VoiceReference] public readonly string HarvestVoice = "Action";
[VoiceReference] public readonly string DeliverVoice = "Action";
public object Create(ActorInitializer init) { return new Harvester(init.Self, this); } public object Create(ActorInitializer init) { return new Harvester(init.Self, this); }
} }
@@ -270,7 +282,13 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return (order.OrderString == "Harvest" || (order.OrderString == "Deliver" && !IsEmpty)) ? "Move" : null; if (order.OrderString == "Harvest")
return info.HarvestVoice;
if (order.OrderString == "Deliver" && !IsEmpty)
return info.DeliverVoice;
return null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -61,6 +61,8 @@ namespace OpenRA.Mods.Common.Traits
public readonly string Cursor = "move"; public readonly string Cursor = "move";
public readonly string BlockedCursor = "move-blocked"; public readonly string BlockedCursor = "move-blocked";
[VoiceReference] public readonly string Voice = "Action";
public virtual object Create(ActorInitializer init) { return new Mobile(init, this); } public virtual object Create(ActorInitializer init) { return new Mobile(init, this); }
static object LoadSpeeds(MiniYaml y) static object LoadSpeeds(MiniYaml y)
@@ -533,7 +535,7 @@ namespace OpenRA.Mods.Common.Traits
case "Move": case "Move":
case "Scatter": case "Scatter":
case "Stop": case "Stop":
return "Move"; return Info.Voice;
default: default:
return null; return null;
} }

View File

@@ -103,6 +103,8 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Upgrade types to grant to transport.")] [Desc("Upgrade types to grant to transport.")]
public readonly string[] GrantUpgrades = { }; public readonly string[] GrantUpgrades = { };
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new Passenger(this); } public object Create(ActorInitializer init) { return new Passenger(this); }
} }
@@ -154,7 +156,7 @@ namespace OpenRA.Mods.Common.Traits
{ {
if ((order.OrderString != "EnterTransport" && order.OrderString != "EnterTransports") || if ((order.OrderString != "EnterTransport" && order.OrderString != "EnterTransports") ||
!CanEnter(order.TargetActor)) return null; !CanEnter(order.TargetActor)) return null;
return "Move"; return Info.Voice;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -22,6 +22,9 @@ namespace OpenRA.Mods.Common.Traits
class RepairableInfo : ITraitInfo, Requires<HealthInfo> class RepairableInfo : ITraitInfo, Requires<HealthInfo>
{ {
public readonly string[] RepairBuildings = { "fix" }; public readonly string[] RepairBuildings = { "fix" };
[VoiceReference] public readonly string Voice = "Action";
public virtual object Create(ActorInitializer init) { return new Repairable(init.Self, this); } public virtual object Create(ActorInitializer init) { return new Repairable(init.Self, this); }
} }
@@ -76,7 +79,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return (order.OrderString == "Repair" && CanRepair()) ? "Move" : null; return (order.OrderString == "Repair" && CanRepair()) ? info.Voice : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -17,10 +17,22 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
[Desc("Can enter a BridgeHut to trigger a repair.")] [Desc("Can enter a BridgeHut to trigger a repair.")]
class RepairsBridgesInfo : TraitInfo<RepairsBridges> { } class RepairsBridgesInfo : ITraitInfo
{
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new RepairsBridges(this); }
}
class RepairsBridges : IIssueOrder, IResolveOrder, IOrderVoice class RepairsBridges : IIssueOrder, IResolveOrder, IOrderVoice
{ {
readonly RepairsBridgesInfo info;
public RepairsBridges(RepairsBridgesInfo info)
{
this.info = info;
}
public IEnumerable<IOrderTargeter> Orders public IEnumerable<IOrderTargeter> Orders
{ {
get { yield return new RepairBridgeOrderTargeter(); } get { yield return new RepairBridgeOrderTargeter(); }
@@ -43,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits
if (hut == null) if (hut == null)
return null; return null;
return hut.BridgeDamageState == DamageState.Undamaged || hut.Repairing || hut.Bridge.IsDangling ? null : "Attack"; return hut.BridgeDamageState == DamageState.Undamaged || hut.Repairing || hut.Bridge.IsDangling ? null : info.Voice;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -21,6 +21,9 @@ namespace OpenRA.Mods.Common.Traits
{ {
[Desc("The amount of cash the owner recieves.")] [Desc("The amount of cash the owner recieves.")]
public readonly int Payload = 500; public readonly int Payload = 500;
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new SupplyTruck(this); } public object Create(ActorInitializer init) { return new SupplyTruck(this); }
} }
@@ -51,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return "Move"; return info.Voice;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -45,6 +45,8 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Cursor to display when unable to (un)deploy the actor.")] [Desc("Cursor to display when unable to (un)deploy the actor.")]
public readonly string DeployBlockedCursor = "deploy-blocked"; public readonly string DeployBlockedCursor = "deploy-blocked";
[VoiceReference] public readonly string Voice = "Action";
public virtual object Create(ActorInitializer init) { return new Transforms(init, this); } public virtual object Create(ActorInitializer init) { return new Transforms(init, this); }
} }
@@ -65,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return (order.OrderString == "DeployTransform") ? "Move" : null; return (order.OrderString == "DeployTransform") ? info.Voice : null;
} }
bool CanDeploy() bool CanDeploy()

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits
public class VoicedInfo : ITraitInfo public class VoicedInfo : ITraitInfo
{ {
[Desc("Which voice set to use.")] [Desc("Which voice set to use.")]
[VoiceReference] public readonly string VoiceSet = null; [VoiceSetReference] public readonly string VoiceSet = null;
[Desc("Multiply volume with this factor.")] [Desc("Multiply volume with this factor.")]
public readonly float Volume = 1f; public readonly float Volume = 1f;

View File

@@ -19,10 +19,22 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Traits namespace OpenRA.Mods.RA.Traits
{ {
class DemoTruckInfo : TraitInfo<DemoTruck>, Requires<ExplodesInfo> { } class DemoTruckInfo : ITraitInfo, Requires<ExplodesInfo>
{
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new DemoTruck(init.Self, this); }
}
class DemoTruck : IIssueOrder, IResolveOrder, IOrderVoice class DemoTruck : IIssueOrder, IResolveOrder, IOrderVoice
{ {
readonly DemoTruckInfo info;
public DemoTruck(Actor self, DemoTruckInfo info)
{
this.info = info;
}
static void Explode(Actor self) static void Explode(Actor self)
{ {
self.World.AddFrameEndTask(w => self.InflictDamage(self, int.MaxValue, null)); self.World.AddFrameEndTask(w => self.InflictDamage(self, int.MaxValue, null));
@@ -50,7 +62,7 @@ namespace OpenRA.Mods.RA.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return "Attack"; return info.Voice;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -57,10 +57,22 @@ namespace OpenRA.Mods.RA.Traits
} }
[Desc("Provides access to the disguise command, which makes the actor appear to be another player's actor.")] [Desc("Provides access to the disguise command, which makes the actor appear to be another player's actor.")]
class DisguiseInfo : TraitInfo<Disguise> { } class DisguiseInfo : ITraitInfo
{
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new Disguise(init.Self, this); }
}
class Disguise : IEffectiveOwner, IIssueOrder, IResolveOrder, IOrderVoice, IRadarColorModifier, INotifyAttack class Disguise : IEffectiveOwner, IIssueOrder, IResolveOrder, IOrderVoice, IRadarColorModifier, INotifyAttack
{ {
readonly DisguiseInfo info;
public Disguise(Actor self, DisguiseInfo info)
{
this.info = info;
}
public Player AsPlayer { get; private set; } public Player AsPlayer { get; private set; }
public string AsSprite { get; private set; } public string AsSprite { get; private set; }
public ITooltipInfo AsTooltipInfo { get; private set; } public ITooltipInfo AsTooltipInfo { get; private set; }
@@ -95,7 +107,7 @@ namespace OpenRA.Mods.RA.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "Disguise" ? "Attack" : null; return order.OrderString == "Disguise" ? info.Voice : null;
} }
public Color RadarColorOverride(Actor self) public Color RadarColorOverride(Actor self)

View File

@@ -22,6 +22,8 @@ namespace OpenRA.Mods.RA.Traits
{ {
public readonly string[] Types = { }; public readonly string[] Types = { };
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new Infiltrates(this); } public object Create(ActorInitializer init) { return new Infiltrates(this); }
} }
@@ -81,7 +83,7 @@ namespace OpenRA.Mods.RA.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "Infiltrate" && IsValidOrder(self, order) return order.OrderString == "Infiltrate" && IsValidOrder(self, order)
? "Attack" : null; ? info.Voice : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -45,6 +45,8 @@ namespace OpenRA.Mods.RA.Traits
[ActorReference] [ActorReference]
public readonly string DriverActor = "e1"; public readonly string DriverActor = "e1";
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new MadTank(init.Self, this); } public object Create(ActorInitializer init) { return new MadTank(init.Self, this); }
} }
@@ -107,7 +109,7 @@ namespace OpenRA.Mods.RA.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return "Attack"; return info.Voice;
} }
void Detonate() void Detonate()

View File

@@ -41,6 +41,8 @@ namespace OpenRA.Mods.RA.Traits
[Desc("Cursor to display when unable to deploy the actor.")] [Desc("Cursor to display when unable to deploy the actor.")]
public readonly string DeployBlockedCursor = "deploy-blocked"; public readonly string DeployBlockedCursor = "deploy-blocked";
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new PortableChrono(this); } public object Create(ActorInitializer init) { return new PortableChrono(this); }
} }
@@ -93,7 +95,7 @@ namespace OpenRA.Mods.RA.Traits
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == "PortableChronoTeleport" && CanTeleport ? "Move" : null; return order.OrderString == "PortableChronoTeleport" && CanTeleport ? Info.Voice : null;
} }
public void ResetChargeTime() public void ResetChargeTime()

View File

@@ -4,7 +4,7 @@ GenericVoice:
gdi: .v01,.v03 gdi: .v01,.v03
Voices: Voices:
Select: await1,ready,report1,yessir1 Select: await1,ready,report1,yessir1
Move: ackno,affirm1,noprob,ritaway,roger,ugotit Action: ackno,affirm1,noprob,ritaway,roger,ugotit
Die: nuyell1,nuyell4,nuyell5,nuyell6 Die: nuyell1,nuyell4,nuyell5,nuyell6
Burned: yell1 Burned: yell1
Zapped: nuyell3 Zapped: nuyell3
@@ -17,13 +17,13 @@ VehicleVoice:
gdi: .v00,.v02 gdi: .v00,.v02
Voices: Voices:
Select: vehic1,yessir1,report1,await1,unit1 Select: vehic1,yessir1,report1,await1,unit1
Move: ackno,affirm1,movout1 Action: ackno,affirm1,movout1
Unload: movout1 Unload: movout1
CivilianMaleVoice: CivilianMaleVoice:
Voices: Voices:
Select: guyyeah1 Select: guyyeah1
Move: guyokay1 Action: guyokay1
Die: nuyell1,nuyell4,nuyell5,nuyell6 Die: nuyell1,nuyell4,nuyell5,nuyell6
Burned: yell1 Burned: yell1
Zapped: nuyell3 Zapped: nuyell3
@@ -32,7 +32,7 @@ CivilianMaleVoice:
CivilianFemaleVoice: CivilianFemaleVoice:
Voices: Voices:
Select: girlyeah Select: girlyeah
Move: girlokay Action: girlokay
Die: nuyell1,nuyell4,nuyell5,nuyell6 Die: nuyell1,nuyell4,nuyell5,nuyell6
Burned: yell1 Burned: yell1
Zapped: nuyell3 Zapped: nuyell3

View File

@@ -170,6 +170,7 @@ C17:
PipCount: 10 PipCount: 10
Invulnerable: Invulnerable:
-Selectable: -Selectable:
-Voiced:
-TargetableUnit: -TargetableUnit:
-GainsExperience: -GainsExperience:
FlyAwayOnIdle: FlyAwayOnIdle:
@@ -219,6 +220,7 @@ A10:
Weapon: Napalm Weapon: Napalm
LocalOffset: 0,-256,-43, 0,256,-43 LocalOffset: 0,-256,-43, 0,256,-43
-Selectable: -Selectable:
-Voiced:
-TargetableUnit: -TargetableUnit:
-GainsExperience: -GainsExperience:
FlyAwayOnIdle: FlyAwayOnIdle:

View File

@@ -437,6 +437,7 @@ VICE:
Tiberium: 100 Tiberium: 100
BlueTiberium: 100 BlueTiberium: 100
Beach: 60 Beach: 60
Voice: Move
SelectionDecorations: SelectionDecorations:
VisualBounds: 24,24 VisualBounds: 24,24
Selectable: Selectable:
@@ -446,6 +447,7 @@ VICE:
AutoTarget: AutoTarget:
ScanRadius: 5 ScanRadius: 5
AttackMove: AttackMove:
Voice: Attack
HiddenUnderFog: HiddenUnderFog:
GivesExperience: GivesExperience:
Valued: Valued:
@@ -458,6 +460,7 @@ VICE:
MuzzleSequence: muzzle MuzzleSequence: muzzle
MuzzleSplitFacings: 8 MuzzleSplitFacings: 8
AttackFrontal: AttackFrontal:
Voice: Attack
AttackWander: AttackWander:
WanderMoveRadius: 2 WanderMoveRadius: 2
MinMoveDelayInTicks: 25 MinMoveDelayInTicks: 25
@@ -467,6 +470,7 @@ VICE:
SplitFacings: true SplitFacings: true
CombatDebugOverlay: CombatDebugOverlay:
Guard: Guard:
Voice: Move
Guardable: Guardable:
UpdatesPlayerStatistics: UpdatesPlayerStatistics:
BodyOrientation: BodyOrientation:

View File

@@ -300,6 +300,7 @@
Tiberium: 70 Tiberium: 70
BlueTiberium: 70 BlueTiberium: 70
Beach: 80 Beach: 80
Voice: Move
SelectionDecorations: SelectionDecorations:
Selectable: Selectable:
Bounds: 24,24 Bounds: 24,24
@@ -317,7 +318,9 @@
AutoTarget: AutoTarget:
ScanRadius: 4 ScanRadius: 4
AttackMove: AttackMove:
Voice: Attack
AttackFrontal: AttackFrontal:
Voice: Attack
UpdatesPlayerStatistics: UpdatesPlayerStatistics:
Huntable: Huntable:
ScriptTriggers: ScriptTriggers:

View File

@@ -179,19 +179,27 @@ RMBO:
Queue: Infantry.GDI Queue: Infantry.GDI
Mobile: Mobile:
Speed: 71 Speed: 71
Voice: Move
Guard:
Voice: Move
Health: Health:
HP: 150 HP: 150
Passenger: Passenger:
PipType: Red PipType: Red
Voice: Move
RevealsShroud: RevealsShroud:
Range: 6c0 Range: 6c0
AutoTarget: AutoTarget:
ScanRadius: 6 ScanRadius: 6
C4Demolition: C4Demolition:
C4Delay: 45 C4Delay: 45
Voice: Demolish
Armament: Armament:
Weapon: Sniper Weapon: Sniper
AttackFrontal: AttackFrontal:
Voice: Attack
AttackMove:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2,idle3 IdleSequences: idle1,idle2,idle3

View File

@@ -12,12 +12,11 @@ GenericVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: G_SSEL1,G_SSEL2,G_SSEL3 Select: G_SSEL1,G_SSEL2,G_SSEL3
Move: G_SCONF1,G_SCONF2,G_SCONF3 Action: G_SCONF1,G_SCONF2,G_SCONF3
Attack: G_SCONF1,G_SCONF2,G_SCONF3
Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9 Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9
Guard: I_GUARD Guard: I_GUARD
DisablePrefixes: Select, Move, Attack, Die DisablePrefixes: Select, Action, Die
DisableVariants: Select, Move, Attack, Guard DisableVariants: Select, Action, Guard
VehicleVoice: VehicleVoice:
DefaultVariant: .AUD DefaultVariant: .AUD
@@ -27,8 +26,7 @@ VehicleVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: _VSEL1,_VSEL2,_VSEL3 Select: _VSEL1,_VSEL2,_VSEL3
Move: _VCONF1,_VCONF2,_VCONF3 Action: _VCONF1,_VCONF2,_VCONF3
Attack: _VCONF1,_VCONF2,_VCONF3
Guard: I_GUARD Guard: I_GUARD
InfantryVoice: InfantryVoice:
@@ -43,12 +41,11 @@ InfantryVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: _ISEL1,_ISEL2,_ISEL3 Select: _ISEL1,_ISEL2,_ISEL3
Move: _ICONF1,_ICONF2,_ICONF3 Action: _ICONF1,_ICONF2,_ICONF3
Attack: _ICONF1,_ICONF2,_ICONF3
Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9 Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9
Guard: I_GUARD Guard: I_GUARD
DisablePrefixes: Die DisablePrefixes: Die
DisableVariants: Select, Move, Attack, Guard DisableVariants: Select, Action, Guard
EngineerVoice: EngineerVoice:
DefaultVariant: .AUD DefaultVariant: .AUD
@@ -62,11 +59,11 @@ EngineerVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: _ESEL1,_ESEL2,_ESEL3 Select: _ESEL1,_ESEL2,_ESEL3
Move: _ECONF1,_ECONF2,_ECONF3 Action: _ECONF1,_ECONF2,_ECONF3
Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9 Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9
Guard: I_GUARD Guard: I_GUARD
DisablePrefixes: Die DisablePrefixes: Die
DisableVariants: Select, Move, Guard DisableVariants: Select, Action, Guard
FremenVoice: FremenVoice:
DefaultVariant: .AUD DefaultVariant: .AUD
@@ -80,12 +77,11 @@ FremenVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: A_FSEL1,A_FSEL2,A_FSEL3, A_SEL4 Select: A_FSEL1,A_FSEL2,A_FSEL3, A_SEL4
Move: A_FCONF1,A_FCONF2,A_FCONF3, A_FCONF4 Action: A_FCONF1,A_FCONF2,A_FCONF3, A_FCONF4
Attack: A_FCONF1,A_FCONF2,A_FCONF3, A_FCONF4
Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9 Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9
Guard: I_GUARD Guard: I_GUARD
DisablePrefixes: Select, Move, Attack, Die DisablePrefixes: Select, Action, Die
DisableVariants: Select, Move, Attack, Guard DisableVariants: Select, Action, Guard
SaboteurVoice: SaboteurVoice:
DefaultVariant: .AUD DefaultVariant: .AUD
@@ -99,8 +95,8 @@ SaboteurVoice:
harkonnen: H harkonnen: H
Voices: Voices:
Select: O_SSEL1,O_SSEL2,O_SSEL3 Select: O_SSEL1,O_SSEL2,O_SSEL3
Move: O_SCONF1,O_SCONF2,O_SCONF3 Action: O_SCONF1,O_SCONF2,O_SCONF3
Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9 Die: KILLGUY1,KILLGUY2,KILLGUY3,KILLGUY4,KILLGUY5,KILLGUY6,KILLGUY7,KILLGUY8,KILLGUY9
Guard: I_GUARD Guard: I_GUARD
DisablePrefixes: Select, Move, Die DisablePrefixes: Select, Action, Die
DisableVariants: Select, Move, Guard DisableVariants: Select, Action, Guard

View File

@@ -63,6 +63,7 @@ carryall.infantry:
MaxWeight: 5 MaxWeight: 5
Types: Infantry Types: Infantry
-Selectable: -Selectable:
-Voiced:
-TargetableAircraft: -TargetableAircraft:
-GainsExperience: -GainsExperience:
Tooltip: Tooltip:
@@ -117,6 +118,7 @@ frigate:
-GainsExperience: -GainsExperience:
FlyAwayOnIdle: FlyAwayOnIdle:
RejectsOrders: RejectsOrders:
-Voiced:
orni: orni:
Inherits: ^Helicopter Inherits: ^Helicopter
@@ -172,6 +174,7 @@ orni.bomber:
WithFacingSpriteBody: WithFacingSpriteBody:
WithShadow: WithShadow:
-Selectable: -Selectable:
-Voiced:
-GainsExperience: -GainsExperience:
Tooltip: Tooltip:
Name: Ornithopter Name: Ornithopter

View File

@@ -221,7 +221,6 @@ saboteur:
WithInfantryBody: WithInfantryBody:
C4Demolition: C4Demolition:
C4Delay: 45 C4Delay: 45
Voice: Move
-AutoTarget: -AutoTarget:
AttractsWorms: AttractsWorms:
Intensity: 120 Intensity: 120

View File

@@ -9,7 +9,7 @@ GenericVoice:
ukraine: .r01,.r03 ukraine: .r01,.r03
Voices: Voices:
Select: await1,ready,report1,yessir1 Select: await1,ready,report1,yessir1
Move: ackno,affirm1,noprob,overout,ritaway,roger,ugotit Action: ackno,affirm1,noprob,overout,ritaway,roger,ugotit
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -26,13 +26,12 @@ VehicleVoice:
ukraine: .r00,.r02 ukraine: .r00,.r02
Voices: Voices:
Select: vehic1,yessir1,report1,await1 Select: vehic1,yessir1,report1,await1
Move: ackno,affirm1 Action: ackno,affirm1
Unload: ackno,affirm1
EngineerVoice: EngineerVoice:
Voices: Voices:
Select: eengin1,eyessir1 Select: eengin1,eyessir1
Move: eaffirm1,emovout1 Action: eaffirm1,emovout1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -40,7 +39,7 @@ EngineerVoice:
MedicVoice: MedicVoice:
Voices: Voices:
Select: mrespon1,myessir1 Select: mrespon1,myessir1
Move: maffirm1,mmovout1 Action: maffirm1,mmovout1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -49,7 +48,7 @@ MechanicVoice:
Voices: Voices:
Select: mhuh1,mhowdy1,myes1,mrise1 Select: mhuh1,mhowdy1,myes1,mrise1
Move: mboss1,mhear1 Move: mboss1,mhear1
Attack: mhotdig1,mwrench1 Action: mhotdig1,mwrench1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -58,7 +57,7 @@ TanyaVoice:
Voices: Voices:
Select: yo1,yes1,yeah1 Select: yo1,yes1,yeah1
Move: onit1,cmon1,rokroll1 Move: onit1,cmon1,rokroll1
Attack: tuffguy1,bombit1 Action: tuffguy1,bombit1
Die: tandeth1 Die: tandeth1
Burned: tandeth1 Burned: tandeth1
Zapped: tandeth1 Zapped: tandeth1
@@ -79,7 +78,7 @@ SpyVoice:
Voices: Voices:
Select: syessir1,scomnd1 Select: syessir1,scomnd1
Move: sonway1,sindeed1 Move: sonway1,sindeed1
Attack: sking1 Action: sking1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -87,7 +86,7 @@ SpyVoice:
ThiefVoice: ThiefVoice:
Voices: Voices:
Select: swhat1,syeah1 Select: swhat1,syeah1
Move: saffirm1,smout1,sokay1 Action: saffirm1,smout1,sokay1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -95,7 +94,7 @@ ThiefVoice:
CivilianMaleVoice: CivilianMaleVoice:
Voices: Voices:
Select: guyyeah1 Select: guyyeah1
Move: guyokay1 Action: guyokay1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -103,7 +102,7 @@ CivilianMaleVoice:
CivilianFemaleVoice: CivilianFemaleVoice:
Voices: Voices:
Select: girlyeah Select: girlyeah
Move: girlokay Action: girlokay
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -111,7 +110,7 @@ CivilianFemaleVoice:
EinsteinVoice: EinsteinVoice:
Voices: Voices:
Select: einah1 Select: einah1
Move: einok1,einyes1 Action: einok1,einyes1
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
Burned: dedman10 Burned: dedman10
Zapped: dedman6 Zapped: dedman6
@@ -128,8 +127,7 @@ ShokVoice:
AntVoice: AntVoice:
Voices: Voices:
Select: antbite Select: antbite
Move: antbite Action: antbite
Attack: antbite
Die: antdie Die: antdie
Burned: antdie Burned: antdie
Zapped: antdie Zapped: antdie

View File

@@ -14,6 +14,7 @@ BADR:
Cargo: Cargo:
MaxWeight: 10 MaxWeight: 10
-Selectable: -Selectable:
-Voiced:
-GainsExperience: -GainsExperience:
Tooltip: Tooltip:
Name: Badger Name: Badger
@@ -53,6 +54,7 @@ BADR.Bomber:
Ammo: 7 Ammo: 7
WithFacingSpriteBody: WithFacingSpriteBody:
-Selectable: -Selectable:
-Voiced:
-GainsExperience: -GainsExperience:
Tooltip: Tooltip:
Name: Badger Name: Badger
@@ -348,6 +350,7 @@ U2:
WithFacingSpriteBody: WithFacingSpriteBody:
AttackBomber: AttackBomber:
-Selectable: -Selectable:
-Voiced:
-TargetableAircraft: -TargetableAircraft:
-GainsExperience: -GainsExperience:
Contrail@1: Contrail@1:

View File

@@ -19,11 +19,19 @@ DOG:
HP: 12 HP: 12
Mobile: Mobile:
Speed: 99 Speed: 99
Voice: Move
Guard:
Voice: Move
Passenger:
Voice: Move
RevealsShroud: RevealsShroud:
Range: 5c0 Range: 5c0
Armament: Armament:
Weapon: DogJaw Weapon: DogJaw
AttackLeap: AttackLeap:
Voice: Attack
AttackMove:
Voice: Move
TargetableUnit: TargetableUnit:
TargetTypes: Ground, Infantry TargetTypes: Ground, Infantry
WithInfantryBody: WithInfantryBody:
@@ -203,12 +211,16 @@ SPY:
HP: 25 HP: 25
Mobile: Mobile:
Speed: 56 Speed: 56
Voice: Move
-Guard:
RevealsShroud: RevealsShroud:
Range: 5c0 Range: 5c0
Passenger: Passenger:
PipType: Yellow PipType: Yellow
Voice: Move
TakeCover: TakeCover:
Disguise: Disguise:
Voice: Move
Infiltrates: Infiltrates:
Types: SpyInfiltrate Types: SpyInfiltrate
-AutoTarget: -AutoTarget:
@@ -219,6 +231,8 @@ SPY:
Armament: Armament:
Weapon: SilencedPPK Weapon: SilencedPPK
AttackFrontal: AttackFrontal:
AttackMove:
Voice: Move
Voiced: Voiced:
VoiceSet: SpyVoice VoiceSet: SpyVoice
@@ -252,6 +266,9 @@ E7:
HP: 100 HP: 100
Mobile: Mobile:
Speed: 71 Speed: 71
Voice: Move
Guard:
Voice: Move
RevealsShroud: RevealsShroud:
Range: 6c0 Range: 6c0
C4Demolition: C4Demolition:
@@ -259,6 +276,7 @@ E7:
Voice: Demolish Voice: Demolish
Passenger: Passenger:
PipType: Red PipType: Red
Voice: Move
Armament@PRIMARY: Armament@PRIMARY:
Weapon: Colt45 Weapon: Colt45
Armament@SECONDARY: Armament@SECONDARY:
@@ -326,16 +344,19 @@ MECH:
HP: 80 HP: 80
Mobile: Mobile:
Speed: 56 Speed: 56
Voice: Move
RevealsShroud: RevealsShroud:
Range: 3c0 Range: 3c0
Passenger: Passenger:
PipType: Yellow PipType: Yellow
Voice: Move
AutoHeal: AutoHeal:
Armament: Armament:
Weapon: Repair Weapon: Repair
AttackMedic: AttackMedic:
Cursor: repair Cursor: repair
OutsideRangeCursor: repair OutsideRangeCursor: repair
Voice: Move
Captures: Captures:
CaptureTypes: husk CaptureTypes: husk
TakeCover: TakeCover:
@@ -401,6 +422,16 @@ GNRL:
Name: General Name: General
Selectable: Selectable:
Class: GNRL Class: GNRL
Mobile:
Voice: Move
AttackFrontal:
Voice: Attack
AttackMove:
Voice: Move
Passenger:
Voice: Move
Guard:
Voice: Move
Voiced: Voiced:
VoiceSet: StavrosVoice VoiceSet: StavrosVoice
@@ -469,6 +500,7 @@ SHOK:
HP: 100 HP: 100
Mobile: Mobile:
Speed: 56 Speed: 56
Voice: Move
RevealsShroud: RevealsShroud:
Range: 5c0 Range: 5c0
Armament@PRIMARY: Armament@PRIMARY:
@@ -478,6 +510,13 @@ SHOK:
Name: garrisoned Name: garrisoned
Weapon: PortaTesla Weapon: PortaTesla
AttackFrontal: AttackFrontal:
Voice: Attack
AttackMove:
Voice: Move
Passenger:
Voice: Move
Guard:
Voice: Move
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2

View File

@@ -40,7 +40,7 @@ Medic:
Voices: Voices:
Select: 20-I000, 20-I004, 20-I006 Select: 20-I000, 20-I004, 20-I006
Move: 20-I008, 20-I010, 20-I012 Move: 20-I008, 20-I010, 20-I012
Attack: 20-I016, 20-I018, 20-I020 Action: 20-I016, 20-I018, 20-I020
Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6 Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6
Burned: DEDMAN2 Burned: DEDMAN2
Zapped: ELECTRO1 Zapped: ELECTRO1
@@ -49,7 +49,7 @@ Engineer:
Voices: Voices:
Select: 19-I000, 19-I002, 19-I006 Select: 19-I000, 19-I002, 19-I006
Move: 19-I010, 19-I016 Move: 19-I010, 19-I016
Attack: 19-I018, 19-I016 Action: 19-I018, 19-I016
Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6 Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6
Burned: DEDMAN2 Burned: DEDMAN2
Zapped: ELECTRO1 Zapped: ELECTRO1
@@ -78,7 +78,7 @@ Spy:
Voices: Voices:
Select: 21-I000, 21-I002, 21-I004 Select: 21-I000, 21-I002, 21-I004
Move: 21-I010, 21-I012, 21-I016 Move: 21-I010, 21-I012, 21-I016
Attack: 21-I010, 21-I012, 21-I022 Action: 21-I010, 21-I012, 21-I022
# Feedback: 21-I000, 21-I002 # TODO # Feedback: 21-I000, 21-I002 # TODO
Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6 Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6
Burned: DEDMAN2 Burned: DEDMAN2
@@ -88,7 +88,7 @@ Hijacker:
Voices: Voices:
Select: 24-I000, 24-I002, 24-I004, 24-I006 Select: 24-I000, 24-I002, 24-I004, 24-I006
Move: 24-I008, 24-I010, 24-I012, 24-I014 Move: 24-I008, 24-I010, 24-I012, 24-I014
Attack: 24-I016, 24-I018, 24-I020, 24-I022, 24-I024 Action: 24-I016, 24-I018, 24-I020, 24-I022, 24-I024
Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6 Die: DEDMAN1, DEDMAN3, DEDMAN4, DEDMAN5, DEDMAN6
Burned: DEDMAN2 Burned: DEDMAN2
Zapped: ELECTRO1 Zapped: ELECTRO1
@@ -149,9 +149,9 @@ Slavick:
Fiend: Fiend:
Voices: Voices:
Select: Select: FIEND1
Move: Attack: FIEND1
Attack: Move: FIEND1
Die: FIEND1 Die: FIEND1
Burned: FIEND1 Burned: FIEND1
Zapped: FIEND1 Zapped: FIEND1

View File

@@ -20,9 +20,11 @@ DPOD:
Types: Infantry Types: Infantry
MaxWeight: 1 MaxWeight: 1
PipCount: 1 PipCount: 1
UnloadVoice: Move
Armament: Armament:
Weapon: Vulcan2 Weapon: Vulcan2
AttackHeli: AttackHeli:
Voice: Attack
AmmoPool: AmmoPool:
Ammo: 5 Ammo: 5
PipCount: 5 PipCount: 5
@@ -54,6 +56,7 @@ DSHP:
Types: Infantry Types: Infantry
MaxWeight: 5 MaxWeight: 5
PipCount: 5 PipCount: 5
UnloadVoice: Move
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
Hovers: Hovers:
@@ -85,6 +88,7 @@ ORCA:
Weapon: Hellfire Weapon: Hellfire
AttackHeli: AttackHeli:
FacingTolerance: 20 FacingTolerance: 20
Voice: Attack
AmmoPool: AmmoPool:
Ammo: 5 Ammo: 5
PipCount: 5 PipCount: 5
@@ -125,6 +129,7 @@ ORCAB:
Armament: Armament:
Weapon: Bomb Weapon: Bomb
AttackPlane: AttackPlane:
Voice: Attack
FacingTolerance: 20 FacingTolerance: 20
AmmoPool: AmmoPool:
Ammo: 10 Ammo: 10
@@ -163,6 +168,7 @@ ORCATRAN:
Types: Infantry Types: Infantry
MaxWeight: 5 MaxWeight: 5
PipCount: 5 PipCount: 5
UnloadVoice: Move
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
Hovers: Hovers:
@@ -223,6 +229,7 @@ SCRIN:
Armament: Armament:
Weapon: Proton Weapon: Proton
AttackPlane: AttackPlane:
Voice: Attack
FacingTolerance: 20 FacingTolerance: 20
AmmoPool: AmmoPool:
Ammo: 15 Ammo: 15
@@ -264,6 +271,7 @@ APACHE:
Weapon: HarpyClaw Weapon: HarpyClaw
AttackHeli: AttackHeli:
FacingTolerance: 20 FacingTolerance: 20
Voice: Attack
AmmoPool: AmmoPool:
Ammo: 12 Ammo: 12
PipCount: 4 PipCount: 4

View File

@@ -16,6 +16,7 @@ WEEDGUY:
Weapon: FireballLauncher Weapon: FireballLauncher
LocalOffset: 85,0,384 LocalOffset: 85,0,384
AttackFrontal: AttackFrontal:
Voice: Attack
WithInfantryBody: WithInfantryBody:
TakeCover: TakeCover:
@@ -39,6 +40,7 @@ UMAGON:
Armament: Armament:
Weapon: Sniper Weapon: Sniper
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -86,6 +88,7 @@ MUTANT:
Armament: Armament:
Weapon: Vulcan Weapon: Vulcan
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -109,6 +112,7 @@ MWMN:
Armament: Armament:
Weapon: Vulcan Weapon: Vulcan
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -132,6 +136,7 @@ MUTANT3:
Armament: Armament:
Weapon: Vulcan Weapon: Vulcan
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -218,6 +223,7 @@ DOGGIE:
Armament: Armament:
Weapon: FiendShard Weapon: FiendShard
AttackFrontal: AttackFrontal:
Voice: Attack
AttackWander: AttackWander:
WanderMoveRadius: 2 WanderMoveRadius: 2
MinMoveDelayInTicks: 25 MinMoveDelayInTicks: 25
@@ -246,6 +252,7 @@ VISLRG:
Weapon: SlimeAttack Weapon: SlimeAttack
AutoTarget: AutoTarget:
AttackFrontal: AttackFrontal:
Voice: Attack
AttackWander: AttackWander:
WanderMoveRadius: 2 WanderMoveRadius: 2
MinMoveDelayInTicks: 25 MinMoveDelayInTicks: 25
@@ -260,6 +267,7 @@ CIV1:
Armament: Armament:
Weapon: Pistola Weapon: Pistola
AttackFrontal: AttackFrontal:
Voice: Attack
CIV2: CIV2:
Inherits: ^CivilianInfantry Inherits: ^CivilianInfantry
@@ -270,4 +278,5 @@ CIV3:
Armament: Armament:
Weapon: Pistola Weapon: Pistola
AttackFrontal: AttackFrontal:
Voice: Attack

View File

@@ -24,6 +24,7 @@
Weapon: MammothTusk Weapon: MammothTusk
LocalOffset: 0,256,426, 0,-256,426 LocalOffset: 0,256,426, 0,-256,426
AttackTurreted: AttackTurreted:
Voice: Attack
AutoTarget: AutoTarget:
SelfHealing: SelfHealing:
Ticks: 10 Ticks: 10
@@ -76,6 +77,7 @@ ICBM:
Facing: 96 Facing: 96
TransformSounds: TransformSounds:
NoTransformSounds: NoTransformSounds:
Voice: Move
BUS: BUS:
Inherits: ^Vehicle Inherits: ^Vehicle
@@ -96,6 +98,7 @@ BUS:
Types: Infantry Types: Infantry
MaxWeight: 20 MaxWeight: 20
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -118,6 +121,7 @@ PICK:
Types: Infantry Types: Infantry
MaxWeight: 2 MaxWeight: 2
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -140,6 +144,7 @@ CAR:
Types: Infantry Types: Infantry
MaxWeight: 4 MaxWeight: 4
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -162,5 +167,6 @@ WINI:
Types: Infantry Types: Infantry
MaxWeight: 5 MaxWeight: 5
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:

View File

@@ -213,6 +213,7 @@
Rough: 70 Rough: 70
Tiberium: 80 Tiberium: 80
BlueTiberium: 80 BlueTiberium: 80
Voice: Move
SelectionDecorations: SelectionDecorations:
Palette: pips Palette: pips
Selectable: Selectable:
@@ -241,8 +242,10 @@
EnergyDeath: 6 EnergyDeath: 6
AutoTarget: AutoTarget:
AttackMove: AttackMove:
Voice: Move
Passenger: Passenger:
CargoType: Infantry CargoType: Infantry
Voice: Move
HiddenUnderFog: HiddenUnderFog:
GivesExperience: GivesExperience:
DrawLineToTarget: DrawLineToTarget:
@@ -259,6 +262,7 @@
UpdatesPlayerStatistics: UpdatesPlayerStatistics:
CombatDebugOverlay: CombatDebugOverlay:
Guard: Guard:
Voice: Move
Guardable: Guardable:
BodyOrientation: BodyOrientation:
Huntable: Huntable:
@@ -314,6 +318,7 @@
Tiberium: 80 Tiberium: 80
BlueTiberium: 80 BlueTiberium: 80
ROT: 5 ROT: 5
Voice: Move
Selectable: Selectable:
SelectionDecorations: SelectionDecorations:
Palette: pips Palette: pips
@@ -323,9 +328,12 @@
TargetTypes: Ground, Vehicle TargetTypes: Ground, Vehicle
Repairable: Repairable:
RepairBuildings: gadept RepairBuildings: gadept
Voice: Move
Passenger: Passenger:
CargoType: Vehicle CargoType: Vehicle
Voice: Move
AttackMove: AttackMove:
Voice: Move
HiddenUnderFog: HiddenUnderFog:
GivesExperience: GivesExperience:
DrawLineToTarget: DrawLineToTarget:
@@ -340,6 +348,7 @@
UpdatesPlayerStatistics: UpdatesPlayerStatistics:
CombatDebugOverlay: CombatDebugOverlay:
Guard: Guard:
Voice: Move
Guardable: Guardable:
BodyOrientation: BodyOrientation:
CameraPitch: 90 CameraPitch: 90
@@ -383,6 +392,7 @@
Tiberium: 80 Tiberium: 80
BlueTiberium: 80 BlueTiberium: 80
ROT: 5 ROT: 5
Voice: Move
Selectable: Selectable:
SelectionDecorations: SelectionDecorations:
Palette: pips Palette: pips
@@ -392,9 +402,12 @@
TargetTypes: Ground, Vehicle TargetTypes: Ground, Vehicle
Repairable: Repairable:
RepairBuildings: gadept RepairBuildings: gadept
Voice: Move
Passenger: Passenger:
CargoType: Vehicle CargoType: Vehicle
Voice: Move
AttackMove: AttackMove:
Voice: Move
HiddenUnderFog: HiddenUnderFog:
GivesExperience: GivesExperience:
DrawLineToTarget: DrawLineToTarget:
@@ -409,6 +422,7 @@
UpdatesPlayerStatistics: UpdatesPlayerStatistics:
CombatDebugOverlay: CombatDebugOverlay:
Guard: Guard:
Voice: Move
Guardable: Guardable:
BodyOrientation: BodyOrientation:
CameraPitch: 90 CameraPitch: 90
@@ -455,8 +469,10 @@
RearmBuildings: RearmBuildings:
LandWhenIdle: no LandWhenIdle: no
CruiseAltitude: 2048 CruiseAltitude: 2048
Voice: Move
HiddenUnderFog: HiddenUnderFog:
AttackMove: AttackMove:
Voice: Move
GivesExperience: GivesExperience:
DrawLineToTarget: DrawLineToTarget:
ActorLostNotification: ActorLostNotification:
@@ -466,6 +482,7 @@
Huntable: Huntable:
ScriptTriggers: ScriptTriggers:
Guard: Guard:
Voice: Move
Guardable: Guardable:
UpgradeManager: UpgradeManager:
MustBeDestroyed: MustBeDestroyed:
@@ -478,6 +495,7 @@
RearmBuildings: gahpad, nahpad RearmBuildings: gahpad, nahpad
LandWhenIdle: no LandWhenIdle: no
CruiseAltitude: 2560 CruiseAltitude: 2560
Voice: Move
ReturnOnIdle: ReturnOnIdle:
^Viceroid: ^Viceroid:

View File

@@ -18,6 +18,7 @@ E2:
LocalOffset: 0,0,555 LocalOffset: 0,0,555
FireDelay: 5 FireDelay: 5
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -43,7 +44,7 @@ MEDIC:
CrushSound: squishy2.aud CrushSound: squishy2.aud
Armament: Armament:
Weapon: Heal Weapon: Heal
AttackFrontal: AttackMedic:
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -79,6 +80,7 @@ JUMPJET:
Weapon: JumpCannon Weapon: JumpCannon
-Crushable: -Crushable:
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
@@ -111,8 +113,10 @@ GHOST:
Crushable: Crushable:
CrushSound: squishy2.aud CrushSound: squishy2.aud
AttackFrontal: AttackFrontal:
Voice: Attack
C4Demolition: C4Demolition:
C4Delay: 45 C4Delay: 45
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2

View File

@@ -26,6 +26,7 @@ APC:
Types: Infantry Types: Infantry
MaxWeight: 5 MaxWeight: 5
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
WithVoxelWaterBody: WithVoxelWaterBody:
@@ -69,6 +70,7 @@ HVR:
ROT: 7 ROT: 7
Offset: -128,0,85 Offset: -128,0,85
AttackTurreted: AttackTurreted:
Voice: Attack
AutoTarget: AutoTarget:
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
@@ -101,6 +103,7 @@ SMECH:
RevealsShroud: RevealsShroud:
Range: 6c0 Range: 6c0
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
Armament: Armament:
Weapon: AssaultCannon Weapon: AssaultCannon
@@ -144,6 +147,7 @@ MMCH:
Turreted: Turreted:
ROT: 5 ROT: 5
AttackTurreted: AttackTurreted:
Voice: Attack
WithTurret: WithTurret:
Recoils: no Recoils: no
Armament: Armament:
@@ -184,6 +188,7 @@ HMEC:
Range: 8c0 Range: 8c0
RenderSprites: RenderSprites:
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
Armament@MISSILES: Armament@MISSILES:
Weapon: MammothTusk Weapon: MammothTusk
@@ -220,6 +225,7 @@ SONIC:
Weapon: SonicZap Weapon: SonicZap
LocalOffset: -50,0,410 LocalOffset: -50,0,410
AttackTurreted: AttackTurreted:
Voice: Attack
Turreted: Turreted:
ROT: 5 ROT: 5
Offset: -170,0,0 Offset: -170,0,0

View File

@@ -19,6 +19,7 @@ E3:
Weapon: Bazooka Weapon: Bazooka
LocalOffset: 128,0,640 LocalOffset: 128,0,640
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
@@ -53,6 +54,7 @@ CYBORG:
Armament: Armament:
Weapon: Vulcan3 Weapon: Vulcan3
AttackFrontal: AttackFrontal:
Voice: Attack
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
WithPermanentInjury: WithPermanentInjury:
@@ -91,6 +93,7 @@ CYC2:
Weapon: CyCannon Weapon: CyCannon
LocalOffset: 170,85,683 LocalOffset: 170,85,683
AttackFrontal: AttackFrontal:
Voice: Attack
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2
WithPermanentInjury: WithPermanentInjury:

View File

@@ -191,6 +191,7 @@ GATICK:
UpgradeMinEnabledLevel: 1 UpgradeMinEnabledLevel: 1
MuzzleSequence: muzzle MuzzleSequence: muzzle
AttackTurreted: AttackTurreted:
Voice: Attack
BodyOrientation: BodyOrientation:
QuantizedFacings: 32 QuantizedFacings: 32
AutoTarget: AutoTarget:
@@ -206,6 +207,7 @@ GATICK:
Facing: 159 Facing: 159
TransformSounds: place2.aud TransformSounds: place2.aud
NoTransformSounds: NoTransformSounds:
Voice: Move
WithMuzzleFlash: WithMuzzleFlash:
-WithDeathAnimation: -WithDeathAnimation:
@@ -234,6 +236,7 @@ GAARTY:
LocalOffset: 811,0,0 LocalOffset: 811,0,0
MuzzleSequence: muzzle MuzzleSequence: muzzle
AttackTurreted: AttackTurreted:
Voice: Attack
BodyOrientation: BodyOrientation:
QuantizedFacings: 32 QuantizedFacings: 32
AutoTarget: AutoTarget:
@@ -250,6 +253,7 @@ GAARTY:
Facing: 96 Facing: 96
TransformSounds: place2.aud TransformSounds: place2.aud
NoTransformSounds: NoTransformSounds:
Voice: Move
WithMuzzleFlash: WithMuzzleFlash:
-WithDeathAnimation: -WithDeathAnimation:

View File

@@ -24,6 +24,7 @@ BGGY:
MuzzleSequence: muzzle MuzzleSequence: muzzle
MuzzleSplitFacings: 8 MuzzleSplitFacings: 8
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
@@ -62,6 +63,7 @@ BIKE:
UpgradeMinEnabledLevel: 1 UpgradeMinEnabledLevel: 1
LocalOffset: -128,-170,213, -128,170,213 LocalOffset: -128,-170,213, -128,170,213
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
@@ -87,6 +89,7 @@ TTNK:
Armor: Armor:
Type: Light Type: Light
AttackFrontal: AttackFrontal:
Voice: Attack
Armament@PRIMARY: Armament@PRIMARY:
Weapon: 90mm Weapon: 90mm
LocalOffset: 256,0,256 LocalOffset: 256,0,256
@@ -111,6 +114,7 @@ TTNK:
Facing: 159 Facing: 159
TransformSounds: place2.aud TransformSounds: place2.aud
NoTransformSounds: NoTransformSounds:
Voice: Move
ART2: ART2:
Inherits: ^Tank Inherits: ^Tank
@@ -141,6 +145,7 @@ ART2:
Facing: 96 Facing: 96
TransformSounds: TransformSounds:
NoTransformSounds: NoTransformSounds:
Voice: Move
REPAIR: REPAIR:
Inherits: ^Tank Inherits: ^Tank
@@ -165,6 +170,7 @@ REPAIR:
AttackMedic: AttackMedic:
Cursor: repair Cursor: repair
OutsideRangeCursor: repair OutsideRangeCursor: repair
Voice: Attack
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -218,6 +224,7 @@ SAPC:
Types: Infantry Types: Infantry
MaxWeight: 5 MaxWeight: 5
PipCount: 5 PipCount: 5
UnloadVoice: Unload
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -246,6 +253,7 @@ SUBTANK:
Armament: Armament:
Weapon: FireballLauncher Weapon: FireballLauncher
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
@@ -281,6 +289,7 @@ STNK:
Weapon: Dragon Weapon: Dragon
LocalOffset: 213,43,128, 213,-43,128 LocalOffset: 213,43,128, 213,-43,128
AttackFrontal: AttackFrontal:
Voice: Attack
AutoTarget: AutoTarget:
InitialStance: HoldFire InitialStance: HoldFire
RenderSprites: RenderSprites:

View File

@@ -23,6 +23,7 @@ E1:
UpgradeTypes: eliteweapon UpgradeTypes: eliteweapon
UpgradeMinEnabledLevel: 1 UpgradeMinEnabledLevel: 1
AttackFrontal: AttackFrontal:
Voice: Attack
TakeCover: TakeCover:
WithInfantryBody: WithInfantryBody:
IdleSequences: idle1,idle2 IdleSequences: idle1,idle2

View File

@@ -30,6 +30,7 @@ MCV:
Facing: 96 Facing: 96
TransformSounds: facbld1.aud TransformSounds: facbld1.aud
NoTransformSounds: NoTransformSounds:
Voice: Move
RenderSprites: RenderSprites:
RenderVoxels: RenderVoxels:
WithVoxelBody: WithVoxelBody:
@@ -57,6 +58,8 @@ HARV:
UnloadTicksPerBale: 1 UnloadTicksPerBale: 1
SearchFromProcRadius: 24 SearchFromProcRadius: 24
SearchFromOrderRadius: 12 SearchFromOrderRadius: 12
HarvestVoice: Attack
DeliverVoice: Move
Mobile: Mobile:
Speed: 71 Speed: 71
Crushes: wall, crate Crushes: wall, crate
@@ -117,6 +120,7 @@ LPST:
Facing: 159 Facing: 159
TransformSounds: TransformSounds:
NoTransformSounds: NoTransformSounds:
Voice: Move
GGHUNT: GGHUNT:
Inherits: ^Vehicle Inherits: ^Vehicle
@@ -135,6 +139,7 @@ GGHUNT:
Range: 7c0 Range: 7c0
WithFacingSpriteBody: WithFacingSpriteBody:
DemoTruck: DemoTruck:
Voice: Attack
Explodes: Explodes:
Weapon: SuicideBomb Weapon: SuicideBomb
EmptyWeapon: SuicideBomb EmptyWeapon: SuicideBomb