Extract actor voice set into Voiced trait

This commit is contained in:
reaperrr
2015-04-20 22:24:53 +02:00
parent 66f99704a8
commit 0d05fdefbb
23 changed files with 223 additions and 108 deletions

View File

@@ -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.HasVoices());
if (voicedUnit != null) if (voicedActor != null)
Sound.PlayVoice("Select", voicedUnit, voicedUnit.Owner.Country.Race); Sound.PlayVoice("Select", voicedActor, voicedActor.Owner.Country.Race);
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

@@ -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,30 +364,30 @@ namespace OpenRA
return true; return true;
} }
public static bool PlayVoice(string phrase, Actor voicedUnit, string variant) public static bool PlayVoice(string phrase, Actor voicedActor, string variant)
{ {
if (voicedUnit == null || phrase == null) if (voicedActor == null || phrase == null)
return false; return false;
var mi = voicedUnit.Info.Traits.GetOrDefault<SelectableInfo>(); var mi = voicedActor.TraitOrDefault<IVoiced>();
if (mi == null || mi.Voice == null) if (mi == null || mi.VoiceSet == null)
return false; return false;
var type = mi.Voice.ToLowerInvariant(); var type = mi.VoiceSet.ToLowerInvariant();
return PlayPredefined(voicedUnit.World.Map.Rules, null, voicedUnit, type, phrase, variant, true, WPos.Zero, 1f, true); return PlayPredefined(voicedActor.World.Map.Rules, null, voicedActor, type, phrase, variant, true, WPos.Zero, 1f, true);
} }
public static bool PlayVoiceLocal(string phrase, Actor voicedUnit, string variant, WPos pos, float volume) public static bool PlayVoiceLocal(string phrase, Actor voicedActor, string variant, WPos pos, float volume)
{ {
if (voicedUnit == null || phrase == null) if (voicedActor == null || phrase == null)
return false; return false;
var mi = voicedUnit.Info.Traits.GetOrDefault<SelectableInfo>(); var mi = voicedActor.TraitOrDefault<IVoiced>();
if (mi == null || mi.Voice == null) if (mi == null || mi.VoiceSet == null)
return false; return false;
var type = mi.Voice.ToLowerInvariant(); var type = mi.VoiceSet.ToLowerInvariant();
return PlayPredefined(voicedUnit.World.Map.Rules, null, voicedUnit, type, phrase, variant, false, pos, volume, true); return PlayPredefined(voicedActor.World.Map.Rules, null, voicedActor, 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)

View File

@@ -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); }
} }

View File

@@ -109,6 +109,7 @@ namespace OpenRA.Traits
public interface ISeedableResource { void Seed(Actor self); } public interface ISeedableResource { void Seed(Actor self); }
public interface IVoiced { string VoiceSet { get; } }
public interface IDemolishableInfo { bool IsValidTarget(ActorInfo actorInfo, Actor saboteur); } public interface IDemolishableInfo { bool IsValidTarget(ActorInfo actorInfo, Actor saboteur); }
public interface IDemolishable public interface IDemolishable
{ {

View File

@@ -44,8 +44,8 @@ namespace OpenRA
public static bool HasVoices(this Actor a) public static bool HasVoices(this Actor a)
{ {
var selectable = a.Info.Traits.GetOrDefault<SelectableInfo>(); var voice = a.TraitOrDefault<IVoiced>();
return selectable != null && selectable.Voice != null; return voice != null && voice.VoiceSet != null;
} }
public static bool HasVoice(this Actor a, string voice) public static bool HasVoice(this Actor a, string voice)
@@ -56,9 +56,11 @@ namespace OpenRA
public static SoundInfo GetVoices(this Actor a) public static SoundInfo GetVoices(this Actor a)
{ {
var selectable = a.Info.Traits.GetOrDefault<SelectableInfo>(); var voiced = a.TraitOrDefault<IVoiced>();
if (selectable == null) return null; if (voiced == null)
var v = selectable.Voice; return null;
var v = voiced.VoiceSet;
return (v == null) ? null : a.World.Map.Rules.Voices[v.ToLowerInvariant()]; return (v == null) ? null : a.World.Map.Rules.Voices[v.ToLowerInvariant()];
} }
@@ -73,6 +75,9 @@ namespace OpenRA
if (o.Subject.Destroyed) if (o.Subject.Destroyed)
continue; continue;
if (!o.Subject.HasVoices())
continue;
foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>()) foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>())
if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o), if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o),
o.Subject, o.Subject.Owner.Country.Race)) o.Subject, o.Subject.Owner.Country.Race))

View File

@@ -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" />

View File

@@ -0,0 +1,35 @@
#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.Traits;
namespace OpenRA.Mods.Common.Traits
{
public class VoicedInfo : ITraitInfo
{
[VoiceReference] public readonly string VoiceSet = null;
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; } }
}
}

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -188,7 +188,8 @@
SelectionDecorations: SelectionDecorations:
Palette: pips Palette: pips
Selectable: Selectable:
Voice: Infantry Voiced:
VoiceSet: Infantry
TargetableUnit: TargetableUnit:
TargetTypes: Ground, Infantry TargetTypes: Ground, Infantry
RenderSprites: RenderSprites:
@@ -253,8 +254,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:
@@ -284,10 +286,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:
@@ -368,10 +371,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:
@@ -445,10 +449,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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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: