@@ -52,6 +52,7 @@ NEW:
|
|||||||
Adjusted Zombie build palette position.
|
Adjusted Zombie build palette position.
|
||||||
Fixed attack dogs causing crashes by attacking non-infantry.
|
Fixed attack dogs causing crashes by attacking non-infantry.
|
||||||
Disabled cloak/uncloak sound for camouflaged Pillbox.
|
Disabled cloak/uncloak sound for camouflaged Pillbox.
|
||||||
|
Added two Lua-powered single player missions, ported from Red Alert's single player campaign.
|
||||||
Tiberian Dawn:
|
Tiberian Dawn:
|
||||||
C&C mod renamed to Tiberian Dawn to resolve naming ambiguities.
|
C&C mod renamed to Tiberian Dawn to resolve naming ambiguities.
|
||||||
Fixed Bio Lab wrongly belonging to a hostile faction in East vs West 3.
|
Fixed Bio Lab wrongly belonging to a hostile faction in East vs West 3.
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
// Viewport geometry (world-px)
|
// Viewport geometry (world-px)
|
||||||
public int2 CenterLocation { get; private set; }
|
public int2 CenterLocation { get; private set; }
|
||||||
|
|
||||||
|
public WPos CenterPosition { get { return worldRenderer.Position(CenterLocation); } }
|
||||||
|
|
||||||
public int2 TopLeft { get { return CenterLocation - viewportSize / 2; } }
|
public int2 TopLeft { get { return CenterLocation - viewportSize / 2; } }
|
||||||
public int2 BottomRight { get { return CenterLocation + viewportSize / 2; } }
|
public int2 BottomRight { get { return CenterLocation + viewportSize / 2; } }
|
||||||
int2 viewportSize;
|
int2 viewportSize;
|
||||||
|
|||||||
@@ -188,14 +188,23 @@ namespace OpenRA
|
|||||||
|
|
||||||
public bool Paused { get; internal set; }
|
public bool Paused { get; internal set; }
|
||||||
public bool PredictedPaused { get; internal set; }
|
public bool PredictedPaused { get; internal set; }
|
||||||
|
public bool PauseStateLocked { get; set; }
|
||||||
public bool IsShellmap = false;
|
public bool IsShellmap = false;
|
||||||
|
|
||||||
public void SetPauseState(bool paused)
|
public void SetPauseState(bool paused)
|
||||||
{
|
{
|
||||||
|
if (PauseStateLocked)
|
||||||
|
return;
|
||||||
|
|
||||||
IssueOrder(Order.PauseGame(paused));
|
IssueOrder(Order.PauseGame(paused));
|
||||||
PredictedPaused = paused;
|
PredictedPaused = paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetLocalPauseState(bool paused)
|
||||||
|
{
|
||||||
|
Paused = PredictedPaused = paused;
|
||||||
|
}
|
||||||
|
|
||||||
public void Tick()
|
public void Tick()
|
||||||
{
|
{
|
||||||
if (!Paused && (!IsShellmap || Game.Settings.Game.ShowShellmap))
|
if (!Paused && (!IsShellmap || Game.Settings.Game.ShowShellmap))
|
||||||
|
|||||||
@@ -738,8 +738,8 @@ namespace OpenRA.Mods.RA.AI
|
|||||||
if (desiredLocation == null)
|
if (desiredLocation == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
world.IssueOrder(new Order("Move", mcv, false) { TargetLocation = desiredLocation.Value });
|
world.IssueOrder(new Order("Move", mcv, true) { TargetLocation = desiredLocation.Value });
|
||||||
world.IssueOrder(new Order("DeployTransform", mcv, false));
|
world.IssueOrder(new Order("DeployTransform", mcv, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
48
OpenRA.Mods.RA/Activities/Hunt.cs
Normal file
48
OpenRA.Mods.RA/Activities/Hunt.cs
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Mods.RA.Buildings;
|
||||||
|
using OpenRA.Mods.RA.Move;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Activities
|
||||||
|
{
|
||||||
|
public class Hunt : Activity
|
||||||
|
{
|
||||||
|
readonly IEnumerable<Actor> targets;
|
||||||
|
|
||||||
|
public Hunt(Actor self)
|
||||||
|
{
|
||||||
|
var attack = self.Trait<AttackBase>();
|
||||||
|
targets = self.World.Actors.Where(a => self != a && !a.IsDead() && a.IsInWorld && a.AppearsHostileTo(self)
|
||||||
|
&& a.HasTrait<Huntable>() && attack.HasAnyValidWeapons(Target.FromActor(a)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Activity Tick(Actor self)
|
||||||
|
{
|
||||||
|
if (IsCanceled)
|
||||||
|
return NextActivity;
|
||||||
|
|
||||||
|
var target = targets.ClosestTo(self);
|
||||||
|
if (target == null)
|
||||||
|
return this;
|
||||||
|
|
||||||
|
return Util.SequenceActivities(
|
||||||
|
new AttackMove.AttackMoveActivity(self, new Move.Move(target.Location, WRange.FromCells(2))),
|
||||||
|
new Wait(25),
|
||||||
|
this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HuntableInfo : TraitInfo<Huntable> { }
|
||||||
|
public class Huntable { }
|
||||||
|
}
|
||||||
@@ -81,6 +81,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Activities\CaptureActor.cs" />
|
<Compile Include="Activities\CaptureActor.cs" />
|
||||||
|
<Compile Include="Activities\Hunt.cs" />
|
||||||
<Compile Include="AI\AttackOrFleeFuzzy.cs" />
|
<Compile Include="AI\AttackOrFleeFuzzy.cs" />
|
||||||
<Compile Include="AI\BaseBuilder.cs" />
|
<Compile Include="AI\BaseBuilder.cs" />
|
||||||
<Compile Include="AI\HackyAI.cs" />
|
<Compile Include="AI\HackyAI.cs" />
|
||||||
@@ -338,6 +339,7 @@
|
|||||||
<Compile Include="RepairsUnits.cs" />
|
<Compile Include="RepairsUnits.cs" />
|
||||||
<Compile Include="Reservable.cs" />
|
<Compile Include="Reservable.cs" />
|
||||||
<Compile Include="ScaredyCat.cs" />
|
<Compile Include="ScaredyCat.cs" />
|
||||||
|
<Compile Include="Scripting\LuaScriptEvents.cs" />
|
||||||
<Compile Include="Scripting\LuaScriptInterface.cs" />
|
<Compile Include="Scripting\LuaScriptInterface.cs" />
|
||||||
<Compile Include="Scripting\Media.cs" />
|
<Compile Include="Scripting\Media.cs" />
|
||||||
<Compile Include="Scripting\RASpecialPowers.cs" />
|
<Compile Include="Scripting\RASpecialPowers.cs" />
|
||||||
|
|||||||
40
OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs
Normal file
40
OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Scripting
|
||||||
|
{
|
||||||
|
public class LuaScriptEventsInfo : TraitInfo<LuaScriptEvents> { }
|
||||||
|
|
||||||
|
public class LuaScriptEvents : INotifyKilled, INotifyAddedToWorld, INotifyRemovedFromWorld
|
||||||
|
{
|
||||||
|
public event Action<Actor, AttackInfo> OnKilled = (self, e) => { };
|
||||||
|
public event Action<Actor> OnAddedToWorld = self => { };
|
||||||
|
public event Action<Actor> OnRemovedFromWorld = self => { };
|
||||||
|
|
||||||
|
public void Killed(Actor self, AttackInfo e)
|
||||||
|
{
|
||||||
|
OnKilled(self, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddedToWorld(Actor self)
|
||||||
|
{
|
||||||
|
OnAddedToWorld(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemovedFromWorld(Actor self)
|
||||||
|
{
|
||||||
|
OnRemovedFromWorld(self);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,12 +8,16 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using LuaInterface;
|
using LuaInterface;
|
||||||
using OpenRA.Effects;
|
using OpenRA.Effects;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
|
using OpenRA.Mods.RA.Activities;
|
||||||
|
using OpenRA.Mods.RA.Air;
|
||||||
|
using OpenRA.Mods.RA.Missions;
|
||||||
|
using OpenRA.Scripting;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using WorldRenderer = OpenRA.Graphics.WorldRenderer;
|
using WorldRenderer = OpenRA.Graphics.WorldRenderer;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Scripting
|
namespace OpenRA.Mods.RA.Scripting
|
||||||
@@ -42,7 +46,7 @@ namespace OpenRA.Mods.RA.Scripting
|
|||||||
AddMapActorGlobals();
|
AddMapActorGlobals();
|
||||||
context.Lua["World"] = w;
|
context.Lua["World"] = w;
|
||||||
context.Lua["WorldRenderer"] = wr;
|
context.Lua["WorldRenderer"] = wr;
|
||||||
context.RegisterObject(this, "_OpenRA", false);
|
context.RegisterObject(this, "Internal", false);
|
||||||
context.RegisterType(typeof(WVec), "WVec", true);
|
context.RegisterType(typeof(WVec), "WVec", true);
|
||||||
context.RegisterType(typeof(WPos), "WPos", true);
|
context.RegisterType(typeof(WPos), "WPos", true);
|
||||||
context.RegisterType(typeof(CPos), "CPos", true);
|
context.RegisterType(typeof(CPos), "CPos", true);
|
||||||
@@ -161,5 +165,101 @@ namespace OpenRA.Mods.RA.Scripting
|
|||||||
{
|
{
|
||||||
world.AddFrameEndTask(w => w.Add(new DelayedAction((int)delay, func)));
|
world.AddFrameEndTask(w => w.Add(new DelayedAction((int)delay, func)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void PlaySpeechNotification(Player player, string notification)
|
||||||
|
{
|
||||||
|
Sound.PlayNotification(player, "Speech", notification, player != null ? player.Country.Race : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void PlaySoundNotification(Player player, string notification)
|
||||||
|
{
|
||||||
|
Sound.PlayNotification(player, "Sounds", notification, player != null ? player.Country.Race : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void WaitFor(Actor actor, Func<bool> func)
|
||||||
|
{
|
||||||
|
actor.QueueActivity(new WaitFor(func));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void CallFunc(Actor actor, Action func)
|
||||||
|
{
|
||||||
|
actor.QueueActivity(new CallFunc(func));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public int GetFacing(object vec, double currentFacing)
|
||||||
|
{
|
||||||
|
if (vec is CVec)
|
||||||
|
return Util.GetFacing((CVec)vec, (int)currentFacing);
|
||||||
|
if (vec is WVec)
|
||||||
|
return Util.GetFacing((WVec)vec, (int)currentFacing);
|
||||||
|
throw new ArgumentException("Unsupported vector type: {0}".F(vec.GetType()));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public WRange GetWRangeFromCells(double cells)
|
||||||
|
{
|
||||||
|
return WRange.FromCells((int)cells);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void SetWinState(Player player, string winState)
|
||||||
|
{
|
||||||
|
player.WinState = Enum<WinState>.Parse(winState);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void PlayRandomMusic()
|
||||||
|
{
|
||||||
|
MissionUtils.PlayMissionMusic();
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public bool IsDead(Actor actor)
|
||||||
|
{
|
||||||
|
return actor.IsDead();
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void PlayMovieFullscreen(string movie, Action onComplete)
|
||||||
|
{
|
||||||
|
Media.PlayFMVFullscreen(world, movie, onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void FlyToPos(Actor actor, WPos pos)
|
||||||
|
{
|
||||||
|
actor.QueueActivity(Fly.ToPos(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void FlyAttackActor(Actor actor, Actor targetActor)
|
||||||
|
{
|
||||||
|
actor.QueueActivity(new FlyAttack(Target.FromActor(targetActor)));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void FlyAttackCell(Actor actor, CPos location)
|
||||||
|
{
|
||||||
|
actor.QueueActivity(new FlyAttack(Target.FromCell(location)));
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public void SetUnitStance(Actor actor, string stance)
|
||||||
|
{
|
||||||
|
var at = actor.TraitOrDefault<AutoTarget>();
|
||||||
|
if (at != null)
|
||||||
|
at.stance = Enum<UnitStance>.Parse(stance);
|
||||||
|
}
|
||||||
|
|
||||||
|
[LuaGlobal]
|
||||||
|
public bool RequiredUnitsAreDestroyed(Player player)
|
||||||
|
{
|
||||||
|
return world.ActorsWithTrait<MustBeDestroyed>().All(p => p.Actor.Owner != player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,9 +68,7 @@ namespace OpenRA.Mods.RA
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResolveOrder( Actor self, Order order )
|
public void DeployTransform()
|
||||||
{
|
|
||||||
if (order.OrderString == "DeployTransform")
|
|
||||||
{
|
{
|
||||||
var b = self.TraitOrDefault<Building>();
|
var b = self.TraitOrDefault<Building>();
|
||||||
|
|
||||||
@@ -80,7 +78,6 @@ namespace OpenRA.Mods.RA
|
|||||||
Sound.PlayToPlayer(self.Owner, s);
|
Sound.PlayToPlayer(self.Owner, s);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.CancelActivity();
|
|
||||||
|
|
||||||
if (self.HasTrait<IFacing>())
|
if (self.HasTrait<IFacing>())
|
||||||
self.QueueActivity(new Turn(Info.Facing));
|
self.QueueActivity(new Turn(Info.Facing));
|
||||||
@@ -91,6 +88,11 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
self.QueueActivity(new Transform(self, Info.IntoActor) { Offset = (CVec)Info.Offset, Facing = Info.Facing, Sounds = Info.TransformSounds });
|
self.QueueActivity(new Transform(self, Info.IntoActor) { Offset = (CVec)Info.Offset, Facing = Info.Facing, Sounds = Info.TransformSounds });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResolveOrder( Actor self, Order order )
|
||||||
|
{
|
||||||
|
if (order.OrderString == "DeployTransform")
|
||||||
|
DeployTransform();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,3 +163,12 @@ Fonts:
|
|||||||
TinyBold:
|
TinyBold:
|
||||||
Font:FreeSansBold.ttf
|
Font:FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
|
LuaScripts:
|
||||||
|
mods/ra/lua/utils.lua
|
||||||
|
mods/ra/lua/openra.lua
|
||||||
|
mods/ra/lua/map.lua
|
||||||
|
mods/ra/lua/actor.lua
|
||||||
|
mods/ra/lua/team.lua
|
||||||
|
mods/ra/lua/media.lua
|
||||||
|
mods/ra/lua/mission.lua
|
||||||
|
|||||||
@@ -40,6 +40,8 @@
|
|||||||
CloakDelay: 90
|
CloakDelay: 90
|
||||||
CloakSound: trans1.aud
|
CloakSound: trans1.aud
|
||||||
UncloakSound: trans1.aud
|
UncloakSound: trans1.aud
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -86,6 +88,8 @@
|
|||||||
CloakDelay: 90
|
CloakDelay: 90
|
||||||
CloakSound: trans1.aud
|
CloakSound: trans1.aud
|
||||||
UncloakSound: trans1.aud
|
UncloakSound: trans1.aud
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -113,6 +117,8 @@
|
|||||||
CombatDebugOverlay:
|
CombatDebugOverlay:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -170,6 +176,8 @@
|
|||||||
DamageCooldown: 125
|
DamageCooldown: 125
|
||||||
RequiresTech: InfantryHealing
|
RequiresTech: InfantryHealing
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^CivInfantry:
|
^CivInfantry:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -247,6 +255,8 @@
|
|||||||
AttackMove:
|
AttackMove:
|
||||||
AttackFrontal:
|
AttackFrontal:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -263,6 +273,8 @@
|
|||||||
ActorLostNotification:
|
ActorLostNotification:
|
||||||
CombatDebugOverlay:
|
CombatDebugOverlay:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Ship:
|
^Ship:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -286,6 +298,8 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Building:
|
^Building:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -337,6 +351,8 @@
|
|||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
EngineerRepairable:
|
EngineerRepairable:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^CivBuilding:
|
^CivBuilding:
|
||||||
Inherits: ^Building
|
Inherits: ^Building
|
||||||
@@ -372,6 +388,7 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^TechBuilding:
|
^TechBuilding:
|
||||||
Inherits: ^CivBuilding
|
Inherits: ^CivBuilding
|
||||||
@@ -407,6 +424,7 @@
|
|||||||
Palette: terrain
|
Palette: terrain
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Wall:
|
^Wall:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -437,6 +455,7 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Tree:
|
^Tree:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -460,6 +479,7 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Rock:
|
^Rock:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -477,6 +497,7 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Husk:
|
^Husk:
|
||||||
Health:
|
Health:
|
||||||
@@ -499,6 +520,7 @@
|
|||||||
# AllowAllies: true
|
# AllowAllies: true
|
||||||
# AllowNeutral: true
|
# AllowNeutral: true
|
||||||
# AllowEnemies: true
|
# AllowEnemies: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^HelicopterHusk:
|
^HelicopterHusk:
|
||||||
Inherits: ^Husk
|
Inherits: ^Husk
|
||||||
@@ -524,3 +546,4 @@
|
|||||||
DamagedSound: xplos.aud
|
DamagedSound: xplos.aud
|
||||||
DestroyedSound: xplobig4.aud
|
DestroyedSound: xplobig4.aud
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|||||||
@@ -144,3 +144,12 @@ Fonts:
|
|||||||
TinyBold:
|
TinyBold:
|
||||||
Font:FreeSansBold.ttf
|
Font:FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
|
LuaScripts:
|
||||||
|
mods/ra/lua/utils.lua
|
||||||
|
mods/ra/lua/openra.lua
|
||||||
|
mods/ra/lua/map.lua
|
||||||
|
mods/ra/lua/actor.lua
|
||||||
|
mods/ra/lua/team.lua
|
||||||
|
mods/ra/lua/media.lua
|
||||||
|
mods/ra/lua/mission.lua
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
RenderUnit:
|
RenderUnit:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -73,6 +75,8 @@
|
|||||||
RenderUnit:
|
RenderUnit:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Husk:
|
^Husk:
|
||||||
Health:
|
Health:
|
||||||
@@ -90,6 +94,7 @@
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Destroyed Tank
|
Name: Destroyed Tank
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^TowerHusk:
|
^TowerHusk:
|
||||||
Health:
|
Health:
|
||||||
@@ -108,6 +113,7 @@
|
|||||||
ProximityCaptor:
|
ProximityCaptor:
|
||||||
Types:Husk
|
Types:Husk
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^AircraftHusk:
|
^AircraftHusk:
|
||||||
Inherits: ^Husk
|
Inherits: ^Husk
|
||||||
@@ -167,6 +173,8 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -188,6 +196,8 @@
|
|||||||
CombatDebugOverlay:
|
CombatDebugOverlay:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits: ^Plane
|
Inherits: ^Plane
|
||||||
@@ -237,3 +247,5 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
WithCrumbleOverlay:
|
WithCrumbleOverlay:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
147
mods/ra/lua/actor.lua
Normal file
147
mods/ra/lua/actor.lua
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
Actor = { }
|
||||||
|
|
||||||
|
Actor.Create = function(name, init)
|
||||||
|
if name == nil then error("No actor name specified", 2) end
|
||||||
|
if init.Owner == nil then error("No actor owner specified", 2) end
|
||||||
|
local td = OpenRA.New("TypeDictionary")
|
||||||
|
local addToWorld = true
|
||||||
|
for key, value in pairs(init) do
|
||||||
|
if key == "AddToWorld" then
|
||||||
|
addToWorld = value
|
||||||
|
else
|
||||||
|
td:Add(OpenRA.New(key .. "Init", { value }))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return World:CreateActor(addToWorld, name, td)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Turn = function(actor, facing)
|
||||||
|
actor:QueueActivity(OpenRA.New("Turn", { { facing, "Int32" } }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Move = function(actor, location)
|
||||||
|
Actor.MoveNear(actor, location, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.MoveNear = function(actor, location, nearEnough)
|
||||||
|
actor:QueueActivity(OpenRA.New("Move", { location, Map.GetWRangeFromCells(nearEnough) }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.HeliFly = function(actor, position)
|
||||||
|
actor:QueueActivity(OpenRA.New("HeliFly", { position }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.HeliLand = function(actor, requireSpace)
|
||||||
|
actor:QueueActivity(OpenRA.New("HeliLand", { requireSpace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Fly = function(actor, position)
|
||||||
|
Internal.FlyToPos(actor, position)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.FlyAttackActor = function(actor, targetActor)
|
||||||
|
Internal.FlyAttackActor(actor, targetActor)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.FlyAttackCell = function(actor, location)
|
||||||
|
Internal.FlyAttackCell(actor, location)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.FlyOffMap = function(actor)
|
||||||
|
actor:QueueActivity(OpenRA.New("FlyOffMap"))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Hunt = function(actor)
|
||||||
|
actor:QueueActivity(OpenRA.New("Hunt", { actor }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.UnloadCargo = function(actor, unloadAll)
|
||||||
|
actor:QueueActivity(OpenRA.New("UnloadCargo", { unloadAll }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Harvest = function(actor)
|
||||||
|
actor:QueueActivity(OpenRA.New("FindResources"))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Scatter = function(actor)
|
||||||
|
local mobile = Actor.Trait(actor, "Mobile")
|
||||||
|
mobile:Nudge(actor, actor, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Wait = function(actor, period)
|
||||||
|
actor:QueueActivity(OpenRA.New("Wait", { { period, "Int32" } }))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.WaitFor = function(actor, func)
|
||||||
|
Internal.WaitFor(actor, func)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.CallFunc = function(actor, func)
|
||||||
|
Internal.CallFunc(actor, func)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.DeployTransform = function(actor)
|
||||||
|
Actor.CallFunc(actor, function()
|
||||||
|
Actor.Trait(actor, "Transforms"):DeployTransform()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.RemoveSelf = function(actor)
|
||||||
|
actor:QueueActivity(OpenRA.New("RemoveSelf"))
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Stop = function(actor)
|
||||||
|
actor:CancelActivity()
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.IsDead = function(actor)
|
||||||
|
return Internal.IsDead(actor)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.IsInWorld = function(actor)
|
||||||
|
return actor.IsInWorld
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Owner = function(actor)
|
||||||
|
return actor.Owner
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.SetStance = function(actor, stance)
|
||||||
|
Internal.SetUnitStance(actor, stance)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.OnKilled = function(actor, eh)
|
||||||
|
Actor.Trait(actor, "LuaScriptEvents").OnKilled:Add(eh)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.OnAddedToWorld = function(actor, eh)
|
||||||
|
Actor.Trait(actor, "LuaScriptEvents").OnAddedToWorld:Add(eh)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.OnRemovedFromWorld = function(actor, eh)
|
||||||
|
Actor.Trait(actor, "LuaScriptEvents").OnRemovedFromWorld:Add(eh)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.HasTrait = function(actor, className)
|
||||||
|
return Internal.HasTrait(actor, className)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.TraitOrDefault = function(actor, className)
|
||||||
|
return Internal.TraitOrDefault(actor, className)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.Trait = function(actor, className)
|
||||||
|
return Internal.Trait(actor, className)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.HasTraitInfo = function(actorType, className)
|
||||||
|
return Internal.HasTraitInfo(actorType, className)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.TraitInfoOrDefault = function(actorType, className)
|
||||||
|
return Internal.TraitInfoOrDefault(actorType, className)
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.TraitInfo = function(actorType, className)
|
||||||
|
return Internal.TraitInfo(actorType, className)
|
||||||
|
end
|
||||||
9
mods/ra/lua/map.lua
Normal file
9
mods/ra/lua/map.lua
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Map = { }
|
||||||
|
|
||||||
|
Map.GetFacing = function(vec, currentFacing)
|
||||||
|
return Internal.GetFacing(vec, currentFacing)
|
||||||
|
end
|
||||||
|
|
||||||
|
Map.GetWRangeFromCells = function(cells)
|
||||||
|
return Internal.GetWRangeFromCells(cells)
|
||||||
|
end
|
||||||
20
mods/ra/lua/media.lua
Normal file
20
mods/ra/lua/media.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
Media = { }
|
||||||
|
|
||||||
|
Media.PlaySpeechNotification = function(notification, player)
|
||||||
|
Internal.PlaySpeechNotification(player, notification)
|
||||||
|
end
|
||||||
|
|
||||||
|
Media.PlaySoundNotification = function(notification, player)
|
||||||
|
Internal.PlaySoundNotification(player, notification)
|
||||||
|
end
|
||||||
|
|
||||||
|
Media.PlayRandomMusic = function()
|
||||||
|
Internal.PlayRandomMusic()
|
||||||
|
end
|
||||||
|
|
||||||
|
Media.PlayMovieFullscreen = function(movie, onComplete)
|
||||||
|
if onComplete == nil then
|
||||||
|
onComplete = function() end
|
||||||
|
end
|
||||||
|
Internal.PlayMovieFullscreen(movie, onComplete)
|
||||||
|
end
|
||||||
119
mods/ra/lua/mission.lua
Normal file
119
mods/ra/lua/mission.lua
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
Mission = { }
|
||||||
|
|
||||||
|
Mission.PerformHelicopterInsertion = function(owner, helicopterName, passengerNames, enterPosition, unloadPosition, exitPosition)
|
||||||
|
local facing = { Map.GetFacing(WPos.op_Subtraction(unloadPosition, enterPosition), 0), "Int32" }
|
||||||
|
local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" }
|
||||||
|
local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude })
|
||||||
|
local cargo = Actor.Trait(heli, "Cargo")
|
||||||
|
local passengers = { }
|
||||||
|
for i, passengerName in ipairs(passengerNames) do
|
||||||
|
local passenger = Actor.Create(passengerName, { AddToWorld = false, Owner = owner })
|
||||||
|
cargo:Load(heli, passenger)
|
||||||
|
passengers[i] = passenger
|
||||||
|
end
|
||||||
|
Actor.HeliFly(heli, unloadPosition)
|
||||||
|
Actor.Turn(heli, 0)
|
||||||
|
Actor.HeliLand(heli, true)
|
||||||
|
Actor.UnloadCargo(heli, true)
|
||||||
|
Actor.Wait(heli, 125)
|
||||||
|
Actor.HeliFly(heli, exitPosition)
|
||||||
|
Actor.RemoveSelf(heli)
|
||||||
|
return heli, passengers
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.PerformHelicopterExtraction = function(owner, helicopterName, passengers, enterPosition, loadPosition, exitPosition)
|
||||||
|
local facing = { Map.GetFacing(WPos.op_Subtraction(loadPosition, enterPosition), 0), "Int32" }
|
||||||
|
local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" }
|
||||||
|
local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude })
|
||||||
|
local cargo = Actor.Trait(heli, "Cargo")
|
||||||
|
Actor.HeliFly(heli, loadPosition)
|
||||||
|
Actor.Turn(heli, 0)
|
||||||
|
Actor.HeliLand(heli, true)
|
||||||
|
Actor.WaitFor(heli, function()
|
||||||
|
for i, passenger in ipairs(passengers) do
|
||||||
|
if not cargo.Passengers:Contains(passenger) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end)
|
||||||
|
Actor.Wait(heli, 125)
|
||||||
|
Actor.HeliFly(heli, exitPosition)
|
||||||
|
Actor.RemoveSelf(heli)
|
||||||
|
return heli
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.Reinforce = function(owner, reinforcementNames, enterLocation, rallyPointLocation, interval, onCreateFunc)
|
||||||
|
local facing = { Map.GetFacing(CPos.op_Subtraction(rallyPointLocation, enterLocation), 0), "Int32" }
|
||||||
|
local ret = { }
|
||||||
|
for i = 1, #reinforcementNames do
|
||||||
|
local reinforcement = Actor.Create(reinforcementNames[i], { AddToWorld = false, Owner = owner, Location = enterLocation, Facing = facing })
|
||||||
|
table.insert(ret, reinforcement)
|
||||||
|
OpenRA.RunAfterDelay((i - 1) * interval, function()
|
||||||
|
World:Add(reinforcement)
|
||||||
|
Actor.MoveNear(reinforcement, rallyPointLocation, 2)
|
||||||
|
if onCreateFunc ~= nil then
|
||||||
|
onCreateFunc(reinforcement)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.Parabomb = function(owner, planeName, enterLocation, bombLocation)
|
||||||
|
local facing = { Map.GetFacing(CPos.op_Subtraction(bombLocation, enterLocation), 0), "Int32" }
|
||||||
|
local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" }
|
||||||
|
local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude })
|
||||||
|
Actor.Trait(plane, "AttackBomber"):SetTarget(bombLocation.CenterPosition)
|
||||||
|
Actor.Fly(plane, bombLocation.CenterPosition)
|
||||||
|
Actor.FlyOffMap(plane)
|
||||||
|
Actor.RemoveSelf(plane)
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.Paradrop = function(owner, planeName, passengerNames, enterLocation, dropLocation)
|
||||||
|
local facing = { Map.GetFacing(CPos.op_Subtraction(dropLocation, enterLocation), 0), "Int32" }
|
||||||
|
local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" }
|
||||||
|
local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude })
|
||||||
|
Actor.FlyAttackCell(plane, dropLocation)
|
||||||
|
Actor.Trait(plane, "ParaDrop"):SetLZ(dropLocation)
|
||||||
|
local cargo = Actor.Trait(plane, "Cargo")
|
||||||
|
for i, passengerName in ipairs(passengerNames) do
|
||||||
|
cargo:Load(plane, Actor.Create(passengerName, { AddToWorld = false, Owner = owner }))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.MissionOver = function(winners, losers, setWinStates)
|
||||||
|
World:SetLocalPauseState(true)
|
||||||
|
World:set_PauseStateLocked(true)
|
||||||
|
if winners then
|
||||||
|
for i, player in ipairs(winners) do
|
||||||
|
Media.PlaySpeechNotification("Win", player)
|
||||||
|
if setWinStates then
|
||||||
|
OpenRA.SetWinState(player, "Won")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if losers then
|
||||||
|
for i, player in ipairs(losers) do
|
||||||
|
Media.PlaySpeechNotification("Lose", player)
|
||||||
|
if setWinStates then
|
||||||
|
OpenRA.SetWinState(player, "Lost")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Mission.MissionIsOver = true
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.GetGroundAttackersOf = function(player)
|
||||||
|
return Utils.EnumerableWhere(World.Actors, function(actor)
|
||||||
|
return not Actor.IsDead(actor) and Actor.IsInWorld(actor) and Actor.Owner(actor) == player and Actor.HasTrait(actor, "AttackBase") and Actor.HasTrait(actor, "Mobile")
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.TickTakeOre = function(player)
|
||||||
|
OpenRA.TakeOre(player, 0.01 * OpenRA.GetOreCapacity(player) / 25)
|
||||||
|
end
|
||||||
|
|
||||||
|
Mission.RequiredUnitsAreDestroyed = function(player)
|
||||||
|
return Internal.RequiredUnitsAreDestroyed(player)
|
||||||
|
end
|
||||||
69
mods/ra/lua/openra.lua
Normal file
69
mods/ra/lua/openra.lua
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
OpenRA = { }
|
||||||
|
|
||||||
|
OpenRA.New = function(className, args)
|
||||||
|
return Internal.New(className, args)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.RunAfterDelay = function(delay, func)
|
||||||
|
Internal.RunAfterDelay(delay, func)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.Debug = function(obj)
|
||||||
|
Internal.Debug(obj)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.SetViewportCenterPosition = function(position)
|
||||||
|
WorldRenderer.Viewport:Center(position)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetViewportCenterPosition = function()
|
||||||
|
return WorldRenderer.Viewport.CenterPosition
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetDifficulty = function()
|
||||||
|
return World.LobbyInfo.GlobalSettings.Difficulty
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.IsSinglePlayer = function()
|
||||||
|
return World.LobbyInfo:get_IsSinglePlayer()
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetPlayer = function(internalName)
|
||||||
|
return Utils.EnumerableFirstOrNil(World.Players, function(p) return p.InternalName == internalName end)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.SetWinState = function(player, winState)
|
||||||
|
Internal.SetWinState(player, winState)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.TakeOre = function(player, amount)
|
||||||
|
Actor.Trait(player.PlayerActor, "PlayerResources"):TakeOre(amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.TakeCash = function(player, amount)
|
||||||
|
Actor.Trait(player.PlayerActor, "PlayerResources"):TakeCash(amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GiveOre = function(player, amount)
|
||||||
|
Actor.Trait(player.PlayerActor, "PlayerResources"):GiveOre(amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GiveCash = function(player, amount)
|
||||||
|
Actor.Trait(player.PlayerActor, "PlayerResources"):GiveCash(amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.CanGiveOre = function(player, amount)
|
||||||
|
return Actor.Trait(player.PlayerActor, "PlayerResources"):CanGiveOre(amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetOreCapacity = function(player)
|
||||||
|
return Actor.Trait(player.PlayerActor, "PlayerResources").OreCapacity
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetOre = function(player)
|
||||||
|
return Actor.Trait(player.PlayerActor, "PlayerResources").Ore
|
||||||
|
end
|
||||||
|
|
||||||
|
OpenRA.GetCash = function(player)
|
||||||
|
return Actor.Trait(player.PlayerActor, "PlayerResources").Cash
|
||||||
|
end
|
||||||
61
mods/ra/lua/team.lua
Normal file
61
mods/ra/lua/team.lua
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
Team = { }
|
||||||
|
|
||||||
|
Team.Create = function(actors)
|
||||||
|
local team = { }
|
||||||
|
team.Actors = actors
|
||||||
|
team.OnAllKilled = { }
|
||||||
|
team.OnAnyKilled = { }
|
||||||
|
team.OnAllRemovedFromWorld = { }
|
||||||
|
team.OnAnyRemovedFromWorld = { }
|
||||||
|
Team.AddActorEventHandlers(team)
|
||||||
|
return team
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AddActorEventHandlers = function(team)
|
||||||
|
for i, actor in ipairs(team.Actors) do
|
||||||
|
|
||||||
|
Actor.OnKilled(actor, function()
|
||||||
|
Team.InvokeHandlers(team.OnAnyKilled)
|
||||||
|
if Team.AllAreDead(team) then Team.InvokeHandlers(team.OnAllKilled) end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Actor.OnRemovedFromWorld(actor, function()
|
||||||
|
Team.InvokeHandlers(team.OnAnyRemovedFromWorld)
|
||||||
|
if not Team.AnyAreInWorld(team) then Team.InvokeHandlers(team.OnAllRemovedFromWorld) end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.InvokeHandlers = function(event)
|
||||||
|
for i, handler in ipairs(event) do
|
||||||
|
handler()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AllAreDead = function(team)
|
||||||
|
return Utils.All(team.Actors, Actor.IsDead)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AnyAreDead = function(team)
|
||||||
|
return Utils.Any(team.Actors, Actor.IsDead)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AllAreInWorld = function(team)
|
||||||
|
return Utils.All(team.Actors, Actor.IsInWorld)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AnyAreInWorld = function(team)
|
||||||
|
return Utils.Any(team.Actors, Actor.IsInWorld)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.AddEventHandler = function(event, func)
|
||||||
|
table.insert(event, func)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.Contains = function(team, actor)
|
||||||
|
return Utils.Any(team.Actors, function(a) return a == actor end)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.Do = function(team, func)
|
||||||
|
Utils.ForEach(team.Actors, func)
|
||||||
|
end
|
||||||
67
mods/ra/lua/utils.lua
Normal file
67
mods/ra/lua/utils.lua
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Utils = { }
|
||||||
|
|
||||||
|
Utils.Enumerate = function(netEnumerable)
|
||||||
|
local enum = netEnumerable:GetEnumerator()
|
||||||
|
return function()
|
||||||
|
if enum:MoveNext() then
|
||||||
|
return enum:get_Current()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.EnumerableFirstOrNil = function(netEnumerable, func)
|
||||||
|
for item in Utils.Enumerate(netEnumerable) do
|
||||||
|
if func(item) then
|
||||||
|
return item
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.EnumerableWhere = function(netEnumerable, func)
|
||||||
|
local ret = { }
|
||||||
|
for item in Utils.Enumerate(netEnumerable) do
|
||||||
|
if func(item) then
|
||||||
|
table.insert(ret, item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.Where = function(array, func)
|
||||||
|
local ret = { }
|
||||||
|
for i, item in ipairs(array) do
|
||||||
|
if func(item) then
|
||||||
|
table.insert(ret, item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.All = function(array, func)
|
||||||
|
for i, item in ipairs(array) do
|
||||||
|
if not func(item) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.Any = function(array, func)
|
||||||
|
for i, item in ipairs(array) do
|
||||||
|
if func(item) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.ForEach = function(array, func)
|
||||||
|
for i, item in ipairs(array) do
|
||||||
|
func(item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.TableToArray = function(luaTable)
|
||||||
|
return Internal.TableToArray(luaTable)
|
||||||
|
end
|
||||||
BIN
mods/ra/maps/allies-01-classic/map.bin
Normal file
BIN
mods/ra/maps/allies-01-classic/map.bin
Normal file
Binary file not shown.
626
mods/ra/maps/allies-01-classic/map.yaml
Normal file
626
mods/ra/maps/allies-01-classic/map.yaml
Normal file
@@ -0,0 +1,626 @@
|
|||||||
|
Selectable: True
|
||||||
|
|
||||||
|
MapFormat: 6
|
||||||
|
|
||||||
|
Title: Allies 01: In the thick of it
|
||||||
|
|
||||||
|
Description: In the thick of it
|
||||||
|
|
||||||
|
Author: Westwood Studios
|
||||||
|
|
||||||
|
Tileset: SNOW
|
||||||
|
|
||||||
|
Options:
|
||||||
|
Crates: False
|
||||||
|
Fog: True
|
||||||
|
Shroud: True
|
||||||
|
AllyBuildRadius: False
|
||||||
|
FragileAlliances: False
|
||||||
|
StartingCash: 0
|
||||||
|
ConfigurableStartingUnits: False
|
||||||
|
Difficulties:
|
||||||
|
|
||||||
|
MapSize: 128,128
|
||||||
|
|
||||||
|
RequiresMod: ra
|
||||||
|
|
||||||
|
Bounds: 49,45,30,36
|
||||||
|
|
||||||
|
UseAsShellmap: False
|
||||||
|
|
||||||
|
Type: Campaign
|
||||||
|
|
||||||
|
Players:
|
||||||
|
PlayerReference@USSR:
|
||||||
|
Name: USSR
|
||||||
|
Race: soviet
|
||||||
|
ColorRamp: 3,255,127
|
||||||
|
Enemies: Greece,England
|
||||||
|
PlayerReference@Neutral:
|
||||||
|
Name: Neutral
|
||||||
|
OwnsWorld: True
|
||||||
|
NonCombatant: True
|
||||||
|
Race: allies
|
||||||
|
Enemies: USSR,Greece,England
|
||||||
|
PlayerReference@Greece:
|
||||||
|
Name: Greece
|
||||||
|
Race: allies
|
||||||
|
ColorRamp: 161,134,200
|
||||||
|
Allies: England
|
||||||
|
Enemies: Neutral,USSR
|
||||||
|
Required: True
|
||||||
|
Playable: True
|
||||||
|
AllowBots: False
|
||||||
|
LockRace: True
|
||||||
|
LockSpawn: True
|
||||||
|
LockTeam: True
|
||||||
|
LockColor: True
|
||||||
|
PlayerReference@England:
|
||||||
|
Name: England
|
||||||
|
Race: allies
|
||||||
|
ColorRamp: 76,196,190
|
||||||
|
Allies: Greece
|
||||||
|
Enemies: USSR
|
||||||
|
|
||||||
|
Actors:
|
||||||
|
Actor0: t16
|
||||||
|
Location: 66,46
|
||||||
|
Owner: Neutral
|
||||||
|
Actor1: t17
|
||||||
|
Location: 59,46
|
||||||
|
Owner: Neutral
|
||||||
|
Actor2: tc04
|
||||||
|
Location: 75,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor3: tc05
|
||||||
|
Location: 76,45
|
||||||
|
Owner: Neutral
|
||||||
|
Actor4: t01
|
||||||
|
Location: 52,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor5: t02
|
||||||
|
Location: 70,68
|
||||||
|
Owner: Neutral
|
||||||
|
Actor6: t05
|
||||||
|
Location: 73,64
|
||||||
|
Owner: Neutral
|
||||||
|
Actor7: t14
|
||||||
|
Location: 59,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor8: t17
|
||||||
|
Location: 56,61
|
||||||
|
Owner: Neutral
|
||||||
|
Actor9: tc01
|
||||||
|
Location: 53,64
|
||||||
|
Owner: Neutral
|
||||||
|
Actor10: tc02
|
||||||
|
Location: 49,66
|
||||||
|
Owner: Neutral
|
||||||
|
Actor11: t07
|
||||||
|
Location: 49,59
|
||||||
|
Owner: Neutral
|
||||||
|
Actor12: tc05
|
||||||
|
Location: 49,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor13: tc04
|
||||||
|
Location: 50,58
|
||||||
|
Owner: Neutral
|
||||||
|
Actor14: tc03
|
||||||
|
Location: 69,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor15: t11
|
||||||
|
Location: 77,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor16: t01
|
||||||
|
Location: 78,59
|
||||||
|
Owner: Neutral
|
||||||
|
Actor17: tc01
|
||||||
|
Location: 76,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor18: t08
|
||||||
|
Location: 66,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor19: t17
|
||||||
|
Location: 57,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor20: t01
|
||||||
|
Location: 73,67
|
||||||
|
Owner: Neutral
|
||||||
|
Actor21: tc01
|
||||||
|
Location: 54,45
|
||||||
|
Owner: Neutral
|
||||||
|
Actor22: tsla
|
||||||
|
Location: 71,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor23: powr
|
||||||
|
Location: 75,64
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor24: powr
|
||||||
|
Location: 67,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor25: powr
|
||||||
|
Location: 61,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Lab: stek
|
||||||
|
Location: 61,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor27: fact
|
||||||
|
Location: 69,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor28: dome
|
||||||
|
Location: 67,65
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor29: barr
|
||||||
|
Location: 61,64
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor30: tsla
|
||||||
|
Location: 67,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor31: tsla
|
||||||
|
Location: 60,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor32: weap
|
||||||
|
Location: 65,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor33: proc
|
||||||
|
Location: 73,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
FreeActor: False
|
||||||
|
Actor34: kenn
|
||||||
|
Location: 64,65
|
||||||
|
Owner: USSR
|
||||||
|
Health: 0.9921875
|
||||||
|
Facing: 0
|
||||||
|
Actor35: powr
|
||||||
|
Location: 65,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor36: powr
|
||||||
|
Location: 77,64
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor37: powr
|
||||||
|
Location: 75,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor38: silo
|
||||||
|
Location: 59,64
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor39: powr
|
||||||
|
Location: 77,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
OilPump: v19
|
||||||
|
Location: 59,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor41: brl3
|
||||||
|
Location: 60,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor42: barl
|
||||||
|
Location: 60,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor43: barl
|
||||||
|
Location: 61,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor44: brl3
|
||||||
|
Location: 60,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor45: barl
|
||||||
|
Location: 58,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor46: barl
|
||||||
|
Location: 59,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor47: jeep
|
||||||
|
Location: 63,50
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
Harvester: harv
|
||||||
|
Location: 72,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 224
|
||||||
|
Actor49: jeep
|
||||||
|
Location: 62,50
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
Actor50: jeep
|
||||||
|
Location: 64,50
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
Patrol1: dog
|
||||||
|
Location: 63,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 2
|
||||||
|
Patrol2: e1
|
||||||
|
Location: 64,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 3
|
||||||
|
LabGuard3: e1
|
||||||
|
Location: 61,63
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 0
|
||||||
|
LabGuard2: e1
|
||||||
|
Location: 63,63
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor55: e2
|
||||||
|
Location: 73,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 1
|
||||||
|
Actor56: e1
|
||||||
|
Location: 62,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 4
|
||||||
|
Actor57: e1
|
||||||
|
Location: 67,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 3
|
||||||
|
Actor58: e1
|
||||||
|
Location: 65,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 3
|
||||||
|
Actor59: e1
|
||||||
|
Location: 56,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 1
|
||||||
|
Patrol4: e1
|
||||||
|
Location: 62,55
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 4
|
||||||
|
Patrol3: e1
|
||||||
|
Location: 64,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 2
|
||||||
|
LabGuard1: e1
|
||||||
|
Location: 64,61
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 4
|
||||||
|
Actor63: e1
|
||||||
|
Location: 58,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 1
|
||||||
|
Actor64: e1
|
||||||
|
Location: 64,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 1
|
||||||
|
Actor65: e1
|
||||||
|
Location: 63,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 0
|
||||||
|
Actor66: e1
|
||||||
|
Location: 62,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 2
|
||||||
|
Civilian1: c8
|
||||||
|
Location: 74,50
|
||||||
|
Owner: England
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 0
|
||||||
|
Civilian2: c7
|
||||||
|
Location: 76,48
|
||||||
|
Owner: England
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 3
|
||||||
|
Actor69: e2
|
||||||
|
Location: 62,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 1
|
||||||
|
Actor70: e2
|
||||||
|
Location: 62,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 4
|
||||||
|
Actor71: e1
|
||||||
|
Location: 64,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 2
|
||||||
|
Actor72: e1
|
||||||
|
Location: 62,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 1
|
||||||
|
ExtractionLZ: waypoint
|
||||||
|
Location: 53,49
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint1: waypoint
|
||||||
|
Location: 57,74
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint2: waypoint
|
||||||
|
Location: 53,79
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint3: waypoint
|
||||||
|
Location: 57,65
|
||||||
|
Owner: Neutral
|
||||||
|
CruiserCameraPoint: waypoint
|
||||||
|
Location: 69,67
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint7: waypoint
|
||||||
|
Location: 69,56
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint6: waypoint
|
||||||
|
Location: 55,60
|
||||||
|
Owner: Neutral
|
||||||
|
EinsteinSpawnPoint: waypoint
|
||||||
|
Location: 62,61
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint8: waypoint
|
||||||
|
Location: 49,55
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint9: waypoint
|
||||||
|
Location: 55,56
|
||||||
|
Owner: Neutral
|
||||||
|
InsertionLZ: waypoint
|
||||||
|
Location: 63,47
|
||||||
|
Owner: Neutral
|
||||||
|
InsertionEntry: waypoint
|
||||||
|
Location: 63,45
|
||||||
|
Owner: Neutral
|
||||||
|
BaseCameraPoint: waypoint
|
||||||
|
Location: 64,63
|
||||||
|
Owner: Neutral
|
||||||
|
CruiserPoint4: waypoint
|
||||||
|
Location: 72,75
|
||||||
|
Owner: Neutral
|
||||||
|
SouthReinforcementsPoint: waypoint
|
||||||
|
Location: 66,80
|
||||||
|
Owner: Neutral
|
||||||
|
ExtractionFlarePoint: waypoint
|
||||||
|
Location: 54,48
|
||||||
|
Owner: Neutral
|
||||||
|
CruiserPoint2: waypoint
|
||||||
|
Location: 64,75
|
||||||
|
Owner: Neutral
|
||||||
|
CruiserPoint3: waypoint
|
||||||
|
Location: 68,76
|
||||||
|
Owner: Neutral
|
||||||
|
CruiserPoint1: waypoint
|
||||||
|
Location: 60,74
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint78: waypoint
|
||||||
|
Location: 70,60
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint98: waypoint
|
||||||
|
Location: 63,47
|
||||||
|
Owner: Neutral
|
||||||
|
Actor48: fenc
|
||||||
|
Location: 53,60
|
||||||
|
Owner: USSR
|
||||||
|
Actor51: fenc
|
||||||
|
Location: 53,59
|
||||||
|
Owner: USSR
|
||||||
|
Actor52: fenc
|
||||||
|
Location: 54,59
|
||||||
|
Owner: USSR
|
||||||
|
Actor60: fenc
|
||||||
|
Location: 53,63
|
||||||
|
Owner: USSR
|
||||||
|
Actor61: fenc
|
||||||
|
Location: 54,63
|
||||||
|
Owner: USSR
|
||||||
|
Actor73: fenc
|
||||||
|
Location: 55,63
|
||||||
|
Owner: USSR
|
||||||
|
Actor74: fenc
|
||||||
|
Location: 55,64
|
||||||
|
Owner: USSR
|
||||||
|
Actor75: fenc
|
||||||
|
Location: 55,65
|
||||||
|
Owner: USSR
|
||||||
|
Actor76: fenc
|
||||||
|
Location: 55,66
|
||||||
|
Owner: USSR
|
||||||
|
Actor77: fenc
|
||||||
|
Location: 55,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor78: fenc
|
||||||
|
Location: 56,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor79: fenc
|
||||||
|
Location: 57,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor80: fenc
|
||||||
|
Location: 58,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor81: fenc
|
||||||
|
Location: 58,68
|
||||||
|
Owner: USSR
|
||||||
|
Actor82: fenc
|
||||||
|
Location: 73,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor83: fenc
|
||||||
|
Location: 74,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor84: fenc
|
||||||
|
Location: 78,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor85: fenc
|
||||||
|
Location: 77,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor86: fenc
|
||||||
|
Location: 76,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor87: fenc
|
||||||
|
Location: 78,58
|
||||||
|
Owner: USSR
|
||||||
|
Actor99: fenc
|
||||||
|
Location: 78,59
|
||||||
|
Owner: USSR
|
||||||
|
Actor88: fenc
|
||||||
|
Location: 77,58
|
||||||
|
Owner: USSR
|
||||||
|
Actor89: fenc
|
||||||
|
Location: 78,57
|
||||||
|
Owner: USSR
|
||||||
|
Actor90: fenc
|
||||||
|
Location: 78,56
|
||||||
|
Owner: USSR
|
||||||
|
Actor91: fenc
|
||||||
|
Location: 77,56
|
||||||
|
Owner: USSR
|
||||||
|
Actor98: fenc
|
||||||
|
Location: 76,56
|
||||||
|
Owner: USSR
|
||||||
|
Actor92: fenc
|
||||||
|
Location: 75,56
|
||||||
|
Owner: USSR
|
||||||
|
Actor93: fenc
|
||||||
|
Location: 74,56
|
||||||
|
Owner: USSR
|
||||||
|
Actor94: fenc
|
||||||
|
Location: 74,55
|
||||||
|
Owner: USSR
|
||||||
|
Actor95: fenc
|
||||||
|
Location: 68,55
|
||||||
|
Owner: USSR
|
||||||
|
Actor96: fenc
|
||||||
|
Location: 69,55
|
||||||
|
Owner: USSR
|
||||||
|
Actor97: fenc
|
||||||
|
Location: 68,54
|
||||||
|
Owner: USSR
|
||||||
|
ExtractionExitPoint: waypoint
|
||||||
|
Location: 78,49
|
||||||
|
Owner: Neutral
|
||||||
|
|
||||||
|
Smudges:
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
Player:
|
||||||
|
-ConquestVictoryConditions:
|
||||||
|
World:
|
||||||
|
-CrateDrop:
|
||||||
|
-SpawnMPUnits:
|
||||||
|
-MPStartLocations:
|
||||||
|
LuaScriptInterface:
|
||||||
|
LuaScripts: mission.lua
|
||||||
|
TRAN.Extraction:
|
||||||
|
Inherits: TRAN
|
||||||
|
RenderUnit:
|
||||||
|
Image: tran
|
||||||
|
RevealsShroud:
|
||||||
|
Range: 0
|
||||||
|
RejectsOrders:
|
||||||
|
-Selectable:
|
||||||
|
Cargo:
|
||||||
|
Types: Einstein
|
||||||
|
MaxWeight: 1
|
||||||
|
TRAN.Insertion:
|
||||||
|
Inherits: TRAN.Extraction
|
||||||
|
RenderUnit:
|
||||||
|
Image: tran
|
||||||
|
Cargo:
|
||||||
|
MaxWeight: 0
|
||||||
|
EINSTEIN:
|
||||||
|
Passenger:
|
||||||
|
CargoType: Einstein
|
||||||
|
^CivInfantry:
|
||||||
|
RevealsShroud:
|
||||||
|
Range: 0
|
||||||
|
|
||||||
|
Sequences:
|
||||||
|
|
||||||
|
VoxelSequences:
|
||||||
|
|
||||||
|
Weapons:
|
||||||
|
8Inch:
|
||||||
|
Range: 25
|
||||||
|
|
||||||
|
M60mg:
|
||||||
|
Range: 5
|
||||||
|
ROF: 20
|
||||||
|
Burst: 1
|
||||||
|
Warhead:
|
||||||
|
Damage: 20
|
||||||
|
Voices:
|
||||||
|
|
||||||
|
Notifications:
|
||||||
|
|
||||||
|
Translations:
|
||||||
151
mods/ra/maps/allies-01-classic/mission.lua
Normal file
151
mods/ra/maps/allies-01-classic/mission.lua
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
InsertionHelicopterType = "tran.insertion"
|
||||||
|
ExtractionHelicopterType = "tran.extraction"
|
||||||
|
JeepReinforcements = { "jeep", "jeep" }
|
||||||
|
JeepInterval = 50
|
||||||
|
JeepDelay = 125
|
||||||
|
TanyaType = "e7"
|
||||||
|
EinsteinType = "einstein"
|
||||||
|
FlareType = "flare"
|
||||||
|
Cruisers = { "ca", "ca", "ca", "ca" }
|
||||||
|
CruiserDelay = 250
|
||||||
|
CameraDelay = 125
|
||||||
|
CivilianWait = 150
|
||||||
|
BaseAlertDelay = 300
|
||||||
|
|
||||||
|
SendInsertionHelicopter = function()
|
||||||
|
local heli, passengers = Mission.PerformHelicopterInsertion(player, InsertionHelicopterType, { TanyaType },
|
||||||
|
InsertionEntry.CenterPosition, InsertionLZ.CenterPosition, InsertionEntry.CenterPosition)
|
||||||
|
tanya = passengers[1]
|
||||||
|
Actor.OnKilled(tanya, TanyaKilled)
|
||||||
|
end
|
||||||
|
|
||||||
|
SendJeeps = function()
|
||||||
|
Media.PlaySpeechNotification("ReinforcementsArrived")
|
||||||
|
Mission.Reinforce(player, JeepReinforcements, InsertionEntry.Location, InsertionLZ.Location, JeepInterval)
|
||||||
|
end
|
||||||
|
|
||||||
|
RunInitialActivities = function()
|
||||||
|
SendInsertionHelicopter()
|
||||||
|
Actor.Hunt(Patrol1)
|
||||||
|
Actor.Hunt(Patrol2)
|
||||||
|
Actor.Hunt(Patrol3)
|
||||||
|
Actor.Hunt(Patrol4)
|
||||||
|
Actor.Harvest(Harvester)
|
||||||
|
Team.Do(civiliansTeam, function(c)
|
||||||
|
Actor.Wait(c, CivilianWait)
|
||||||
|
Actor.Hunt(c)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
LabGuardsKilled = function()
|
||||||
|
CreateEinstein()
|
||||||
|
|
||||||
|
Actor.Create(FlareType, { Owner = england, Location = ExtractionFlarePoint.Location })
|
||||||
|
Media.PlaySpeechNotification("SignalFlareNorth")
|
||||||
|
SendExtractionHelicopter()
|
||||||
|
|
||||||
|
OpenRA.RunAfterDelay(BaseAlertDelay, function()
|
||||||
|
local ussrUnits = Mission.GetGroundAttackersOf(ussr)
|
||||||
|
for i, unit in ipairs(ussrUnits) do
|
||||||
|
Actor.Hunt(unit)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
OpenRA.RunAfterDelay(CruiserDelay, function()
|
||||||
|
Media.PlaySpeechNotification("AlliedReinforcementsArrived")
|
||||||
|
Actor.Create("camera", { Owner = player, Location = CruiserCameraPoint.Location })
|
||||||
|
SendCruisers()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
SendExtractionHelicopter = function()
|
||||||
|
local heli = Mission.PerformHelicopterExtraction(player, ExtractionHelicopterType, { einstein },
|
||||||
|
SouthReinforcementsPoint.CenterPosition, ExtractionLZ.CenterPosition, ExtractionExitPoint.CenterPosition)
|
||||||
|
Actor.OnKilled(heli, HelicopterDestroyed)
|
||||||
|
Actor.OnRemovedFromWorld(heli, HelicopterExtractionCompleted)
|
||||||
|
end
|
||||||
|
|
||||||
|
HelicopterExtractionCompleted = function()
|
||||||
|
MissionAccomplished()
|
||||||
|
end
|
||||||
|
|
||||||
|
SendCruisers = function()
|
||||||
|
for i, cruiser in ipairs(Cruisers) do
|
||||||
|
local ca = Actor.Create(cruiser, { Owner = england, Location = SouthReinforcementsPoint.Location })
|
||||||
|
Actor.Move(ca, _G["CruiserPoint" .. i].Location)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LabDestroyed = function(self, e)
|
||||||
|
if not einstein then
|
||||||
|
MissionFailed()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
EinsteinKilled = function(self, e)
|
||||||
|
MissionFailed()
|
||||||
|
end
|
||||||
|
|
||||||
|
HelicopterDestroyed = function(self, e)
|
||||||
|
MissionFailed()
|
||||||
|
end
|
||||||
|
|
||||||
|
TanyaKilled = function(self, e)
|
||||||
|
MissionFailed()
|
||||||
|
end
|
||||||
|
|
||||||
|
OilPumpDestroyed = function(self, e)
|
||||||
|
OpenRA.RunAfterDelay(JeepDelay, SendJeeps)
|
||||||
|
end
|
||||||
|
|
||||||
|
CreateEinstein = function()
|
||||||
|
einstein = Actor.Create(EinsteinType, { Location = EinsteinSpawnPoint.Location, Owner = player })
|
||||||
|
Actor.Scatter(einstein)
|
||||||
|
Actor.OnKilled(einstein, EinsteinKilled)
|
||||||
|
end
|
||||||
|
|
||||||
|
MissionAccomplished = function()
|
||||||
|
Mission.MissionOver({ player }, nil, false)
|
||||||
|
--Media.PlayMovieFullscreen("snowbomb.vqa")
|
||||||
|
end
|
||||||
|
|
||||||
|
MissionFailed = function()
|
||||||
|
Mission.MissionOver(nil, { player }, false)
|
||||||
|
Media.PlayMovieFullscreen("bmap.vqa")
|
||||||
|
end
|
||||||
|
|
||||||
|
SetUnitStances = function()
|
||||||
|
local playerUnits = Mission.GetGroundAttackersOf(player)
|
||||||
|
local ussrUnits = Mission.GetGroundAttackersOf(ussr)
|
||||||
|
for i, unit in ipairs(playerUnits) do
|
||||||
|
Actor.SetStance(unit, "Defend")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Tick = function()
|
||||||
|
Mission.TickTakeOre(ussr)
|
||||||
|
end
|
||||||
|
|
||||||
|
WorldLoaded = function()
|
||||||
|
player = OpenRA.GetPlayer("Greece")
|
||||||
|
england = OpenRA.GetPlayer("England")
|
||||||
|
ussr = OpenRA.GetPlayer("USSR")
|
||||||
|
|
||||||
|
Actor.OnKilled(Lab, LabDestroyed)
|
||||||
|
Actor.OnKilled(OilPump, OilPumpDestroyed)
|
||||||
|
|
||||||
|
labGuardsTeam = Team.Create({ LabGuard1, LabGuard2, LabGuard3 })
|
||||||
|
Team.AddEventHandler(labGuardsTeam.OnAllKilled, LabGuardsKilled)
|
||||||
|
|
||||||
|
civiliansTeam = Team.Create({ Civilian1, Civilian2 })
|
||||||
|
|
||||||
|
RunInitialActivities()
|
||||||
|
|
||||||
|
SetUnitStances()
|
||||||
|
|
||||||
|
OpenRA.RunAfterDelay(CameraDelay, function() Actor.Create("camera", { Owner = player, Location = BaseCameraPoint.Location }) end)
|
||||||
|
|
||||||
|
OpenRA.SetViewportCenterPosition(InsertionLZ.CenterPosition)
|
||||||
|
|
||||||
|
Media.PlayMovieFullscreen("ally1.vqa", function() Media.PlayMovieFullscreen("landing.vqa", Media.PlayRandomMusic) end)
|
||||||
|
end
|
||||||
BIN
mods/ra/maps/allies-02-classic/map.bin
Normal file
BIN
mods/ra/maps/allies-02-classic/map.bin
Normal file
Binary file not shown.
954
mods/ra/maps/allies-02-classic/map.yaml
Normal file
954
mods/ra/maps/allies-02-classic/map.yaml
Normal file
@@ -0,0 +1,954 @@
|
|||||||
|
Selectable: True
|
||||||
|
|
||||||
|
MapFormat: 6
|
||||||
|
|
||||||
|
Title: Allies 02: Five to one
|
||||||
|
|
||||||
|
Description: Five to one
|
||||||
|
|
||||||
|
Author: Westwood Studios
|
||||||
|
|
||||||
|
Tileset: SNOW
|
||||||
|
|
||||||
|
Options:
|
||||||
|
Crates: False
|
||||||
|
Fog: True
|
||||||
|
Shroud: True
|
||||||
|
AllyBuildRadius: False
|
||||||
|
FragileAlliances: False
|
||||||
|
StartingCash: 5700
|
||||||
|
ConfigurableStartingUnits: False
|
||||||
|
Difficulties:
|
||||||
|
|
||||||
|
MapSize: 128,128
|
||||||
|
|
||||||
|
RequiresMod: ra
|
||||||
|
|
||||||
|
Bounds: 43,44,50,42
|
||||||
|
|
||||||
|
UseAsShellmap: False
|
||||||
|
|
||||||
|
Type: Campaign
|
||||||
|
|
||||||
|
Players:
|
||||||
|
PlayerReference@USSR:
|
||||||
|
Name: USSR
|
||||||
|
Race: soviet
|
||||||
|
ColorRamp: 3,255,127
|
||||||
|
Allies: BadGuy
|
||||||
|
Enemies: England,Greece
|
||||||
|
PlayerReference@France:
|
||||||
|
Name: France
|
||||||
|
Race: allies
|
||||||
|
ColorRamp: 115,115,143
|
||||||
|
Allies: England,Greece
|
||||||
|
Enemies: USSR,BadGuy
|
||||||
|
PlayerReference@Neutral:
|
||||||
|
Name: Neutral
|
||||||
|
OwnsWorld: True
|
||||||
|
NonCombatant: True
|
||||||
|
Race: allies
|
||||||
|
Enemies: England,Greece
|
||||||
|
PlayerReference@BadGuy:
|
||||||
|
Name: BadGuy
|
||||||
|
Race: soviet
|
||||||
|
ColorRamp: 3,255,127
|
||||||
|
Allies: USSR
|
||||||
|
Enemies: England,Greece
|
||||||
|
PlayerReference@Greece:
|
||||||
|
Name: Greece
|
||||||
|
Playable: True
|
||||||
|
AllowBots: False
|
||||||
|
Required: True
|
||||||
|
LockRace: True
|
||||||
|
Race: allies
|
||||||
|
LockColor: True
|
||||||
|
ColorRamp: 161,134,200
|
||||||
|
LockSpawn: True
|
||||||
|
LockTeam: True
|
||||||
|
Allies: France,England
|
||||||
|
Enemies: USSR,BadGuy
|
||||||
|
|
||||||
|
Actors:
|
||||||
|
EntryPoint: t06
|
||||||
|
Location: 75,80
|
||||||
|
Owner: Neutral
|
||||||
|
Actor1: t03
|
||||||
|
Location: 75,72
|
||||||
|
Owner: Neutral
|
||||||
|
Actor2: t08
|
||||||
|
Location: 92,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor3: t12
|
||||||
|
Location: 92,63
|
||||||
|
Owner: Neutral
|
||||||
|
Actor4: t01
|
||||||
|
Location: 89,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor5: t16
|
||||||
|
Location: 61,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor6: t14
|
||||||
|
Location: 58,49
|
||||||
|
Owner: Neutral
|
||||||
|
Actor7: t10
|
||||||
|
Location: 55,46
|
||||||
|
Owner: Neutral
|
||||||
|
Actor8: t10
|
||||||
|
Location: 43,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor9: t01
|
||||||
|
Location: 45,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor10: t17
|
||||||
|
Location: 53,66
|
||||||
|
Owner: Neutral
|
||||||
|
Actor11: tc01
|
||||||
|
Location: 59,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor12: tc01
|
||||||
|
Location: 63,74
|
||||||
|
Owner: Neutral
|
||||||
|
Actor13: t07
|
||||||
|
Location: 44,77
|
||||||
|
Owner: Neutral
|
||||||
|
Actor14: t08
|
||||||
|
Location: 50,78
|
||||||
|
Owner: Neutral
|
||||||
|
Actor15: t11
|
||||||
|
Location: 51,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor16: t10
|
||||||
|
Location: 68,77
|
||||||
|
Owner: Neutral
|
||||||
|
Actor17: tc02
|
||||||
|
Location: 69,72
|
||||||
|
Owner: Neutral
|
||||||
|
Actor18: tc03
|
||||||
|
Location: 71,52
|
||||||
|
Owner: Neutral
|
||||||
|
Actor19: tc04
|
||||||
|
Location: 67,76
|
||||||
|
Owner: Neutral
|
||||||
|
Actor20: t17
|
||||||
|
Location: 70,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor21: tc01
|
||||||
|
Location: 70,54
|
||||||
|
Owner: Neutral
|
||||||
|
Actor22: t06
|
||||||
|
Location: 67,54
|
||||||
|
Owner: Neutral
|
||||||
|
Actor23: t01
|
||||||
|
Location: 67,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor24: tc02
|
||||||
|
Location: 67,51
|
||||||
|
Owner: Neutral
|
||||||
|
Actor25: tc04
|
||||||
|
Location: 67,49
|
||||||
|
Owner: Neutral
|
||||||
|
Actor26: t17
|
||||||
|
Location: 69,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor27: t08
|
||||||
|
Location: 64,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor28: t16
|
||||||
|
Location: 72,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor29: t15
|
||||||
|
Location: 71,63
|
||||||
|
Owner: Neutral
|
||||||
|
Actor30: tc04
|
||||||
|
Location: 67,66
|
||||||
|
Owner: Neutral
|
||||||
|
Actor31: tc05
|
||||||
|
Location: 68,67
|
||||||
|
Owner: Neutral
|
||||||
|
Actor32: t17
|
||||||
|
Location: 67,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor33: tc02
|
||||||
|
Location: 44,68
|
||||||
|
Owner: Neutral
|
||||||
|
Actor34: t12
|
||||||
|
Location: 93,81
|
||||||
|
Owner: Neutral
|
||||||
|
Actor35: t03
|
||||||
|
Location: 93,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor36: t02
|
||||||
|
Location: 93,57
|
||||||
|
Owner: Neutral
|
||||||
|
Actor37: t02
|
||||||
|
Location: 79,47
|
||||||
|
Owner: Neutral
|
||||||
|
Actor38: t11
|
||||||
|
Location: 77,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor39: t01
|
||||||
|
Location: 92,45
|
||||||
|
Owner: Neutral
|
||||||
|
Actor40: t05
|
||||||
|
Location: 93,54
|
||||||
|
Owner: Neutral
|
||||||
|
Actor41: t06
|
||||||
|
Location: 93,82
|
||||||
|
Owner: Neutral
|
||||||
|
Actor42: t07
|
||||||
|
Location: 87,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor43: t14
|
||||||
|
Location: 46,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor44: t08
|
||||||
|
Location: 48,85
|
||||||
|
Owner: Neutral
|
||||||
|
Actor45: t07
|
||||||
|
Location: 51,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor46: tc01
|
||||||
|
Location: 62,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor47: t11
|
||||||
|
Location: 59,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor48: t01
|
||||||
|
Location: 45,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor49: tc04
|
||||||
|
Location: 45,53
|
||||||
|
Owner: Neutral
|
||||||
|
Actor50: t11
|
||||||
|
Location: 54,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor51: t10
|
||||||
|
Location: 84,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor52: tc05
|
||||||
|
Location: 90,83
|
||||||
|
Owner: Neutral
|
||||||
|
Actor53: tc01
|
||||||
|
Location: 89,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor54: tc04
|
||||||
|
Location: 85,81
|
||||||
|
Owner: Neutral
|
||||||
|
Actor55: tc05
|
||||||
|
Location: 43,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor56: tc03
|
||||||
|
Location: 43,70
|
||||||
|
Owner: Neutral
|
||||||
|
Actor57: weap
|
||||||
|
Location: 60,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor58: fact
|
||||||
|
Location: 62,61
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor59: proc
|
||||||
|
Location: 53,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
FreeActor: False
|
||||||
|
Actor60: powr
|
||||||
|
Location: 57,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor61: barr
|
||||||
|
Location: 56,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor62: powr
|
||||||
|
Location: 59,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor63: kenn
|
||||||
|
Location: 58,68
|
||||||
|
Owner: USSR
|
||||||
|
Health: 0.9921875
|
||||||
|
Facing: 0
|
||||||
|
Actor64: brl3
|
||||||
|
Location: 65,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor65: barl
|
||||||
|
Location: 66,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor66: barl
|
||||||
|
Location: 65,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor67: brl3
|
||||||
|
Location: 64,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor68: barl
|
||||||
|
Location: 65,61
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor69: v19
|
||||||
|
Location: 67,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor70: v19
|
||||||
|
Location: 67,59
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor71: barl
|
||||||
|
Location: 65,62
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor72: silo
|
||||||
|
Location: 54,68
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor73: brl3
|
||||||
|
Location: 55,70
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor74: brl3
|
||||||
|
Location: 54,70
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor75: barl
|
||||||
|
Location: 53,69
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor76: barl
|
||||||
|
Location: 54,69
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor77: barl
|
||||||
|
Location: 55,71
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor78: brl3
|
||||||
|
Location: 56,71
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor79: brl3
|
||||||
|
Location: 53,68
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor80: v19
|
||||||
|
Location: 56,70
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor81: barl
|
||||||
|
Location: 55,69
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor82: brl3
|
||||||
|
Location: 72,51
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor83: barl
|
||||||
|
Location: 72,50
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor84: barl
|
||||||
|
Location: 74,48
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor85: barl
|
||||||
|
Location: 72,49
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor86: barl
|
||||||
|
Location: 73,48
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor87: v19
|
||||||
|
Location: 75,48
|
||||||
|
Owner: USSR
|
||||||
|
Health: 0.5195313
|
||||||
|
Facing: 0
|
||||||
|
Actor88: v19
|
||||||
|
Location: 62,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor89: v19
|
||||||
|
Location: 60,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor90: brl3
|
||||||
|
Location: 62,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor91: brl3
|
||||||
|
Location: 61,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor92: barl
|
||||||
|
Location: 61,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor93: brl3
|
||||||
|
Location: 59,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Actor94: barl
|
||||||
|
Location: 58,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
Harvester: harv
|
||||||
|
Location: 55,65
|
||||||
|
Owner: USSR
|
||||||
|
Health: 0.5
|
||||||
|
Facing: 160
|
||||||
|
Actor96: dog
|
||||||
|
Location: 53,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 1
|
||||||
|
Actor97: dog
|
||||||
|
Location: 65,68
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 3
|
||||||
|
Actor98: dog
|
||||||
|
Location: 65,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 2
|
||||||
|
Actor99: dog
|
||||||
|
Location: 59,70
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 2
|
||||||
|
Actor100: e2
|
||||||
|
Location: 61,56
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 3
|
||||||
|
Actor101: e2
|
||||||
|
Location: 59,57
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 224
|
||||||
|
SubCell: 4
|
||||||
|
Actor102: e2
|
||||||
|
Location: 64,67
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor103: e1
|
||||||
|
Location: 77,74
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 2
|
||||||
|
Actor104: e1
|
||||||
|
Location: 80,74
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 0
|
||||||
|
Actor105: e1
|
||||||
|
Location: 56,68
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 3
|
||||||
|
Actor106: e1
|
||||||
|
Location: 50,72
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 4
|
||||||
|
Actor107: e1
|
||||||
|
Location: 73,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 2
|
||||||
|
Actor108: e1
|
||||||
|
Location: 74,61
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 224
|
||||||
|
SubCell: 1
|
||||||
|
Actor109: e1
|
||||||
|
Location: 72,60
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 0
|
||||||
|
Actor110: e1
|
||||||
|
Location: 49,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 192
|
||||||
|
SubCell: 0
|
||||||
|
Actor111: e1
|
||||||
|
Location: 51,58
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 1
|
||||||
|
Actor112: e1
|
||||||
|
Location: 60,78
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 192
|
||||||
|
SubCell: 4
|
||||||
|
Actor113: e2
|
||||||
|
Location: 62,79
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 4
|
||||||
|
Actor114: e1
|
||||||
|
Location: 57,82
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 1
|
||||||
|
Actor115: e1
|
||||||
|
Location: 60,64
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 224
|
||||||
|
SubCell: 3
|
||||||
|
Actor116: e2
|
||||||
|
Location: 68,45
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor117: e1
|
||||||
|
Location: 48,72
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor118: e1
|
||||||
|
Location: 57,69
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 1
|
||||||
|
Actor119: e2
|
||||||
|
Location: 60,70
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 0
|
||||||
|
Actor120: e1
|
||||||
|
Location: 89,48
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 1
|
||||||
|
Actor121: e1
|
||||||
|
Location: 87,48
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 192
|
||||||
|
SubCell: 4
|
||||||
|
Actor122: e1
|
||||||
|
Location: 87,48
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 192
|
||||||
|
SubCell: 1
|
||||||
|
Actor123: e1
|
||||||
|
Location: 88,48
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 4
|
||||||
|
Actor124: e1
|
||||||
|
Location: 88,49
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 128
|
||||||
|
SubCell: 1
|
||||||
|
Actor125: dog
|
||||||
|
Location: 78,75
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 1
|
||||||
|
Actor126: e1
|
||||||
|
Location: 71,61
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 0
|
||||||
|
Actor127: dog
|
||||||
|
Location: 70,61
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 4
|
||||||
|
Actor128: e1
|
||||||
|
Location: 50,46
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 32
|
||||||
|
SubCell: 1
|
||||||
|
Actor129: e1
|
||||||
|
Location: 49,47
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 0
|
||||||
|
Actor130: e2
|
||||||
|
Location: 49,49
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 1
|
||||||
|
Actor131: e2
|
||||||
|
Location: 47,46
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 3
|
||||||
|
Actor132: e2
|
||||||
|
Location: 48,63
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 1
|
||||||
|
Actor133: e1
|
||||||
|
Location: 49,63
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 2
|
||||||
|
Actor134: e1
|
||||||
|
Location: 74,81
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 3
|
||||||
|
Actor135: e2
|
||||||
|
Location: 75,83
|
||||||
|
Owner: BadGuy
|
||||||
|
Health: 1
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor136: e2
|
||||||
|
Location: 69,66
|
||||||
|
Owner: USSR
|
||||||
|
Health: 1
|
||||||
|
Facing: 0
|
||||||
|
SubCell: 3
|
||||||
|
Actor137: e2
|
||||||
|
Location: 73,51
|
||||||
|
Owner: USSR
|
||||||
|
Health: 0.5585938
|
||||||
|
Facing: 224
|
||||||
|
SubCell: 4
|
||||||
|
Actor138: medi
|
||||||
|
Location: 88,48
|
||||||
|
Owner: Greece
|
||||||
|
Health: 1
|
||||||
|
Facing: 160
|
||||||
|
SubCell: 1
|
||||||
|
TruckEntryPoint: waypoint
|
||||||
|
Location: 49,44
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint1: waypoint
|
||||||
|
Location: 49,50
|
||||||
|
Owner: Neutral
|
||||||
|
TruckRallyPoint: waypoint
|
||||||
|
Location: 49,76
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint3: waypoint
|
||||||
|
Location: 65,82
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint4: waypoint
|
||||||
|
Location: 74,82
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint6: waypoint
|
||||||
|
Location: 65,82
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint7: waypoint
|
||||||
|
Location: 74,82
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint8: waypoint
|
||||||
|
Location: 78,74
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint9: waypoint
|
||||||
|
Location: 82,65
|
||||||
|
Owner: Neutral
|
||||||
|
ReinforcementsRallyPoint: waypoint
|
||||||
|
Location: 88,49
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint11: waypoint
|
||||||
|
Location: 51,65
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint12: waypoint
|
||||||
|
Location: 63,64
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint13: waypoint
|
||||||
|
Location: 72,61
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint14: waypoint
|
||||||
|
Location: 69,47
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint15: waypoint
|
||||||
|
Location: 78,51
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint16: waypoint
|
||||||
|
Location: 80,45
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint25: waypoint
|
||||||
|
Location: 80,89
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint26: waypoint
|
||||||
|
Location: 43,63
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint94: waypoint
|
||||||
|
Location: 90,46
|
||||||
|
Owner: Neutral
|
||||||
|
McvDeployPoint: waypoint
|
||||||
|
Location: 89,51
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint96: waypoint
|
||||||
|
Location: 90,68
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint98: waypoint
|
||||||
|
Location: 88,49
|
||||||
|
Owner: Neutral
|
||||||
|
Actor139: fenc
|
||||||
|
Location: 57,75
|
||||||
|
Owner: USSR
|
||||||
|
Actor140: fenc
|
||||||
|
Location: 57,76
|
||||||
|
Owner: USSR
|
||||||
|
Actor141: fenc
|
||||||
|
Location: 57,77
|
||||||
|
Owner: USSR
|
||||||
|
Actor142: fenc
|
||||||
|
Location: 58,77
|
||||||
|
Owner: USSR
|
||||||
|
Actor143: fenc
|
||||||
|
Location: 58,78
|
||||||
|
Owner: USSR
|
||||||
|
Actor144: fenc
|
||||||
|
Location: 57,78
|
||||||
|
Owner: USSR
|
||||||
|
Actor145: fenc
|
||||||
|
Location: 58,75
|
||||||
|
Owner: USSR
|
||||||
|
Actor146: fenc
|
||||||
|
Location: 58,74
|
||||||
|
Owner: USSR
|
||||||
|
Actor147: fenc
|
||||||
|
Location: 57,74
|
||||||
|
Owner: USSR
|
||||||
|
Actor148: fenc
|
||||||
|
Location: 66,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor149: fenc
|
||||||
|
Location: 66,68
|
||||||
|
Owner: USSR
|
||||||
|
Actor150: fenc
|
||||||
|
Location: 66,69
|
||||||
|
Owner: USSR
|
||||||
|
Actor151: fenc
|
||||||
|
Location: 66,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor152: fenc
|
||||||
|
Location: 65,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor153: fenc
|
||||||
|
Location: 64,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor154: fenc
|
||||||
|
Location: 63,70
|
||||||
|
Owner: USSR
|
||||||
|
Actor155: fenc
|
||||||
|
Location: 51,68
|
||||||
|
Owner: USSR
|
||||||
|
Actor156: fenc
|
||||||
|
Location: 52,68
|
||||||
|
Owner: USSR
|
||||||
|
Actor157: fenc
|
||||||
|
Location: 52,67
|
||||||
|
Owner: USSR
|
||||||
|
Actor158: fenc
|
||||||
|
Location: 52,66
|
||||||
|
Owner: USSR
|
||||||
|
Actor159: fenc
|
||||||
|
Location: 51,66
|
||||||
|
Owner: USSR
|
||||||
|
Actor160: fenc
|
||||||
|
Location: 51,62
|
||||||
|
Owner: USSR
|
||||||
|
Actor161: fenc
|
||||||
|
Location: 51,63
|
||||||
|
Owner: USSR
|
||||||
|
Actor162: fenc
|
||||||
|
Location: 67,58
|
||||||
|
Owner: USSR
|
||||||
|
Actor163: fenc
|
||||||
|
Location: 66,58
|
||||||
|
Owner: USSR
|
||||||
|
Actor164: fenc
|
||||||
|
Location: 66,59
|
||||||
|
Owner: USSR
|
||||||
|
Actor165: fenc
|
||||||
|
Location: 47,51
|
||||||
|
Owner: USSR
|
||||||
|
Actor166: fenc
|
||||||
|
Location: 47,50
|
||||||
|
Owner: USSR
|
||||||
|
Actor167: fenc
|
||||||
|
Location: 46,50
|
||||||
|
Owner: USSR
|
||||||
|
Actor168: fenc
|
||||||
|
Location: 51,50
|
||||||
|
Owner: USSR
|
||||||
|
Actor169: fenc
|
||||||
|
Location: 50,50
|
||||||
|
Owner: USSR
|
||||||
|
Actor170: fenc
|
||||||
|
Location: 50,51
|
||||||
|
Owner: USSR
|
||||||
|
ReinforcementsEntryPoint: waypoint
|
||||||
|
Location: 90,44
|
||||||
|
Owner: Neutral
|
||||||
|
TruckExitPoint: waypoint
|
||||||
|
Location: 80,85
|
||||||
|
Owner: Neutral
|
||||||
|
|
||||||
|
Smudges:
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
Player:
|
||||||
|
-ConquestVictoryConditions:
|
||||||
|
World:
|
||||||
|
-CrateDrop:
|
||||||
|
-SpawnMPUnits:
|
||||||
|
-MPStartLocations:
|
||||||
|
LuaScriptInterface:
|
||||||
|
LuaScripts: mission.lua
|
||||||
|
^Infantry:
|
||||||
|
MustBeDestroyed:
|
||||||
|
^Tank:
|
||||||
|
MustBeDestroyed:
|
||||||
|
^Vehicle:
|
||||||
|
MustBeDestroyed:
|
||||||
|
APWR:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
FIX:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
SYRD:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
WEAP:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
DOME:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
HPAD:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
ATEK:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
BRIK:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
HBOX.E1:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
GUN:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
AGUN:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
GAP:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
PDOX:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
MSLO:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
E6:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
SPY:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
MECH:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
E7:
|
||||||
|
Buildable:
|
||||||
|
Owner: None
|
||||||
|
|
||||||
|
Sequences:
|
||||||
|
|
||||||
|
VoxelSequences:
|
||||||
|
|
||||||
|
Weapons:
|
||||||
|
M60mg:
|
||||||
|
Range: 5
|
||||||
|
ROF: 20
|
||||||
|
Burst: 1
|
||||||
|
Warhead:
|
||||||
|
Damage: 20
|
||||||
|
Voices:
|
||||||
|
|
||||||
|
Notifications:
|
||||||
|
|
||||||
|
Translations:
|
||||||
78
mods/ra/maps/allies-02-classic/mission.lua
Normal file
78
mods/ra/maps/allies-02-classic/mission.lua
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
Reinforcements = { "e1", "e1", "e1", "jeep" }
|
||||||
|
ReinforcementsInterval = 15
|
||||||
|
TruckNames = { "truk", "truk", "truk" }
|
||||||
|
TruckInterval = 25
|
||||||
|
TruckDelay = 75
|
||||||
|
FirstJeepReinforcementsDelay = 125
|
||||||
|
SecondJeepReinforcementsDelay = 250
|
||||||
|
|
||||||
|
SendMcvReinforcements = function()
|
||||||
|
Media.PlaySpeechNotification("ReinforcementsArrived")
|
||||||
|
local mcv = Actor.Create("mcv", { Owner = player, Location = ReinforcementsEntryPoint.Location })
|
||||||
|
Actor.Move(mcv, McvDeployPoint.Location)
|
||||||
|
Actor.DeployTransform(mcv)
|
||||||
|
end
|
||||||
|
|
||||||
|
SendJeepReinforcements = function()
|
||||||
|
Media.PlaySpeechNotification("ReinforcementsArrived")
|
||||||
|
Mission.Reinforce(player, Reinforcements, ReinforcementsEntryPoint.Location, ReinforcementsRallyPoint.Location, ReinforcementsInterval)
|
||||||
|
end
|
||||||
|
|
||||||
|
RunInitialActivities = function()
|
||||||
|
Actor.Harvest(Harvester)
|
||||||
|
end
|
||||||
|
|
||||||
|
MissionAccomplished = function()
|
||||||
|
Mission.MissionOver({ player }, nil, false)
|
||||||
|
Media.PlayMovieFullscreen("montpass.vqa")
|
||||||
|
end
|
||||||
|
|
||||||
|
MissionFailed = function()
|
||||||
|
Mission.MissionOver(nil, { player }, false)
|
||||||
|
Media.PlayMovieFullscreen("frozen.vqa")
|
||||||
|
end
|
||||||
|
|
||||||
|
Tick = function()
|
||||||
|
Mission.TickTakeOre(ussr)
|
||||||
|
|
||||||
|
if not Mission.MissionIsOver then
|
||||||
|
if Mission.RequiredUnitsAreDestroyed(player) then
|
||||||
|
MissionFailed()
|
||||||
|
end
|
||||||
|
if not trucksSent and Mission.RequiredUnitsAreDestroyed(ussr) and Mission.RequiredUnitsAreDestroyed(badGuy) then
|
||||||
|
SendTrucks()
|
||||||
|
trucksSent = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SendTrucks = function()
|
||||||
|
Media.PlaySpeechNotification("ConvoyApproaching")
|
||||||
|
OpenRA.RunAfterDelay(TruckDelay, function()
|
||||||
|
local trucks = Mission.Reinforce(france, TruckNames, TruckEntryPoint.Location, TruckRallyPoint.Location, TruckInterval,
|
||||||
|
function(truck)
|
||||||
|
Actor.Move(truck, TruckExitPoint.Location)
|
||||||
|
Actor.RemoveSelf(truck)
|
||||||
|
end)
|
||||||
|
local trucksTeam = Team.Create(trucks)
|
||||||
|
Team.AddEventHandler(trucksTeam.OnAllRemovedFromWorld, MissionAccomplished)
|
||||||
|
Team.AddEventHandler(trucksTeam.OnAnyKilled, MissionFailed)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
WorldLoaded = function()
|
||||||
|
player = OpenRA.GetPlayer("Greece")
|
||||||
|
france = OpenRA.GetPlayer("France")
|
||||||
|
ussr = OpenRA.GetPlayer("USSR")
|
||||||
|
badGuy = OpenRA.GetPlayer("BadGuy")
|
||||||
|
|
||||||
|
RunInitialActivities()
|
||||||
|
|
||||||
|
SendMcvReinforcements()
|
||||||
|
OpenRA.RunAfterDelay(FirstJeepReinforcementsDelay, SendJeepReinforcements)
|
||||||
|
OpenRA.RunAfterDelay(SecondJeepReinforcementsDelay, SendJeepReinforcements)
|
||||||
|
|
||||||
|
OpenRA.SetViewportCenterPosition(ReinforcementsEntryPoint.CenterPosition)
|
||||||
|
|
||||||
|
Media.PlayMovieFullscreen("ally2.vqa", function() Media.PlayMovieFullscreen("mcv.vqa", Media.PlayRandomMusic) end)
|
||||||
|
end
|
||||||
@@ -164,3 +164,12 @@ Fonts:
|
|||||||
TinyBold:
|
TinyBold:
|
||||||
Font:FreeSansBold.ttf
|
Font:FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
|
LuaScripts:
|
||||||
|
mods/ra/lua/utils.lua
|
||||||
|
mods/ra/lua/openra.lua
|
||||||
|
mods/ra/lua/map.lua
|
||||||
|
mods/ra/lua/actor.lua
|
||||||
|
mods/ra/lua/team.lua
|
||||||
|
mods/ra/lua/media.lua
|
||||||
|
mods/ra/lua/mission.lua
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ Speech:
|
|||||||
NavalUnitLost: navylst1
|
NavalUnitLost: navylst1
|
||||||
AirUnitLost: aunitl1
|
AirUnitLost: aunitl1
|
||||||
BuildingCaptured: strucap1
|
BuildingCaptured: strucap1
|
||||||
|
ReinforcementsArrived: reinfor1
|
||||||
|
SignalFlareNorth: flaren1
|
||||||
|
AlliedReinforcementsArrived: aarrive1
|
||||||
|
ConvoyApproaching: convyap1
|
||||||
|
|
||||||
Sounds:
|
Sounds:
|
||||||
Notifications:
|
Notifications:
|
||||||
|
|||||||
@@ -242,6 +242,19 @@ V19:
|
|||||||
ExcludeTilesets: DESERT
|
ExcludeTilesets: DESERT
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Oil Pump
|
Name: Oil Pump
|
||||||
|
LeavesHusk:
|
||||||
|
HuskActor: V19.Husk
|
||||||
|
AutoTargetIgnore:
|
||||||
|
|
||||||
|
V19.Husk:
|
||||||
|
Inherits: ^CivBuilding
|
||||||
|
EditorTilesetFilter:
|
||||||
|
ExcludeTilesets: DESERT
|
||||||
|
Tooltip:
|
||||||
|
Name: Husk (Oil Pump)
|
||||||
|
WithFire:
|
||||||
|
-Health:
|
||||||
|
-Selectable:
|
||||||
|
|
||||||
BARL:
|
BARL:
|
||||||
Inherits: ^TechBuilding
|
Inherits: ^TechBuilding
|
||||||
@@ -327,7 +340,6 @@ OILB:
|
|||||||
ExternalCapturable:
|
ExternalCapturable:
|
||||||
ExternalCapturableBar:
|
ExternalCapturableBar:
|
||||||
EngineerRepairable:
|
EngineerRepairable:
|
||||||
-MustBeDestroyed:
|
|
||||||
CashTrickler:
|
CashTrickler:
|
||||||
Period: 250
|
Period: 250
|
||||||
Amount: 100
|
Amount: 100
|
||||||
|
|||||||
@@ -42,6 +42,8 @@
|
|||||||
SuccessRate: 20
|
SuccessRate: 20
|
||||||
EjectOnGround: yes
|
EjectOnGround: yes
|
||||||
EjectInAir: no
|
EjectInAir: no
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Tank:
|
^Tank:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -87,6 +89,8 @@
|
|||||||
SuccessRate: 20
|
SuccessRate: 20
|
||||||
EjectOnGround: yes
|
EjectOnGround: yes
|
||||||
EjectInAir: no
|
EjectInAir: no
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -142,6 +146,8 @@
|
|||||||
HealIfBelow: 1
|
HealIfBelow: 1
|
||||||
DamageCooldown: 125
|
DamageCooldown: 125
|
||||||
RequiresTech: InfantryHealing
|
RequiresTech: InfantryHealing
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Ship:
|
^Ship:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -174,6 +180,8 @@
|
|||||||
Guard:
|
Guard:
|
||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -203,6 +211,8 @@
|
|||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
CombatDebugOverlay:
|
CombatDebugOverlay:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits: ^Plane
|
Inherits: ^Plane
|
||||||
@@ -252,6 +262,8 @@
|
|||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
GpsDot:
|
GpsDot:
|
||||||
String:Structure
|
String:Structure
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Wall:
|
^Wall:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -287,6 +299,7 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^TechBuilding:
|
^TechBuilding:
|
||||||
Inherits: ^Building
|
Inherits: ^Building
|
||||||
@@ -308,6 +321,7 @@
|
|||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
-GpsDot:
|
-GpsDot:
|
||||||
|
-MustBeDestroyed:
|
||||||
|
|
||||||
^AmmoBox:
|
^AmmoBox:
|
||||||
Inherits: ^TechBuilding
|
Inherits: ^TechBuilding
|
||||||
@@ -390,6 +404,7 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Husk:
|
^Husk:
|
||||||
Husk:
|
Husk:
|
||||||
@@ -407,6 +422,7 @@
|
|||||||
BelowUnits:
|
BelowUnits:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
Chronoshiftable:
|
Chronoshiftable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^HelicopterHusk:
|
^HelicopterHusk:
|
||||||
Inherits: ^Husk
|
Inherits: ^Husk
|
||||||
@@ -441,6 +457,7 @@
|
|||||||
Types:Bridge
|
Types:Bridge
|
||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
#Temperate Terrain Expansion
|
#Temperate Terrain Expansion
|
||||||
^SVBridge:
|
^SVBridge:
|
||||||
@@ -458,6 +475,7 @@
|
|||||||
Types:Bridge
|
Types:Bridge
|
||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^SHBridge:
|
^SHBridge:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -474,6 +492,7 @@
|
|||||||
Types:Bridge
|
Types:Bridge
|
||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^STDBridge:
|
^STDBridge:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -490,6 +509,7 @@
|
|||||||
Types:Bridge
|
Types:Bridge
|
||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
#Desert Terrain Expansion:
|
#Desert Terrain Expansion:
|
||||||
^Rock:
|
^Rock:
|
||||||
@@ -511,6 +531,7 @@
|
|||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
FrozenUnderFog:
|
FrozenUnderFog:
|
||||||
StartsRevealed: true
|
StartsRevealed: true
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^DesertCivBuilding:
|
^DesertCivBuilding:
|
||||||
Inherits: ^CivBuilding
|
Inherits: ^CivBuilding
|
||||||
|
|||||||
@@ -357,9 +357,18 @@ v19:
|
|||||||
idle:
|
idle:
|
||||||
Start: 0
|
Start: 0
|
||||||
Length: 14
|
Length: 14
|
||||||
damaged-idle:
|
|
||||||
Start: 14
|
v19.husk:
|
||||||
Length: 15
|
idle: v19
|
||||||
|
Start: 28
|
||||||
|
fire-start: flmspt
|
||||||
|
Start: 0
|
||||||
|
Length: *
|
||||||
|
Offset: 7,-15
|
||||||
|
fire-loop: flmspt
|
||||||
|
Start: 50
|
||||||
|
Length: *
|
||||||
|
Offset: 7,-15
|
||||||
|
|
||||||
utilpol1:
|
utilpol1:
|
||||||
idle:
|
idle:
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ CivilianFemaleVoice:
|
|||||||
|
|
||||||
EinsteinVoice:
|
EinsteinVoice:
|
||||||
Voices:
|
Voices:
|
||||||
Select: einah1,einok1,einyes1
|
Select: einah1
|
||||||
Move: einah1,einok1,einyes1
|
Move: einok1,einyes1
|
||||||
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman6,dedman7,dedman8,dedman10
|
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman6,dedman7,dedman8,dedman10
|
||||||
|
|
||||||
ShokVoice:
|
ShokVoice:
|
||||||
|
|||||||
@@ -185,3 +185,12 @@ Fonts:
|
|||||||
TinyBold:
|
TinyBold:
|
||||||
Font:FreeSansBold.ttf
|
Font:FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
|
LuaScripts:
|
||||||
|
mods/ra/lua/utils.lua
|
||||||
|
mods/ra/lua/openra.lua
|
||||||
|
mods/ra/lua/map.lua
|
||||||
|
mods/ra/lua/actor.lua
|
||||||
|
mods/ra/lua/team.lua
|
||||||
|
mods/ra/lua/media.lua
|
||||||
|
mods/ra/lua/mission.lua
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
Range: 3
|
Range: 3
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -80,6 +82,8 @@
|
|||||||
Guard:
|
Guard:
|
||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^CivilianInfantry:
|
^CivilianInfantry:
|
||||||
Inherits: ^Infantry
|
Inherits: ^Infantry
|
||||||
@@ -145,6 +149,8 @@
|
|||||||
Guard:
|
Guard:
|
||||||
Guardable:
|
Guardable:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Wall:
|
^Wall:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -175,6 +181,7 @@
|
|||||||
Sellable:
|
Sellable:
|
||||||
UpdatesPlayerStatistics:
|
UpdatesPlayerStatistics:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
LuaScriptEvents:
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -198,3 +205,5 @@
|
|||||||
ActorLostNotification:
|
ActorLostNotification:
|
||||||
CombatDebugOverlay:
|
CombatDebugOverlay:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
Huntable:
|
||||||
|
LuaScriptEvents:
|
||||||
Reference in New Issue
Block a user