Compare commits
63 Commits
playtest-2
...
playtest-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd951d8fb0 | ||
|
|
f520b375e4 | ||
|
|
cadf6956a9 | ||
|
|
db317eb226 | ||
|
|
b36ca98a83 | ||
|
|
1b5261e58a | ||
|
|
5654736086 | ||
|
|
3038f15f00 | ||
|
|
187dd5a071 | ||
|
|
740f04801b | ||
|
|
619d433e8b | ||
|
|
4ca87c1e05 | ||
|
|
0b97003d83 | ||
|
|
6ba02da2eb | ||
|
|
4496cffa4a | ||
|
|
c3f1f617e0 | ||
|
|
dbab122594 | ||
|
|
521236398d | ||
|
|
4b7f8c6c82 | ||
|
|
2e60e41764 | ||
|
|
e8f552bf68 | ||
|
|
8743f13caa | ||
|
|
963a8e6ea9 | ||
|
|
c8f1ce0d42 | ||
|
|
13e0e927fe | ||
|
|
d3c130e8ae | ||
|
|
8ff1762eac | ||
|
|
ef418403c5 | ||
|
|
74da4065fc | ||
|
|
b3e4fc807e | ||
|
|
893ee6eb2c | ||
|
|
a5df442499 | ||
|
|
a87df0f81e | ||
|
|
75130c47ff | ||
|
|
fd73556685 | ||
|
|
958cfcd378 | ||
|
|
08be5d3907 | ||
|
|
4adee762d9 | ||
|
|
bf0b139398 | ||
|
|
65fedd1eb1 | ||
|
|
117b229cb6 | ||
|
|
76f52abd3d | ||
|
|
a7212d52fb | ||
|
|
5e0a789dac | ||
|
|
17b4158a56 | ||
|
|
09d9cf7da6 | ||
|
|
63ee481f01 | ||
|
|
818fc9d173 | ||
|
|
fed3b5f565 | ||
|
|
1d2dc1c232 | ||
|
|
722ea75cab | ||
|
|
e81b9e9467 | ||
|
|
509dc09aa6 | ||
|
|
d71c377e93 | ||
|
|
c6baf16fa7 | ||
|
|
0529a16298 | ||
|
|
53adc2bec7 | ||
|
|
e97617d618 | ||
|
|
4d47dd6ad7 | ||
|
|
7ad95ed0b0 | ||
|
|
1d6732f24f | ||
|
|
85931d5f0b | ||
|
|
6f68b4fb3e |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -62,6 +62,7 @@ OpenRA.Launcher.Mac/OpenRA.xcodeproj/*.mode1v3
|
||||
|
||||
# auto-generated documentation
|
||||
DOCUMENTATION.md
|
||||
WEAPONS.md
|
||||
Lua-API.md
|
||||
*.html
|
||||
openra.6
|
||||
@@ -80,3 +81,5 @@ StyleCopViolations.xml
|
||||
|
||||
# Support directory
|
||||
/Support
|
||||
/da/Microsoft.Build.Utilities.v3.5.resources.dll
|
||||
/da
|
||||
|
||||
14
Makefile
14
Makefile
@@ -14,9 +14,6 @@
|
||||
# to check the official mod dlls for StyleCop violations, run:
|
||||
# make check
|
||||
#
|
||||
# to generate documentation aimed at modders, run:
|
||||
# make docs
|
||||
#
|
||||
# to install, run:
|
||||
# make [prefix=/foo] [bindir=/bar/bin] install
|
||||
#
|
||||
@@ -414,7 +411,13 @@ install-linux-mime:
|
||||
|
||||
install-linux-appdata:
|
||||
@$(INSTALL_DIR) "$(DESTDIR)$(datadir)/appdata/"
|
||||
@$(INSTALL_DATA) packaging/linux/openra.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
|
||||
@sed 's/{MOD}/ra/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Red Alert/g' | sed 's/{SCREENSHOT_RA}/ type="default"/g' | sed 's/{SCREENSHOT_CNC}//g' | sed 's/{SCREENSHOT_D2K}//g'> packaging/linux/openra-ra.appdata.xml
|
||||
@$(INSTALL_DATA) packaging/linux/openra-ra.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
|
||||
@sed 's/{MOD}/cnc/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Tiberian Dawn/g' | sed 's/{SCREENSHOT_RA}//g' | sed 's/{SCREENSHOT_CNC}/ type="default"/g' | sed 's/{SCREENSHOT_D2K}//g'> packaging/linux/openra-cnc.appdata.xml
|
||||
@$(INSTALL_DATA) packaging/linux/openra-cnc.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
|
||||
@sed 's/{MOD}/d2k/g' packaging/linux/openra.appdata.xml.in | sed 's/{MOD_NAME}/Dune 2000/g' | sed 's/{SCREENSHOT_RA}//g' | sed 's/{SCREENSHOT_CNC}//g' | sed 's/{SCREENSHOT_D2K}/ type="default"/g'> packaging/linux/openra-d2k.appdata.xml
|
||||
@$(INSTALL_DATA) packaging/linux/openra-d2k.appdata.xml "$(DESTDIR)$(datadir)/appdata/"
|
||||
@-$(RM) packaging/linux/openra-ra.appdata.xml packaging/linux/openra-cnc.appdata.xml packaging/linux/openra-d2k.appdata.xml
|
||||
|
||||
install-man-page: man-page
|
||||
@$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man6/"
|
||||
@@ -495,9 +498,6 @@ help:
|
||||
@echo 'to check the official mods for erroneous yaml files, run:'
|
||||
@echo ' make test'
|
||||
@echo
|
||||
@echo 'to generate documentation aimed at modders, run:'
|
||||
@echo ' make docs'
|
||||
@echo
|
||||
@echo 'to install, run:'
|
||||
@echo ' make [prefix=/foo] [bindir=/bar/bin] install'
|
||||
@echo
|
||||
|
||||
@@ -152,7 +152,6 @@ namespace OpenRA.Activities
|
||||
set { NextActivity = value; }
|
||||
}
|
||||
|
||||
public bool IsIdle { get; protected set; }
|
||||
public bool IsInterruptible { get; protected set; }
|
||||
public bool IsCanceled { get { return State == ActivityState.Canceled; } }
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace OpenRA
|
||||
public IOccupySpace OccupiesSpace { get; private set; }
|
||||
public ITargetable[] Targetables { get; private set; }
|
||||
|
||||
public bool IsIdle { get { return CurrentActivity == null || CurrentActivity.IsIdle; } }
|
||||
public bool IsIdle { get { return CurrentActivity == null; } }
|
||||
public bool IsDead { get { return Disposed || (health != null && health.IsDead); } }
|
||||
|
||||
public CPos Location { get { return OccupiesSpace.TopLeft; } }
|
||||
|
||||
@@ -157,6 +157,8 @@ namespace OpenRA
|
||||
public string Platform = "Default";
|
||||
|
||||
public bool ViewportEdgeScroll = true;
|
||||
public int ViewportEdgeScrollMargin = 5;
|
||||
|
||||
public bool LockMouseWindow = false;
|
||||
public MouseScrollType MiddleMouseScroll = MouseScrollType.Standard;
|
||||
public MouseScrollType RightMouseScroll = MouseScrollType.Disabled;
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
||||
}
|
||||
}
|
||||
|
||||
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick, IPreventsTeleport
|
||||
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick, IPreventsTeleport, IIssueDeployOrder
|
||||
{
|
||||
readonly Actor self;
|
||||
readonly MadTankInfo info;
|
||||
@@ -116,6 +116,11 @@ namespace OpenRA.Mods.Cnc.Traits
|
||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
||||
}
|
||||
|
||||
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
||||
{
|
||||
return new Order("Detonate", self, false);
|
||||
}
|
||||
|
||||
public string VoicePhraseForOrder(Actor self, Order order)
|
||||
{
|
||||
return info.Voice;
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
return NextActivity;
|
||||
|
||||
// TODO: This should fire each weapon at its maximum range
|
||||
if (attackPlane != null && target.IsInRange(self.CenterPosition, attackPlane.Armaments.Select(a => a.Weapon.MinRange).Min()))
|
||||
if (attackPlane != null && target.IsInRange(self.CenterPosition, attackPlane.Armaments.Where(Exts.IsTraitEnabled).Select(a => a.Weapon.MinRange).Min()))
|
||||
ChildActivity = ActivityUtils.SequenceActivities(new FlyTimed(ticksUntilTurn, self), new Fly(self, target), new FlyTimed(ticksUntilTurn, self));
|
||||
else
|
||||
ChildActivity = ActivityUtils.SequenceActivities(new Fly(self, target), new FlyTimed(ticksUntilTurn, self));
|
||||
|
||||
@@ -21,7 +21,6 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
public FlyCircle(Actor self)
|
||||
{
|
||||
IsIdle = true;
|
||||
plane = self.Trait<Aircraft>();
|
||||
cruiseAltitude = plane.Info.CruiseAltitude;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace OpenRA.Mods.Common.Activities
|
||||
public HeliFlyCircle(Actor self)
|
||||
{
|
||||
helicopter = self.Trait<Aircraft>();
|
||||
IsIdle = true;
|
||||
}
|
||||
|
||||
public override Activity Tick(Actor self)
|
||||
|
||||
@@ -23,8 +23,6 @@ namespace OpenRA.Mods.Common.Activities
|
||||
{
|
||||
public class Move : Activity
|
||||
{
|
||||
const int AverageTicksBeforePathing = 5;
|
||||
const int SpreadTicksBeforePathing = 5;
|
||||
static readonly List<CPos> NoPath = new List<CPos>();
|
||||
|
||||
readonly Mobile mobile;
|
||||
@@ -41,7 +39,6 @@ namespace OpenRA.Mods.Common.Activities
|
||||
int waitTicksRemaining;
|
||||
|
||||
// To work around queued activity issues while minimizing changes to legacy behaviour
|
||||
int ticksBeforePathing;
|
||||
bool evaluateNearestMovableCell;
|
||||
|
||||
// Scriptable move order
|
||||
@@ -140,9 +137,6 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
protected override void OnFirstRun(Actor self)
|
||||
{
|
||||
ticksBeforePathing = AverageTicksBeforePathing +
|
||||
self.World.SharedRandom.Next(-SpreadTicksBeforePathing, SpreadTicksBeforePathing);
|
||||
|
||||
if (evaluateNearestMovableCell && destination.HasValue)
|
||||
{
|
||||
var movableDestination = mobile.NearestMoveableCell(destination.Value);
|
||||
@@ -165,9 +159,9 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
if (path == null)
|
||||
{
|
||||
if (ticksBeforePathing > 0)
|
||||
if (mobile.TicksBeforePathing > 0)
|
||||
{
|
||||
--ticksBeforePathing;
|
||||
--mobile.TicksBeforePathing;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -264,9 +258,9 @@ namespace OpenRA.Mods.Common.Activities
|
||||
if (--waitTicksRemaining >= 0)
|
||||
return null;
|
||||
|
||||
if (ticksBeforePathing > 0)
|
||||
if (mobile.TicksBeforePathing > 0)
|
||||
{
|
||||
--ticksBeforePathing;
|
||||
--mobile.TicksBeforePathing;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
nt.BeforeTransform(self);
|
||||
|
||||
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
|
||||
if (makeAnimation != null)
|
||||
if (!SkipMakeAnims && makeAnimation != null)
|
||||
{
|
||||
// Once the make animation starts the activity must not be stopped anymore.
|
||||
IsInterruptible = false;
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
<HintPath>..\thirdparty\download\FuzzyLogicLibrary.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="rix0rrr.BeaconLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<Reference Include="rix0rrr.BeaconLib">
|
||||
<HintPath>..\thirdparty\download\rix0rrr.BeaconLib.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
@@ -549,6 +549,7 @@
|
||||
<Compile Include="UtilityCommands\ExtractSettingsDocsCommand.cs" />
|
||||
<Compile Include="UtilityCommands\ExtractZeroBraneStudioLuaAPI.cs" />
|
||||
<Compile Include="UtilityCommands\ExtractTraitDocsCommand.cs" />
|
||||
<Compile Include="UtilityCommands\ExtractWeaponDocsCommand.cs" />
|
||||
<Compile Include="Widgets\Logic\Ingame\MusicControllerLogic.cs" />
|
||||
<Compile Include="Widgets\UnitCommandWidget.cs" />
|
||||
<Compile Include="WorldExtensions.cs" />
|
||||
|
||||
@@ -210,7 +210,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
foreach (var armament in Armaments)
|
||||
{
|
||||
var checkIsValid = checkForCenterTargetingWeapons ? armament.Weapon.TargetActorCenter : !armament.OutOfAmmo;
|
||||
if (checkIsValid && armament.Weapon.IsValidAgainst(t, self.World, self))
|
||||
if (checkIsValid && !armament.IsTraitDisabled && armament.Weapon.IsValidAgainst(t, self.World, self))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -151,6 +151,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
foreach (var a in Armaments)
|
||||
{
|
||||
if (a.IsTraitDisabled)
|
||||
continue;
|
||||
|
||||
var port = SelectFirePort(self, targetYaw);
|
||||
if (port == null)
|
||||
return;
|
||||
|
||||
@@ -60,10 +60,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[Desc("Ticks to wait until next AutoTarget: attempt.")]
|
||||
public readonly int MaximumScanTimeInterval = 8;
|
||||
|
||||
public readonly bool TargetWhenIdle = true;
|
||||
|
||||
public readonly bool TargetWhenDamaged = true;
|
||||
|
||||
public override object Create(ActorInitializer init) { return new AutoTarget(init, this); }
|
||||
|
||||
public override void RulesetLoaded(Ruleset rules, ActorInfo info)
|
||||
@@ -157,17 +153,18 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public void Damaged(Actor self, AttackInfo e)
|
||||
{
|
||||
if (IsTraitDisabled)
|
||||
if (IsTraitDisabled || !self.IsIdle || Stance < UnitStance.ReturnFire)
|
||||
return;
|
||||
|
||||
if (!self.IsIdle || !Info.TargetWhenDamaged)
|
||||
// Don't retaliate against healers
|
||||
if (e.Damage.Value < 0)
|
||||
return;
|
||||
|
||||
var attacker = e.Attacker;
|
||||
if (attacker.Disposed || Stance < UnitStance.ReturnFire)
|
||||
if (attacker.Disposed)
|
||||
return;
|
||||
|
||||
if (!attacker.IsInWorld && !attacker.Disposed)
|
||||
if (!attacker.IsInWorld)
|
||||
{
|
||||
// If the aggressor is in a transport, then attack the transport instead
|
||||
var passenger = attacker.TraitOrDefault<Passenger>();
|
||||
@@ -175,19 +172,15 @@ namespace OpenRA.Mods.Common.Traits
|
||||
attacker = passenger.Transport;
|
||||
}
|
||||
|
||||
// not a lot we can do about things we can't hurt... although maybe we should automatically run away?
|
||||
// Not a lot we can do about things we can't hurt... although maybe we should automatically run away?
|
||||
var attackerAsTarget = Target.FromActor(attacker);
|
||||
if (!activeAttackBases.Any(a => a.HasAnyValidWeapons(attackerAsTarget)))
|
||||
return;
|
||||
|
||||
// don't retaliate against own units force-firing on us. It's usually not what the player wanted.
|
||||
// Don't retaliate against own units force-firing on us. It's usually not what the player wanted.
|
||||
if (attacker.AppearsFriendlyTo(self))
|
||||
return;
|
||||
|
||||
// don't retaliate against healers
|
||||
if (e.Damage.Value < 0)
|
||||
return;
|
||||
|
||||
Aggressor = attacker;
|
||||
|
||||
bool allowMove;
|
||||
@@ -197,10 +190,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public void TickIdle(Actor self)
|
||||
{
|
||||
if (IsTraitDisabled)
|
||||
return;
|
||||
|
||||
if (Stance < UnitStance.Defend || !Info.TargetWhenIdle)
|
||||
if (IsTraitDisabled || Stance < UnitStance.Defend)
|
||||
return;
|
||||
|
||||
bool allowMove;
|
||||
|
||||
@@ -47,7 +47,18 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public object Create(ActorInitializer init) { return new Bridge(init.Self, this); }
|
||||
|
||||
public void RulesetLoaded(Ruleset rules, ActorInfo ai) { DemolishWeaponInfo = rules.Weapons[DemolishWeapon.ToLowerInvariant()]; }
|
||||
public void RulesetLoaded(Ruleset rules, ActorInfo ai)
|
||||
{
|
||||
if (string.IsNullOrEmpty(DemolishWeapon))
|
||||
throw new YamlException("A value for DemolishWeapon of a Bridge trait is missing.");
|
||||
|
||||
WeaponInfo weapon;
|
||||
var weaponToLower = DemolishWeapon.ToLowerInvariant();
|
||||
if (!rules.Weapons.TryGetValue(weaponToLower, out weapon))
|
||||
throw new YamlException("Weapons Ruleset does not contain an entry '{0}'".F(weaponToLower));
|
||||
|
||||
DemolishWeaponInfo = weapon;
|
||||
}
|
||||
|
||||
public IEnumerable<Pair<ushort, int>> Templates
|
||||
{
|
||||
|
||||
@@ -139,12 +139,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
if (!preventDock)
|
||||
{
|
||||
harv.QueueActivity(new CallFunc(() => dockedHarv = harv, false));
|
||||
harv.QueueActivity(DockSequence(harv, self));
|
||||
harv.QueueActivity(new CallFunc(() => dockedHarv = null, false));
|
||||
dockOrder.Queue(new CallFunc(() => dockedHarv = harv, false));
|
||||
dockOrder.Queue(DockSequence(harv, self));
|
||||
dockOrder.Queue(new CallFunc(() => dockedHarv = null, false));
|
||||
}
|
||||
|
||||
harv.QueueActivity(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
|
||||
dockOrder.Queue(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
|
||||
}
|
||||
|
||||
void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
|
||||
|
||||
@@ -117,6 +117,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
foreach (var a in attack.Armaments)
|
||||
{
|
||||
if (a.IsTraitDisabled)
|
||||
continue;
|
||||
|
||||
foreach (var b in a.Barrels)
|
||||
{
|
||||
var muzzle = self.CenterPosition + a.MuzzleOffset(self, b);
|
||||
|
||||
@@ -55,6 +55,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[Desc("Can this actor undeploy?")]
|
||||
public readonly bool CanUndeploy = true;
|
||||
|
||||
[Desc("Skip make/deploy animation?")]
|
||||
public readonly bool SkipMakeAnimation = false;
|
||||
|
||||
public object Create(ActorInitializer init) { return new GrantConditionOnDeploy(init, this); }
|
||||
}
|
||||
|
||||
@@ -223,7 +226,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
OnDeployCompleted();
|
||||
else
|
||||
foreach (var n in notify)
|
||||
n.Deploy(self);
|
||||
n.Deploy(self, Info.SkipMakeAnimation);
|
||||
}
|
||||
|
||||
/// <summary>Play undeploy sound and animation and after that revoke the condition.</summary>
|
||||
@@ -246,7 +249,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
OnUndeployCompleted();
|
||||
else
|
||||
foreach (var n in notify)
|
||||
n.Undeploy(self);
|
||||
n.Undeploy(self, Info.SkipMakeAnimation);
|
||||
}
|
||||
|
||||
void OnDeployStarted()
|
||||
|
||||
@@ -392,6 +392,10 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public class Mobile : ConditionalTrait<MobileInfo>, INotifyCreated, IIssueOrder, IResolveOrder, IOrderVoice, IPositionable, IMove,
|
||||
IFacing, IDeathActorInitModifier, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyBlockingMove, IActorPreviewInitModifier, INotifyBecomingIdle
|
||||
{
|
||||
const int AverageTicksBeforePathing = 5;
|
||||
const int SpreadTicksBeforePathing = 5;
|
||||
internal int TicksBeforePathing = 0;
|
||||
|
||||
readonly Actor self;
|
||||
readonly Lazy<IEnumerable<int>> speedModifiers;
|
||||
public bool IsMoving { get; set; }
|
||||
@@ -629,14 +633,18 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
if (order.OrderString == "Move")
|
||||
{
|
||||
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
|
||||
var loc = self.World.Map.Clamp(order.TargetLocation);
|
||||
|
||||
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(loc))
|
||||
return;
|
||||
|
||||
if (!order.Queued)
|
||||
self.CancelActivity();
|
||||
|
||||
self.SetTargetLine(Target.FromCell(self.World, order.TargetLocation), Color.Green);
|
||||
self.QueueActivity(order.Queued, new Move(self, order.TargetLocation, WDist.FromCells(8), null, true));
|
||||
TicksBeforePathing = AverageTicksBeforePathing + self.World.SharedRandom.Next(-SpreadTicksBeforePathing, SpreadTicksBeforePathing);
|
||||
|
||||
self.SetTargetLine(Target.FromCell(self.World, loc), Color.Green);
|
||||
self.QueueActivity(order.Queued, new Move(self, loc, WDist.FromCells(8), null, true));
|
||||
}
|
||||
|
||||
if (order.OrderString == "Stop")
|
||||
|
||||
@@ -116,16 +116,24 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
}
|
||||
|
||||
// TODO: Make this use Forward instead
|
||||
void INotifyDeployTriggered.Deploy(Actor self)
|
||||
void INotifyDeployTriggered.Deploy(Actor self, bool skipMakeAnim)
|
||||
{
|
||||
var notified = false;
|
||||
var notify = self.TraitsImplementing<INotifyDeployComplete>();
|
||||
|
||||
if (skipMakeAnim)
|
||||
{
|
||||
foreach (var n in notify)
|
||||
n.FinishedDeploy(self);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var wsb in wsbs)
|
||||
{
|
||||
if (wsb.IsTraitDisabled)
|
||||
continue;
|
||||
|
||||
var notify = self.TraitsImplementing<INotifyDeployComplete>();
|
||||
wsb.PlayCustomAnimation(self, info.Sequence, () =>
|
||||
{
|
||||
if (notified)
|
||||
@@ -141,16 +149,24 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
}
|
||||
|
||||
// TODO: Make this use Reverse instead
|
||||
void INotifyDeployTriggered.Undeploy(Actor self)
|
||||
void INotifyDeployTriggered.Undeploy(Actor self, bool skipMakeAnim)
|
||||
{
|
||||
var notified = false;
|
||||
var notify = self.TraitsImplementing<INotifyDeployComplete>();
|
||||
|
||||
if (skipMakeAnim)
|
||||
{
|
||||
foreach (var n in notify)
|
||||
n.FinishedUndeploy(self);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var wsb in wsbs)
|
||||
{
|
||||
if (wsb.IsTraitDisabled)
|
||||
continue;
|
||||
|
||||
var notify = self.TraitsImplementing<INotifyDeployComplete>();
|
||||
wsb.PlayCustomAnimationBackwards(self, info.Sequence, () =>
|
||||
{
|
||||
if (notified)
|
||||
|
||||
@@ -23,6 +23,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly int RefundPercent = 50;
|
||||
public readonly string[] SellSounds = { };
|
||||
|
||||
[Desc("Skip playing (reversed) make animation.")]
|
||||
public readonly bool SkipMakeAnimation = false;
|
||||
|
||||
public override object Create(ActorInitializer init) { return new Sellable(init.Self, this); }
|
||||
}
|
||||
|
||||
@@ -63,11 +66,17 @@ namespace OpenRA.Mods.Common.Traits
|
||||
foreach (var ns in self.TraitsImplementing<INotifySold>())
|
||||
ns.Selling(self);
|
||||
|
||||
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
|
||||
if (makeAnimation != null)
|
||||
makeAnimation.Reverse(self, new Sell(self), false);
|
||||
else
|
||||
self.QueueActivity(false, new Sell(self));
|
||||
if (!info.SkipMakeAnimation)
|
||||
{
|
||||
var makeAnimation = self.TraitOrDefault<WithMakeAnimation>();
|
||||
if (makeAnimation != null)
|
||||
{
|
||||
makeAnimation.Reverse(self, new Sell(self), false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self.QueueActivity(false, new Sell(self));
|
||||
}
|
||||
|
||||
public bool IsTooltipVisible(Player forPlayer)
|
||||
|
||||
@@ -53,11 +53,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public override object Create(ActorInitializer init) { return new SpawnActorOnDeath(init, this); }
|
||||
}
|
||||
|
||||
public class SpawnActorOnDeath : ConditionalTrait<SpawnActorOnDeathInfo>, INotifyKilled
|
||||
public class SpawnActorOnDeath : ConditionalTrait<SpawnActorOnDeathInfo>, INotifyKilled, INotifyRemovedFromWorld
|
||||
{
|
||||
readonly string faction;
|
||||
readonly bool enabled;
|
||||
|
||||
Player attackingPlayer;
|
||||
|
||||
public SpawnActorOnDeath(ActorInitializer init, SpawnActorOnDeathInfo info)
|
||||
: base(info)
|
||||
{
|
||||
@@ -65,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
faction = init.Contains<FactionInit>() ? init.Get<FactionInit, string>() : init.Self.Owner.Faction.InternalName;
|
||||
}
|
||||
|
||||
public void Killed(Actor self, AttackInfo e)
|
||||
void INotifyKilled.Killed(Actor self, AttackInfo e)
|
||||
{
|
||||
if (!enabled || IsTraitDisabled)
|
||||
return;
|
||||
@@ -79,39 +81,41 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (Info.DeathType != null && !e.Damage.DamageTypes.Contains(Info.DeathType))
|
||||
return;
|
||||
|
||||
self.World.AddFrameEndTask(w =>
|
||||
attackingPlayer = e.Attacker.Owner;
|
||||
}
|
||||
|
||||
// Don't add the new actor to the world before all RemovedFromWorld callbacks have run
|
||||
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
|
||||
{
|
||||
if (attackingPlayer == null)
|
||||
return;
|
||||
|
||||
var td = new TypeDictionary
|
||||
{
|
||||
// Actor has been disposed by something else before its death (for example `Enter`).
|
||||
if (self.Disposed)
|
||||
return;
|
||||
new ParentActorInit(self),
|
||||
new LocationInit(self.Location + Info.Offset),
|
||||
new CenterPositionInit(self.CenterPosition),
|
||||
new FactionInit(faction)
|
||||
};
|
||||
|
||||
var td = new TypeDictionary
|
||||
{
|
||||
new ParentActorInit(self),
|
||||
new LocationInit(self.Location + Info.Offset),
|
||||
new CenterPositionInit(self.CenterPosition),
|
||||
new FactionInit(faction)
|
||||
};
|
||||
if (Info.OwnerType == OwnerType.Victim)
|
||||
td.Add(new OwnerInit(self.Owner));
|
||||
else if (Info.OwnerType == OwnerType.Killer)
|
||||
td.Add(new OwnerInit(attackingPlayer));
|
||||
else
|
||||
td.Add(new OwnerInit(self.World.Players.First(p => p.InternalName == Info.InternalOwner)));
|
||||
|
||||
if (Info.OwnerType == OwnerType.Victim)
|
||||
td.Add(new OwnerInit(self.Owner));
|
||||
else if (Info.OwnerType == OwnerType.Killer)
|
||||
td.Add(new OwnerInit(e.Attacker.Owner));
|
||||
else
|
||||
td.Add(new OwnerInit(self.World.Players.First(p => p.InternalName == Info.InternalOwner)));
|
||||
if (Info.SkipMakeAnimations)
|
||||
td.Add(new SkipMakeAnimsInit());
|
||||
|
||||
if (Info.SkipMakeAnimations)
|
||||
td.Add(new SkipMakeAnimsInit());
|
||||
foreach (var modifier in self.TraitsImplementing<IDeathActorInitModifier>())
|
||||
modifier.ModifyDeathActorInit(self, td);
|
||||
|
||||
foreach (var modifier in self.TraitsImplementing<IDeathActorInitModifier>())
|
||||
modifier.ModifyDeathActorInit(self, td);
|
||||
var huskActor = self.TraitsImplementing<IHuskModifier>()
|
||||
.Select(ihm => ihm.HuskActor(self))
|
||||
.FirstOrDefault(a => a != null);
|
||||
|
||||
var huskActor = self.TraitsImplementing<IHuskModifier>()
|
||||
.Select(ihm => ihm.HuskActor(self))
|
||||
.FirstOrDefault(a => a != null);
|
||||
|
||||
w.CreateActor(huskActor ?? Info.Actor, td);
|
||||
});
|
||||
self.World.AddFrameEndTask(w => w.CreateActor(huskActor ?? Info.Actor, td));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
var location = self.World.Map.CenterOfCell(order.TargetLocation);
|
||||
|
||||
PlayLaunchSounds();
|
||||
Game.Sound.Play(SoundType.World, info.DeploySound, location);
|
||||
|
||||
if (!string.IsNullOrEmpty(info.EffectSequence) && !string.IsNullOrEmpty(info.EffectPalette))
|
||||
|
||||
@@ -175,8 +175,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public interface INotifyDeployTriggered
|
||||
{
|
||||
void Deploy(Actor self);
|
||||
void Undeploy(Actor self);
|
||||
void Deploy(Actor self, bool skipMakeAnim);
|
||||
void Undeploy(Actor self, bool skipMakeAnim);
|
||||
}
|
||||
|
||||
public interface IAcceptResourcesInfo : ITraitInfo { }
|
||||
|
||||
@@ -11,8 +11,10 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.GameRules;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Support;
|
||||
using OpenRA.Traits;
|
||||
@@ -189,5 +191,64 @@ namespace OpenRA.Mods.Common
|
||||
return rules.Actors.Where(a => a.Value.HasTraitInfo<IBlocksProjectilesInfo>())
|
||||
.SelectMany(a => a.Value.TraitInfos<HitShapeInfo>()).Max(h => h.Type.OuterRadius);
|
||||
}
|
||||
|
||||
public static string FriendlyTypeName(Type t)
|
||||
{
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(HashSet<>))
|
||||
return "Set of {0}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
|
||||
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>))
|
||||
return "Mapping of {0} to {1}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
|
||||
|
||||
if (t.IsSubclassOf(typeof(Array)))
|
||||
return "Collection of {0}".F(FriendlyTypeName(t.GetElementType()));
|
||||
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition().GetInterfaces().Any(e => e.IsGenericType && e.GetGenericTypeDefinition() == typeof(IEnumerable<>)))
|
||||
return "Collection of {0}".F(FriendlyTypeName(t.GetGenericArguments().First()));
|
||||
|
||||
if (t == typeof(int) || t == typeof(uint))
|
||||
return "Integer";
|
||||
|
||||
if (t == typeof(int2))
|
||||
return "2D Integer";
|
||||
|
||||
if (t == typeof(float) || t == typeof(decimal))
|
||||
return "Real Number";
|
||||
|
||||
if (t == typeof(float2))
|
||||
return "2D Real Number";
|
||||
|
||||
if (t == typeof(CPos))
|
||||
return "2D Cell Position";
|
||||
|
||||
if (t == typeof(CVec))
|
||||
return "2D Cell Vector";
|
||||
|
||||
if (t == typeof(WAngle))
|
||||
return "1D World Angle";
|
||||
|
||||
if (t == typeof(WRot))
|
||||
return "3D World Rotation";
|
||||
|
||||
if (t == typeof(WPos))
|
||||
return "3D World Position";
|
||||
|
||||
if (t == typeof(WDist))
|
||||
return "1D World Distance";
|
||||
|
||||
if (t == typeof(WVec))
|
||||
return "3D World Vector";
|
||||
|
||||
if (t == typeof(HSLColor) || t == typeof(Color))
|
||||
return "Color (RRGGBB[AA] notation)";
|
||||
|
||||
if (t == typeof(IProjectileInfo))
|
||||
return "Projectile";
|
||||
|
||||
if (t == typeof(IWarhead))
|
||||
return "Warhead";
|
||||
|
||||
return t.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Common.UtilityCommands
|
||||
@@ -92,7 +91,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
foreach (var info in infos)
|
||||
{
|
||||
var fieldDescLines = info.Field.GetCustomAttributes<DescAttribute>(true).SelectMany(d => d.Lines);
|
||||
var fieldType = FriendlyTypeName(info.Field.FieldType);
|
||||
var fieldType = Util.FriendlyTypeName(info.Field.FieldType);
|
||||
var loadInfo = info.Field.GetCustomAttributes<FieldLoader.SerializeAttribute>(true).FirstOrDefault();
|
||||
var defaultValue = loadInfo != null && loadInfo.Required ? "<em>(required)</em>" : FieldSaver.SaveField(liveTraitInfo, info.Field.Name).Value.Value;
|
||||
doc.Append("<tr><td>{0}</td><td>{1}</td><td>{2}</td>".F(info.YamlName, defaultValue, fieldType));
|
||||
@@ -118,58 +117,5 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
.OrderBy(i => i.Name)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
static string FriendlyTypeName(Type t)
|
||||
{
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(HashSet<>))
|
||||
return "Set of {0}".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
|
||||
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>))
|
||||
return "Dictionary<{0},{1}>".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
|
||||
|
||||
if (t.IsSubclassOf(typeof(Array)))
|
||||
return "Multiple {0}".F(FriendlyTypeName(t.GetElementType()));
|
||||
|
||||
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Primitives.Cache<,>))
|
||||
return "Cached<{0},{1}>".F(t.GetGenericArguments().Select(FriendlyTypeName).ToArray());
|
||||
|
||||
if (t == typeof(int) || t == typeof(uint))
|
||||
return "Integer";
|
||||
|
||||
if (t == typeof(int2))
|
||||
return "2D Integer";
|
||||
|
||||
if (t == typeof(float) || t == typeof(decimal))
|
||||
return "Real Number";
|
||||
|
||||
if (t == typeof(float2))
|
||||
return "2D Real Number";
|
||||
|
||||
if (t == typeof(CPos))
|
||||
return "2D Cell Position";
|
||||
|
||||
if (t == typeof(CVec))
|
||||
return "2D Cell Vector";
|
||||
|
||||
if (t == typeof(WAngle))
|
||||
return "1D World Angle";
|
||||
|
||||
if (t == typeof(WRot))
|
||||
return "3D World Rotation";
|
||||
|
||||
if (t == typeof(WPos))
|
||||
return "3D World Position";
|
||||
|
||||
if (t == typeof(WDist))
|
||||
return "1D World Distance";
|
||||
|
||||
if (t == typeof(WVec))
|
||||
return "3D World Vector";
|
||||
|
||||
if (t == typeof(HSLColor))
|
||||
return "Color";
|
||||
|
||||
return t.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2017 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, either version 3 of
|
||||
* the License, or (at your option) any later version. For more
|
||||
* information, see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using OpenRA.GameRules;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Common.UtilityCommands
|
||||
{
|
||||
class ExtractWeaponDocsCommand : IUtilityCommand
|
||||
{
|
||||
string IUtilityCommand.Name { get { return "--weapon-docs"; } }
|
||||
|
||||
bool IUtilityCommand.ValidateArguments(string[] args)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
[Desc("Generate weaponry documentation in MarkDown format.")]
|
||||
void IUtilityCommand.Run(Utility utility, string[] args)
|
||||
{
|
||||
// HACK: The engine code assumes that Game.modData is set.
|
||||
Game.ModData = utility.ModData;
|
||||
|
||||
Console.WriteLine(
|
||||
"This documentation is aimed at modders. It displays a template for weapon definitions " +
|
||||
"as well as its contained types (warheads and projectiles) with default values and developer commentary. " +
|
||||
"Please do not edit it directly, but add new `[Desc(\"String\")]` tags to the source code. This file has been " +
|
||||
"automatically generated for version {0} of OpenRA.", utility.ModData.Manifest.Metadata.Version);
|
||||
Console.WriteLine();
|
||||
|
||||
var toc = new StringBuilder();
|
||||
var doc = new StringBuilder();
|
||||
var currentNamespace = "";
|
||||
|
||||
var objectCreator = utility.ModData.ObjectCreator;
|
||||
var weaponInfo = objectCreator.GetTypesImplementing<WeaponInfo>();
|
||||
var warheads = objectCreator.GetTypesImplementing<IWarhead>().OrderBy(t => t.Namespace);
|
||||
var projectiles = objectCreator.GetTypesImplementing<IProjectileInfo>().OrderBy(t => t.Namespace);
|
||||
var weaponTypes = Enumerable.Concat(weaponInfo, Enumerable.Concat(projectiles, warheads));
|
||||
foreach (var t in weaponTypes)
|
||||
{
|
||||
if (t.ContainsGenericParameters || t.IsAbstract)
|
||||
continue; // skip helpers like TraitInfo<T>
|
||||
|
||||
if (currentNamespace != t.Namespace)
|
||||
{
|
||||
currentNamespace = t.Namespace;
|
||||
doc.AppendLine();
|
||||
doc.AppendLine("## {0}".F(currentNamespace));
|
||||
toc.AppendLine("* [{0}](#{1})".F(currentNamespace, currentNamespace.Replace(".", "").ToLowerInvariant()));
|
||||
}
|
||||
|
||||
var traitName = t.Name.EndsWith("Info") ? t.Name.Substring(0, t.Name.Length - 4) : t.Name;
|
||||
toc.AppendLine(" * [{0}](#{1})".F(traitName, traitName.ToLowerInvariant()));
|
||||
var traitDescLines = t.GetCustomAttributes<DescAttribute>(false).SelectMany(d => d.Lines);
|
||||
doc.AppendLine();
|
||||
doc.AppendLine("### {0}".F(traitName));
|
||||
foreach (var line in traitDescLines)
|
||||
doc.AppendLine(line);
|
||||
|
||||
var infos = FieldLoader.GetTypeLoadInfo(t);
|
||||
if (!infos.Any())
|
||||
continue;
|
||||
|
||||
doc.AppendLine("<table>");
|
||||
doc.AppendLine("<tr><th>Property</th><th>Default Value</th><th>Type</th><th>Description</th></tr>");
|
||||
var liveTraitInfo = t == typeof(WeaponInfo) ? null : objectCreator.CreateBasic(t);
|
||||
foreach (var info in infos)
|
||||
{
|
||||
var fieldDescLines = info.Field.GetCustomAttributes<DescAttribute>(true).SelectMany(d => d.Lines);
|
||||
var fieldType = Util.FriendlyTypeName(info.Field.FieldType);
|
||||
var defaultValue = liveTraitInfo == null ? "" : FieldSaver.SaveField(liveTraitInfo, info.Field.Name).Value.Value;
|
||||
doc.Append("<tr><td>{0}</td><td>{1}</td><td>{2}</td>".F(info.YamlName, defaultValue, fieldType));
|
||||
doc.Append("<td>");
|
||||
foreach (var line in fieldDescLines)
|
||||
doc.Append(line + " ");
|
||||
doc.AppendLine("</td></tr>");
|
||||
}
|
||||
|
||||
doc.AppendLine("</table>");
|
||||
}
|
||||
|
||||
Console.Write(toc.ToString());
|
||||
Console.Write(doc.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -845,6 +845,82 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
}
|
||||
}
|
||||
|
||||
// TargetWhenIdle and TargetWhenDamaged were removed from AutoTarget
|
||||
if (engineVersion < 20170722)
|
||||
{
|
||||
if (node.Key.StartsWith("AutoTarget", StringComparison.Ordinal))
|
||||
{
|
||||
var valueNodes = node.Value.Nodes;
|
||||
var targetIdle = valueNodes.FirstOrDefault(n => n.Key == "TargetWhenIdle");
|
||||
var targetDamaged = valueNodes.FirstOrDefault(n => n.Key == "TargetWhenDamaged");
|
||||
var hasInitialStance = valueNodes.FirstOrDefault(n => n.Key == "InitialStance") != null;
|
||||
var enableStances = valueNodes.FirstOrDefault(n => n.Key == "EnableStances");
|
||||
|
||||
if (targetDamaged == null)
|
||||
{
|
||||
if (targetIdle != null)
|
||||
{
|
||||
if (hasInitialStance)
|
||||
Console.WriteLine("'TargetWhenIdle' was removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
|
||||
else
|
||||
{
|
||||
valueNodes.Add(new MiniYamlNode("InitialStance", targetIdle.Value.Value.ToLower() == "true" ? "Defend" : "ReturnFire"));
|
||||
|
||||
if (enableStances != null)
|
||||
enableStances.Value.Value = "false";
|
||||
else
|
||||
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
|
||||
}
|
||||
|
||||
valueNodes.Remove(targetIdle);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (targetIdle == null)
|
||||
{
|
||||
if (hasInitialStance)
|
||||
Console.WriteLine("'TargetWhenDamaged' was removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
|
||||
else
|
||||
{
|
||||
// In this case the default for "TargetWhenIdle" (true) takes effect, i.e. use the "Defend" stance
|
||||
valueNodes.Add(new MiniYamlNode("InitialStance", "Defend"));
|
||||
|
||||
if (enableStances != null)
|
||||
enableStances.Value.Value = "false";
|
||||
else
|
||||
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
|
||||
}
|
||||
|
||||
valueNodes.Remove(targetDamaged);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hasInitialStance)
|
||||
Console.WriteLine("'TargetWhenDamaged' and 'TargetWhenIdle' were removed from 'AutoTarget'. 'InitialStance' might need to be adjusted.");
|
||||
else
|
||||
{
|
||||
var idle = targetIdle.Value.Value.ToLower() == "true";
|
||||
var damaged = targetDamaged.Value.Value.ToLower() == "true";
|
||||
|
||||
if (idle)
|
||||
valueNodes.Add(new MiniYamlNode("InitialStance", "Defend"));
|
||||
else
|
||||
valueNodes.Add(new MiniYamlNode("InitialStance", damaged ? "ReturnFire" : "HoldFire"));
|
||||
|
||||
if (enableStances != null)
|
||||
enableStances.Value.Value = "false";
|
||||
else
|
||||
valueNodes.Add(new MiniYamlNode("EnableStances", "false"));
|
||||
}
|
||||
|
||||
valueNodes.Remove(targetIdle);
|
||||
valueNodes.Remove(targetDamaged);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
}
|
||||
|
||||
public bool DisableKeyRepeat = false;
|
||||
public bool DisableKeySound = false;
|
||||
|
||||
[Translate] public string Text = "";
|
||||
public string Background = "button";
|
||||
@@ -141,9 +142,10 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
if (!IsDisabled())
|
||||
{
|
||||
OnKeyPress(e);
|
||||
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
|
||||
if (!DisableKeySound)
|
||||
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
|
||||
}
|
||||
else
|
||||
else if (!DisableKeySound)
|
||||
Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -10,13 +10,10 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Orders;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Orders;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
namespace OpenRA.Mods.Common.Widgets
|
||||
@@ -58,14 +55,20 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
attackMoveButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
|
||||
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "AttackMove";
|
||||
|
||||
attackMoveButton.OnClick = () =>
|
||||
Action<bool> toggle = allowCancel =>
|
||||
{
|
||||
if (attackMoveButton.IsHighlighted())
|
||||
world.CancelInputMode();
|
||||
{
|
||||
if (allowCancel)
|
||||
world.CancelInputMode();
|
||||
}
|
||||
else
|
||||
world.OrderGenerator = new GenericSelectTarget(selectedActors,
|
||||
"AttackMove", "attackmove", Game.Settings.Game.MouseButtonPreference.Action);
|
||||
};
|
||||
|
||||
attackMoveButton.OnClick = () => toggle(true);
|
||||
attackMoveButton.OnKeyPress = _ => toggle(false);
|
||||
}
|
||||
|
||||
var forceMoveButton = widget.GetOrNull<ButtonWidget>("FORCE_MOVE");
|
||||
@@ -110,14 +113,20 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
guardButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
|
||||
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "Guard";
|
||||
|
||||
guardButton.OnClick = () =>
|
||||
Action<bool> toggle = allowCancel =>
|
||||
{
|
||||
if (guardButton.IsHighlighted())
|
||||
world.CancelInputMode();
|
||||
{
|
||||
if (allowCancel)
|
||||
world.CancelInputMode();
|
||||
}
|
||||
else
|
||||
world.OrderGenerator = new GuardOrderGenerator(selectedActors,
|
||||
"Guard", "guard", Game.Settings.Game.MouseButtonPreference.Action);
|
||||
};
|
||||
|
||||
guardButton.OnClick = () => toggle(true);
|
||||
guardButton.OnKeyPress = _ => toggle(false);
|
||||
}
|
||||
|
||||
var scatterButton = widget.GetOrNull<ButtonWidget>("SCATTER");
|
||||
|
||||
@@ -51,6 +51,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
widget.IsVisible = () => (orderManager.LobbyInfo.ClientWithIndex(clientIndex) != null);
|
||||
tooltipContainer.BeforeRender = () =>
|
||||
{
|
||||
if (!widget.IsVisible())
|
||||
return;
|
||||
|
||||
var latencyPrefixSize = latencyPrefix == null ? 0 : latencyPrefix.Bounds.X + latencyPrefixFont.Measure(latencyPrefix.GetText() + " ").X;
|
||||
var locationWidth = locationFont.Measure(location.GetText()).X;
|
||||
var adminWidth = adminFont.Measure(admin.GetText()).X;
|
||||
|
||||
@@ -13,6 +13,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
@@ -37,7 +38,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
static bool fetchedNews;
|
||||
|
||||
// Increment the version number when adding new stats
|
||||
const int SystemInformationVersion = 2;
|
||||
const int SystemInformationVersion = 3;
|
||||
Dictionary<string, Pair<string, string>> GetSystemInformation()
|
||||
{
|
||||
var lang = System.Globalization.CultureInfo.InstalledUICulture.TwoLetterISOLanguageName;
|
||||
@@ -47,10 +48,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ "platform", Pair.New("OS Type", Platform.CurrentPlatform.ToString()) },
|
||||
{ "os", Pair.New("OS Version", Environment.OSVersion.ToString()) },
|
||||
{ "x64", Pair.New("OS is 64 bit", Environment.Is64BitOperatingSystem.ToString()) },
|
||||
{ "x64process", Pair.New("Process is 64 bit", Environment.Is64BitProcess.ToString()) },
|
||||
{ "runtime", Pair.New(".NET Runtime", Platform.RuntimeVersion) },
|
||||
{ "gl", Pair.New("OpenGL Version", Game.Renderer.GLVersion) },
|
||||
{ "windowsize", Pair.New("Window Size", "{0}x{1}".F(Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height)) },
|
||||
{ "windowscale", Pair.New("Window Scale", Game.Renderer.WindowScale.ToString("F2")) },
|
||||
{ "windowscale", Pair.New("Window Scale", Game.Renderer.WindowScale.ToString("F2", CultureInfo.InvariantCulture)) },
|
||||
{ "lang", Pair.New("System Language", lang) }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -35,8 +35,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
public FrozenActor FrozenActorTooltip { get; private set; }
|
||||
public ResourceType ResourceTooltip { get; private set; }
|
||||
|
||||
public int EdgeScrollThreshold = 5;
|
||||
|
||||
int2? joystickScrollStart, joystickScrollEnd;
|
||||
int2? standardScrollStart;
|
||||
bool isStandardScrolling;
|
||||
@@ -308,7 +306,12 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
if (scrollType == MouseScrollType.Standard || scrollType == MouseScrollType.Inverted)
|
||||
{
|
||||
if (mi.Event == MouseInputEvent.Down && !isStandardScrolling)
|
||||
{
|
||||
if (!TakeMouseFocus(mi))
|
||||
return false;
|
||||
|
||||
standardScrollStart = mi.Location;
|
||||
}
|
||||
else if (mi.Event == MouseInputEvent.Move && (isStandardScrolling ||
|
||||
(standardScrollStart.HasValue && ((standardScrollStart.Value - mi.Location).Length > Game.Settings.Game.MouseScrollDeadzone))))
|
||||
{
|
||||
@@ -322,6 +325,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
var wasStandardScrolling = isStandardScrolling;
|
||||
isStandardScrolling = false;
|
||||
standardScrollStart = null;
|
||||
YieldMouseFocus(mi);
|
||||
|
||||
if (wasStandardScrolling)
|
||||
return true;
|
||||
@@ -335,6 +339,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
if (!TakeMouseFocus(mi))
|
||||
return false;
|
||||
|
||||
joystickScrollStart = mi.Location;
|
||||
}
|
||||
|
||||
@@ -474,14 +479,15 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
ScrollDirection CheckForDirections()
|
||||
{
|
||||
var margin = Game.Settings.Game.ViewportEdgeScrollMargin;
|
||||
var directions = ScrollDirection.None;
|
||||
if (Viewport.LastMousePos.X < EdgeScrollThreshold)
|
||||
if (Viewport.LastMousePos.X < margin)
|
||||
directions |= ScrollDirection.Left;
|
||||
if (Viewport.LastMousePos.Y < EdgeScrollThreshold)
|
||||
if (Viewport.LastMousePos.Y < margin)
|
||||
directions |= ScrollDirection.Up;
|
||||
if (Viewport.LastMousePos.X >= Game.Renderer.Resolution.Width - EdgeScrollThreshold)
|
||||
if (Viewport.LastMousePos.X >= Game.Renderer.Resolution.Width - margin)
|
||||
directions |= ScrollDirection.Right;
|
||||
if (Viewport.LastMousePos.Y >= Game.Renderer.Resolution.Height - EdgeScrollThreshold)
|
||||
if (Viewport.LastMousePos.Y >= Game.Renderer.Resolution.Height - margin)
|
||||
directions |= ScrollDirection.Down;
|
||||
|
||||
return directions;
|
||||
|
||||
@@ -32,8 +32,11 @@ namespace OpenRA.Mods.Common
|
||||
// Then we iterate over this list, and find all actors for which their health radius is at least within lineWidth of the line.
|
||||
// For actors without a health radius, we simply check their center point.
|
||||
// The square in which we select all actors must be large enough to encompass the entire line's width.
|
||||
var xDir = Math.Sign(lineEnd.X - lineStart.X);
|
||||
var yDir = Math.Sign(lineEnd.Y - lineStart.Y);
|
||||
// xDir and yDir must never be 0, otherwise the overscan will be 0 in the respective direction.
|
||||
var xDiff = lineEnd.X - lineStart.X;
|
||||
var yDiff = lineEnd.Y - lineStart.Y;
|
||||
var xDir = xDiff < 0 ? -1 : 1;
|
||||
var yDir = yDiff < 0 ? -1 : 1;
|
||||
|
||||
var dir = new WVec(xDir, yDir, 0);
|
||||
var overselect = dir * (1024 + lineWidth.Length + targetExtraSearchRadius.Length);
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace OpenRA.Platforms.Default
|
||||
}
|
||||
|
||||
// A null indicates termination of that string, so add that to our list.
|
||||
devices.Add(Encoding.Default.GetString(buffer.ToArray()));
|
||||
devices.Add(Encoding.UTF8.GetString(buffer.ToArray()));
|
||||
buffer.Clear();
|
||||
|
||||
// Two successive nulls indicates the end of the list.
|
||||
|
||||
1
make.ps1
1
make.ps1
@@ -193,6 +193,7 @@ function Docs-Command
|
||||
{
|
||||
./make.ps1 version
|
||||
./OpenRA.Utility.exe all --docs | Out-File -Encoding "UTF8" DOCUMENTATION.md
|
||||
./OpenRA.Utility.exe all --weapon-docs | Out-File -Encoding "UTF8" WEAPONS.md
|
||||
./OpenRA.Utility.exe all --lua-docs | Out-File -Encoding "UTF8" Lua-API.md
|
||||
}
|
||||
else
|
||||
|
||||
@@ -270,7 +270,7 @@ Container@PLAYER_WIDGETS:
|
||||
Width: 34
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Move
|
||||
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -286,6 +286,7 @@ Container@PLAYER_WIDGETS:
|
||||
Width: 34
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Move
|
||||
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n - Units entering transports will consider nearby alternatives\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -302,6 +303,7 @@ Container@PLAYER_WIDGETS:
|
||||
Width: 34
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Attack
|
||||
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -318,7 +320,7 @@ Container@PLAYER_WIDGETS:
|
||||
Width: 34
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Guard
|
||||
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -335,6 +337,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Deploy
|
||||
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Helicopters will return to base\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -351,6 +354,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Scatter
|
||||
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -367,6 +371,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Stop
|
||||
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -382,6 +387,7 @@ Container@PLAYER_WIDGETS:
|
||||
Width: 34
|
||||
Height: 34
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Waypoint Mode
|
||||
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -407,6 +413,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
Background: stance-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Anything Stance
|
||||
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -423,6 +430,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
Background: stance-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Defend Stance
|
||||
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -439,6 +447,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
Background: stance-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Return Fire Stance
|
||||
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -455,6 +464,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
Background: stance-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Hold Fire Stance
|
||||
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
|
||||
@@ -74,8 +74,8 @@ RMBO:
|
||||
MustBeDestroyed:
|
||||
RequiredForShortGame: true
|
||||
AutoTarget:
|
||||
TargetWhenIdle: false
|
||||
TargetWhenDamaged: true
|
||||
EnableStances: false
|
||||
InitialStance: ReturnFire
|
||||
Health:
|
||||
HP: 150
|
||||
|
||||
|
||||
@@ -50,6 +50,6 @@ airstrike.proxy:
|
||||
ClockSequence: clock
|
||||
CircleSequence: circles
|
||||
|
||||
TDTRUK:
|
||||
TRUCK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
@@ -966,7 +966,9 @@
|
||||
RequiresForceFire: yes
|
||||
TargetTypes: Ground, Water
|
||||
Health:
|
||||
HP: 500
|
||||
HP: 600
|
||||
Armor:
|
||||
Type: Heavy
|
||||
SoundOnDamageTransition:
|
||||
DamagedSounds: xplos.aud
|
||||
DestroyedSounds: xplobig4.aud
|
||||
|
||||
@@ -133,3 +133,12 @@ STNK.Husk:
|
||||
IntoActor: stnk
|
||||
RenderSprites:
|
||||
Image: stnk.destroyed
|
||||
|
||||
TRUCK.Husk:
|
||||
Inherits: ^Husk
|
||||
Tooltip:
|
||||
Name: Supply Truck (Destroyed)
|
||||
TransformOnCapture:
|
||||
IntoActor: truck
|
||||
RenderSprites:
|
||||
Image: truck.destroyed
|
||||
@@ -8,6 +8,7 @@ E1:
|
||||
Name: Minigunner
|
||||
Buildable:
|
||||
BuildPaletteOrder: 10
|
||||
Prerequisites: barracks
|
||||
Queue: Infantry.GDI, Infantry.Nod
|
||||
Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles
|
||||
Mobile:
|
||||
@@ -66,6 +67,7 @@ E3:
|
||||
Name: Rocket Soldier
|
||||
Buildable:
|
||||
BuildPaletteOrder: 20
|
||||
Prerequisites: barracks
|
||||
Queue: Infantry.GDI, Infantry.Nod
|
||||
Description: Anti-tank/Anti-aircraft infantry. \n Strong vs Tanks, Aircraft\n Weak vs Infantry
|
||||
Mobile:
|
||||
@@ -160,10 +162,11 @@ E6:
|
||||
Name: Engineer
|
||||
Buildable:
|
||||
BuildPaletteOrder: 30
|
||||
Prerequisites: barracks
|
||||
Queue: Infantry.GDI, Infantry.Nod
|
||||
Description: Damages and captures enemy structures.\n Unarmed
|
||||
Mobile:
|
||||
Speed: 56
|
||||
Speed: 48
|
||||
Health:
|
||||
HP: 30
|
||||
Passenger:
|
||||
|
||||
@@ -776,6 +776,10 @@ SAM:
|
||||
Inherits@IDISABLE: ^DisabledOverlay
|
||||
Inherits@AUTOTARGET: ^AutoTargetAir
|
||||
Inherits@shape: ^2x1Shape
|
||||
HitShape:
|
||||
Type: Rectangle
|
||||
TopLeft: -768,-512
|
||||
BottomRight: 768,512
|
||||
Valued:
|
||||
Cost: 650
|
||||
Tooltip:
|
||||
@@ -928,7 +932,7 @@ ATWR:
|
||||
TurnSpeed: 255
|
||||
Offset: 128,128,384
|
||||
Armament@PRIMARY:
|
||||
Weapon: TowerMissle
|
||||
Weapon: TowerMissile
|
||||
LocalOffset: 256,128,0, 256,-128,0
|
||||
LocalYaw: -100,100
|
||||
Armament@SECONDARY:
|
||||
|
||||
@@ -586,12 +586,12 @@ MHQ:
|
||||
Buildable:
|
||||
Description: Mobile base of operations
|
||||
|
||||
TDTRUK:
|
||||
TRUCK:
|
||||
Inherits: ^Vehicle
|
||||
Buildable:
|
||||
Queue: Vehicle.GDI, Vehicle.Nod
|
||||
BuildPaletteOrder: 35
|
||||
Prerequisites: ~techlevel.low
|
||||
Prerequisites: vehicleproduction
|
||||
Description: Transports cash to other players.\n Unarmed
|
||||
Valued:
|
||||
Cost: 500
|
||||
@@ -610,3 +610,5 @@ TDTRUK:
|
||||
DeliversCash:
|
||||
Payload: 500
|
||||
PlayerExperience: 50
|
||||
SpawnActorOnDeath:
|
||||
Actor: TRUCK.Husk
|
||||
|
||||
@@ -337,8 +337,14 @@ apc.destroyed:
|
||||
Facings: 32
|
||||
ZOffset: -512
|
||||
|
||||
tdtruk:
|
||||
truck:
|
||||
idle:
|
||||
Facings: 32
|
||||
UseClassicFacingFudge: True
|
||||
icon: tdtrukicon
|
||||
icon: truckicon
|
||||
|
||||
truck.destroyed:
|
||||
idle: truck
|
||||
Facings: 32
|
||||
UseClassicFacingFudge: True
|
||||
ZOffset: -512
|
||||
|
||||
@@ -39,6 +39,8 @@ FlametankExplode:
|
||||
|
||||
HeliCrash:
|
||||
Inherits: ^DamagingExplosion
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Damage: 100
|
||||
|
||||
HeliExplode:
|
||||
Warhead@1Dam: SpreadDamage
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
Damage: 35
|
||||
ValidTargets: Ground, Air
|
||||
Versus:
|
||||
None: 30
|
||||
None: 20
|
||||
Wood: 85
|
||||
Light: 100
|
||||
Heavy: 100
|
||||
@@ -89,7 +89,7 @@ OrcaAGMissiles:
|
||||
Damage: 28
|
||||
ValidTargets: Ground
|
||||
Versus:
|
||||
None: 50
|
||||
None: 30
|
||||
Wood: 100
|
||||
Light: 100
|
||||
Heavy: 75
|
||||
@@ -215,7 +215,7 @@ BoatMissile:
|
||||
VictimScanRadius: 0
|
||||
ValidTargets: Air
|
||||
|
||||
TowerMissle:
|
||||
TowerMissile:
|
||||
Inherits: ^MissileWeapon
|
||||
ReloadDelay: 15
|
||||
Range: 7c0
|
||||
|
||||
@@ -43,7 +43,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 41
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Move
|
||||
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -59,6 +59,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 41
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Move
|
||||
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -75,6 +76,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 41
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Attack
|
||||
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -91,7 +93,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 41
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Guard
|
||||
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -108,6 +110,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Deploy
|
||||
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Thumpers will start or stop attracting worms\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -124,6 +127,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Scatter
|
||||
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -140,6 +144,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Stop
|
||||
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -155,6 +160,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 41
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Waypoint Mode
|
||||
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -178,6 +184,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background:
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Anything Stance
|
||||
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -194,6 +201,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background:
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Defend Stance
|
||||
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -210,6 +218,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background:
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Return Fire Stance
|
||||
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -226,6 +235,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background:
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Hold Fire Stance
|
||||
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
|
||||
@@ -36,7 +36,7 @@ harvester.husk:
|
||||
idle: DATA.R8
|
||||
Start: 1699
|
||||
Facings: -32
|
||||
ZOffset: -1023
|
||||
ZOffset: -512
|
||||
|
||||
trike:
|
||||
idle: DATA.R8
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 209 KiB |
@@ -15,10 +15,13 @@ Sound:
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Range: 0, 32
|
||||
Falloff: 100, 100
|
||||
Damage: 150
|
||||
Damage: 86
|
||||
AffectsParent: false
|
||||
ValidStances: Neutral, Enemy
|
||||
Versus:
|
||||
none: 200
|
||||
light: 110
|
||||
wood: 110
|
||||
wall: 50
|
||||
building: 60
|
||||
heavy: 60
|
||||
@@ -28,11 +31,14 @@ Sound:
|
||||
DamageTypes: Prone50Percent, TriggerProne, SoundDeath
|
||||
Warhead@2Dam: SpreadDamage
|
||||
Range: 0, 32
|
||||
Falloff: 50, 50 # Only does half damage to friendly units
|
||||
Damage: 150
|
||||
Falloff: 100, 100
|
||||
Damage: 43 # Only does half damage to friendly units
|
||||
AffectsParent: false
|
||||
ValidStances: Ally
|
||||
Versus:
|
||||
none: 200
|
||||
light: 110
|
||||
wood: 110
|
||||
wall: 50
|
||||
building: 60
|
||||
heavy: 60
|
||||
|
||||
@@ -49,7 +49,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Move
|
||||
TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nLeft-click icon then right-click on target location.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -66,6 +66,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Move
|
||||
TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n - Units entering transports will consider nearby alternatives\n - Chrono Tanks will teleport towards the target location\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -83,6 +84,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Force Attack
|
||||
TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -100,7 +102,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Guard
|
||||
TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -118,8 +120,9 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Deploy
|
||||
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Aircraft will return to base\n\nActs immediately on selected units.
|
||||
TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Demolition Trucks and MAD Tanks will self-destruct\n - Aircraft will return to base\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
Children:
|
||||
Image@ICON:
|
||||
@@ -135,6 +138,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Scatter
|
||||
TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -152,6 +156,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Stop
|
||||
TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -168,6 +173,7 @@ Container@PLAYER_WIDGETS:
|
||||
Height: 26
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeySound: true
|
||||
TooltipText: Waypoint Mode
|
||||
TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units.
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -192,6 +198,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Attack Anything Stance
|
||||
TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -209,6 +216,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Defend Stance
|
||||
TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -226,6 +234,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Return Fire Stance
|
||||
TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
@@ -243,6 +252,7 @@ Container@PLAYER_WIDGETS:
|
||||
VisualHeight: 0
|
||||
Background: command-button
|
||||
DisableKeyRepeat: true
|
||||
DisableKeySound: true
|
||||
TooltipText: Hold Fire Stance
|
||||
TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies
|
||||
TooltipContainer: TOOLTIP_CONTAINER
|
||||
|
||||
@@ -118,7 +118,7 @@ aftermath-linux: Aftermath Expansion Disc (English)
|
||||
readme.txt: 9902fb74c019df1b76ff5634e68f0371d790b5e0
|
||||
setup/install/patch.rtp: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17
|
||||
Install:
|
||||
extract-raw: SETUP/INSTALL/PATCH.RTP
|
||||
extract-raw: setup/install/patch.rtp
|
||||
^Content/ra/v2/expand/expand2.mix:
|
||||
Offset: 4712984
|
||||
Length: 469922
|
||||
|
||||
BIN
mods/ra/maps/agenda.oramap
Normal file
BIN
mods/ra/maps/agenda.oramap
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,6 +8,8 @@ World:
|
||||
-StartGameNotification:
|
||||
MissionData:
|
||||
Briefing: Dr. Demitri, creator of a Soviet Super Tank, wants to defect.\n\nWe planned to extract him while the Soviets were testing their new weapon, but something has gone wrong.\n\nThe Super Tanks are out of control, and Demitri is missing -- likely hiding in the village to the far south.\n\nFind our outpost and start repairs on it, then find and evacuate Demitri.\n\nAs for the tanks, we can reprogram them. Send a spy into the Soviet radar dome in the NE, turning the tanks on their creators.\n
|
||||
WinVideo: sovbatl.vqa
|
||||
LossVideo: sovtstar.vqa
|
||||
|
||||
^Building:
|
||||
AnnounceOnSeen:
|
||||
@@ -184,7 +186,7 @@ DOME.NoInfiltrate:
|
||||
Image: DOME
|
||||
-InfiltrateForExploration:
|
||||
Targetable:
|
||||
TargetTypes: Ground, C4, DetonateAttack, MissionObjective
|
||||
TargetTypes: Ground, Structure, C4, DetonateAttack, MissionObjective
|
||||
|
||||
SPY:
|
||||
Infiltrates:
|
||||
|
||||
Binary file not shown.
BIN
mods/ra/maps/poland-raid/map.bin
Normal file
BIN
mods/ra/maps/poland-raid/map.bin
Normal file
Binary file not shown.
BIN
mods/ra/maps/poland-raid/map.png
Normal file
BIN
mods/ra/maps/poland-raid/map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
784
mods/ra/maps/poland-raid/map.yaml
Normal file
784
mods/ra/maps/poland-raid/map.yaml
Normal file
@@ -0,0 +1,784 @@
|
||||
MapFormat: 11
|
||||
|
||||
RequiresMod: ra
|
||||
|
||||
Title: Poland Raid
|
||||
|
||||
Author: s1w
|
||||
|
||||
Tileset: TEMPERAT
|
||||
|
||||
MapSize: 128,128
|
||||
|
||||
Bounds: 16,16,96,96
|
||||
|
||||
Visibility: Lobby
|
||||
|
||||
Categories: Conquest
|
||||
|
||||
Players:
|
||||
PlayerReference@Neutral:
|
||||
Name: Neutral
|
||||
OwnsWorld: True
|
||||
NonCombatant: True
|
||||
Faction: allies
|
||||
PlayerReference@Multi0:
|
||||
Name: Multi0
|
||||
Playable: True
|
||||
Faction: Random
|
||||
Enemies: Creeps
|
||||
AllowBots: false
|
||||
PlayerReference@Creeps:
|
||||
Name: Creeps
|
||||
NonCombatant: True
|
||||
Faction: allies
|
||||
Enemies: Multi0, Multi1, Multi2, Multi3, Multi4
|
||||
PlayerReference@Multi1:
|
||||
Name: Multi1
|
||||
Playable: True
|
||||
Faction: Random
|
||||
Enemies: Creeps
|
||||
AllowBots: false
|
||||
PlayerReference@Multi2:
|
||||
Name: Multi2
|
||||
Playable: True
|
||||
Faction: Random
|
||||
Enemies: Creeps
|
||||
AllowBots: false
|
||||
PlayerReference@Multi3:
|
||||
Name: Multi3
|
||||
Playable: True
|
||||
Faction: Random
|
||||
Enemies: Creeps
|
||||
AllowBots: false
|
||||
PlayerReference@Multi4:
|
||||
Name: Multi4
|
||||
Playable: True
|
||||
Faction: Random
|
||||
Enemies: Creeps
|
||||
AllowBots: false
|
||||
|
||||
Actors:
|
||||
Actor1: v16
|
||||
Location: 26,55
|
||||
Owner: Neutral
|
||||
Actor2: v18
|
||||
Location: 27,54
|
||||
Owner: Neutral
|
||||
Actor14: tc05
|
||||
Location: 94,32
|
||||
Owner: Neutral
|
||||
Actor15: tc05
|
||||
Location: 95,35
|
||||
Owner: Neutral
|
||||
Actor16: tc02
|
||||
Location: 33,20
|
||||
Owner: Neutral
|
||||
Actor17: tc04
|
||||
Location: 32,17
|
||||
Owner: Neutral
|
||||
Actor18: tc05
|
||||
Location: 34,18
|
||||
Owner: Neutral
|
||||
Actor19: tc05
|
||||
Location: 86,53
|
||||
Owner: Neutral
|
||||
Actor20: tc02
|
||||
Location: 86,34
|
||||
Owner: Neutral
|
||||
Actor21: tc02
|
||||
Location: 55,35
|
||||
Owner: Neutral
|
||||
Actor22: t17
|
||||
Location: 58,36
|
||||
Owner: Neutral
|
||||
Actor23: t07
|
||||
Location: 16,89
|
||||
Owner: Neutral
|
||||
Actor24: tc04
|
||||
Location: 19,90
|
||||
Owner: Neutral
|
||||
Actor25: tc04
|
||||
Location: 17,51
|
||||
Owner: Neutral
|
||||
Actor26: tc04
|
||||
Location: 22,52
|
||||
Owner: Neutral
|
||||
Actor27: tc04
|
||||
Location: 25,49
|
||||
Owner: Neutral
|
||||
Actor28: tc04
|
||||
Location: 18,56
|
||||
Owner: Neutral
|
||||
Actor29: tc05
|
||||
Location: 18,53
|
||||
Owner: Neutral
|
||||
Actor30: tc05
|
||||
Location: 23,47
|
||||
Owner: Neutral
|
||||
Actor31: tc03
|
||||
Location: 16,55
|
||||
Owner: Neutral
|
||||
Actor32: tc03
|
||||
Location: 21,55
|
||||
Owner: Neutral
|
||||
Actor34: tc01
|
||||
Location: 21,49
|
||||
Owner: Neutral
|
||||
Actor35: t17
|
||||
Location: 26,52
|
||||
Owner: Neutral
|
||||
Actor36: t17
|
||||
Location: 17,56
|
||||
Owner: Neutral
|
||||
Actor37: t14
|
||||
Location: 23,51
|
||||
Owner: Neutral
|
||||
Actor38: t14
|
||||
Location: 16,53
|
||||
Owner: Neutral
|
||||
Actor39: tc04
|
||||
Location: 29,109
|
||||
Owner: Neutral
|
||||
Actor41: tc01
|
||||
Location: 53,98
|
||||
Owner: Neutral
|
||||
Actor42: tc04
|
||||
Location: 37,86
|
||||
Owner: Neutral
|
||||
Actor43: tc02
|
||||
Location: 16,83
|
||||
Owner: Neutral
|
||||
Actor44: tc05
|
||||
Location: 40,109
|
||||
Owner: Neutral
|
||||
Actor45: tc04
|
||||
Location: 30,106
|
||||
Owner: Neutral
|
||||
Actor46: tc04
|
||||
Location: 27,107
|
||||
Owner: Neutral
|
||||
Actor47: tc02
|
||||
Location: 34,108
|
||||
Owner: Neutral
|
||||
Actor48: tc02
|
||||
Location: 32,108
|
||||
Owner: Neutral
|
||||
Actor49: tc02
|
||||
Location: 32,110
|
||||
Owner: Neutral
|
||||
Actor50: t03
|
||||
Location: 33,106
|
||||
Owner: Neutral
|
||||
Actor51: t03
|
||||
Location: 30,108
|
||||
Owner: Neutral
|
||||
Actor52: t16
|
||||
Location: 41,95
|
||||
Owner: Neutral
|
||||
Actor53: tc05
|
||||
Location: 109,109
|
||||
Owner: Neutral
|
||||
Actor54: tc05
|
||||
Location: 37,109
|
||||
Owner: Neutral
|
||||
Actor55: tc01
|
||||
Location: 35,109
|
||||
Owner: Neutral
|
||||
Actor62: tc01
|
||||
Location: 57,37
|
||||
Owner: Neutral
|
||||
Actor63: tc03
|
||||
Location: 59,37
|
||||
Owner: Neutral
|
||||
Actor64: tc03
|
||||
Location: 53,35
|
||||
Owner: Neutral
|
||||
Actor66: tc02
|
||||
Location: 41,51
|
||||
Owner: Neutral
|
||||
Actor67: tc01
|
||||
Location: 97,32
|
||||
Owner: Neutral
|
||||
Actor68: tc01
|
||||
Location: 97,33
|
||||
Owner: Neutral
|
||||
Actor69: tc03
|
||||
Location: 98,31
|
||||
Owner: Neutral
|
||||
Actor70: tc02
|
||||
Location: 77,88
|
||||
Owner: Neutral
|
||||
Actor71: tc04
|
||||
Location: 103,73
|
||||
Owner: Neutral
|
||||
Actor72: t12
|
||||
Location: 102,74
|
||||
Owner: Neutral
|
||||
Actor73: t03
|
||||
Location: 99,74
|
||||
Owner: Neutral
|
||||
Actor74: t08
|
||||
Location: 84,90
|
||||
Owner: Neutral
|
||||
Actor76: tc04
|
||||
Location: 94,75
|
||||
Owner: Neutral
|
||||
Actor77: tc05
|
||||
Location: 91,76
|
||||
Owner: Neutral
|
||||
Actor79: tc03
|
||||
Location: 85,76
|
||||
Owner: Neutral
|
||||
Actor80: tc04
|
||||
Location: 73,88
|
||||
Owner: Neutral
|
||||
Actor81: tc01
|
||||
Location: 71,88
|
||||
Owner: Neutral
|
||||
Actor82: tc01
|
||||
Location: 77,99
|
||||
Owner: Neutral
|
||||
Actor83: t07
|
||||
Location: 26,89
|
||||
Owner: Neutral
|
||||
Actor84: t08
|
||||
Location: 23,91
|
||||
Owner: Neutral
|
||||
Actor85: v12
|
||||
Location: 41,94
|
||||
Owner: Neutral
|
||||
Actor88: t11
|
||||
Location: 38,32
|
||||
Owner: Neutral
|
||||
Actor89: t08
|
||||
Location: 95,44
|
||||
Owner: Neutral
|
||||
Actor90: t12
|
||||
Location: 23,48
|
||||
Owner: Neutral
|
||||
Actor94: t16
|
||||
Location: 29,106
|
||||
Owner: Neutral
|
||||
Actor95: tc04
|
||||
Location: 54,74
|
||||
Owner: Neutral
|
||||
Actor96: tc05
|
||||
Location: 48,72
|
||||
Owner: Neutral
|
||||
Actor98: t12
|
||||
Location: 47,72
|
||||
Owner: Neutral
|
||||
Actor100: tc02
|
||||
Location: 39,78
|
||||
Owner: Neutral
|
||||
Actor101: tc02
|
||||
Location: 33,90
|
||||
Owner: Neutral
|
||||
Actor102: tc03
|
||||
Location: 41,76
|
||||
Owner: Neutral
|
||||
Actor103: t06
|
||||
Location: 47,73
|
||||
Owner: Neutral
|
||||
Actor104: t08
|
||||
Location: 33,78
|
||||
Owner: Neutral
|
||||
Actor105: t02
|
||||
Location: 32,89
|
||||
Owner: Neutral
|
||||
Actor106: tc01
|
||||
Location: 29,89
|
||||
Owner: Neutral
|
||||
Actor107: t07
|
||||
Location: 28,89
|
||||
Owner: Neutral
|
||||
Actor108: tc04
|
||||
Location: 34,75
|
||||
Owner: Neutral
|
||||
Actor109: t16
|
||||
Location: 35,74
|
||||
Owner: Neutral
|
||||
Actor110: tc02
|
||||
Location: 38,73
|
||||
Owner: Neutral
|
||||
Actor111: t11
|
||||
Location: 37,74
|
||||
Owner: Neutral
|
||||
Actor112: t11
|
||||
Location: 16,84
|
||||
Owner: Neutral
|
||||
Actor113: t05
|
||||
Location: 37,78
|
||||
Owner: Neutral
|
||||
Actor114: t17
|
||||
Location: 71,43
|
||||
Owner: Neutral
|
||||
Actor115: tc01
|
||||
Location: 76,32
|
||||
Owner: Neutral
|
||||
Actor116: t16
|
||||
Location: 75,31
|
||||
Owner: Neutral
|
||||
Actor117: t16
|
||||
Location: 87,48
|
||||
Owner: Neutral
|
||||
Actor118: t17
|
||||
Location: 85,44
|
||||
Owner: Neutral
|
||||
Actor119: t11
|
||||
Location: 79,46
|
||||
Owner: Neutral
|
||||
Actor120: t08
|
||||
Location: 72,40
|
||||
Owner: Neutral
|
||||
Actor121: t02
|
||||
Location: 69,21
|
||||
Owner: Neutral
|
||||
Actor122: t08
|
||||
Location: 70,22
|
||||
Owner: Neutral
|
||||
Actor123: tc01
|
||||
Location: 66,23
|
||||
Owner: Neutral
|
||||
Actor124: t16
|
||||
Location: 66,21
|
||||
Owner: Neutral
|
||||
Actor125: t05
|
||||
Location: 69,18
|
||||
Owner: Neutral
|
||||
Actor126: t13
|
||||
Location: 66,18
|
||||
Owner: Neutral
|
||||
Actor127: t01
|
||||
Location: 68,21
|
||||
Owner: Neutral
|
||||
Actor0: tc01
|
||||
Location: 94,24
|
||||
Owner: Neutral
|
||||
Actor132: tc04
|
||||
Location: 63,18
|
||||
Owner: Neutral
|
||||
Actor133: tc04
|
||||
Location: 40,49
|
||||
Owner: Neutral
|
||||
Actor138: tc01
|
||||
Location: 38,50
|
||||
Owner: Neutral
|
||||
Actor176: t16
|
||||
Location: 100,75
|
||||
Owner: Neutral
|
||||
Actor137: tc01
|
||||
Location: 42,96
|
||||
Owner: Neutral
|
||||
Actor190: t05
|
||||
Location: 28,50
|
||||
Owner: Neutral
|
||||
Actor139: tc01
|
||||
Location: 49,32
|
||||
Owner: Neutral
|
||||
Actor140: t05
|
||||
Location: 48,33
|
||||
Owner: Neutral
|
||||
Actor141: t01
|
||||
Location: 46,35
|
||||
Owner: Neutral
|
||||
Actor143: tc02
|
||||
Location: 65,34
|
||||
Owner: Neutral
|
||||
Actor144: tc01
|
||||
Location: 65,35
|
||||
Owner: Neutral
|
||||
Actor145: tc02
|
||||
Location: 65,37
|
||||
Owner: Neutral
|
||||
Actor146: t08
|
||||
Location: 56,37
|
||||
Owner: Neutral
|
||||
Actor147: tc05
|
||||
Location: 53,32
|
||||
Owner: Neutral
|
||||
Actor148: tc01
|
||||
Location: 56,33
|
||||
Owner: Neutral
|
||||
Actor149: t12
|
||||
Location: 57,34
|
||||
Owner: Neutral
|
||||
Actor150: tc04
|
||||
Location: 62,28
|
||||
Owner: Neutral
|
||||
Actor151: tc04
|
||||
Location: 59,34
|
||||
Owner: Neutral
|
||||
Actor152: t07
|
||||
Location: 61,28
|
||||
Owner: Neutral
|
||||
Actor153: t05
|
||||
Location: 60,27
|
||||
Owner: Neutral
|
||||
Actor154: tc01
|
||||
Location: 42,34
|
||||
Owner: Neutral
|
||||
Actor155: t07
|
||||
Location: 43,33
|
||||
Owner: Neutral
|
||||
Actor156: t08
|
||||
Location: 44,34
|
||||
Owner: Neutral
|
||||
Actor157: t16
|
||||
Location: 41,34
|
||||
Owner: Neutral
|
||||
Actor158: tc01
|
||||
Location: 80,30
|
||||
Owner: Neutral
|
||||
Actor159: t11
|
||||
Location: 79,29
|
||||
Owner: Neutral
|
||||
Actor8: t06
|
||||
Location: 89,30
|
||||
Owner: Neutral
|
||||
Actor128: t06
|
||||
Location: 95,25
|
||||
Owner: Neutral
|
||||
Actor163: t03
|
||||
Location: 71,33
|
||||
Owner: Neutral
|
||||
Actor164: t08
|
||||
Location: 57,53
|
||||
Owner: Neutral
|
||||
Actor165: t08
|
||||
Location: 30,89
|
||||
Owner: Neutral
|
||||
Actor166: tc01
|
||||
Location: 28,88
|
||||
Owner: Neutral
|
||||
Actor167: t11
|
||||
Location: 26,88
|
||||
Owner: Neutral
|
||||
Actor168: t07
|
||||
Location: 55,99
|
||||
Owner: Neutral
|
||||
Actor169: t13
|
||||
Location: 20,86
|
||||
Owner: Neutral
|
||||
Actor170: t11
|
||||
Location: 33,86
|
||||
Owner: Neutral
|
||||
Actor171: tc05
|
||||
Location: 16,90
|
||||
Owner: Neutral
|
||||
Actor172: tc02
|
||||
Location: 22,89
|
||||
Owner: Neutral
|
||||
Actor173: t02
|
||||
Location: 17,69
|
||||
Owner: Neutral
|
||||
Actor174: t11
|
||||
Location: 29,72
|
||||
Owner: Neutral
|
||||
Actor175: t11
|
||||
Location: 86,95
|
||||
Owner: Neutral
|
||||
Actor177: tc01
|
||||
Location: 36,16
|
||||
Owner: Neutral
|
||||
Actor178: tc02
|
||||
Location: 33,16
|
||||
Owner: Neutral
|
||||
Actor179: t15
|
||||
Location: 31,16
|
||||
Owner: Neutral
|
||||
Actor180: t11
|
||||
Location: 54,19
|
||||
Owner: Neutral
|
||||
Actor186: tc04
|
||||
Location: 109,77
|
||||
Owner: Neutral
|
||||
Actor187: tc01
|
||||
Location: 105,72
|
||||
Owner: Neutral
|
||||
Actor188: t10
|
||||
Location: 107,73
|
||||
Owner: Neutral
|
||||
Actor191: tc03
|
||||
Location: 27,110
|
||||
Owner: Neutral
|
||||
Actor192: t08
|
||||
Location: 24,51
|
||||
Owner: Neutral
|
||||
Actor193: t08
|
||||
Location: 21,51
|
||||
Owner: Neutral
|
||||
Actor194: t08
|
||||
Location: 22,49
|
||||
Owner: Neutral
|
||||
Actor134: tc04
|
||||
Location: 32,50
|
||||
Owner: Neutral
|
||||
Actor198: tc04
|
||||
Location: 18,71
|
||||
Owner: Neutral
|
||||
Actor199: t16
|
||||
Location: 16,70
|
||||
Owner: Neutral
|
||||
Actor200: tc02
|
||||
Location: 20,74
|
||||
Owner: Neutral
|
||||
Actor201: tc05
|
||||
Location: 17,77
|
||||
Owner: Neutral
|
||||
Actor202: tc03
|
||||
Location: 19,73
|
||||
Owner: Neutral
|
||||
Actor203: tc05
|
||||
Location: 16,67
|
||||
Owner: Neutral
|
||||
Actor204: t12
|
||||
Location: 19,66
|
||||
Owner: Neutral
|
||||
Actor205: t11
|
||||
Location: 107,83
|
||||
Owner: Neutral
|
||||
Actor206: t05
|
||||
Location: 108,110
|
||||
Owner: Neutral
|
||||
Actor207: t15
|
||||
Location: 65,59
|
||||
Owner: Neutral
|
||||
Actor208: tc03
|
||||
Location: 57,64
|
||||
Owner: Neutral
|
||||
Actor209: t17
|
||||
Location: 63,68
|
||||
Owner: Neutral
|
||||
Actor210: t16
|
||||
Location: 68,70
|
||||
Owner: Neutral
|
||||
Actor211: tc04
|
||||
Location: 62,66
|
||||
Owner: Neutral
|
||||
Actor212: t16
|
||||
Location: 16,50
|
||||
Owner: Neutral
|
||||
Actor213: t16
|
||||
Location: 21,46
|
||||
Owner: Neutral
|
||||
Actor214: t17
|
||||
Location: 20,48
|
||||
Owner: Neutral
|
||||
Actor215: t08
|
||||
Location: 25,38
|
||||
Owner: Neutral
|
||||
Actor216: t08
|
||||
Location: 21,58
|
||||
Owner: Neutral
|
||||
Actor197: tc02
|
||||
Location: 69,66
|
||||
Owner: Neutral
|
||||
Actor219: tc01
|
||||
Location: 72,67
|
||||
Owner: Neutral
|
||||
Actor224: tc01
|
||||
Location: 87,76
|
||||
Owner: Neutral
|
||||
Actor225: oilb
|
||||
Location: 68,68
|
||||
Owner: Neutral
|
||||
Actor99: brl3
|
||||
Location: 59,64
|
||||
Owner: Neutral
|
||||
Actor227: barl
|
||||
Location: 67,70
|
||||
Owner: Neutral
|
||||
Actor228: brl3
|
||||
Location: 66,68
|
||||
Owner: Neutral
|
||||
Actor226: oilb
|
||||
Location: 59,62
|
||||
Owner: Neutral
|
||||
Actor230: barl
|
||||
Location: 60,65
|
||||
Owner: Neutral
|
||||
Actor231: v15
|
||||
Location: 66,70
|
||||
Owner: Neutral
|
||||
Actor232: dog
|
||||
Location: 63,65
|
||||
Owner: Creeps
|
||||
Actor233: oilb
|
||||
Location: 23,34
|
||||
Owner: Neutral
|
||||
Actor229: barl
|
||||
Location: 61,65
|
||||
Owner: Neutral
|
||||
Actor235: brl3
|
||||
Location: 26,36
|
||||
Owner: Neutral
|
||||
Actor33: v07
|
||||
Location: 61,63
|
||||
Owner: Neutral
|
||||
Actor234: t05
|
||||
Location: 27,84
|
||||
Owner: Neutral
|
||||
Actor218: t05
|
||||
Location: 71,67
|
||||
Owner: Neutral
|
||||
Actor217: t16
|
||||
Location: 21,34
|
||||
Owner: Neutral
|
||||
Actor223: t13
|
||||
Location: 46,73
|
||||
Owner: Neutral
|
||||
Actor238: t08
|
||||
Location: 16,79
|
||||
Owner: Neutral
|
||||
Actor239: t02
|
||||
Location: 81,77
|
||||
Owner: Neutral
|
||||
Actor136: t16
|
||||
Location: 61,102
|
||||
Owner: Neutral
|
||||
Actor185: fenc
|
||||
Location: 49,84
|
||||
Owner: Neutral
|
||||
Actor3: t08
|
||||
Location: 53,75
|
||||
Owner: Neutral
|
||||
Actor78: t16
|
||||
Location: 111,42
|
||||
Owner: Neutral
|
||||
Actor61: tc01
|
||||
Location: 109,23
|
||||
Owner: Neutral
|
||||
Actor161: t08
|
||||
Location: 107,23
|
||||
Owner: Neutral
|
||||
Actor162: t07
|
||||
Location: 98,28
|
||||
Owner: Neutral
|
||||
Actor12: t07
|
||||
Location: 41,75
|
||||
Owner: Neutral
|
||||
Actor221: t08
|
||||
Location: 91,86
|
||||
Owner: Neutral
|
||||
Actor222: mine
|
||||
Owner: Neutral
|
||||
Location: 109,46
|
||||
Actor237: mine
|
||||
Owner: Neutral
|
||||
Location: 108,49
|
||||
Actor241: mine
|
||||
Owner: Neutral
|
||||
Location: 86,27
|
||||
Actor242: mine
|
||||
Owner: Neutral
|
||||
Location: 82,22
|
||||
Actor243: mine
|
||||
Owner: Neutral
|
||||
Location: 79,25
|
||||
Actor244: mine
|
||||
Owner: Neutral
|
||||
Location: 74,24
|
||||
Actor245: mine
|
||||
Owner: Neutral
|
||||
Location: 92,17
|
||||
Actor246: mine
|
||||
Owner: Neutral
|
||||
Location: 60,17
|
||||
Actor247: mine
|
||||
Owner: Neutral
|
||||
Location: 62,21
|
||||
Actor248: mine
|
||||
Owner: Neutral
|
||||
Location: 42,31
|
||||
Actor249: mine
|
||||
Owner: Neutral
|
||||
Location: 37,29
|
||||
Actor250: mine
|
||||
Owner: Neutral
|
||||
Location: 65,46
|
||||
Actor251: mine
|
||||
Owner: Neutral
|
||||
Location: 60,45
|
||||
Actor252: mine
|
||||
Owner: Neutral
|
||||
Location: 59,49
|
||||
Actor253: mine
|
||||
Owner: Neutral
|
||||
Location: 78,52
|
||||
Actor254: mine
|
||||
Owner: Neutral
|
||||
Location: 40,62
|
||||
Actor255: mine
|
||||
Owner: Neutral
|
||||
Location: 22,83
|
||||
Actor256: mine
|
||||
Owner: Neutral
|
||||
Location: 27,82
|
||||
Actor257: mine
|
||||
Owner: Neutral
|
||||
Location: 22,93
|
||||
Actor258: mine
|
||||
Owner: Neutral
|
||||
Location: 29,92
|
||||
Actor259: mine
|
||||
Owner: Neutral
|
||||
Location: 50,78
|
||||
Actor260: mine
|
||||
Owner: Neutral
|
||||
Location: 52,84
|
||||
Actor261: mine
|
||||
Owner: Neutral
|
||||
Location: 57,80
|
||||
Actor262: mine
|
||||
Owner: Neutral
|
||||
Location: 46,88
|
||||
Actor263: mine
|
||||
Owner: Neutral
|
||||
Location: 43,82
|
||||
Actor264: mine
|
||||
Owner: Neutral
|
||||
Location: 58,91
|
||||
Actor265: mine
|
||||
Owner: Neutral
|
||||
Location: 56,103
|
||||
Actor266: mine
|
||||
Owner: Neutral
|
||||
Location: 52,105
|
||||
Actor267: mine
|
||||
Owner: Neutral
|
||||
Location: 93,109
|
||||
Actor268: mine
|
||||
Owner: Neutral
|
||||
Location: 88,107
|
||||
Actor269: mine
|
||||
Owner: Neutral
|
||||
Location: 82,109
|
||||
Actor270: mine
|
||||
Owner: Neutral
|
||||
Location: 78,103
|
||||
Actor271: mine
|
||||
Owner: Neutral
|
||||
Location: 109,102
|
||||
Actor272: mine
|
||||
Owner: Neutral
|
||||
Location: 110,97
|
||||
Actor273: mine
|
||||
Owner: Neutral
|
||||
Location: 86,79
|
||||
Actor279: mpspawn
|
||||
Owner: Neutral
|
||||
Location: 46,24
|
||||
Actor280: mpspawn
|
||||
Owner: Neutral
|
||||
Location: 103,32
|
||||
Actor274: mpspawn
|
||||
Owner: Neutral
|
||||
Location: 26,66
|
||||
Actor275: mpspawn
|
||||
Owner: Neutral
|
||||
Location: 34,101
|
||||
Actor276: mpspawn
|
||||
Owner: Neutral
|
||||
Location: 99,85
|
||||
@@ -87,6 +87,7 @@ MIG:
|
||||
BuildAtProductionType: Plane
|
||||
BuildPaletteOrder: 50
|
||||
Prerequisites: ~afld, stek, ~techlevel.high
|
||||
BuildDuration: 1750
|
||||
Description: Fast Ground-Attack Plane.\n Strong vs Buildings, Tanks\n Weak vs Infantry, Light armor, Aircraft
|
||||
Valued:
|
||||
Cost: 2000
|
||||
@@ -117,9 +118,8 @@ MIG:
|
||||
RepulsionSpeed: 40
|
||||
MaximumPitch: 56
|
||||
AutoTarget:
|
||||
TargetWhenIdle: false
|
||||
TargetWhenDamaged: false
|
||||
EnableStances: false
|
||||
InitialStance: HoldFire
|
||||
InitialStanceAI: HoldFire
|
||||
AmmoPool:
|
||||
Ammo: 8
|
||||
ReturnOnIdle:
|
||||
@@ -182,9 +182,8 @@ YAK:
|
||||
RepulsionSpeed: 40
|
||||
MaximumPitch: 56
|
||||
AutoTarget:
|
||||
TargetWhenIdle: false
|
||||
TargetWhenDamaged: false
|
||||
EnableStances: false
|
||||
InitialStance: HoldFire
|
||||
InitialStanceAI: HoldFire
|
||||
AmmoPool:
|
||||
Ammo: 18
|
||||
PipCount: 6
|
||||
@@ -216,22 +215,22 @@ TRAN:
|
||||
Tooltip:
|
||||
Name: Chinook
|
||||
Health:
|
||||
HP: 120
|
||||
HP: 140
|
||||
Armor:
|
||||
Type: Light
|
||||
RevealsShroud:
|
||||
Range: 10c0
|
||||
Range: 8c0
|
||||
Type: GroundPosition
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 8c0
|
||||
Range: 6c0
|
||||
Type: GroundPosition
|
||||
Aircraft:
|
||||
InitialFacing: 224
|
||||
TurnSpeed: 5
|
||||
Speed: 112
|
||||
Speed: 128
|
||||
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach,Gems
|
||||
AltitudeVelocity: 0c100
|
||||
AltitudeVelocity: 0c58
|
||||
WithIdleOverlay@ROTOR1AIR:
|
||||
Offset: 597,0,213
|
||||
Sequence: rotor
|
||||
@@ -265,6 +264,7 @@ HELI:
|
||||
BuildAtProductionType: Helicopter
|
||||
BuildPaletteOrder: 40
|
||||
Prerequisites: ~hpad, atek, ~techlevel.high
|
||||
BuildDuration: 1750
|
||||
Description: Helicopter gunship armed\nwith multi-purpose missiles.\n Strong vs Tanks, Aircraft\n Weak vs Infantry
|
||||
Valued:
|
||||
Cost: 2000
|
||||
|
||||
@@ -69,19 +69,27 @@ FCOM:
|
||||
Footprint: xx xx ==
|
||||
Dimensions: 2,3
|
||||
LocalCenterOffset: 0,-512,0
|
||||
Valued:
|
||||
Cost: 2000
|
||||
Health:
|
||||
HP: 400
|
||||
HP: 800
|
||||
Armor:
|
||||
Type: Wood
|
||||
Tooltip:
|
||||
Name: Forward Command
|
||||
RevealsShroud:
|
||||
Range: 10c0
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
WithBuildingBib:
|
||||
ExternalCapturable:
|
||||
CaptureCompleteTime: 30
|
||||
ExternalCapturableBar:
|
||||
GivesBuildableArea:
|
||||
BaseProvider:
|
||||
Range: 8c0
|
||||
EngineerRepairable:
|
||||
Power:
|
||||
Amount: -200
|
||||
Amount: 0
|
||||
ProvidesPrerequisite@buildingname:
|
||||
|
||||
HOSP:
|
||||
@@ -352,17 +360,21 @@ MISS:
|
||||
Footprint: xxx xxx ===
|
||||
Dimensions: 3,3
|
||||
LocalCenterOffset: 0,-512,0
|
||||
Valued:
|
||||
Cost: 2000
|
||||
Health:
|
||||
HP: 400
|
||||
HP: 600
|
||||
RevealsShroud:
|
||||
Range: 3c0
|
||||
Range: 10c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 6c0
|
||||
Armor:
|
||||
Type: Wood
|
||||
Tooltip:
|
||||
Name: Technology Center
|
||||
Name: Communications Center
|
||||
WithBuildingBib:
|
||||
ExternalCapturable:
|
||||
ExternalCapturableBar:
|
||||
EngineerRepairable:
|
||||
WithDeathAnimation:
|
||||
DeathSequence: dead
|
||||
UseDeathTypeSuffix: false
|
||||
|
||||
@@ -761,8 +761,6 @@
|
||||
TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget
|
||||
Armor:
|
||||
Type: Light
|
||||
Targetable:
|
||||
TargetTypes: Ground, DetonateAttack
|
||||
EditorTilesetFilter:
|
||||
Categories: Decoration
|
||||
|
||||
|
||||
@@ -332,6 +332,8 @@ E7:
|
||||
StandSequences: stand
|
||||
AnnounceOnBuild:
|
||||
AnnounceOnKill:
|
||||
DetectCloaked:
|
||||
CloakTypes: Cloak, Hijacker
|
||||
Voiced:
|
||||
VoiceSet: TanyaVoice
|
||||
ProducibleWithLevel:
|
||||
@@ -350,7 +352,7 @@ MEDI:
|
||||
Tooltip:
|
||||
Name: Medic
|
||||
Health:
|
||||
HP: 80
|
||||
HP: 60
|
||||
RevealsShroud:
|
||||
Range: 3c0
|
||||
Passenger:
|
||||
@@ -536,11 +538,11 @@ SHOK:
|
||||
Prerequisites: ~barr, stek, tsla, ~infantry.russia, ~techlevel.high
|
||||
Description: Elite infantry with portable tesla coils.\n Strong vs Infantry, Vehicles\n Weak vs Aircraft
|
||||
Valued:
|
||||
Cost: 400
|
||||
Cost: 300
|
||||
Tooltip:
|
||||
Name: Shock Trooper
|
||||
Health:
|
||||
HP: 60
|
||||
HP: 50
|
||||
Mobile:
|
||||
Voice: Move
|
||||
RevealsShroud:
|
||||
|
||||
@@ -18,6 +18,7 @@ Player:
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: Building
|
||||
SpeedUp: True
|
||||
BuildTimeSpeedReduction: 100, 75, 60, 50
|
||||
ClassicProductionQueue@Infantry:
|
||||
Type: Infantry
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
@@ -68,6 +68,7 @@ MSUB:
|
||||
BuildAtProductionType: Submarine
|
||||
BuildPaletteOrder: 60
|
||||
Prerequisites: ~spen, stek, ~techlevel.high
|
||||
BuildDuration: 1750
|
||||
Description: Submerged anti-ground siege unit\nwith anti-air capabilities.\nCan detect other submarines.\n Strong vs Buildings, Ground units, Aircraft\n Weak vs Naval units\n Special Ability: Submerge
|
||||
Valued:
|
||||
Cost: 2000
|
||||
@@ -182,6 +183,7 @@ CA:
|
||||
BuildAtProductionType: Boat
|
||||
BuildPaletteOrder: 50
|
||||
Prerequisites: ~syrd, atek, ~techlevel.high
|
||||
BuildDuration: 2000
|
||||
Description: Very slow long-range ship.\n Strong vs Buildings, Ground units\n Weak vs Naval units, Aircraft
|
||||
Valued:
|
||||
Cost: 2400
|
||||
|
||||
@@ -137,6 +137,9 @@ SPEN:
|
||||
Type: Wood
|
||||
RevealsShroud:
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
Exit@1:
|
||||
SpawnOffset: 0,-213,0
|
||||
Facing: 96
|
||||
@@ -236,6 +239,9 @@ SYRD:
|
||||
Type: Wood
|
||||
RevealsShroud:
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
Exit@1:
|
||||
SpawnOffset: -1024,1024,0
|
||||
Facing: 160
|
||||
@@ -551,8 +557,6 @@ AGUN:
|
||||
RangeCircleType: aa
|
||||
Power:
|
||||
Amount: -50
|
||||
DetectCloaked:
|
||||
Range: 6c0
|
||||
BodyOrientation:
|
||||
UseClassicFacingFudge: True
|
||||
|
||||
@@ -602,6 +606,7 @@ DOME:
|
||||
InfiltrateForExploration:
|
||||
DetectCloaked:
|
||||
Range: 10c0
|
||||
RequiresCondition: !disabled
|
||||
RenderDetectionCircle:
|
||||
Power:
|
||||
Amount: -40
|
||||
@@ -804,15 +809,19 @@ FTUR:
|
||||
SAM:
|
||||
Inherits: ^Defense
|
||||
Inherits@IDISABLE: ^DisabledOverlay
|
||||
Inherits@shape: ^2x1Shape
|
||||
Inherits@AUTOTARGET: ^AutoTargetAir
|
||||
Inherits@shape: ^2x1Shape
|
||||
HitShape:
|
||||
Type: Rectangle
|
||||
TopLeft: -768,-512
|
||||
BottomRight: 768,512
|
||||
Buildable:
|
||||
Queue: Defense
|
||||
BuildPaletteOrder: 100
|
||||
Prerequisites: dome, ~structures.soviet, ~techlevel.medium
|
||||
Description: Anti-Air base defense.\nRequires power to operate.\nCan detect cloaked units.\n Strong vs Aircraft\n Weak vs Ground units
|
||||
Valued:
|
||||
Cost: 750
|
||||
Cost: 700
|
||||
Tooltip:
|
||||
Name: SAM Site
|
||||
Building:
|
||||
@@ -827,6 +836,9 @@ SAM:
|
||||
Armor:
|
||||
Type: Heavy
|
||||
RevealsShroud:
|
||||
Range: 6c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 5c0
|
||||
WithBuildingBib:
|
||||
HasMinibib: Yes
|
||||
@@ -837,6 +849,7 @@ SAM:
|
||||
WithTurretedSpriteBody:
|
||||
Armament:
|
||||
Weapon: Nike
|
||||
LocalOffset: 0,0,320
|
||||
MuzzleSequence: muzzle
|
||||
AttackTurreted:
|
||||
WithMuzzleOverlay:
|
||||
@@ -844,8 +857,6 @@ SAM:
|
||||
RangeCircleType: aa
|
||||
Power:
|
||||
Amount: -40
|
||||
DetectCloaked:
|
||||
Range: 6c0
|
||||
BodyOrientation:
|
||||
UseClassicFacingFudge: True
|
||||
|
||||
@@ -916,6 +927,9 @@ WEAP:
|
||||
Type: Wood
|
||||
RevealsShroud:
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
WithBuildingBib:
|
||||
WithProductionDoorOverlay:
|
||||
Sequence: build-top
|
||||
@@ -1106,7 +1120,7 @@ PROC:
|
||||
Armor:
|
||||
Type: Wood
|
||||
RevealsShroud:
|
||||
Range: 6c0
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
@@ -1162,7 +1176,7 @@ SILO:
|
||||
Tooltip:
|
||||
Name: Silo
|
||||
Building:
|
||||
Adjacent: 4
|
||||
Adjacent: 2
|
||||
-GivesBuildableArea:
|
||||
Health:
|
||||
HP: 300
|
||||
@@ -1333,7 +1347,7 @@ AFLD:
|
||||
OrderName: SovietSpyPlane
|
||||
Prerequisites: aircraft.soviet
|
||||
Icon: spyplane
|
||||
ChargeTime: 180
|
||||
ChargeTime: 150
|
||||
Description: Spy Plane
|
||||
LongDesc: Reveals an area of the map\nand cloaked enemy units.
|
||||
SelectTargetSpeechNotification: SelectTarget
|
||||
@@ -1351,7 +1365,7 @@ AFLD:
|
||||
OrderName: SovietParatroopers
|
||||
Prerequisites: aircraft.soviet
|
||||
Icon: paratroopers
|
||||
ChargeTime: 360
|
||||
ChargeTime: 300
|
||||
Description: Paratroopers
|
||||
LongDesc: A Badger drops a squad of infantry\nanywhere on the map.
|
||||
DropItems: E1R1,E1R1,E1R1,E3R1,E3R1
|
||||
@@ -1368,7 +1382,7 @@ AFLD:
|
||||
OrderName: UkraineParabombs
|
||||
Prerequisites: aircraft.ukraine
|
||||
Icon: parabombs
|
||||
ChargeTime: 360
|
||||
ChargeTime: 300
|
||||
Description: Parabombs
|
||||
LongDesc: A squad of Badgers drops parachuted\nbombs on your target.
|
||||
SelectTargetSpeechNotification: SelectTarget
|
||||
@@ -1505,11 +1519,14 @@ STEK:
|
||||
Dimensions: 3,3
|
||||
LocalCenterOffset: 0,-512,0
|
||||
Health:
|
||||
HP: 600
|
||||
HP: 800
|
||||
Armor:
|
||||
Type: Wood
|
||||
RevealsShroud:
|
||||
Range: 5c0
|
||||
RevealGeneratedShroud: False
|
||||
RevealsShroud@GAPGEN:
|
||||
Range: 4c0
|
||||
WithBuildingBib:
|
||||
Power:
|
||||
Amount: -100
|
||||
@@ -1527,7 +1544,7 @@ BARR:
|
||||
Prerequisites: anypower, ~structures.soviet, ~techlevel.infonly
|
||||
Description: Trains infantry.
|
||||
Valued:
|
||||
Cost: 400
|
||||
Cost: 500
|
||||
Tooltip:
|
||||
Name: Soviet Barracks
|
||||
Building:
|
||||
@@ -1609,7 +1626,7 @@ KENN:
|
||||
Tooltip:
|
||||
Name: Kennel
|
||||
Building:
|
||||
Adjacent: 4
|
||||
Adjacent: 2
|
||||
-GivesBuildableArea:
|
||||
Health:
|
||||
HP: 300
|
||||
@@ -1796,7 +1813,7 @@ SBAG:
|
||||
Tooltip:
|
||||
Name: Sandbag Wall
|
||||
Health:
|
||||
HP: 300
|
||||
HP: 150
|
||||
Armor:
|
||||
Type: Wood
|
||||
LineBuild:
|
||||
@@ -1821,7 +1838,7 @@ FENC:
|
||||
Tooltip:
|
||||
Name: Wire Fence
|
||||
Health:
|
||||
HP: 300
|
||||
HP: 150
|
||||
Armor:
|
||||
Type: Wood
|
||||
LineBuild:
|
||||
@@ -1849,7 +1866,7 @@ BRIK:
|
||||
DamagedSounds: crmble2.aud
|
||||
DestroyedSounds: kaboom30.aud
|
||||
Health:
|
||||
HP: 500
|
||||
HP: 400
|
||||
Armor:
|
||||
Type: Concrete
|
||||
Crushable:
|
||||
|
||||
@@ -129,7 +129,7 @@ V2RL:
|
||||
Tooltip:
|
||||
Name: Heavy Tank
|
||||
Health:
|
||||
HP: 550
|
||||
HP: 600
|
||||
Armor:
|
||||
Type: Heavy
|
||||
Mobile:
|
||||
@@ -213,6 +213,8 @@ V2RL:
|
||||
VisualBounds: 44,38,0,-4
|
||||
ProducibleWithLevel:
|
||||
Prerequisites: vehicles.upgraded
|
||||
DetectCloaked:
|
||||
Range: 6c0
|
||||
|
||||
ARTY:
|
||||
Inherits: ^Tank
|
||||
@@ -322,7 +324,7 @@ MCV:
|
||||
Armor:
|
||||
Type: Light
|
||||
Mobile:
|
||||
Speed: 85
|
||||
Speed: 71
|
||||
Crushes: wall, mine, crate, infantry
|
||||
RevealsShroud:
|
||||
Range: 4c0
|
||||
@@ -502,7 +504,7 @@ MGG:
|
||||
Armor:
|
||||
Type: Heavy
|
||||
Mobile:
|
||||
Speed: 85
|
||||
Speed: 99
|
||||
WithIdleOverlay@SPINNER:
|
||||
Offset: -299,0,171
|
||||
Sequence: spinner
|
||||
@@ -535,7 +537,7 @@ MRJ:
|
||||
Armor:
|
||||
Type: Heavy
|
||||
Mobile:
|
||||
Speed: 85
|
||||
Speed: 99
|
||||
RevealsShroud:
|
||||
Range: 7c0
|
||||
WithIdleOverlay@SPINNER:
|
||||
@@ -554,7 +556,7 @@ MRJ:
|
||||
DeflectionStances: Neutral, Enemy
|
||||
RenderJammerCircle:
|
||||
DetectCloaked:
|
||||
Range: 7c0
|
||||
Range: 6c0
|
||||
|
||||
TTNK:
|
||||
Inherits: ^Tank
|
||||
@@ -563,13 +565,14 @@ TTNK:
|
||||
Queue: Vehicle
|
||||
BuildPaletteOrder: 170
|
||||
Prerequisites: tsla, stek, ~vehicles.russia, ~techlevel.high
|
||||
BuildDuration: 1166
|
||||
Description: Tank with mounted tesla coil.\n Strong vs Infantry, Vehicles, Buildings\n Weak vs Aircraft
|
||||
Valued:
|
||||
Cost: 1350
|
||||
Tooltip:
|
||||
Name: Tesla Tank
|
||||
Health:
|
||||
HP: 400
|
||||
HP: 450
|
||||
Armor:
|
||||
Type: Light
|
||||
Mobile:
|
||||
@@ -673,6 +676,7 @@ CTNK:
|
||||
Queue: Vehicle
|
||||
BuildPaletteOrder: 200
|
||||
Prerequisites: atek, ~vehicles.germany, ~techlevel.high
|
||||
BuildDuration: 1166
|
||||
Description: Chrono Tank, teleports to areas within range.\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft\n Special ability: Can teleport
|
||||
Valued:
|
||||
Cost: 1350
|
||||
@@ -681,7 +685,7 @@ CTNK:
|
||||
SelectionDecorations:
|
||||
VisualBounds: 30,30
|
||||
Health:
|
||||
HP: 400
|
||||
HP: 450
|
||||
Armor:
|
||||
Type: Light
|
||||
Mobile:
|
||||
@@ -743,6 +747,7 @@ STNK:
|
||||
Queue: Vehicle
|
||||
BuildPaletteOrder: 130
|
||||
Prerequisites: atek, ~vehicles.england, ~techlevel.high
|
||||
BuildDuration: 1166
|
||||
Description: Lightly armored infantry transport\nwhich can cloak. Can detect cloaked units.\n Strong vs Light armor\n Weak vs Infantry, Tanks, Aircraft
|
||||
Valued:
|
||||
Cost: 1350
|
||||
|
||||
@@ -426,19 +426,19 @@ sam:
|
||||
idle: sam2
|
||||
Facings: 32
|
||||
UseClassicFacingFudge: True
|
||||
Offset: -2,-2
|
||||
Offset: -1,-2
|
||||
damaged-idle: sam2
|
||||
Start: 34
|
||||
Facings: 32
|
||||
UseClassicFacingFudge: True
|
||||
Offset: -2,-2
|
||||
Offset: -1,-2
|
||||
make: sammake
|
||||
Length: *
|
||||
Offset: -2,-2
|
||||
Offset: -1,-2
|
||||
muzzle: samfire
|
||||
Length: 18
|
||||
Facings: 8
|
||||
Offset: -2,-2
|
||||
Offset: -1,6
|
||||
bib: mbSAM
|
||||
Length: *
|
||||
Offset: 0,1
|
||||
|
||||
@@ -2401,9 +2401,9 @@ Templates:
|
||||
Size: 3,1
|
||||
Categories: Beach
|
||||
Tiles:
|
||||
0: Beach
|
||||
1: Beach
|
||||
2: Beach
|
||||
0: Water
|
||||
1: Water
|
||||
2: Water
|
||||
Template@410:
|
||||
Id: 410
|
||||
Images: sh29.des
|
||||
|
||||
@@ -630,7 +630,7 @@ Templates:
|
||||
Id: 384
|
||||
Images: xtra0001.int
|
||||
Size: 1,1
|
||||
Categories: Floor
|
||||
Categories: Wall
|
||||
Tiles:
|
||||
0: Wall
|
||||
Template@385:
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
Warhead@3Eff: CreateEffect
|
||||
Explosions: small_explosion
|
||||
ImpactSounds: kaboom12.aud
|
||||
ValidTargets: Ground, Ship
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Warhead@4EffWater: CreateEffect
|
||||
Explosions: small_splash
|
||||
ImpactSounds: splash9.aud
|
||||
@@ -52,12 +52,20 @@
|
||||
|
||||
90mm:
|
||||
Inherits: ^Cannon
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Versus:
|
||||
None: 30
|
||||
Heavy: 115
|
||||
|
||||
105mm:
|
||||
Inherits: ^Cannon
|
||||
ReloadDelay: 70
|
||||
Burst: 2
|
||||
BurstDelay: 4
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Versus:
|
||||
None: 30
|
||||
Heavy: 115
|
||||
|
||||
120mm:
|
||||
Inherits: ^Cannon
|
||||
@@ -66,6 +74,9 @@
|
||||
InvalidTargets: Air, Infantry
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Damage: 60
|
||||
Versus:
|
||||
None: 30
|
||||
Heavy: 115
|
||||
InvalidTargets: Air
|
||||
|
||||
TurretGun:
|
||||
@@ -86,10 +97,10 @@ TurretGun:
|
||||
Speed: 204
|
||||
Blockable: false
|
||||
LaunchAngle: 62
|
||||
Inaccuracy: 2c256
|
||||
Inaccuracy: 1c938
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Spread: 426
|
||||
Damage: 240
|
||||
Damage: 230
|
||||
Versus:
|
||||
None: 90
|
||||
Wood: 40
|
||||
@@ -161,7 +172,7 @@ Grenade:
|
||||
Spread: 256
|
||||
Damage: 60
|
||||
Versus:
|
||||
None: 50
|
||||
None: 60
|
||||
Wood: 100
|
||||
Light: 25
|
||||
Heavy: 25
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: self_destruct
|
||||
ImpactSounds: kaboom22.aud
|
||||
ValidTargets: Ground, Air, Ship
|
||||
ValidTargets: Ground, Air, Ship, Trees
|
||||
Warhead@3EffWater: CreateEffect
|
||||
Explosions: large_splash
|
||||
ImpactSounds: splash9.aud
|
||||
@@ -39,7 +39,7 @@ CrateNapalm:
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: napalm
|
||||
ImpactSounds: firebl3.aud
|
||||
ValidTargets: Ground, Water, Air
|
||||
ValidTargets: Ground, Water, Air, Trees
|
||||
-Warhead@3EffWater: CreateEffect
|
||||
Warhead@Smu: LeaveSmudge
|
||||
SmudgeType: Scorch
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
Warhead@3Eff: CreateEffect
|
||||
Explosions: med_explosion
|
||||
ImpactSounds: kaboom25.aud
|
||||
ValidTargets: Ground, Air, Ship
|
||||
ValidTargets: Ground, Air, Ship, Trees
|
||||
Warhead@4EffWater: CreateEffect
|
||||
Explosions: med_splash
|
||||
ImpactSounds: splash9.aud
|
||||
@@ -128,7 +128,7 @@ MammothTusk:
|
||||
DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath
|
||||
Warhead@3Eff: CreateEffect
|
||||
ImpactSounds: kaboom12.aud
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Trees
|
||||
Warhead@5EffAir: CreateEffect
|
||||
Explosions: med_explosion_air
|
||||
ImpactSounds: kaboom25.aud
|
||||
|
||||
@@ -29,6 +29,9 @@ FireballLauncher:
|
||||
Speed: 250
|
||||
TrailImage: fb2
|
||||
Image: FB1
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Versus:
|
||||
Light: 50
|
||||
|
||||
Flamer:
|
||||
Inherits: ^FireWeapon
|
||||
@@ -88,6 +91,9 @@ PortaTesla:
|
||||
Range: 6c0
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Damage: 45
|
||||
Versus:
|
||||
Wood: 75
|
||||
Heavy: 60
|
||||
|
||||
TTankZap:
|
||||
Inherits: ^TeslaWeapon
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
DamageTypes: Prone50Percent, TriggerProne, DefaultDeath
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: small_explosion_air
|
||||
ValidTargets: Air, Ground, Water
|
||||
ValidTargets: Air, Ground, Water, Trees
|
||||
|
||||
ZSU-23:
|
||||
Inherits: ^AACannon
|
||||
@@ -51,7 +51,7 @@ FLAK-23-AG:
|
||||
ValidTargets: Air, Ground, Water
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: flak_explosion_ground
|
||||
ValidTargets: Ground, Ship, Air
|
||||
ValidTargets: Ground, Ship, Air, Trees
|
||||
Warhead@3EffWater: CreateEffect
|
||||
Explosions: small_splash
|
||||
ValidTargets: Water, Underwater
|
||||
@@ -75,7 +75,7 @@ FLAK-23-AG:
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground, Ship, Air
|
||||
ValidTargets: Ground, Ship, Air, Trees
|
||||
Warhead@3EffWater: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water, Underwater
|
||||
@@ -104,17 +104,18 @@ Vulcan:
|
||||
Versus:
|
||||
None: 200
|
||||
Wood: 50
|
||||
Light: 60
|
||||
Light: 50
|
||||
Heavy: 25
|
||||
Concrete: 25
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@4Eff_2: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Delay: 2
|
||||
Warhead@4Eff_2Water: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water
|
||||
ValidTargets: Water, Underwater
|
||||
InvalidTargets: Ship, Structure
|
||||
Delay: 2
|
||||
Warhead@5Dam_3: SpreadDamage
|
||||
Spread: 128
|
||||
@@ -129,11 +130,12 @@ Vulcan:
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@6Eff_3: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Delay: 4
|
||||
Warhead@6Eff_3Water: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water
|
||||
ValidTargets: Water, Underwater
|
||||
InvalidTargets: Ship, Structure
|
||||
Delay: 4
|
||||
Warhead@7Dam_4: SpreadDamage
|
||||
Spread: 128
|
||||
@@ -148,11 +150,12 @@ Vulcan:
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@8Eff_4: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Delay: 6
|
||||
Warhead@8Eff_4Water: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water
|
||||
ValidTargets: Water, Underwater
|
||||
InvalidTargets: Ship, Structure
|
||||
Delay: 6
|
||||
Warhead@9Dam_5: SpreadDamage
|
||||
Spread: 128
|
||||
@@ -167,11 +170,12 @@ Vulcan:
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@10Eff_5: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Delay: 8
|
||||
Warhead@10Eff_5Water: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water
|
||||
ValidTargets: Water, Underwater
|
||||
InvalidTargets: Ship, Structure
|
||||
Delay: 8
|
||||
Warhead@11Dam_6: SpreadDamage
|
||||
Spread: 128
|
||||
@@ -186,11 +190,12 @@ Vulcan:
|
||||
DamageTypes: Prone50Percent, TriggerProne, BulletDeath
|
||||
Warhead@12Eff_6: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Delay: 10
|
||||
Warhead@12Eff_6Water: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water
|
||||
ValidTargets: Water, Underwater
|
||||
InvalidTargets: Ship, Structure
|
||||
Delay: 10
|
||||
|
||||
ChainGun:
|
||||
@@ -263,7 +268,7 @@ SilencedPPK:
|
||||
Spread: 128
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: piffs
|
||||
ValidTargets: Ground, Ship, Air
|
||||
ValidTargets: Ground, Ship, Air, Trees
|
||||
Warhead@3EffWater: CreateEffect
|
||||
Explosions: water_piffs
|
||||
ValidTargets: Water, Underwater
|
||||
@@ -277,7 +282,7 @@ Colt45:
|
||||
Damage: 50
|
||||
Warhead@2Eff: CreateEffect
|
||||
Explosions: piff
|
||||
ValidTargets: Ground, Ship, Air
|
||||
ValidTargets: Ground, Ship, Air, Trees
|
||||
Warhead@3EffWater: CreateEffect
|
||||
Explosions: water_piff
|
||||
ValidTargets: Water, Underwater
|
||||
|
||||
@@ -23,7 +23,7 @@ ParaBomb:
|
||||
Warhead@3Eff: CreateEffect
|
||||
Explosions: artillery_explosion
|
||||
ImpactSounds: kaboom15.aud
|
||||
ValidTargets: Ground, Ship
|
||||
ValidTargets: Ground, Ship, Trees
|
||||
Warhead@4EffWater: CreateEffect
|
||||
Explosions: small_splash
|
||||
ImpactSounds: splash9.aud
|
||||
@@ -51,6 +51,7 @@ Atomic:
|
||||
Explosions: nuke
|
||||
ImpactSounds: kaboom1.aud
|
||||
VictimScanRadius: 0
|
||||
ValidTargets: Ground, Water, Air
|
||||
Warhead@5Dam_areanuke1: SpreadDamage
|
||||
Spread: 2c0
|
||||
Damage: 60
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>openra.desktop</id>
|
||||
<id>openra-{MOD}.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-3.0</project_license>
|
||||
<name>OpenRA</name>
|
||||
<name>OpenRA - {MOD_NAME}</name>
|
||||
<summary>Reimagining of early Westwood real-time strategy games</summary>
|
||||
<description>
|
||||
<p>
|
||||
@@ -25,15 +25,15 @@
|
||||
</p>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<screenshot{SCREENSHOT_RA}>
|
||||
<image>http://www.openra.net/images/appdata/ingame-ra.png</image>
|
||||
<caption>Red Alert mod</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<screenshot{SCREENSHOT_CNC}>
|
||||
<image>http://www.openra.net/images/appdata/ingame-cnc.png</image>
|
||||
<caption>Tiberian Dawn mod</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<screenshot{SCREENSHOT_D2K}>
|
||||
<image>http://www.openra.net/images/appdata/ingame-d2k.png</image>
|
||||
<caption>Dune 2000 Mod</caption>
|
||||
</screenshot>
|
||||
@@ -9,7 +9,7 @@ if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
command -v genisoimage >/dev/null 2>&1 || { echo >&2 "macOS packaging requires genisoimage."; exit 1; }
|
||||
fi
|
||||
|
||||
LAUNCHER_TAG="osx-launcher-20170708"
|
||||
LAUNCHER_TAG="osx-launcher-20170812"
|
||||
|
||||
if [ $# -ne "2" ]; then
|
||||
echo "Usage: `basename $0` tag outputdir"
|
||||
|
||||
@@ -28,6 +28,7 @@ rm -rf $HOME/openra-wiki
|
||||
git clone git@github.com:OpenRA/OpenRA.wiki.git $HOME/openra-wiki
|
||||
|
||||
mono --debug ../OpenRA.Utility.exe all --docs > "${HOME}/openra-wiki/Traits${TAG}.md"
|
||||
mono --debug ../OpenRA.Utility.exe all --weapon-docs > "${HOME}/openra-wiki/Weapons${TAG}.md"
|
||||
mono --debug ../OpenRA.Utility.exe all --lua-docs > "${HOME}/openra-wiki/Lua API${TAG}.md"
|
||||
|
||||
pushd $HOME/openra-wiki
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace OpenRA
|
||||
SHFILEINFO sfi = new SHFILEINFO();
|
||||
for (var i = 0; i < 2; i++)
|
||||
{
|
||||
SHGetFileInfo(Assembly.GetExecutingAssembly().Location, 0, ref sfi, (uint)Marshal.SizeOf(sfi), (uint)(0x100 + i));
|
||||
SHGetFileInfo(Assembly.GetExecutingAssembly().Location, 0, ref sfi, (uint)Marshal.SizeOf(typeof(SHFILEINFO)), (uint)(0x100 + i));
|
||||
iconHandle[i] = sfi.hIcon;
|
||||
SendMessage(gameProcess.MainWindowHandle, 0x80, (uint)(1 - i), sfi.hIcon);
|
||||
}
|
||||
|
||||
2
thirdparty/fetch-thirdparty-deps-windows.sh
vendored
2
thirdparty/fetch-thirdparty-deps-windows.sh
vendored
@@ -19,7 +19,7 @@ function get()
|
||||
|
||||
if [ ! -f SDL2.dll ]; then
|
||||
echo "Fetching SDL2 from libsdl.org"
|
||||
wget https://www.libsdl.org/release/SDL2-2.0.5-win32-x86.zip
|
||||
curl -LOs https://www.libsdl.org/release/SDL2-2.0.5-win32-x86.zip
|
||||
unzip SDL2-2.0.5-win32-x86.zip SDL2.dll
|
||||
rm SDL2-2.0.5-win32-x86.zip
|
||||
fi
|
||||
|
||||
2
thirdparty/fetch-thirdparty-deps.ps1
vendored
2
thirdparty/fetch-thirdparty-deps.ps1
vendored
@@ -161,7 +161,7 @@ if (!(Test-Path "SmarIrc4net.dll"))
|
||||
if (!(Test-Path "rix0rrr.BeaconLib.dll"))
|
||||
{
|
||||
echo "Fetching rix0rrr.BeaconLib from NuGet."
|
||||
./nuget.exe install rix0rrr.BeaconLib -Version 1.0.0 -ExcludeVersion -Verbosity quiet
|
||||
./nuget.exe install rix0rrr.BeaconLib -Version 1.0.1 -ExcludeVersion -Verbosity quiet
|
||||
cp rix0rrr.BeaconLib/lib/net40/rix0rrr.BeaconLib.dll .
|
||||
rmdir rix0rrr.BeaconLib -Recurse
|
||||
}
|
||||
|
||||
2
thirdparty/fetch-thirdparty-deps.sh
vendored
2
thirdparty/fetch-thirdparty-deps.sh
vendored
@@ -118,7 +118,7 @@ fi
|
||||
|
||||
if [ ! -f rix0rrr.BeaconLib.dll ]; then
|
||||
echo "Fetching rix0rrr.BeaconLib from NuGet."
|
||||
get rix0rrr.BeaconLib 1.0.0
|
||||
get rix0rrr.BeaconLib 1.0.1
|
||||
cp ./rix0rrr.BeaconLib/lib/net40/rix0rrr.BeaconLib.dll .
|
||||
rm -rf rix0rrr.BeaconLib
|
||||
fi
|
||||
Reference in New Issue
Block a user