Merge pull request #8388 from reaperrr/selectable-refactor1

Selectable bounds/selection box refactor
This commit is contained in:
Pavel Penev
2015-06-19 13:43:30 +03:00
50 changed files with 476 additions and 215 deletions

View File

@@ -41,12 +41,14 @@ namespace OpenRA
public int Generation;
Lazy<Rectangle> bounds;
Lazy<Rectangle> visualBounds;
Lazy<IFacing> facing;
Lazy<Health> health;
Lazy<IOccupySpace> occupySpace;
Lazy<IEffectiveOwner> effectiveOwner;
public Rectangle Bounds { get { return bounds.Value; } }
public Rectangle VisualBounds { get { return visualBounds.Value; } }
public IOccupySpace OccupiesSpace { get { return occupySpace.Value; } }
public IEffectiveOwner EffectiveOwner { get { return effectiveOwner.Value; } }
@@ -110,6 +112,21 @@ namespace OpenRA
return new Rectangle(offset.X, offset.Y, size.X, size.Y);
});
visualBounds = Exts.Lazy(() =>
{
var sd = Info.Traits.GetOrDefault<ISelectionDecorationsInfo>();
if (sd == null || sd.SelectionBoxBounds == null)
return bounds.Value;
var size = new int2(sd.SelectionBoxBounds[0], sd.SelectionBoxBounds[1]);
var offset = -size / 2;
if (sd.SelectionBoxBounds.Length > 2)
offset += new int2(sd.SelectionBoxBounds[2], sd.SelectionBoxBounds[3]);
return new Rectangle(offset.X, offset.Y, size.X, size.Y);
});
renderModifiers = TraitsImplementing<IRenderModifier>().ToArray();
renders = TraitsImplementing<IRender>().ToArray();
disables = TraitsImplementing<IDisable>().ToArray();

View File

@@ -158,7 +158,7 @@ namespace OpenRA.Graphics
var health = actor.TraitOrDefault<Health>();
var screenPos = wr.ScreenPxPosition(pos);
var bounds = actor.Bounds;
var bounds = actor.VisualBounds;
bounds.Offset(screenPos.X, screenPos.Y);
var start = new float2(bounds.Left + 1, bounds.Top);

View File

