Merge pull request #10216 from pchote/remove-tags
Reimplement Primary and Fake tags using WithDecoration.
This commit is contained in:
@@ -17,14 +17,16 @@ namespace OpenRA.Graphics
|
||||
public struct UISpriteRenderable : IRenderable, IFinalizedRenderable
|
||||
{
|
||||
readonly Sprite sprite;
|
||||
readonly WPos effectiveWorldPos;
|
||||
readonly int2 screenPos;
|
||||
readonly int zOffset;
|
||||
readonly PaletteReference palette;
|
||||
readonly float scale;
|
||||
|
||||
public UISpriteRenderable(Sprite sprite, int2 screenPos, int zOffset, PaletteReference palette, float scale)
|
||||
public UISpriteRenderable(Sprite sprite, WPos effectiveWorldPos, int2 screenPos, int zOffset, PaletteReference palette, float scale)
|
||||
{
|
||||
this.sprite = sprite;
|
||||
this.effectiveWorldPos = effectiveWorldPos;
|
||||
this.screenPos = screenPos;
|
||||
this.zOffset = zOffset;
|
||||
this.palette = palette;
|
||||
@@ -32,14 +34,14 @@ namespace OpenRA.Graphics
|
||||
}
|
||||
|
||||
// Does not exist in the world, so a world positions don't make sense
|
||||
public WPos Pos { get { return WPos.Zero; } }
|
||||
public WPos Pos { get { return effectiveWorldPos; } }
|
||||
public WVec Offset { get { return WVec.Zero; } }
|
||||
public bool IsDecoration { get { return true; } }
|
||||
|
||||
public PaletteReference Palette { get { return palette; } }
|
||||
public int ZOffset { get { return zOffset; } }
|
||||
|
||||
public IRenderable WithPalette(PaletteReference newPalette) { return new UISpriteRenderable(sprite, screenPos, zOffset, newPalette, scale); }
|
||||
public IRenderable WithPalette(PaletteReference newPalette) { return new UISpriteRenderable(sprite, effectiveWorldPos, screenPos, zOffset, newPalette, scale); }
|
||||
public IRenderable WithZOffset(int newOffset) { return this; }
|
||||
public IRenderable OffsetBy(WVec vec) { return this; }
|
||||
public IRenderable AsDecoration() { return this; }
|
||||
|
||||
@@ -35,7 +35,6 @@ namespace OpenRA.Traits
|
||||
|
||||
// depends on the order of pips in WorldRenderer.cs!
|
||||
public enum PipType { Transparent, Green, Yellow, Red, Gray, Blue, Ammo, AmmoEmpty }
|
||||
public enum TagType { None, Fake, Primary }
|
||||
|
||||
[Flags]
|
||||
public enum Stance
|
||||
@@ -250,7 +249,6 @@ namespace OpenRA.Traits
|
||||
public interface ILoadsPlayerPalettes { void LoadPlayerPalettes(WorldRenderer wr, string playerName, HSLColor playerColor, bool replaceExisting); }
|
||||
public interface IPaletteModifier { void AdjustPalette(IReadOnlyDictionary<string, MutablePalette> b); }
|
||||
public interface IPips { IEnumerable<PipType> GetPips(Actor self); }
|
||||
public interface ITags { IEnumerable<TagType> GetTags(); }
|
||||
public interface ISelectionBar { float GetValue(); Color GetColor(); }
|
||||
|
||||
public interface IPositionableInfo : ITraitInfo { }
|
||||
|
||||
@@ -25,16 +25,25 @@ namespace OpenRA.Mods.Common.Traits
|
||||
}
|
||||
|
||||
[Desc("Used together with ClassicProductionQueue.")]
|
||||
public class PrimaryBuildingInfo : TraitInfo<PrimaryBuilding> { }
|
||||
|
||||
public class PrimaryBuilding : IIssueOrder, IResolveOrder, ITags
|
||||
public class PrimaryBuildingInfo : ITraitInfo, Requires<UpgradeManagerInfo>
|
||||
{
|
||||
bool isPrimary = false;
|
||||
public bool IsPrimary { get { return isPrimary; } }
|
||||
[UpgradeGrantedReference, Desc("The upgrades to grant while the primary building.")]
|
||||
public readonly string[] Upgrades = { "primary" };
|
||||
|
||||
public IEnumerable<TagType> GetTags()
|
||||
public object Create(ActorInitializer init) { return new PrimaryBuilding(init.Self, this); }
|
||||
}
|
||||
|
||||
public class PrimaryBuilding : IIssueOrder, IResolveOrder
|
||||
{
|
||||
readonly PrimaryBuildingInfo info;
|
||||
readonly UpgradeManager manager;
|
||||
|
||||
public bool IsPrimary { get; private set; }
|
||||
|
||||
public PrimaryBuilding(Actor self, PrimaryBuildingInfo info)
|
||||
{
|
||||
yield return isPrimary ? TagType.Primary : TagType.None;
|
||||
this.info = info;
|
||||
manager = self.Trait<UpgradeManager>();
|
||||
}
|
||||
|
||||
public IEnumerable<IOrderTargeter> Orders
|
||||
@@ -53,14 +62,16 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public void ResolveOrder(Actor self, Order order)
|
||||
{
|
||||
if (order.OrderString == "PrimaryProducer")
|
||||
SetPrimaryProducer(self, !isPrimary);
|
||||
SetPrimaryProducer(self, !IsPrimary);
|
||||
}
|
||||
|
||||
public void SetPrimaryProducer(Actor self, bool state)
|
||||
{
|
||||
if (state == false)
|
||||
{
|
||||
isPrimary = false;
|
||||
IsPrimary = false;
|
||||
foreach (var up in info.Upgrades)
|
||||
manager.RevokeUpgrade(self, up, this);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -78,7 +89,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
b.Trait.SetPrimaryProducer(b.Actor, false);
|
||||
}
|
||||
|
||||
isPrimary = true;
|
||||
IsPrimary = true;
|
||||
foreach (var up in info.Upgrades)
|
||||
manager.GrantUpgrade(self, up, this);
|
||||
|
||||
Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", "PrimaryBuildingSelected", self.Owner.Faction.InternalName);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
// depends on the order of pips in TraitsInterfaces.cs!
|
||||
static readonly string[] PipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray", "pip-blue", "pip-ammo", "pip-ammoempty" };
|
||||
static readonly string[] TagStrings = { "", "tag-fake", "tag-primary" };
|
||||
|
||||
public readonly SelectionDecorationsInfo Info;
|
||||
readonly Actor self;
|
||||
@@ -90,16 +89,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var pos = wr.ScreenPxPosition(self.CenterPosition);
|
||||
var tl = wr.Viewport.WorldToViewPx(pos + new int2(b.Left, b.Top));
|
||||
var bl = wr.Viewport.WorldToViewPx(pos + new int2(b.Left, b.Bottom));
|
||||
var tm = wr.Viewport.WorldToViewPx(pos + new int2((b.Left + b.Right) / 2, b.Top));
|
||||
|
||||
foreach (var r in DrawControlGroup(wr, self, tl))
|
||||
yield return r;
|
||||
|
||||
foreach (var r in DrawPips(wr, self, bl))
|
||||
yield return r;
|
||||
|
||||
foreach (var r in DrawTags(wr, self, tm))
|
||||
yield return r;
|
||||
}
|
||||
|
||||
IEnumerable<IRenderable> DrawControlGroup(WorldRenderer wr, Actor self, int2 basePosition)
|
||||
@@ -114,7 +109,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
pipImages.Tick();
|
||||
|
||||
var pos = basePosition - (0.5f * pipImages.Image.Size).ToInt2() + new int2(9, 5);
|
||||
yield return new UISpriteRenderable(pipImages.Image, pos, 0, pal, 1f);
|
||||
yield return new UISpriteRenderable(pipImages.Image, self.CenterPosition, pos, 0, pal, 1f);
|
||||
}
|
||||
|
||||
IEnumerable<IRenderable> DrawPips(WorldRenderer wr, Actor self, int2 basePosition)
|
||||
@@ -146,35 +141,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
pipImages.PlayRepeating(PipStrings[(int)pip]);
|
||||
pipxyOffset += new int2(pipSize.X, 0);
|
||||
|
||||
yield return new UISpriteRenderable(pipImages.Image, pipxyBase + pipxyOffset, 0, pal, 1f);
|
||||
yield return new UISpriteRenderable(pipImages.Image, self.CenterPosition, pipxyBase + pipxyOffset, 0, pal, 1f);
|
||||
}
|
||||
|
||||
// Increment row
|
||||
pipxyOffset = new int2(0, pipxyOffset.Y - (pipSize.Y + 1));
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerable<IRenderable> DrawTags(WorldRenderer wr, Actor self, int2 basePosition)
|
||||
{
|
||||
var tagImages = new Animation(self.World, "pips");
|
||||
var pal = wr.Palette(Info.Palette);
|
||||
var tagxyOffset = new int2(0, 6);
|
||||
|
||||
foreach (var tags in self.TraitsImplementing<ITags>())
|
||||
{
|
||||
foreach (var tag in tags.GetTags())
|
||||
{
|
||||
if (tag == TagType.None)
|
||||
continue;
|
||||
|
||||
tagImages.PlayRepeating(TagStrings[(int)tag]);
|
||||
var pos = basePosition + tagxyOffset - (0.5f * tagImages.Image.Size).ToInt2();
|
||||
yield return new UISpriteRenderable(tagImages.Image, pos, 0, pal, 1f);
|
||||
|
||||
// Increment row
|
||||
tagxyOffset = tagxyOffset.WithY(tagxyOffset.Y + 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,16 +20,14 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[Flags]
|
||||
public enum ReferencePoints
|
||||
{
|
||||
Top = 0,
|
||||
VCenter = 1,
|
||||
Center = 0,
|
||||
Top = 1,
|
||||
Bottom = 2,
|
||||
|
||||
Left = 0 << 2,
|
||||
HCenter = 1 << 2,
|
||||
Right = 2 << 2,
|
||||
Left = 4,
|
||||
Right = 8,
|
||||
}
|
||||
|
||||
[Desc("Displays a custom animation if conditions are satisfied.")]
|
||||
[Desc("Displays a custom UI overlay relative to the selection box.")]
|
||||
public class WithDecorationInfo : UpgradableTraitInfo
|
||||
{
|
||||
[Desc("Image used for this decoration. Defaults to the actor's type.")]
|
||||
@@ -41,131 +39,96 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[Desc("Palette to render the sprite in. Reference the world actor's PaletteFrom* traits.")]
|
||||
[PaletteReference] public readonly string Palette = "chrome";
|
||||
|
||||
[Desc("Point in the actor's bounding box used as reference for offsetting the decoration image. " +
|
||||
"Possible values are any combination of Top, VCenter, Bottom and Left, HCenter, Right separated by a comma.")]
|
||||
[Desc("Point in the actor's selection box used as reference for offsetting the decoration image. " +
|
||||
"Possible values are combinations of Center, Top, Bottom, Left, Right.")]
|
||||
public readonly ReferencePoints ReferencePoint = ReferencePoints.Top | ReferencePoints.Left;
|
||||
|
||||
[Desc("Pixel offset relative to the actor's bounding box' reference point.")]
|
||||
public readonly int2 Offset = int2.Zero;
|
||||
|
||||
[Desc("The Z offset to apply when rendering this decoration.")]
|
||||
public readonly int ZOffset = 1;
|
||||
|
||||
[Desc("Visual scale of the image.")]
|
||||
public readonly float Scale = 1f;
|
||||
|
||||
[Desc("Should this be visible to allied players?")]
|
||||
public readonly bool ShowToAllies = true;
|
||||
|
||||
[Desc("Should this be visible to enemy players?")]
|
||||
public readonly bool ShowToEnemies = false;
|
||||
[Desc("Player stances who can view the decoration.")]
|
||||
public readonly Stance Stances = Stance.Ally;
|
||||
|
||||
[Desc("Should this be visible only when selected?")]
|
||||
public readonly bool SelectionDecoration = false;
|
||||
public readonly bool RequiresSelection = false;
|
||||
|
||||
public override object Create(ActorInitializer init) { return new WithDecoration(init.Self, this); }
|
||||
}
|
||||
|
||||
public class WithDecoration : UpgradableTrait<WithDecorationInfo>, IRender, IPostRenderSelection
|
||||
public class WithDecoration : UpgradableTrait<WithDecorationInfo>, ITick, IRender, IPostRenderSelection
|
||||
{
|
||||
readonly WithDecorationInfo info;
|
||||
protected readonly Animation Anim;
|
||||
|
||||
readonly string image;
|
||||
readonly Animation anim;
|
||||
readonly Actor self;
|
||||
|
||||
public WithDecoration(Actor self, WithDecorationInfo info)
|
||||
: base(info)
|
||||
{
|
||||
this.info = info;
|
||||
this.self = self;
|
||||
image = info.Image ?? self.Info.Name;
|
||||
anim = new Animation(self.World, image, () => self.World.Paused);
|
||||
anim.PlayRepeating(info.Sequence);
|
||||
}
|
||||
|
||||
public void PlaySingleFrame(int frame)
|
||||
{
|
||||
anim.PlayFetchIndex(info.Sequence, () => frame);
|
||||
Anim = new Animation(self.World, image, () => self.World.Paused);
|
||||
Anim.PlayRepeating(info.Sequence);
|
||||
}
|
||||
|
||||
public virtual bool ShouldRender(Actor self) { return true; }
|
||||
|
||||
public IEnumerable<IRenderable> Render(Actor self, WorldRenderer wr)
|
||||
{
|
||||
return !info.SelectionDecoration ? RenderInner(self, wr, self.Bounds) : Enumerable.Empty<IRenderable>();
|
||||
return !Info.RequiresSelection ? RenderInner(self, wr) : Enumerable.Empty<IRenderable>();
|
||||
}
|
||||
|
||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
|
||||
{
|
||||
return info.SelectionDecoration ? RenderInner(self, wr, self.VisualBounds) : Enumerable.Empty<IRenderable>();
|
||||
return Info.RequiresSelection ? RenderInner(self, wr) : Enumerable.Empty<IRenderable>();
|
||||
}
|
||||
|
||||
IEnumerable<IRenderable> RenderInner(Actor self, WorldRenderer wr, Rectangle actorBounds)
|
||||
IEnumerable<IRenderable> RenderInner(Actor self, WorldRenderer wr)
|
||||
{
|
||||
if (IsTraitDisabled)
|
||||
if (IsTraitDisabled || self.IsDead || !self.IsInWorld || Anim == null)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
if (self.IsDead || !self.IsInWorld)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
if (anim == null)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
var allied = self.Owner.IsAlliedWith(self.World.RenderPlayer);
|
||||
|
||||
if (!allied && !info.ShowToEnemies)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
if (allied && !info.ShowToAllies)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
if (!ShouldRender(self))
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
if (self.World.FogObscures(self))
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
var pxPos = wr.ScreenPxPosition(self.CenterPosition);
|
||||
actorBounds.Offset(pxPos.X, pxPos.Y);
|
||||
|
||||
var img = anim.Image;
|
||||
var imgSize = img.Size.ToInt2();
|
||||
|
||||
switch (info.ReferencePoint & (ReferencePoints)3)
|
||||
if (self.World.RenderPlayer != null)
|
||||
{
|
||||
case ReferencePoints.Top:
|
||||
pxPos = pxPos.WithY(actorBounds.Top + imgSize.Y / 2);
|
||||
break;
|
||||
case ReferencePoints.VCenter:
|
||||
pxPos = pxPos.WithY((actorBounds.Top + actorBounds.Bottom) / 2);
|
||||
break;
|
||||
case ReferencePoints.Bottom:
|
||||
pxPos = pxPos.WithY(actorBounds.Bottom - imgSize.Y / 2);
|
||||
break;
|
||||
var stance = self.Owner.Stances[self.World.RenderPlayer];
|
||||
if (!Info.Stances.HasStance(stance))
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
}
|
||||
|
||||
switch (info.ReferencePoint & (ReferencePoints)(3 << 2))
|
||||
if (!ShouldRender(self) || self.World.FogObscures(self))
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
|
||||
var bounds = self.VisualBounds;
|
||||
var halfSize = (0.5f * Anim.Image.Size).ToInt2();
|
||||
|
||||
var boundsOffset = new int2(bounds.Left + bounds.Right, bounds.Top + bounds.Bottom) / 2;
|
||||
var sizeOffset = -halfSize;
|
||||
if (Info.ReferencePoint.HasFlag(ReferencePoints.Top))
|
||||
{
|
||||
case ReferencePoints.Left:
|
||||
pxPos = pxPos.WithX(actorBounds.Left + imgSize.X / 2);
|
||||
break;
|
||||
case ReferencePoints.HCenter:
|
||||
pxPos = pxPos.WithX((actorBounds.Left + actorBounds.Right) / 2);
|
||||
break;
|
||||
case ReferencePoints.Right:
|
||||
pxPos = pxPos.WithX(actorBounds.Right - imgSize.X / 2);
|
||||
break;
|
||||
boundsOffset -= new int2(0, bounds.Height / 2);
|
||||
sizeOffset += new int2(0, halfSize.Y);
|
||||
}
|
||||
else if (Info.ReferencePoint.HasFlag(ReferencePoints.Bottom))
|
||||
{
|
||||
boundsOffset += new int2(0, bounds.Height / 2);
|
||||
sizeOffset -= new int2(0, halfSize.Y);
|
||||
}
|
||||
|
||||
pxPos += info.Offset;
|
||||
if (Info.ReferencePoint.HasFlag(ReferencePoints.Left))
|
||||
{
|
||||
boundsOffset -= new int2(bounds.Width / 2, 0);
|
||||
sizeOffset += new int2(halfSize.X, 0);
|
||||
}
|
||||
else if (Info.ReferencePoint.HasFlag(ReferencePoints.Right))
|
||||
{
|
||||
boundsOffset += new int2(bounds.Width / 2, 0);
|
||||
sizeOffset -= new int2(halfSize.X, 0);
|
||||
}
|
||||
|
||||
// HACK: Because WorldRenderer.Position() does not care about terrain height at the location
|
||||
var renderPos = wr.ProjectedPosition(pxPos);
|
||||
renderPos = new WPos(renderPos.X, renderPos.Y + self.CenterPosition.Z, self.CenterPosition.Z);
|
||||
|
||||
anim.Tick();
|
||||
|
||||
return new IRenderable[] { new SpriteRenderable(img, renderPos, WVec.Zero, info.ZOffset, wr.Palette(info.Palette), info.Scale, true) };
|
||||
var pxPos = wr.Viewport.WorldToViewPx(wr.ScreenPxPosition(self.CenterPosition) + boundsOffset) + sizeOffset;
|
||||
return new IRenderable[] { new UISpriteRenderable(Anim.Image, self.CenterPosition, pxPos, Info.ZOffset, wr.Palette(Info.Palette), 1f) };
|
||||
}
|
||||
|
||||
public void Tick(Actor self) { Anim.Tick(); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
|
||||
protected override void UpgradeLevelChanged(Actor self, int oldLevel, int newLevel)
|
||||
{
|
||||
PlaySingleFrame(newLevel - 1);
|
||||
Anim.PlayFetchIndex(Info.Sequence, () => newLevel - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,15 +30,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[PaletteReference] public readonly string Palette = "chrome";
|
||||
|
||||
[Desc("Point on the production icon's used as reference for offsetting the overlay. ",
|
||||
"Possible values are any combination of Top, VCenter, Bottom and Left, HCenter, Right separated by a comma.")]
|
||||
"Possible values are combinations of Center, Top, Bottom, Left, Right.")]
|
||||
public readonly ReferencePoints ReferencePoint = ReferencePoints.Top | ReferencePoints.Left;
|
||||
|
||||
[Desc("Pixel offset relative to the icon's reference point.")]
|
||||
public readonly int2 Offset = int2.Zero;
|
||||
|
||||
[Desc("Visual scale of the overlay.")]
|
||||
public readonly float Scale = 1f;
|
||||
|
||||
public object Create(ActorInitializer init) { return new VeteranProductionIconOverlay(init, this); }
|
||||
}
|
||||
|
||||
@@ -76,55 +70,30 @@ namespace OpenRA.Mods.Common.Traits
|
||||
}
|
||||
}
|
||||
|
||||
public Sprite Sprite()
|
||||
Sprite IProductionIconOverlay.Sprite { get { return sprite; } }
|
||||
string IProductionIconOverlay.Palette { get { return info.Palette; } }
|
||||
float2 IProductionIconOverlay.Offset(float2 iconSize)
|
||||
{
|
||||
return sprite;
|
||||
float x = 0;
|
||||
float y = 0;
|
||||
if (info.ReferencePoint.HasFlag(ReferencePoints.Top))
|
||||
y -= iconSize.Y / 2 - sprite.Size.Y / 2;
|
||||
else if (info.ReferencePoint.HasFlag(ReferencePoints.Bottom))
|
||||
y += iconSize.Y / 2 - sprite.Size.Y / 2;
|
||||
|
||||
if (info.ReferencePoint.HasFlag(ReferencePoints.Left))
|
||||
x -= iconSize.X / 2 - sprite.Size.X / 2;
|
||||
else if (info.ReferencePoint.HasFlag(ReferencePoints.Right))
|
||||
x += iconSize.X / 2 - sprite.Size.X / 2;
|
||||
|
||||
return new float2(x, y);
|
||||
}
|
||||
|
||||
public string Palette()
|
||||
{
|
||||
return info.Palette;
|
||||
}
|
||||
|
||||
public float Scale()
|
||||
{
|
||||
return info.Scale;
|
||||
}
|
||||
|
||||
public float2 Offset(float2 iconSize)
|
||||
{
|
||||
float offsetX = 0, offsetY = 0;
|
||||
switch (info.ReferencePoint & (ReferencePoints)3)
|
||||
{
|
||||
case ReferencePoints.Top:
|
||||
offsetY = (-iconSize.Y + sprite.Size.Y) / 2;
|
||||
break;
|
||||
case ReferencePoints.VCenter:
|
||||
break;
|
||||
case ReferencePoints.Bottom:
|
||||
offsetY = (iconSize.Y - sprite.Size.Y) / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (info.ReferencePoint & (ReferencePoints)(3 << 2))
|
||||
{
|
||||
case ReferencePoints.Left:
|
||||
offsetX = (-iconSize.X + sprite.Size.X) / 2;
|
||||
break;
|
||||
case ReferencePoints.HCenter:
|
||||
break;
|
||||
case ReferencePoints.Right:
|
||||
offsetX = (iconSize.X - sprite.Size.X) / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
return new float2(offsetX, offsetY) + info.Offset;
|
||||
}
|
||||
|
||||
public bool IsOverlayActive(ActorInfo ai)
|
||||
bool IProductionIconOverlay.IsOverlayActive(ActorInfo ai)
|
||||
{
|
||||
bool isActive;
|
||||
overlayActive.TryGetValue(ai, out isActive);
|
||||
if (!overlayActive.TryGetValue(ai, out isActive))
|
||||
return false;
|
||||
|
||||
return isActive;
|
||||
}
|
||||
|
||||
@@ -77,9 +77,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public interface IProductionIconOverlay
|
||||
{
|
||||
Sprite Sprite();
|
||||
string Palette();
|
||||
float Scale();
|
||||
Sprite Sprite { get; }
|
||||
string Palette { get; }
|
||||
float2 Offset(float2 iconSize);
|
||||
bool IsOverlayActive(ActorInfo ai);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Common.UtilityCommands
|
||||
{
|
||||
@@ -2702,6 +2703,67 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
node.Value.Nodes.Add(new MiniYamlNode("ParticleSize", "1, 1"));
|
||||
}
|
||||
|
||||
// Overhauled the actor decorations traits
|
||||
if (engineVersion < 20151226)
|
||||
{
|
||||
if (depth == 1 && (node.Key.StartsWith("WithDecoration") || node.Key.StartsWith("WithRankDecoration")))
|
||||
{
|
||||
node.Value.Nodes.RemoveAll(n => n.Key == "Scale");
|
||||
node.Value.Nodes.RemoveAll(n => n.Key == "Offset");
|
||||
var sd = node.Value.Nodes.FirstOrDefault(n => n.Key == "SelectionDecoration");
|
||||
if (sd != null)
|
||||
sd.Key = "RequiresSelection";
|
||||
|
||||
var reference = node.Value.Nodes.FirstOrDefault(n => n.Key == "ReferencePoint");
|
||||
if (reference != null)
|
||||
{
|
||||
var values = FieldLoader.GetValue<string[]>("ReferencePoint", reference.Value.Value);
|
||||
values = values.Where(v => v != "HCenter" && v != "VCenter").ToArray();
|
||||
if (values.Length == 0)
|
||||
values = new[] { "Center" };
|
||||
|
||||
reference.Value.Value = FieldSaver.FormatValue(values);
|
||||
}
|
||||
|
||||
var stance = Stance.Ally;
|
||||
var showToAllies = node.Value.Nodes.FirstOrDefault(n => n.Key == "ShowToAllies");
|
||||
if (showToAllies != null && !FieldLoader.GetValue<bool>("ShowToAllies", showToAllies.Value.Value))
|
||||
stance ^= Stance.Ally;
|
||||
var showToEnemies = node.Value.Nodes.FirstOrDefault(n => n.Key == "ShowToEnemies");
|
||||
if (showToEnemies != null && FieldLoader.GetValue<bool>("ShowToEnemies", showToEnemies.Value.Value))
|
||||
stance |= Stance.Enemy;
|
||||
|
||||
if (stance != Stance.Ally)
|
||||
node.Value.Nodes.Add(new MiniYamlNode("Stance", FieldSaver.FormatValue(stance)));
|
||||
|
||||
node.Value.Nodes.RemoveAll(n => n.Key == "ShowToAllies");
|
||||
node.Value.Nodes.RemoveAll(n => n.Key == "ShowToEnemies");
|
||||
}
|
||||
|
||||
if (depth == 1 && node.Key == "Fake")
|
||||
{
|
||||
node.Key = "WithDecoration@fake";
|
||||
node.Value.Nodes.Add(new MiniYamlNode("RequiresSelection", "true"));
|
||||
node.Value.Nodes.Add(new MiniYamlNode("Image", "pips"));
|
||||
node.Value.Nodes.Add(new MiniYamlNode("Sequence", "tag-fake"));
|
||||
node.Value.Nodes.Add(new MiniYamlNode("ReferencePoint", "Top"));
|
||||
node.Value.Nodes.Add(new MiniYamlNode("ZOffset", "256"));
|
||||
}
|
||||
|
||||
if (depth == 0 && node.Value.Nodes.Any(n => n.Key.StartsWith("PrimaryBuilding")))
|
||||
{
|
||||
var decNodes = new List<MiniYamlNode>();
|
||||
decNodes.Add(new MiniYamlNode("RequiresSelection", "true"));
|
||||
decNodes.Add(new MiniYamlNode("Image", "pips"));
|
||||
decNodes.Add(new MiniYamlNode("Sequence", "tag-primary"));
|
||||
decNodes.Add(new MiniYamlNode("ReferencePoint", "Top"));
|
||||
decNodes.Add(new MiniYamlNode("ZOffset", "256"));
|
||||
decNodes.Add(new MiniYamlNode("UpgradeTypes", "primary"));
|
||||
decNodes.Add(new MiniYamlNode("UpgradeMinEnabledLevel", "1"));
|
||||
node.Value.Nodes.Add(new MiniYamlNode("WithDecoration@primary", new MiniYaml("", decNodes)));
|
||||
}
|
||||
}
|
||||
|
||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,10 +91,11 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
var location = new float2(RenderBounds.Location) + new float2(queue.i * (IconWidth + IconSpacing), 0);
|
||||
WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer.Palette(bi.IconPalette), 0.5f);
|
||||
|
||||
var pio = queue.Trait.Actor.Owner.PlayerActor.TraitsImplementing<IProductionIconOverlay>().FirstOrDefault();
|
||||
if (pio != null && pio.IsOverlayActive(actor))
|
||||
WidgetUtils.DrawSHPCentered(pio.Sprite(), location + 0.5f * iconSize + pio.Offset(0.5f * iconSize),
|
||||
worldRenderer.Palette(pio.Palette()), 0.5f * pio.Scale());
|
||||
var pio = queue.Trait.Actor.Owner.PlayerActor.TraitsImplementing<IProductionIconOverlay>()
|
||||
.FirstOrDefault(p => p.IsOverlayActive(actor));
|
||||
if (pio != null)
|
||||
WidgetUtils.DrawSHPCentered(pio.Sprite, location + 0.5f * iconSize + pio.Offset(0.5f * iconSize),
|
||||
worldRenderer.Palette(pio.Palette), 0.5f);
|
||||
|
||||
var clock = clocks[queue.Trait];
|
||||
clock.PlayFetchIndex(ClockSequence,
|
||||
|
||||
@@ -374,8 +374,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
var buildableItems = CurrentQueue.BuildableItems();
|
||||
|
||||
var pio = currentQueue.Actor.Owner.PlayerActor.TraitsImplementing<IProductionIconOverlay>().FirstOrDefault();
|
||||
var pioOffset = pio != null ? pio.Offset(IconSize) : new float2(0, 0);
|
||||
var pios = currentQueue.Actor.Owner.PlayerActor.TraitsImplementing<IProductionIconOverlay>();
|
||||
|
||||
// Icons
|
||||
foreach (var icon in icons.Values)
|
||||
@@ -383,8 +382,9 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
WidgetUtils.DrawSHPCentered(icon.Sprite, icon.Pos + iconOffset, icon.Palette);
|
||||
|
||||
// Draw the ProductionIconOverlay's sprite
|
||||
if (pio != null && pio.IsOverlayActive(icon.Actor))
|
||||
WidgetUtils.DrawSHPCentered(pio.Sprite(), icon.Pos + iconOffset + pioOffset, worldRenderer.Palette(pio.Palette()), pio.Scale());
|
||||
var pio = pios.FirstOrDefault(p => p.IsOverlayActive(icon.Actor));
|
||||
if (pio != null)
|
||||
WidgetUtils.DrawSHPCentered(pio.Sprite, icon.Pos + iconOffset + pio.Offset(IconSize), worldRenderer.Palette(pio.Palette), 1f);
|
||||
|
||||
// Build progress
|
||||
if (icon.Queued.Count > 0)
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<Compile Include="Scripting\Properties\InfiltrateProperties.cs" />
|
||||
<Compile Include="Scripting\Properties\DisguiseProperties.cs" />
|
||||
<Compile Include="Traits\Attack\AttackLeap.cs" />
|
||||
<Compile Include="Traits\Buildings\Fake.cs" />
|
||||
<Compile Include="Traits\Buildings\ClonesProducedUnits.cs" />
|
||||
<Compile Include="Traits\Chronoshiftable.cs" />
|
||||
<Compile Include="Traits\Cloneable.cs" />
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#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 OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Traits
|
||||
{
|
||||
[Desc("Display a sprite tag \"fake\" when selected.")]
|
||||
class FakeInfo : TraitInfo<Fake> { }
|
||||
|
||||
class Fake : ITags
|
||||
{
|
||||
public IEnumerable<TagType> GetTags() { yield return TagType.Fake; }
|
||||
}
|
||||
}
|
||||
@@ -48,7 +48,6 @@
|
||||
Sequence: rank
|
||||
Palette: effect
|
||||
ReferencePoint: Bottom, Right
|
||||
Offset: 2, 2
|
||||
UpgradeTypes: rank
|
||||
ZOffset: 256
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
Sequence: rank
|
||||
Palette: effect
|
||||
ReferencePoint: Bottom, Right
|
||||
Offset: 2, 2
|
||||
UpgradeTypes: rank
|
||||
ZOffset: 256
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
@@ -88,13 +88,21 @@ construction_yard:
|
||||
Prerequisites: upgrade.conyard
|
||||
Upgrades: stardecoration
|
||||
WithDecoration@upgraded:
|
||||
SelectionDecoration: true
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-upgraded
|
||||
ReferencePoint: Top, Right
|
||||
ZOffset: 256
|
||||
UpgradeTypes: stardecoration
|
||||
UpgradeMinEnabledLevel: 1
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
wind_trap:
|
||||
Inherits: ^Building
|
||||
@@ -191,13 +199,21 @@ barracks:
|
||||
Prerequisites: upgrade.barracks
|
||||
Upgrades: stardecoration
|
||||
WithDecoration@upgraded:
|
||||
SelectionDecoration: true
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-upgraded
|
||||
ReferencePoint: Top, Right
|
||||
ZOffset: 256
|
||||
UpgradeTypes: stardecoration
|
||||
UpgradeMinEnabledLevel: 1
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
refinery:
|
||||
Inherits: ^Building
|
||||
@@ -359,13 +375,21 @@ light_factory:
|
||||
Prerequisites: upgrade.light
|
||||
Upgrades: stardecoration
|
||||
WithDecoration@upgraded:
|
||||
SelectionDecoration: true
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-upgraded
|
||||
ReferencePoint: Top, Right
|
||||
ZOffset: 256
|
||||
UpgradeTypes: stardecoration
|
||||
UpgradeMinEnabledLevel: 1
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
heavy_factory:
|
||||
Inherits: ^Building
|
||||
@@ -432,13 +456,21 @@ heavy_factory:
|
||||
Prerequisites: upgrade.heavy
|
||||
Upgrades: stardecoration
|
||||
WithDecoration@upgraded:
|
||||
SelectionDecoration: true
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-upgraded
|
||||
ReferencePoint: Top, Right
|
||||
ZOffset: 256
|
||||
UpgradeTypes: stardecoration
|
||||
UpgradeMinEnabledLevel: 1
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
outpost:
|
||||
Inherits: ^Building
|
||||
@@ -541,6 +573,14 @@ starport:
|
||||
Power:
|
||||
Amount: -150
|
||||
ProvidesPrerequisite@buildingname:
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
wall:
|
||||
Inherits@1: ^SpriteActor
|
||||
@@ -782,7 +822,7 @@ high_tech_factory:
|
||||
Prerequisites: upgrade.hightech
|
||||
Upgrades: stardecoration
|
||||
WithDecoration@upgraded:
|
||||
SelectionDecoration: true
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-upgraded
|
||||
ReferencePoint: Top, Right
|
||||
|
||||
@@ -107,6 +107,7 @@ pips:
|
||||
pickup-indicator: DATA.R8
|
||||
Start: 112
|
||||
tag-primary: primary.shp
|
||||
Offset: 0, 2
|
||||
pip-empty: DATA.R8
|
||||
Start: 15
|
||||
pip-green: DATA.R8
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
Sequence: rank
|
||||
Palette: effect
|
||||
ReferencePoint: Bottom, Right
|
||||
Offset: 2, 2
|
||||
UpgradeTypes: rank
|
||||
ZOffset: 256
|
||||
UpgradeMinEnabledLevel: 1
|
||||
@@ -521,7 +520,12 @@
|
||||
DamageThreshold: 90
|
||||
RevealsShroud:
|
||||
Range: 4c0
|
||||
Fake:
|
||||
WithDecoration@fake:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-fake
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
-EmitInfantryOnSell:
|
||||
-MustBeDestroyed:
|
||||
|
||||
|
||||
@@ -218,7 +218,6 @@ SPY:
|
||||
Sequence: pip-disguise
|
||||
Palette: effect
|
||||
ReferencePoint: Top, Right
|
||||
Offset: 4, -2
|
||||
ZOffset: 256
|
||||
UpgradeTypes: disguise
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
@@ -66,7 +66,6 @@ Player:
|
||||
GlobalUpgradeManager:
|
||||
EnemyWatcher:
|
||||
VeteranProductionIconOverlay:
|
||||
Offset: 2, 2
|
||||
Image: iconchevrons
|
||||
Sequence: veteran
|
||||
|
||||
|
||||
@@ -169,6 +169,14 @@ SPEN:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
EditorTilesetFilter:
|
||||
ExcludeTilesets: INTERIOR
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
SYRD:
|
||||
Inherits: ^Building
|
||||
@@ -256,6 +264,14 @@ SYRD:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
EditorTilesetFilter:
|
||||
ExcludeTilesets: INTERIOR
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
IRON:
|
||||
Inherits: ^ScienceBuilding
|
||||
@@ -845,6 +861,14 @@ WEAP:
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||
InfiltrateForSupportPower:
|
||||
Proxy: vehicles.upgraded
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
FACT:
|
||||
Inherits: ^Building
|
||||
@@ -1074,6 +1098,14 @@ HPAD:
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||
InfiltrateForSupportPower:
|
||||
Proxy: aircraft.upgraded
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
AFLD:
|
||||
Inherits: ^Building
|
||||
@@ -1183,6 +1215,14 @@ AFLD:
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||
InfiltrateForSupportPower:
|
||||
Proxy: aircraft.upgraded
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
POWR:
|
||||
Inherits: ^Building
|
||||
@@ -1354,6 +1394,14 @@ BARR:
|
||||
Proxy: barracks.upgraded
|
||||
Targetable:
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
KENN:
|
||||
Inherits: ^Building
|
||||
@@ -1394,6 +1442,14 @@ KENN:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
WithBuildingExplosion:
|
||||
Sequences: building, building_napalm, large_explosion, self_destruct
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
TENT:
|
||||
Inherits: ^Building
|
||||
@@ -1466,6 +1522,14 @@ TENT:
|
||||
Proxy: barracks.upgraded
|
||||
Targetable:
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
FIX:
|
||||
Inherits: ^Building
|
||||
|
||||
@@ -57,8 +57,10 @@ pips:
|
||||
# Start: 4
|
||||
tag-fake:
|
||||
Start: 18
|
||||
Offset: 0, 2
|
||||
tag-primary:
|
||||
Start: 2
|
||||
Offset: 0, 2
|
||||
pip-empty: pips2
|
||||
pip-green: pips2
|
||||
Start: 1
|
||||
@@ -73,6 +75,7 @@ pips:
|
||||
pip-disguise: pip-disguise
|
||||
Length: *
|
||||
Tick: 300
|
||||
Offset: 0, -6
|
||||
|
||||
v2:
|
||||
idle:
|
||||
@@ -370,6 +373,7 @@ rank:
|
||||
|
||||
iconchevrons:
|
||||
veteran:
|
||||
Offset: 2, 2
|
||||
|
||||
atomic:
|
||||
up: atomicup
|
||||
|
||||
@@ -65,7 +65,6 @@ CHAMSPY:
|
||||
Sequence: pip-disguise
|
||||
Palette: pips
|
||||
ReferencePoint: Top, Right
|
||||
Offset: 4, -2
|
||||
ZOffset: 256
|
||||
UpgradeTypes: disguise
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
Sequence: rank
|
||||
Palette: ra
|
||||
ReferencePoint: Bottom, Right
|
||||
Offset: 2, 2
|
||||
UpgradeTypes: rank
|
||||
ZOffset: 256
|
||||
UpgradeMinEnabledLevel: 1
|
||||
@@ -61,10 +60,8 @@
|
||||
TimedUpgradeBar@EMPDISABLE:
|
||||
Upgrade: empdisable
|
||||
Color: FFFFFF
|
||||
WithDecoration@EMPDISABLE:
|
||||
Image: emp
|
||||
Sequence: idle
|
||||
ReferencePoint: HCenter, VCenter
|
||||
WithIdleOverlay@EMPDISABLE:
|
||||
Sequence: emp-overlay
|
||||
Palette: effect
|
||||
UpgradeTypes: empdisable
|
||||
ShowToEnemies: true
|
||||
@@ -456,7 +453,6 @@
|
||||
|
||||
^CivilianVoxelVehicle:
|
||||
Inherits: ^VoxelVehicle
|
||||
-RenderSprites:
|
||||
-MustBeDestroyed:
|
||||
|
||||
^Aircraft:
|
||||
@@ -666,6 +662,7 @@
|
||||
Inherits@1: ^EmpDisableMobile
|
||||
Inherits@2: ^ExistsInWorld
|
||||
RenderVoxels:
|
||||
RenderSprites:
|
||||
WithVoxelBody:
|
||||
DrawLineToTarget:
|
||||
Mobile:
|
||||
|
||||
@@ -108,6 +108,15 @@ GAPILE:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 88, 56, 0, -8
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
GAWEAP:
|
||||
Inherits: ^Building
|
||||
@@ -159,6 +168,15 @@ GAWEAP:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 154, 100, -2, -12
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
GAHPAD:
|
||||
Inherits: ^Building
|
||||
@@ -203,6 +221,15 @@ GAHPAD:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 88, 66, 0, -5
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
GADEPT:
|
||||
Inherits: ^Building
|
||||
|
||||
@@ -116,6 +116,15 @@ NAHAND:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 116, 78, 3, -8
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
NAWEAP:
|
||||
Inherits: ^Building
|
||||
@@ -163,6 +172,15 @@ NAWEAP:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 149, 116, -3, -20
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
NAHPAD:
|
||||
Inherits: ^Building
|
||||
@@ -207,6 +225,15 @@ NAHPAD:
|
||||
ProvidesPrerequisite@buildingname:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 78, 54, 0, -8
|
||||
WithDecoration@primary:
|
||||
RequiresSelection: true
|
||||
Image: pips
|
||||
Sequence: tag-primary
|
||||
Palette: ra
|
||||
ReferencePoint: Top
|
||||
ZOffset: 256
|
||||
UpgradeTypes: primary
|
||||
UpgradeMinEnabledLevel: 1
|
||||
|
||||
NARADR:
|
||||
Inherits: ^Building
|
||||
@@ -406,3 +433,4 @@ NAWAST:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 100, 60, 5, -5
|
||||
RenderSprites:
|
||||
|
||||
|
||||
@@ -919,6 +919,12 @@ gaspot:
|
||||
make: gaspotmk
|
||||
Length: 14
|
||||
ShadowStart: 14
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: spoticon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -935,6 +941,12 @@ galite:
|
||||
lighting: alphatst
|
||||
BlendMode: DoubleMultiplicative
|
||||
UseTilesetCode: false
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: liteicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
|
||||
@@ -953,6 +953,10 @@ cyc2:
|
||||
ShadowStart: 190
|
||||
die6: electro
|
||||
Length: *
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: cybcicon
|
||||
|
||||
cyborg:
|
||||
@@ -1014,6 +1018,10 @@ cyborg:
|
||||
ShadowStart: 662
|
||||
die6: electro
|
||||
Length: *
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: cybiicon
|
||||
|
||||
mutant:
|
||||
|
||||
@@ -90,6 +90,7 @@ pips:
|
||||
Length: 10
|
||||
tag-primary: pipsra #TODO: backfall to RA asset
|
||||
Start: 2
|
||||
Offset: 0, 2
|
||||
pip-empty: pips2
|
||||
pip-green: pips2
|
||||
Start: 1
|
||||
@@ -107,6 +108,8 @@ pips:
|
||||
pip-disguise: pip-disguise
|
||||
Length: *
|
||||
Tick: 300
|
||||
Offset: 0, -6
|
||||
|
||||
# TODO:
|
||||
pip-empty-building:
|
||||
pip-green-building:
|
||||
@@ -244,11 +247,6 @@ wake:
|
||||
Length: *
|
||||
Tick: 180
|
||||
|
||||
emp:
|
||||
idle: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
|
||||
resources:
|
||||
Defaults:
|
||||
UseTilesetExtension: true
|
||||
|
||||
@@ -40,6 +40,12 @@ gacnst:
|
||||
Length: 10
|
||||
damaged-idle-front: gtcnst_b
|
||||
Length: 10
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: facticon
|
||||
Offset: 0,0
|
||||
UseTilesetCode: false
|
||||
@@ -89,6 +95,12 @@ gapowr:
|
||||
make: gtpowrmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: powricon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -133,6 +145,12 @@ gapile:
|
||||
make: gtpilemk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: brrkicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -204,6 +222,12 @@ gaweap:
|
||||
Start: 2
|
||||
Length: 1
|
||||
ZOffset: -1024
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: weapicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -231,6 +255,12 @@ napowr:
|
||||
make: ntpowrmk
|
||||
Length: 19
|
||||
ShadowStart: 19
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: npwricon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -258,6 +288,12 @@ naapwr:
|
||||
make: ntapwrmk
|
||||
Length: 19
|
||||
ShadowStart: 19
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: apwricon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -294,6 +330,12 @@ nahand:
|
||||
make: nthandmk
|
||||
Length: 15
|
||||
ShadowStart: 15
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: handicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -350,6 +392,12 @@ naweap:
|
||||
dead-bib: ntweapbb
|
||||
Start: 2
|
||||
ZOffset: -1024
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: nwepicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -377,6 +425,12 @@ naradr:
|
||||
make: ntradrmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: nradicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -403,6 +457,12 @@ natech:
|
||||
make: nttechmk
|
||||
Length: 18
|
||||
ShadowStart: 18
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: ntchicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -430,6 +490,12 @@ natmpl:
|
||||
make: nttmplmk
|
||||
Length: 17
|
||||
ShadowStart: 17
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: tmplicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -459,6 +525,12 @@ garadr:
|
||||
make: gtradrmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: radricon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -486,6 +558,12 @@ gatech:
|
||||
make: gttechmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: techicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -556,6 +634,12 @@ gatick:
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
make: gatickmk
|
||||
Length: 24
|
||||
ShadowStart: 24
|
||||
@@ -569,6 +653,12 @@ gaicbm:
|
||||
damaged-idle:
|
||||
Start: 1
|
||||
ShadowStart: 4
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
make: gaicbmmk
|
||||
Length: 30
|
||||
ShadowStart: 30
|
||||
@@ -586,6 +676,12 @@ gaarty:
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
make: gaartymk
|
||||
Length: 16
|
||||
ShadowStart: 16
|
||||
@@ -613,6 +709,12 @@ naobel:
|
||||
make: ntobelmk
|
||||
Length: 19
|
||||
ShadowStart: 19
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: obliicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -633,6 +735,12 @@ nalasr:
|
||||
make: ntlasrmk
|
||||
Length: 21
|
||||
ShadowStart: 21
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: plticon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -656,6 +764,12 @@ nasam:
|
||||
make: ntsammk
|
||||
Length: 8
|
||||
ShadowStart: 8
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: samicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -678,6 +792,12 @@ napuls.gdi:
|
||||
make: ntpulsmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:empicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -700,6 +820,12 @@ napuls.nod:
|
||||
make: ntpulsmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:empicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -727,6 +853,12 @@ nastlh:
|
||||
make: ntstlhmk
|
||||
Length: 18
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: clckicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -784,6 +916,12 @@ gactwr:
|
||||
muzzle7: mgun-ne
|
||||
Length: *
|
||||
UseTilesetCode: false
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: towricon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -840,6 +978,12 @@ gahpad:
|
||||
Length: 18
|
||||
ShadowStart: 18
|
||||
ZOffset: -1c511
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: heliicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -884,6 +1028,12 @@ nahpad:
|
||||
make: nthpadmk
|
||||
Length: 20
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: nhpdicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -918,6 +1068,12 @@ proc.gdi:
|
||||
damaged-bib: ntrefnbb
|
||||
Start: 1
|
||||
ZOffset: -1024
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:reficon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -952,6 +1108,12 @@ proc.nod:
|
||||
damaged-bib: ntrefnbb
|
||||
Start: 1
|
||||
ZOffset: -1024
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:reficon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -993,6 +1155,12 @@ nawast:
|
||||
damaged-bib: ntwastbb
|
||||
Start: 1
|
||||
ZOffset: -1024
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: wasticon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -1031,6 +1199,12 @@ gasilo.gdi:
|
||||
make: gtsilomk
|
||||
Length: 18
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:siloicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -1069,6 +1243,12 @@ gasilo.nod:
|
||||
make: gtsilomk
|
||||
Length: 18
|
||||
ShadowStart: 20
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:siloicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -1127,6 +1307,12 @@ gadept.gdi:
|
||||
Length: 10
|
||||
Tick: 60
|
||||
ShadowStart: 10
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:fixicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -1185,6 +1371,12 @@ gadept.nod:
|
||||
Length: 10
|
||||
Tick: 60
|
||||
ShadowStart: 10
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:fixicon
|
||||
Offset: 76, 66
|
||||
UseTilesetCode: false
|
||||
@@ -1216,6 +1408,12 @@ namisl:
|
||||
Start: 10
|
||||
Length: 10
|
||||
Tick: 80
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: msslicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
@@ -1275,6 +1473,12 @@ gaplug:
|
||||
make: gtplugmk
|
||||
Length: 17
|
||||
ShadowStart: 17
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
icon: plugicon
|
||||
Offset: 0, 0
|
||||
UseTilesetCode: false
|
||||
|
||||
@@ -1,31 +1,51 @@
|
||||
mcv.gdi:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:mcvicon
|
||||
|
||||
mcv.nod:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:mcvicon
|
||||
|
||||
apc:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: apcicon
|
||||
|
||||
harv.gdi:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
harvest: harvestr
|
||||
Length: *
|
||||
icon: sidec01.mix:harvicon
|
||||
|
||||
harv.nod:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
harvest: harvestr
|
||||
Length: *
|
||||
icon: sidec02.mix:harvicon
|
||||
|
||||
hvr:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: hovricon
|
||||
|
||||
4tnk:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
muzzle: gunfire
|
||||
Length: *
|
||||
|
||||
lpst.gdi:
|
||||
icon: sidec01.mix:lpsticon
|
||||
idle: gadpsa
|
||||
Offset: 0, -12
|
||||
ShadowStart: 3
|
||||
@@ -33,9 +53,12 @@ lpst.gdi:
|
||||
Offset: 0, -12
|
||||
Length: 36
|
||||
ShadowStart: 36
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: sidec01.mix:lpsticon
|
||||
|
||||
lpst.nod:
|
||||
icon: sidec02.mix:lpsticon
|
||||
idle: gadpsa
|
||||
Offset: 0, -12
|
||||
ShadowStart: 3
|
||||
@@ -43,20 +66,39 @@ lpst.nod:
|
||||
Offset: 0, -12
|
||||
Length: 36
|
||||
ShadowStart: 36
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: sidec02.mix:lpsticon
|
||||
|
||||
repair:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: rboticon
|
||||
|
||||
art2:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: artyicon
|
||||
|
||||
weed:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: weedicon
|
||||
|
||||
hmec:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: hmecicon
|
||||
|
||||
bike:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: cyclicon
|
||||
|
||||
bggy:
|
||||
@@ -70,23 +112,40 @@ bggy:
|
||||
muzzle5: mgun-se
|
||||
muzzle6: mgun-e
|
||||
muzzle7: mgun-ne
|
||||
emp-overlay: emp_fx01
|
||||
BlendMode: Additive
|
||||
icon: bggyicon
|
||||
|
||||
sapc:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: sapcicon
|
||||
|
||||
subtank:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: subticon
|
||||
|
||||
sonic:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: soniicon
|
||||
|
||||
ttnk:
|
||||
muzzle: gunfire
|
||||
Length: *
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: tickicon
|
||||
|
||||
stnk:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: stnkicon
|
||||
|
||||
mmch:
|
||||
@@ -103,6 +162,9 @@ mmch:
|
||||
Facings: -32
|
||||
muzzle: gunfire
|
||||
Length: *
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: mmchicon
|
||||
|
||||
gghunt:
|
||||
@@ -110,6 +172,9 @@ gghunt:
|
||||
Facings: 1
|
||||
Length: 8
|
||||
ShadowStart: 8
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
|
||||
smech:
|
||||
stand:
|
||||
@@ -126,4 +191,67 @@ smech:
|
||||
Facings: -8
|
||||
ShadowStart: 240
|
||||
Tick: 100
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
BlendMode: Additive
|
||||
icon: smchicon
|
||||
|
||||
trucka:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
truckb:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
icbm:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
bus:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
pick:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
car:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
wini:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
locomotive:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
traincar:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
cargocar:
|
||||
emp-overlay: emp_fx01
|
||||
Length: *
|
||||
ZOffset: 512
|
||||
BlendMode: Additive
|
||||
|
||||
Reference in New Issue
Block a user