@@ -190,13 +190,9 @@ namespace OpenRA.Graphics
public void DrawRollover(Actor unit)
{
var selectable = unit.TraitOrDefault<Selectable>();
if (selectable != null)
{
if (selectable.Info.Selectable)
if (unit.HasTrait<Selectable>())
new SelectionBarsRenderable(unit).Render(this);
}
}
public void DrawRangeCircle(WPos pos, WRange range, Color c)
{

View File

@@ -180,7 +180,6 @@
<Compile Include="Traits\Player\PlayerResources.cs" />
<Compile Include="Traits\RevealsShroud.cs" />
<Compile Include="Traits\Selectable.cs" />
<Compile Include="Traits\SelectionDecorations.cs" />
<Compile Include="Traits\Target.cs" />
<Compile Include="Traits\TraitsInterfaces.cs" />
<Compile Include="Traits\Util.cs" />
@@ -235,7 +234,6 @@
<Compile Include="Sound\OpenAlSound.cs" />
<Compile Include="Sound\NullSound.cs" />
<Compile Include="Effects\SpriteEffect.cs" />
<Compile Include="Graphics\SelectionBoxRenderable.cs" />
<Compile Include="Graphics\SelectionBarsRenderable.cs" />
<Compile Include="Graphics\TargetLineRenderable.cs" />
<Compile Include="Graphics\UISpriteRenderable.cs" />

View File

@@ -63,8 +63,7 @@ namespace OpenRA.Orders
if (underCursor != null && (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any()))
{
var selectable = underCursor.TraitOrDefault<Selectable>();
if (selectable != null && selectable.Info.Selectable)
if (underCursor.HasTrait<Selectable>())
useSelect = true;
}

View File

@@ -8,17 +8,14 @@
*/
#endregion
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
namespace OpenRA.Traits
{
[Desc("This actor is selectable. Defines bounds of selectable area, selection class and selection priority.")]
public class SelectableInfo : ITraitInfo
{
public readonly bool Selectable = true;
public readonly int Priority = 10;
[Desc("Bounds for the selectable area.")]
public readonly int[] Bounds = null;
[Desc("All units having the same selection class specified will be selected with select-by-type commands (e.g. double-click). "
@@ -28,46 +25,13 @@ namespace OpenRA.Traits
public object Create(ActorInitializer init) { return new Selectable(init.Self, this); }
}
public class Selectable : IPostRenderSelection
public class Selectable
{
public readonly string Class = null;
public SelectableInfo Info;
readonly Actor self;
public Selectable(Actor self, SelectableInfo info)
{
this.self = self;
Info = info;
Class = string.IsNullOrEmpty(info.Class) ? self.Info.Name : info.Class;
}
IEnumerable<WPos> ActivityTargetPath()
{
if (!self.IsInWorld || self.IsDead)
yield break;
var activity = self.GetCurrentActivity();
if (activity != null)
{
var targets = activity.GetTargets(self);
yield return self.CenterPosition;
foreach (var t in targets.Where(t => t.Type != TargetType.Invalid))
yield return t.CenterPosition;
}
}
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
{
if (!Info.Selectable)
yield break;
yield return new SelectionBoxRenderable(self, Color.White);
yield return new SelectionBarsRenderable(self);
if (self.World.LocalPlayer != null && self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug)
yield return new TargetLineRenderable(ActivityTargetPath(), Color.Green);
}
}
}

View File

@@ -110,6 +110,11 @@ namespace OpenRA.Traits
public interface ISeedableResource { void Seed(Actor self); }
public interface ISelectionDecorationsInfo
{
int[] SelectionBoxBounds { get; }
}
public interface IVoiced
{
string VoiceSet { get; }

View File

@@ -92,7 +92,7 @@ namespace OpenRA.Widgets
{
if (!hasBox && World.Selection.Actors.Any() && !multiClick)
{
if (!(World.ScreenMap.ActorsAt(xy).Where(x => x.HasTrait<Selectable>() && x.Trait<Selectable>().Info.Selectable &&
if (!(World.ScreenMap.ActorsAt(xy).Where(x => x.HasTrait<Selectable>() &&
(x.Owner.IsAlliedWith(World.RenderPlayer) || !World.FogObscures(x))).Any() && !mi.Modifiers.HasModifier(Modifiers.Ctrl) &&
!mi.Modifiers.HasModifier(Modifiers.Alt) && UnitOrderGenerator.InputOverridesSelection(World, xy, mi)))
{
@@ -292,7 +292,7 @@ namespace OpenRA.Widgets
var s = a.TraitOrDefault<Selectable>();
// sc == null means that units, that meet all other criteria, get selected
return s != null && s.Info.Selectable && (selectionClasses == null || selectionClasses.Contains(s.Class));
return s != null && (selectionClasses == null || selectionClasses.Contains(s.Class));
});
}
@@ -303,11 +303,7 @@ namespace OpenRA.Widgets
a = b;
return world.ScreenMap.ActorsInBox(a, b)
.Where(x =>
{
var s = x.TraitOrDefault<Selectable>();
return s != null && s.Info.Selectable && (x.Owner.IsAlliedWith(world.RenderPlayer) || !world.FogObscures(x));
})
.Where(x => x.HasTrait<Selectable>() && (x.Owner.IsAlliedWith(world.RenderPlayer) || !world.FogObscures(x)))
.GroupBy(x => x.GetSelectionPriority())
.OrderByDescending(g => g.Key)
.Select(g => g.AsEnumerable())

View File

@@ -12,22 +12,22 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Graphics
namespace OpenRA.Mods.Common.Graphics
{
public struct SelectionBoxRenderable : IRenderable, IFinalizedRenderable
{
readonly WPos pos;
readonly float scale;
readonly Rectangle bounds;
readonly Rectangle visualBounds;
readonly Color color;
public SelectionBoxRenderable(Actor actor, Color color)
: this(actor.CenterPosition, actor.Bounds, 1f, color) { }
: this(actor.CenterPosition, actor.VisualBounds, 1f, color) { }
public SelectionBoxRenderable(WPos pos, Rectangle bounds, float scale, Color color)
public SelectionBoxRenderable(WPos pos, Rectangle visualBounds, float scale, Color color)
{
this.pos = pos;
this.bounds = bounds;
this.visualBounds = visualBounds;
this.scale = scale;
this.color = color;
}
@@ -40,15 +40,15 @@ namespace OpenRA.Graphics
public IRenderable WithPalette(PaletteReference newPalette) { return this; }
public IRenderable WithZOffset(int newOffset) { return this; }
public IRenderable OffsetBy(WVec vec) { return new SelectionBoxRenderable(pos + vec, bounds, scale, color); }
public IRenderable OffsetBy(WVec vec) { return new SelectionBoxRenderable(pos + vec, visualBounds, scale, color); }
public IRenderable AsDecoration() { return this; }
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr)
{
var screenPos = wr.ScreenPxPosition(pos);
var tl = screenPos + scale * new float2(bounds.Left, bounds.Top);
var br = screenPos + scale * new float2(bounds.Right, bounds.Bottom);
var tl = screenPos + scale * new float2(visualBounds.Left, visualBounds.Top);
var br = screenPos + scale * new float2(visualBounds.Right, visualBounds.Bottom);
var tr = new float2(br.X, tl.Y);
var bl = new float2(tl.X, br.Y);
var u = new float2(4f / wr.Viewport.Zoom, 0);

View File

@@ -171,6 +171,7 @@
<Compile Include="Graphics\BeamRenderable.cs" />
<Compile Include="Graphics\ContrailRenderable.cs" />
<Compile Include="Graphics\RangeCircleRenderable.cs" />
<Compile Include="Graphics\SelectionBoxRenderable.cs" />
<Compile Include="Graphics\SpriteActorPreview.cs" />
<Compile Include="Graphics\TextRenderable.cs" />
<Compile Include="Graphics\VoxelActorPreview.cs" />
@@ -309,6 +310,7 @@
<Compile Include="Traits\Crushable.cs" />
<Compile Include="Traits\CustomBuildTimeValue.cs" />
<Compile Include="Traits\CustomSellValue.cs" />
<Compile Include="Traits\CustomSelectionSize.cs" />
<Compile Include="Traits\Demolishable.cs" />
<Compile Include="Traits\DetectCloaked.cs" />
<Compile Include="Traits\EjectOnDeath.cs" />
@@ -438,6 +440,7 @@
<Compile Include="Traits\RepairsBridges.cs" />
<Compile Include="Traits\SeedsResource.cs" />
<Compile Include="Traits\StoresResources.cs" />
<Compile Include="Traits\Render\SelectionDecorations.cs" />
<Compile Include="Traits\SelfHealing.cs" />
<Compile Include="Traits\Sellable.cs" />
<Compile Include="Traits\ShakeOnDeath.cs" />

View File

@@ -0,0 +1,36 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Special case trait for unselectable actors that need to define targetable area bounds",
"for special cases like C4, engineer repair and tooltips.",
"Examples: bridge huts and crates.")]
public class CustomSelectionSizeInfo : ITraitInfo
{
public readonly int[] CustomBounds = null;
public object Create(ActorInitializer init) { return new CustomSelectionSize(this); }
}
public class CustomSelectionSize : IAutoSelectionSize
{
readonly CustomSelectionSizeInfo info;
public CustomSelectionSize(CustomSelectionSizeInfo info) { this.info = info; }
public int2 SelectionSize(Actor self)
{
return new int2(info.CustomBounds[0], info.CustomBounds[1]);
}
}
}

View File

@@ -9,16 +9,33 @@
#endregion
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Traits;
namespace OpenRA.Traits
namespace OpenRA.Mods.Common.Traits
{
public class SelectionDecorationsInfo : ITraitInfo
public class SelectionDecorationsInfo : ITraitInfo, ISelectionDecorationsInfo
{
public readonly string Palette = "chrome";
[Desc("Visual bounds for selection box. If null, it uses AutoSelectionSize.",
"The first two values define the bounds' size, the optional third and fourth",
"values specify the position relative to the actors' center. Defaults to selectable bounds.")]
public readonly int[] VisualBounds = null;
[Desc("Health bar, production progress bar etc.")]
public readonly bool RenderSelectionBars = true;
public readonly bool RenderSelectionBox = true;
public readonly Color SelectionBoxColor = Color.White;
public object Create(ActorInitializer init) { return new SelectionDecorations(init.Self, this); }
public int[] SelectionBoxBounds { get { return VisualBounds; } }
}
public class SelectionDecorations : IPostRenderSelection
@@ -27,7 +44,7 @@ namespace OpenRA.Traits
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 SelectionDecorationsInfo Info;
public readonly SelectionDecorationsInfo Info;
readonly Actor self;
public SelectionDecorations(Actor self, SelectionDecorationsInfo info)
@@ -36,12 +53,37 @@ namespace OpenRA.Traits
Info = info;
}
IEnumerable<WPos> ActivityTargetPath()
{
if (!self.IsInWorld || self.IsDead)
yield break;
var activity = self.GetCurrentActivity();
if (activity != null)
{
var targets = activity.GetTargets(self);
yield return self.CenterPosition;
foreach (var t in targets.Where(t => t.Type != TargetType.Invalid))
yield return t.CenterPosition;
}
}
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
{
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer) || self.World.FogObscures(self))
yield break;
var b = self.Bounds;
if (Info.RenderSelectionBox)
yield return new SelectionBoxRenderable(self, Info.SelectionBoxColor);
if (Info.RenderSelectionBars)
yield return new SelectionBarsRenderable(self);
if (self.World.LocalPlayer != null && self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug)
yield return new TargetLineRenderable(ActivityTargetPath(), Color.Green);
var b = self.VisualBounds;
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));
@@ -85,7 +127,7 @@ namespace OpenRA.Traits
var pipxyBase = basePosition + new int2(1 - pipSize.X / 2, -(3 + pipSize.Y / 2));
var pipxyOffset = new int2(0, 0);
var pal = wr.Palette(Info.Palette);
var width = self.Bounds.Width;
var width = self.VisualBounds.Width;
foreach (var pips in pipSources)
{

View File

@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits

View File

@@ -1152,6 +1152,29 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
// 'Selectable' boolean was removed from selectable trait.
if (engineVersion < 20150619)
{
if (depth == 1 && node.Value.Nodes.Exists(n => n.Key == "Selectable"))
{
var selectable = node.Value.Nodes.FirstOrDefault(n => n.Key == "Selectable");
if (node.Key == "Selectable" && selectable.Value.Value == "false")
node.Key = "SelectableRemoveMe";
// To cover rare cases where the boolean was 'true'
if (node.Key == "Selectable" && selectable.Value.Value == "true")
node.Value.Nodes.Remove(selectable);
}
if (depth == 0 && node.Value.Nodes.Exists(n => n.Key == "SelectableRemoveMe"))
node.Value.Nodes.RemoveAll(n => n.Key == "SelectableRemoveMe");
Console.WriteLine("The 'Selectable' boolean has been removed from the Selectable trait.");
Console.WriteLine("If you just want to disable an inherited Selectable trait, use -Selectable instead.");
Console.WriteLine("For special cases like bridge huts, which need bounds to be targetable by C4 and engineers,");
Console.WriteLine("give them the CustomSelectionSize trait with CustomBounds.");
Console.WriteLine("See RA and C&C bridge huts or crates for reference.");
}
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}

View File

@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.RA.Activities;

View File

@@ -545,8 +545,7 @@ Rules:
ShowOwnerRow: false
TRAN:
RejectsOrders:
Selectable:
Selectable: false
-Selectable:
RevealsShroud:
Range: 5c0

View File

@@ -9,8 +9,6 @@ TRAN:
BuildPaletteOrder: 10
Prerequisites: hpad
Queue: Aircraft.GDI, Aircraft.Nod
Selectable:
Bounds: 41,41
Helicopter:
LandWhenIdle: true
ROT: 5
@@ -42,6 +40,8 @@ TRAN:
EmptyWeapon: HeliExplode
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 41,41
HELI:
Inherits: ^Helicopter
@@ -54,8 +54,6 @@ HELI:
BuildPaletteOrder: 20
Prerequisites: hpad, anyhq, ~techlevel.medium
Queue: Aircraft.Nod
Selectable:
Bounds: 30,24
Helicopter:
RearmBuildings: hpad
ROT: 4
@@ -95,6 +93,8 @@ HELI:
EmptyWeapon: HeliExplode
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 30,24
ORCA:
Inherits: ^Helicopter
@@ -107,8 +107,6 @@ ORCA:
BuildPaletteOrder: 20
Prerequisites: hpad, anyhq, ~techlevel.medium
Queue: Aircraft.GDI
Selectable:
Bounds: 30,24
Helicopter:
RearmBuildings: hpad
ROT: 4
@@ -144,6 +142,8 @@ ORCA:
AutoSelectionSize:
WithMoveAnimation:
MoveSequence: move
SelectionDecorations:
VisualBounds: 30,24
C17:
ParaDrop:

View File

@@ -370,10 +370,8 @@ BRIDGEHUT:
Building:
Footprint: __ __
Dimensions: 2,2
Selectable:
Selectable: false
Bounds: 48,48
Priority: 2
CustomSelectionSize:
CustomBounds: 48,48
BridgeHut:
TargetableBuilding:
TargetTypes: BridgeHut, C4
@@ -438,7 +436,10 @@ VICE:
Tiberium: 100
BlueTiberium: 100
Beach: 60
SelectionDecorations:
VisualBounds: 24,24
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Ground
AutoTarget:

View File

@@ -34,6 +34,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Ground, Vehicle
Repairable:
@@ -81,6 +82,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Ground, Vehicle
Repairable:
@@ -125,6 +127,7 @@
GroundedTargetTypes: Ground
SelectionDecorations:
Selectable:
Bounds: 24,24
Helicopter:
RepairBuildings: hpad
RearmBuildings:
@@ -248,7 +251,6 @@
-AutoTarget:
-TakeCover:
AppearsOnRadar:
SelectionDecorations:
Valued:
Cost: 70
Tooltip:
@@ -298,7 +300,9 @@
Tiberium: 70
BlueTiberium: 70
Beach: 80
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Ground, Infantry
HiddenUnderFog:
@@ -329,6 +333,7 @@
UseLocation: yes
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Air
HiddenUnderFog:
@@ -661,7 +666,6 @@
Image: crate
WithCrateBody:
XmasImages: xcratea, xcrateb, xcratec, xcrated
Selectable:
Selectable: false
Bounds: 15,15,-1,-1
CustomSelectionSize:
CustomBounds: 16,16

View File

@@ -225,8 +225,6 @@ STEG:
WithDeathAnimation:
DeathSequencePalette: terrain
DeathPaletteIsPlayerPalette: false
Selectable:
Bounds: 24,20,0,4
TREX:
Inherits: ^DINO
@@ -236,7 +234,9 @@ TREX:
Armament:
Weapon: teeth
Selectable:
Bounds: 52,38
Bounds: 48,36,2,1
SelectionDecorations:
VisualBounds: 52,38
TRIC:
Inherits: ^DINO
@@ -245,8 +245,8 @@ TRIC:
Description: Quadruped with large bony frill and three horns
Armament:
Weapon: horn
Selectable:
Bounds: 34,24,0,2
SelectionDecorations:
VisualBounds: 34,24,0,2
RAPT:
Inherits: ^DINO
@@ -255,6 +255,4 @@ RAPT:
Description: Bipedal with enlarged sickle-shaped claw on each hindfoot
Armament:
Weapon: claw
Selectable:
Bounds: 20,20

View File

@@ -29,6 +29,8 @@ BOAT:
AllowMovement: false
WithSmoke:
RejectsOrders:
SelectionDecorations:
VisualBounds: 42,24
LST:
Inherits: ^Ship

View File

@@ -108,7 +108,7 @@ NUKE:
Prerequisites: fact
Queue: Building.GDI, Building.Nod
Building:
Footprint: x_ xx
Footprint: xx xx
Dimensions: 2,2
Health:
HP: 500
@@ -133,7 +133,7 @@ NUK2:
Prerequisites: anyhq, ~techlevel.medium
Queue: Building.GDI, Building.Nod
Building:
Footprint: x_ xx
Footprint: xx xx
Dimensions: 2,2
Health:
HP: 700
@@ -167,7 +167,7 @@ PROC:
DockAngle: 112
DockOffset: 0,2
IsDragRequired: True
DragOffset: -640,341,0
DragOffset: -554,512,0
DragLength: 12
TickRate: 15
StoresResources:
@@ -175,7 +175,7 @@ PROC:
PipCount: 10
Capacity: 2000
Selectable:
Bounds: 73,72
Bounds: 72,56,0,12
CustomSellValue:
Value: 500
FreeActor:
@@ -187,6 +187,8 @@ PROC:
Power:
Amount: -50
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 73,72
SILO:
Inherits: ^BaseBuilding
@@ -214,14 +216,14 @@ SILO:
PipCount: 10
PipColor: Green
Capacity: 2000
Selectable:
Bounds: 49,30
-RenderBuilding:
-EmitInfantryOnSell:
Power:
Amount: -10
MustBeDestroyed:
RequiredForShortGame: false
SelectionDecorations:
VisualBounds: 49,30
PYLE:
Inherits: ^BaseBuilding
@@ -301,6 +303,8 @@ HAND:
Power:
Amount: -20
ProvidesPrerequisite@buildingname:
Selectable:
Bounds: 48,48,0,10
AFLD:
Inherits: ^BaseBuilding
@@ -361,6 +365,8 @@ WEAP:
Building:
Footprint: ___ xxx ===
Dimensions: 3,3
Selectable:
Bounds: 72,48,0,12
Health:
HP: 1000
RevealsShroud:
@@ -449,6 +455,8 @@ HQ:
Building:
Footprint: x_ xx
Dimensions: 2,2
Selectable:
Bounds: 48,36,0,12
RequiresPower:
CanPowerDown:
DisabledOverlay:
@@ -499,6 +507,10 @@ FIX:
Building:
Footprint: _x_ xxx _x_
Dimensions: 3,3
Selectable:
Bounds: 64,34,0,3
SelectionDecorations:
VisualBounds: 72,48
Health:
HP: 400
RevealsShroud:
@@ -529,6 +541,8 @@ EYE:
Building:
Footprint: x_ xx
Dimensions: 2,2
Selectable:
Bounds: 48,36,0,12
RequiresPower:
CanPowerDown:
DisabledOverlay:
@@ -578,6 +592,8 @@ TMPL:
Building:
Footprint: ___ xxx xxx
Dimensions: 3,3
Selectable:
Bounds: 72,48,0,16
RequiresPower:
CanPowerDown:
DisabledOverlay:
@@ -713,6 +729,8 @@ OBLI:
Building:
Footprint: _ x
Dimensions: 1,2
Selectable:
Bounds: 24,24,0,12
RequiresPower:
DisabledOverlay:
-GivesBuildableArea:
@@ -802,6 +820,8 @@ ATWR:
Building:
Footprint: _ x
Dimensions: 1,2
Selectable:
Bounds: 24,24,0,12
RequiresPower:
DisabledOverlay:
-GivesBuildableArea:

View File

@@ -39,6 +39,8 @@ MCV:
EmptyWeapon: UnitExplodeSmall
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 36,36
HARV:
Inherits: ^Tank
@@ -55,7 +57,6 @@ HARV:
InitialActivity: FindResources
Selectable:
Priority: 7
Bounds: 36,36
Harvester:
Resources: Tiberium, BlueTiberium
PipCount: 7
@@ -78,6 +79,8 @@ HARV:
RenderHarvester:
Explodes:
Weapon: TiberiumExplosion
SelectionDecorations:
VisualBounds: 36,36
APC:
Inherits: ^Tank
@@ -391,10 +394,10 @@ MTNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 28,28
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 28,28
HTNK:
Inherits: ^Tank
@@ -446,10 +449,10 @@ HTNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 34,34,0,-3
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 34,34,0,-3
MSAM:
Inherits: ^Tank

View File

@@ -49,23 +49,27 @@ proc:
idle:
Length: 6
Tick: 120
Offset: 2,4
damaged-idle:
Start: 30
Length: 6
Tick: 120
Offset: 2,4
dead:
Start: 60
Tick: 800
Offset: 2,4
make: procmake
Length: *
Tick: 80
Offset: 2,4
resources: proctwr
Length: 6
Offset: -32,-21
Offset: -30,-17
damaged-resources: proctwr
Start: 6
Length: 6
Offset: -32,-21
Offset: -30,-17
bib: bib2
UseTilesetExtension: true
Length: *

View File

@@ -145,12 +145,12 @@ orni:
RearmBuildings:
WithFacingSpriteBody:
WithShadow:
Selectable:
Bounds: 38,32,0,0
LeavesHusk:
HuskActor: orni.husk
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 38,32,0,0
orni.bomber:
AttackBomber:

View File

@@ -35,6 +35,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 32,32
TargetableUnit:
TargetTypes: Ground, C4
Passenger:
@@ -90,6 +91,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 32,32
TargetableUnit:
TargetTypes: Ground, C4
Passenger:
@@ -271,6 +273,7 @@
UseLocation: yes
SelectionDecorations:
Selectable:
Bounds: 32,32
TargetableAircraft:
TargetTypes: Air
GroundedTargetTypes: Ground

View File

@@ -109,10 +109,9 @@ crate:
RenderSprites:
Palette: effect
WithCrateBody:
Selectable:
Selectable: false
Bounds: 15,15,-1,-1
Passenger:
CustomSelectionSize:
CustomBounds: 16,16
mpspawn:
Immobile:

View File

@@ -76,6 +76,8 @@ conyard:
WithBuildingPlacedOverlay:
Palette: d2k
PrimaryBuilding:
SelectionDecorations:
VisualBounds: 96,64
power:
Inherits: ^Building
@@ -110,6 +112,8 @@ power:
Amount: 100
ScalePowerWithHealth:
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 64,64
barracks:
Inherits: ^Building
@@ -125,7 +129,7 @@ barracks:
Name: Barracks
Description: Trains infantry
Building:
Footprint: =x xx
Footprint: xx xx
Dimensions: 2,2
Bib:
Health:
@@ -166,6 +170,8 @@ barracks:
atreides: barracks.atreides
ordos: barracks.ordos
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 64,64
refinery:
Inherits: ^Building
@@ -219,6 +225,8 @@ refinery:
WithIdleOverlay@TOP:
Sequence: idle-top
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,64
silo:
Inherits: ^Building
@@ -257,6 +265,8 @@ silo:
Amount: -5
MustBeDestroyed:
RequiredForShortGame: false
SelectionDecorations:
VisualBounds: 32,32
light:
Inherits: ^Building
@@ -314,6 +324,8 @@ light:
Sequence: idle-top
Power:
Amount: -20
SelectionDecorations:
VisualBounds: 96,64
heavy:
Inherits: ^Building
@@ -322,7 +334,7 @@ heavy:
Queue: Building
BuildPaletteOrder: 100
Selectable:
Bounds: 96,96
Bounds: 96,68,0,12
Valued:
Cost: 2000
Tooltip:
@@ -372,6 +384,8 @@ heavy:
Power:
Amount: -30
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,96
radar:
Inherits: ^Building
@@ -414,6 +428,8 @@ radar:
Power:
Amount: -40
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,64
starport:
Inherits: ^Building
@@ -473,6 +489,8 @@ starport:
Power:
Amount: -40
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,64
wall:
Buildable:
@@ -540,7 +558,7 @@ guntower:
Sellable:
SellSounds: CHUNG.WAV
Selectable:
Bounds: 32,40,0,-8
Bounds: 32,32
Priority: 3
-GivesBuildableArea:
Health:
@@ -576,6 +594,8 @@ guntower:
Amount: -20
MustBeDestroyed:
RequiredForShortGame: false
SelectionDecorations:
VisualBounds: 32,40,0,-8
rockettower:
Inherits: ^Building
@@ -594,7 +614,7 @@ rockettower:
Sellable:
SellSounds: CHUNG.WAV
Selectable:
Bounds: 32,40,0,-8
Bounds: 32,32
Priority: 3
-GivesBuildableArea:
Health:
@@ -631,6 +651,8 @@ rockettower:
Amount: -30
MustBeDestroyed:
RequiredForShortGame: false
SelectionDecorations:
VisualBounds: 32,40,0,-8
repair:
Inherits: ^Building
@@ -652,6 +674,10 @@ repair:
Type: Concrete
RevealsShroud:
Range: 5c0
Selectable:
Bounds: 96,64
SelectionDecorations:
VisualBounds: 96,80
Reservable:
RepairsUnits:
Interval: 15
@@ -677,7 +703,7 @@ hightech:
Queue: Building
BuildPaletteOrder: 110
Selectable:
Bounds: 96,96
Bounds: 96,68,0,12
Valued:
Cost: 750
Tooltip:
@@ -722,6 +748,8 @@ hightech:
Sequence: production-welding
Power:
Amount: -40
SelectionDecorations:
VisualBounds: 96,96
research:
Inherits: ^Building
@@ -730,7 +758,7 @@ research:
Prerequisites: radar, heavy, upgrade.heavy, ~techlevel.high
BuildPaletteOrder: 140
Selectable:
Bounds: 96,64
Bounds: 96,64,0,16
Valued:
Cost: 1500
Tooltip:
@@ -767,6 +795,8 @@ research:
Power:
Amount: -40
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,80
palace:
Inherits: ^Building
@@ -828,6 +858,8 @@ palace:
RequiresPower:
SupportPowerChargeBar:
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96,96
conyard.atreides:
Inherits: conyard

View File

@@ -38,6 +38,8 @@ mcv:
HuskActor: mcv.husk
AttractsWorms:
Intensity: 700
SelectionDecorations:
VisualBounds: 42,42
harvester:
Inherits: ^Vehicle
@@ -85,6 +87,8 @@ harvester:
Palette: effect50alpha
AttractsWorms:
Intensity: 700
SelectionDecorations:
VisualBounds: 42,42
trike:
Inherits: ^Vehicle
@@ -99,7 +103,6 @@ trike:
Description: Fast Scout\n Strong vs Infantry\n Weak vs Tanks, Aircraft
Selectable:
Class: trike
Bounds: 24,24
Health:
HP: 100
Armor:
@@ -155,7 +158,6 @@ quad:
EmptyWeapon: UnitExplodeTiny
Selectable:
Class: quad
Bounds: 24,24
AttractsWorms:
Intensity: 470
@@ -200,7 +202,6 @@ siegetank:
InitialStance: Defend
Selectable:
Class: siegetank
Bounds: 30,30
LeavesHusk:
HuskActor: siegetank.husk
AttractsWorms:
@@ -241,7 +242,6 @@ missiletank:
EmptyWeapon: UnitExplodeScale
Selectable:
Class: missiletank
Bounds: 30,30
LeavesHusk:
HuskActor: missiletank.husk
AttractsWorms:
@@ -258,8 +258,6 @@ sonictank:
Tooltip:
Name: Sonic Tank
Description: Fires sonic shocks\n Strong vs Infantry, Vehicles\n Weak vs Artillery, Aircraft
Selectable:
Bounds: 30,30
Health:
HP: 130
Armor:
@@ -315,14 +313,14 @@ devast:
Explodes:
Weapon: UnitExplodeScale
EmptyWeapon: UnitExplodeScale
Selectable:
Bounds: 44,38,0,0
LeavesHusk:
HuskActor: devast.husk
AttractsWorms:
Intensity: 700
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 44,38,0,0
raider:
Inherits: ^Vehicle
@@ -335,8 +333,6 @@ raider:
Tooltip:
Name: Raider Trike
Description: Improved Scout\n Strong vs Infantry, Light Vehicles
Selectable:
Bounds: 24,24
Health:
HP: 110
Armor:
@@ -408,8 +404,6 @@ deviatortank:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 30,30
LeavesHusk:
HuskActor: deviatortank.husk
AttractsWorms:
@@ -456,7 +450,6 @@ deviatortank:
EmptyWeapon: UnitExplodeSmall
Selectable:
Class: combat
Bounds: 30,30
AttractsWorms:
Intensity: 520
AutoSelectionSize:

View File

@@ -114,7 +114,9 @@ MIG:
Ammo: 8
ReturnOnIdle:
Selectable:
Bounds: 40,29,0,1
Bounds: 36,28,0,2
SelectionDecorations:
VisualBounds: 40,29,0,1
Contrail@1:
Offset: -598,-683,0
Contrail@2:
@@ -173,8 +175,8 @@ YAK:
PipCount: 6
ReloadTicks: 11
ReturnOnIdle:
Selectable:
Bounds: 30,28,0,2
SelectionDecorations:
VisualBounds: 30,28,0,2
WithMuzzleFlash:
Contrail:
Offset: -853,0,0
@@ -269,8 +271,8 @@ HELI:
Offset: 0,0,85
AmmoPool:
Ammo: 8
Selectable:
Bounds: 36,28,0,0
SelectionDecorations:
VisualBounds: 36,28,0,0
LeavesHusk:
HuskActor: HELI.Husk
SmokeTrailWhenDamaged:
@@ -322,8 +324,8 @@ HIND:
Ammo: 24
PipCount: 6
ReloadTicks: 8
Selectable:
Bounds: 38,32,0,0
SelectionDecorations:
VisualBounds: 38,32,0,0
WithMuzzleFlash:
LeavesHusk:
HuskActor: HIND.Husk

View File

@@ -3,7 +3,6 @@ C1:
C2:
Inherits: ^CivInfantry
Selectable:
Voiced:
VoiceSet: CivilianFemaleVoice
@@ -12,7 +11,6 @@ C3:
C4:
Inherits: ^CivInfantry
Selectable:
WithInfantryBody:
RenderSprites:
Image: C2
@@ -27,7 +25,6 @@ C5:
C6:
Inherits: ^CivInfantry
Selectable:
WithInfantryBody:
RenderSprites:
Image: C2
@@ -42,7 +39,6 @@ C7:
C8:
Inherits: ^CivInfantry
Selectable:
WithInfantryBody:
RenderSprites:
Image: C2
@@ -57,7 +53,6 @@ C9:
C10:
Inherits: ^CivInfantry
Selectable:
WithInfantryBody:
RenderSprites:
Image: C2
@@ -495,10 +490,8 @@ BRIDGEHUT:
Building:
Footprint: __ __
Dimensions: 2,2
Selectable:
Selectable: false
Bounds: 48,48
Priority: 2
CustomSelectionSize:
CustomBounds: 48,48
BridgeHut:
TargetableBuilding:
TargetTypes: BridgeHut, C4
@@ -507,10 +500,8 @@ BRIDGEHUT.small:
Building:
Footprint: _
Dimensions: 1,1
Selectable:
Selectable: false
Bounds: 24,24
Priority: 2
CustomSelectionSize:
CustomBounds: 24,24
BridgeHut:
TargetableBuilding:
TargetTypes: BridgeHut, C4
@@ -639,22 +630,26 @@ LHUS:
EditorTilesetFilter:
RequireTilesets: TEMPERAT
Selectable:
Bounds: 24,48
Bounds: 24,24,0,16
SelectionDecorations:
VisualBounds: 24,48
Tooltip:
Name: Lighthouse
Building:
Footprint: _ x
Dimensions: 1,2
Footprint: x
Dimensions: 1,1
WINDMILL:
Inherits: ^CivBuilding
EditorTilesetFilter:
RequireTilesets: TEMPERAT
Selectable:
Bounds: 36,36
Bounds: 24,24,0,8
SelectionDecorations:
VisualBounds: 36,36
Tooltip:
Name: Windmill
Building:
Footprint: _ x
Dimensions: 1,2
Footprint: x
Dimensions: 1,1

View File

@@ -58,6 +58,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 24, 24
TargetableUnit:
TargetTypes: Ground, Repair, Vehicle
Repairable:
@@ -112,6 +113,7 @@
ROT: 5
SelectionDecorations:
Selectable:
Bounds: 24, 24
TargetableUnit:
TargetTypes: Ground, C4, Repair, Tank
Repairable:
@@ -180,7 +182,7 @@
Beach: 80
SelectionDecorations:
Selectable:
Bounds: 12,18,0,-6
Bounds: 12,18,0,-8
TargetableUnit:
TargetTypes: Ground, Infantry, Disguise
TakeCover:
@@ -257,6 +259,7 @@
Water: 100
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableUnit:
TargetTypes: Ground, Water, Repair
HiddenUnderFog:
@@ -289,6 +292,7 @@
UseLocation: true
SelectionDecorations:
Selectable:
Bounds: 24,24
TargetableAircraft:
TargetTypes: Air
GroundedTargetTypes: Ground, Repair
@@ -660,11 +664,10 @@
Image: scrate
WithCrateBody:
XmasImages: xcratea, xcrateb, xcratec, xcrated
Selectable:
Selectable: false
Bounds: 15,15,-1,-1
Parachutable:
KilledOnImpassableTerrain: false
ParachuteSequence: parach
Passenger:
CustomSelectionSize:
CustomBounds: 16,16

View File

@@ -13,6 +13,8 @@ DOG:
GenericName: Dog
Selectable:
Bounds: 12,17,-1,-4
SelectionDecorations:
VisualBounds: 12,17,-1,-4
Health:
HP: 12
Mobile:
@@ -561,7 +563,9 @@ Ant:
BuildPaletteOrder: 1954
Prerequisites: ~bio
Selectable:
Bounds: 30,30,0,-2
Bounds: 24,24,0,-5
SelectionDecorations:
VisualBounds: 30,30,0,-2
Health:
HP: 750
Radius: 469

View File

@@ -217,9 +217,6 @@ FLARE:
Tooltip:
Name: Flare
ShowOwnerRow: false
Selectable:
Selectable: false
Bounds: 25,25
BodyOrientation:
MINE:

View File

@@ -35,8 +35,8 @@ SS:
LocalOffset: 0,-171,0, 0,171,0
FireDelay: 2
AttackFrontal:
Selectable:
Bounds: 38,38
SelectionDecorations:
VisualBounds: 38,38
Chronoshiftable:
RepairableNear:
AutoTarget:
@@ -89,8 +89,8 @@ MSUB:
LocalOffset: 0,-171,0, 0,171,0
FireDelay: 2
AttackFrontal:
Selectable:
Bounds: 44,44
SelectionDecorations:
VisualBounds: 44,44
Chronoshiftable:
RepairableNear:
AutoTarget:
@@ -145,6 +145,8 @@ DD:
AttackTurreted:
Selectable:
Bounds: 38,38
SelectionDecorations:
VisualBounds: 38,38
WithFacingSpriteBody:
WithTurret:
AutoTarget:
@@ -208,6 +210,8 @@ CA:
WithMuzzleFlash:
Selectable:
Bounds: 44,44
SelectionDecorations:
VisualBounds: 44,44
WithFacingSpriteBody:
WithTurret@PRIMARY:
Turret: primary
@@ -242,6 +246,8 @@ LST:
Speed: 113
RevealsShroud:
Range: 6c0
SelectionDecorations:
VisualBounds: 36,36
RenderLandingCraft:
OpenTerrainTypes: Clear, Rough, Road, Ore, Gems, Beach
Cargo:
@@ -290,6 +296,8 @@ PT:
WithMuzzleFlash:
Selectable:
Bounds: 32,32
SelectionDecorations:
VisualBounds: 32,32
WithFacingSpriteBody:
WithTurret:
AutoTarget:

View File

@@ -61,6 +61,10 @@ GAP:
Building:
Footprint: _ x
Dimensions: 1,2
Selectable:
Bounds: 24,28,0,12
SelectionDecorations:
VisualBounds: 24,40,0,0
RequiresPower:
CanPowerDown:
DisabledOverlay:
@@ -269,7 +273,9 @@ IRON:
CanPowerDown:
DisabledOverlay:
Selectable:
Bounds: 50,50,0,-12
Bounds: 48,28,0,2
SelectionDecorations:
VisualBounds: 50,50,0,-12
Health:
HP: 1000
Armor:
@@ -380,6 +386,10 @@ TSLA:
Footprint: _ x
Dimensions: 1,2
RequiresPower:
Selectable:
Bounds: 24,24,0,16
SelectionDecorations:
VisualBounds: 24,36,0,4
CanPowerDown:
DisabledOverlay:
-GivesBuildableArea:
@@ -424,6 +434,10 @@ AGUN:
Building:
Footprint: _ x
Dimensions: 1,2
Selectable:
Bounds: 24,28,0,16
SelectionDecorations:
VisualBounds: 24,36,0,12
RequiresPower:
CanPowerDown:
DisabledOverlay:
@@ -929,6 +943,10 @@ PROC:
Building:
Footprint: _x_ xxx x==
Dimensions: 3,3
Selectable:
Bounds: 72,50,0,12
SelectionDecorations:
VisualBounds: 72,70,0,-2
TargetableBuilding:
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
Health:
@@ -1220,6 +1238,10 @@ APWR:
Building:
Footprint: ___ xxx xxx
Dimensions: 3,3
Selectable:
Bounds: 72,48,0,12
SelectionDecorations:
VisualBounds: 72,64,0,-2
Health:
HP: 700
Armor:
@@ -1447,6 +1469,10 @@ FIX:
Building:
Footprint: _x_ xxx _x_
Dimensions: 3,3
Selectable:
Bounds: 68,34,0,3
SelectionDecorations:
VisualBounds: 72,48
Health:
HP: 800
Armor:

View File

@@ -20,6 +20,8 @@ V2RL:
Armament:
Weapon: SCUD
AttackFrontal:
SelectionDecorations:
VisualBounds: 28,28
RenderSprites:
AutoTarget:
Explodes:
@@ -111,10 +113,10 @@ V2RL:
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
HuskActor: 2TNK.Husk
Selectable:
Bounds: 30,30
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 28,28
3TNK:
Inherits: ^Tank
@@ -154,10 +156,10 @@ V2RL:
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
HuskActor: 3TNK.Husk
Selectable:
Bounds: 30,30
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 28,28
4TNK:
Inherits: ^Tank
@@ -211,10 +213,10 @@ V2RL:
Ticks: 3
HealIfBelow: 50%
DamageCooldown: 150
Selectable:
Bounds: 44,38,0,-4
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 44,38,0,-4
ARTY:
Inherits: ^Tank
@@ -265,7 +267,8 @@ HARV:
Description: Collects Ore and Gems for processing.\n Unarmed
Selectable:
Priority: 7
Bounds: 42,42
SelectionDecorations:
VisualBounds: 42,42
Harvester:
Capacity: 20
Resources: Ore,Gems
@@ -309,7 +312,8 @@ MCV:
Description: Deploys into another Construction Yard.\n Unarmed
Selectable:
Priority: 4
Bounds: 42,42
SelectionDecorations:
VisualBounds: 42,42
Health:
HP: 600
Armor:
@@ -618,8 +622,8 @@ TTNK:
WithFacingSpriteBody:
WithIdleOverlay@SPINNER:
Sequence: spinner
Selectable:
Bounds: 28,28,0,0
SelectionDecorations:
VisualBounds: 30,30
AutoTarget:
Explodes:
Weapon: UnitExplodeSmall
@@ -663,10 +667,10 @@ FTRK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 28,28,0,0
AutoSelectionSize:
RenderSprites:
SelectionDecorations:
VisualBounds: 28,28
DTRK:
Inherits: ^Vehicle
@@ -712,8 +716,8 @@ CTNK:
Tooltip:
Name: Chrono Tank
Description: Chrono Tank, teleports to areas within range.\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft\n Special ability: Can teleport
Selectable:
Bounds: 28,28
SelectionDecorations:
VisualBounds: 30,30
Health:
HP: 400
Armor:
@@ -761,9 +765,9 @@ QTNK:
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 6c0
Selectable:
Bounds: 44,38,0,-4
WithFacingSpriteBody:
SelectionDecorations:
VisualBounds: 44,38,0,-4
Explodes:
Weapon: UnitExplodeSmall
MadTank:
@@ -784,8 +788,8 @@ STNK:
Tooltip:
Name: Phase Transport
Description: Lightly armored infantry transport\nwhich can cloak. Can detect cloaked units.\n Strong vs Light armor\n Weak vs Infantry, Tanks, Aircraft
Selectable:
Bounds: 28,28
SelectionDecorations:
VisualBounds: 26,26
Health:
HP: 300
Armor:

View File

@@ -806,6 +806,8 @@ snowhut:
Tick: 120
lhus:
Defaults:
Offset: 0,-16
idle:
Length: 16
Tick: 180
@@ -815,6 +817,8 @@ lhus:
Length: 8
windmill:
Defaults:
Offset: 0,-16
idle:
Length: 8
Tick: 80

View File

@@ -95,6 +95,8 @@ ORCA:
RenderVoxels:
WithVoxelBody:
Hovers:
SelectionDecorations:
VisualBounds: 30,24
ORCAB:
Inherits: ^Plane
@@ -136,6 +138,8 @@ ORCAB:
RenderVoxels:
WithVoxelBody:
Hovers:
SelectionDecorations:
VisualBounds: 30,24
ORCATRAN:
Inherits: ^Helicopter
@@ -230,6 +234,8 @@ SCRIN:
RenderSprites:
RenderVoxels:
WithVoxelBody:
SelectionDecorations:
VisualBounds: 30,24
APACHE:
Inherits: ^Helicopter
@@ -270,3 +276,6 @@ APACHE:
RenderVoxels:
WithVoxelBody:
Hovers:
SelectionDecorations:
VisualBounds: 30,24

View File

@@ -1302,7 +1302,7 @@ GASPOT:
Footprint: x
Dimensions: 1, 1
Selectable:
Bounds: 48, 82, 0, -25
Bounds: 48, 30, 0, -4
Power:
Amount: -10
Armor:
@@ -1313,6 +1313,8 @@ GASPOT:
Range: 6c0
WithIdleOverlay@LIGHTS:
Sequence: idle-lights
SelectionDecorations:
VisualBounds: 48, 82, 0, -25
GALITE:
Inherits: ^Building
@@ -1336,10 +1338,12 @@ GALITE:
Sequence: lighting
Palette: alpha
Selectable:
Bounds: 25, 35, 0, -12
Bounds: 24, 24, 0, -4
Buildable:
Queue: Defense
Prerequisites: ~disabled
SelectionDecorations:
VisualBounds: 25, 35, 0, -12
GAICBM:
Inherits: ^Building
@@ -1410,3 +1414,6 @@ UFO:
Type: Heavy
EditorTilesetFilter:
RequireTilesets: TEMPERAT
SelectionDecorations:
VisualBounds: 144, 72, 0, 0

View File

@@ -136,9 +136,8 @@
Palette: terrain
WithCrateBody:
Images: crate
Selectable:
Selectable: false
Bounds: 25,25,-1,-1
CustomSelectionSize:
CustomBounds: 24,24
^Wall:
AppearsOnRadar:
@@ -279,8 +278,6 @@
^CivilianInfantry:
Inherits: ^Infantry
Selectable:
Bounds: 12,17,0,-9
Voiced:
VoiceSet: Civilian
Valued:

View File

@@ -25,7 +25,7 @@ GAPOWR:
WithIdleOverlay@PLUG:
Sequence: idle-plug
Selectable:
Bounds: 90, 84, 0, -12
Bounds: 90, 48, 0, -6
Power:
Amount: 100
InfiltrateForPowerOutage:
@@ -59,6 +59,8 @@ GAPOWR:
UpgradeMinEnabledLevel: 1
Amount: 50
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 90, 84, 0, -12
GAPILE:
Inherits: ^Building
@@ -77,7 +79,7 @@ GAPILE:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 88, 56, 0, -8
Bounds: 88, 48, 0, -8
Health:
HP: 800
Armor:
@@ -102,6 +104,8 @@ GAPILE:
Power:
Amount: -20
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 88, 56, 0, -8
GAWEAP:
Inherits: ^Building
@@ -120,7 +124,7 @@ GAWEAP:
Footprint: xxx= xxx= xxx=
Dimensions: 4,3
Selectable:
Bounds: 154, 100, -2, -12
Bounds: 154, 96, -2, -12
Health:
HP: 1000
RevealsShroud:
@@ -149,6 +153,8 @@ GAWEAP:
Power:
Amount: -30
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 154, 100, -2, -12
GAHPAD:
Inherits: ^Building
@@ -189,6 +195,8 @@ GAHPAD:
Selectable:
Bounds: 88, 66, 0, -5
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 88, 66, 0, -5
GADEPT:
Inherits: ^Building
@@ -205,7 +213,7 @@ GADEPT:
Footprint: =x= xxx =x=
Dimensions: 3,3
Selectable:
Bounds: 98, 68, -6, -6
Bounds: 96, 64, -6, -6
Health:
HP: 1100
RevealsShroud:
@@ -229,6 +237,8 @@ GADEPT:
Power:
Amount: -30
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 98, 68, -6, -6
GARADR:
Inherits: ^Building
@@ -247,7 +257,7 @@ GARADR:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 96, 118, 0, -38
Bounds: 96, 48, 0, -6
Health:
HP: 800
Armor:
@@ -270,6 +280,8 @@ GARADR:
Power:
Amount: -50
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96, 118, 0, -38
GATECH:
Inherits: ^Building
@@ -300,6 +312,8 @@ GATECH:
Power:
Amount: -150
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 110, 60, 3, -4
GAPLUG:
Inherits: ^Building
@@ -309,7 +323,7 @@ GAPLUG:
Name: GDI Upgrade Center
Description: Can be upgraded for additional technology.
Selectable:
Bounds: 115,104,0,-24
Bounds: 115,72,0,-12
Buildable:
BuildPaletteOrder: 100
Prerequisites: proc, gatech
@@ -373,3 +387,6 @@ GAPLUG:
UpgradeMinEnabledLevel: 1
Sequence: idle-ioncannonb
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 115,104,0,-24

View File

@@ -36,7 +36,7 @@ GACTWR:
Prerequisites: gapile, ~structures.gdi
Building:
Selectable:
Bounds: 48, 48, 0, -12
Bounds: 48, 36, 0, -6
DisabledOverlay:
-GivesBuildableArea:
Health:
@@ -128,6 +128,8 @@ GACTWR:
tower.rocket: tower, tower.rocket
tower.sam: tower, tower.sam
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 48, 48, 0, -12
GAVULC:
Inherits: ^BuildingPlug

View File

@@ -115,6 +115,8 @@ SMECH:
MoveSequence: run
Selectable:
Bounds: 20, 32, 0, -8
SelectionDecorations:
VisualBounds: 20, 32, 0, -8
MMCH:
Inherits: ^Tank
@@ -154,6 +156,8 @@ MMCH:
AutoTarget:
Selectable:
Bounds: 30, 42, 0, -8
SelectionDecorations:
VisualBounds: 30, 42, 0, -8
HMEC:
Inherits: ^Tank

View File

@@ -56,6 +56,8 @@ CYBORG:
WithInfantryBody:
IdleSequences: idle1,idle2
WithPermanentInjury:
SelectionDecorations:
VisualBounds: 16,31,0,-10
CYC2:
Inherits: ^Infantry
@@ -92,6 +94,8 @@ CYC2:
WithInfantryBody:
IdleSequences: idle1,idle2
WithPermanentInjury:
SelectionDecorations:
VisualBounds: 16,32,-1,-12
MHIJACK:
Inherits: ^Infantry

View File

@@ -15,7 +15,7 @@ NAPOWR:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 88, 80, 2, -12
Bounds: 88, 48, 2, -6
Health:
HP: 750
Armor:
@@ -32,6 +32,8 @@ NAPOWR:
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
ScalePowerWithHealth:
DisabledOverlay:
SelectionDecorations:
VisualBounds: 88, 80, 2, -12
NAAPWR:
Inherits: ^Building
@@ -50,7 +52,7 @@ NAAPWR:
Footprint: xxx xxx
Dimensions: 2,3
Selectable:
Bounds: 100, 74, 0, -12
Bounds: 100, 54, 0, -4
Health:
HP: 900
Armor:
@@ -67,6 +69,8 @@ NAAPWR:
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
ScalePowerWithHealth:
DisabledOverlay:
SelectionDecorations:
VisualBounds: 100, 74, 0, -12
NAHAND:
Inherits: ^Building
@@ -85,7 +89,7 @@ NAHAND:
Footprint: xxx xxx
Dimensions: 3,2
Selectable:
Bounds: 116, 78, 3, -8
Bounds: 116, 60, 3, -6
Health:
HP: 800
Armor:
@@ -108,6 +112,8 @@ NAHAND:
Power:
Amount: -20
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 116, 78, 3, -8
NAWEAP:
Inherits: ^Building
@@ -126,7 +132,7 @@ NAWEAP:
Footprint: xxx= xxx= xxx=
Dimensions: 4,3
Selectable:
Bounds: 149, 116, -3, -20
Bounds: 149, 80, -3, -10
Health:
HP: 1000
RevealsShroud:
@@ -151,6 +157,8 @@ NAWEAP:
Power:
Amount: -30
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 149, 116, -3, -20
NAHPAD:
Inherits: ^Building
@@ -189,8 +197,10 @@ NAHPAD:
Power:
Amount: -10
Selectable:
Bounds: 78, 54, 0, -8
Bounds: 78, 48, 0, -6
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 78, 54, 0, -8
NARADR:
Inherits: ^Building
@@ -209,7 +219,7 @@ NARADR:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 96, 82, 0, -17
Bounds: 96, 48, 0, -6
Health:
HP: 800
Armor:
@@ -232,6 +242,8 @@ NARADR:
Power:
Amount: -50
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 96, 72, 0, -12
NATECH:
Inherits: ^Building
@@ -250,7 +262,7 @@ NATECH:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 86, 58, 0, -4
Bounds: 86, 48, 0, -4
Health:
HP: 500
Armor:
@@ -262,6 +274,8 @@ NATECH:
Power:
Amount: -150
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 86, 58, 0, -4
NASTLH:
Inherits: ^Building
@@ -301,4 +315,7 @@ NASTLH:
DisableSound: cloak5.aud
AffectsParent: true
Selectable:
Bounds: 106, 60, 8, -15
Bounds: 106, 48, 8, -6
SelectionDecorations:
VisualBounds: 106, 60, 8, -15

View File

@@ -36,7 +36,7 @@ NALASR:
BuildPaletteOrder: 50
Building:
Selectable:
Bounds: 40, 36, -8, -8
Bounds: 40, 30, -8, -6
RequiresPower:
DisabledOverlay:
-GivesBuildableArea:
@@ -62,6 +62,8 @@ NALASR:
AutoTarget:
Power:
Amount: -40
SelectionDecorations:
VisualBounds: 40, 36, -8, -8
NAOBEL:
Inherits: ^Building
@@ -78,7 +80,7 @@ NAOBEL:
Footprint: xx xx
Dimensions: 2,2
Selectable:
Bounds: 88, 74, 0, -14
Bounds: 88, 42, 0, -6
RequiresPower:
DisabledOverlay:
-GivesBuildableArea:
@@ -108,6 +110,8 @@ NAOBEL:
Sequence: idle-lights
Power:
Amount: -150
SelectionDecorations:
VisualBounds: 88, 72, 0, -12
NASAM:
Inherits: ^Building
@@ -122,7 +126,7 @@ NASAM:
BuildPaletteOrder: 60
Building:
Selectable:
Bounds: 40, 36, -3, -8
Bounds: 40, 30, -3, -8
RequiresPower:
DisabledOverlay:
-GivesBuildableArea:
@@ -150,6 +154,8 @@ NASAM:
LocalOffset: 512,0,512
Power:
Amount: -30
SelectionDecorations:
VisualBounds: 40, 36, -3, -8
GATICK:
Inherits: ^Building
@@ -300,3 +306,6 @@ NAMISL:
DisplayRadarPing: True
BeaconPoster:
CameraActor: camera
SelectionDecorations:
VisualBounds: 75,48

View File

@@ -42,13 +42,15 @@ GACNST:
Power:
Amount: 0
Selectable:
Bounds: 144, 80, 0, -12
Bounds: 144, 60, 0, -6
ProvidesPrerequisite@gdi:
Race: gdi
Prerequisite: structures.gdi
ProvidesPrerequisite@nod:
Race: nod
Prerequisite: structures.nod
SelectionDecorations:
VisualBounds: 144, 80, 0, -12
PROC:
Inherits: ^Building
@@ -65,7 +67,7 @@ PROC:
Footprint: xxx= xx== xxx=
Dimensions: 4,3
Selectable:
Bounds: 134, 122, 0, -18
Bounds: 134, 96, 0, -12
Health:
HP: 900
RevealsShroud:
@@ -94,6 +96,8 @@ PROC:
Power:
Amount: -30
ProvidesPrerequisite@buildingname:
SelectionDecorations:
VisualBounds: 134, 122, 0, -18
GASILO:
Inherits: ^Building
@@ -129,6 +133,8 @@ GASILO:
Capacity: 1500
Power:
Amount: -10
SelectionDecorations:
VisualBounds: 80, 48, -5, 0
ANYPOWER:
Tooltip:

View File

@@ -62,3 +62,6 @@ NAPULS:
Sequence: turret
Power:
Amount: -150
SelectionDecorations:
VisualBounds: 78, 54, 0, -12

View File

@@ -33,6 +33,8 @@ MCV:
RenderSprites:
RenderVoxels:
WithVoxelBody:
SelectionDecorations:
VisualBounds: 42,42
HARV:
Inherits: ^Vehicle
@@ -84,6 +86,8 @@ HARV:
WithHarvestAnimation:
Offset: 384,0,0
Palette: effect
SelectionDecorations:
VisualBounds: 36,36
LPST:
Inherits: ^Vehicle