Compare commits
20 Commits
playtest-2
...
playtest-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e3977776d | ||
|
|
36fbddbb5c | ||
|
|
e33d988301 | ||
|
|
a55167c9ac | ||
|
|
d0a4555a1f | ||
|
|
4724ac6b00 | ||
|
|
d998367d35 | ||
|
|
0e9e7d0a9d | ||
|
|
5e1e5903d6 | ||
|
|
25fae5d109 | ||
|
|
44b8630c71 | ||
|
|
6204bfcabf | ||
|
|
1355a9f837 | ||
|
|
db8f22cdbf | ||
|
|
860ec9d85f | ||
|
|
5f2f25b758 | ||
|
|
3728685c67 | ||
|
|
5e6b8deec1 | ||
|
|
21f2b0df43 | ||
|
|
2100484598 |
@@ -19,12 +19,6 @@ namespace OpenRA.FileFormats
|
||||
{
|
||||
Dictionary<int, Color> remapColors;
|
||||
|
||||
static int[] GetRemapRamp(int[] Ramp)
|
||||
{
|
||||
var RemapRamp = Ramp.Select(r => r - Ramp[0]).ToArray();
|
||||
return RemapRamp;
|
||||
}
|
||||
|
||||
public static int GetRemapIndex(int[] Ramp, int i)
|
||||
{
|
||||
return Ramp[i];
|
||||
@@ -33,11 +27,18 @@ namespace OpenRA.FileFormats
|
||||
public PlayerColorRemap(int[] Ramp, ColorRamp c)
|
||||
{
|
||||
var c1 = c.GetColor(0);
|
||||
var c2 = c.GetColor(1); /* temptemp: this can be expressed better */
|
||||
var c2 = c.GetColor(1); // temptemp: this can be expressed better
|
||||
|
||||
var baseIndex = Ramp[0];
|
||||
var RemapRamp = GetRemapRamp(Ramp);
|
||||
var baseIndex = Ramp[0];
|
||||
var RemapRamp = Ramp.Select(r => r - Ramp[0]).ToArray();
|
||||
|
||||
if (Ramp[0] > Ramp[15]) // reversed remapping
|
||||
{
|
||||
baseIndex = Ramp[15];
|
||||
for (int i=15; i>0; i--)
|
||||
RemapRamp = Ramp.Select(r => r - Ramp[15]).ToArray();
|
||||
}
|
||||
|
||||
remapColors = RemapRamp.Select((x, i) => Pair.New(baseIndex + i, Exts.ColorLerp(x / 16f, c1, c2)))
|
||||
.ToDictionary(u => u.First, u => u.Second);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.GameRules
|
||||
public int ExternalPort = 1234;
|
||||
public bool AdvertiseOnline = true;
|
||||
public string MasterServer = "http://master.open-ra.org/";
|
||||
public bool AllowUPnP = true;
|
||||
public bool AllowUPnP = false;
|
||||
public bool AllowCheats = false;
|
||||
public string Map = null;
|
||||
public string[] Ban = null;
|
||||
|
||||
@@ -52,7 +52,10 @@ namespace OpenRA.Server
|
||||
XTimer gameTimeout;
|
||||
|
||||
volatile bool shutdown = false;
|
||||
public void Shutdown() { shutdown = true; }
|
||||
public void Shutdown()
|
||||
{
|
||||
shutdown = true;
|
||||
}
|
||||
|
||||
public Server(IPEndPoint endpoint, string[] mods, ServerSettings settings, ModData modData)
|
||||
{
|
||||
@@ -69,8 +72,43 @@ namespace OpenRA.Server
|
||||
|
||||
randomSeed = (int)DateTime.Now.ToBinary();
|
||||
|
||||
if (settings.AllowUPnP)
|
||||
PortForward();
|
||||
if (Settings.AllowUPnP)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (UPnP.NAT.Discover())
|
||||
{
|
||||
Log.Write("server", "UPnP-enabled router discovered.");
|
||||
Log.Write("server", "Your IP is: {0}", UPnP.NAT.GetExternalIP() );
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Write("server", "No UPnP-enabled router detected.");
|
||||
Settings.AllowUPnP = false;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
OpenRA.Log.Write("server", "Can't discover UPnP-enabled routers: {0}", e);
|
||||
Settings.AllowUPnP = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.AllowUPnP)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (UPnP.NAT.ForwardPort(Port, ProtocolType.Tcp, "OpenRA"))
|
||||
Log.Write("server", "Port {0} (TCP) has been forwarded.", Port);
|
||||
else
|
||||
Settings.AllowUPnP = false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
OpenRA.Log.Write("server", "Can not forward ports via UPnP: {0}", e);
|
||||
Settings.AllowUPnP = false;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var trait in modData.Manifest.ServerTraits)
|
||||
ServerTraits.Add( modData.ObjectCreator.CreateObject<ServerTrait>(trait) );
|
||||
@@ -102,7 +140,11 @@ namespace OpenRA.Server
|
||||
|
||||
Socket.Select( checkRead, null, null, timeout );
|
||||
if (shutdown)
|
||||
{
|
||||
if (Settings.AllowUPnP)
|
||||
RemovePortforward();
|
||||
break;
|
||||
}
|
||||
|
||||
foreach( Socket s in checkRead )
|
||||
if( s == listener.Server ) AcceptConnection();
|
||||
@@ -117,7 +159,11 @@ namespace OpenRA.Server
|
||||
t.Tick(this);
|
||||
|
||||
if (shutdown)
|
||||
{
|
||||
if (Settings.AllowUPnP)
|
||||
RemovePortforward();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GameStarted = false;
|
||||
@@ -129,20 +175,20 @@ namespace OpenRA.Server
|
||||
try { listener.Stop(); }
|
||||
catch { }
|
||||
} ) { IsBackground = true }.Start();
|
||||
|
||||
}
|
||||
|
||||
void PortForward()
|
||||
void RemovePortforward()
|
||||
{
|
||||
if (UPnP.NAT.Discover())
|
||||
try
|
||||
{
|
||||
Log.Write("server", "UPnP-enabled router discovered.");
|
||||
UPnP.NAT.ForwardPort(Port, ProtocolType.Tcp, "OpenRA"); //might timeout after second try
|
||||
Log.Write("server", "Port {0} (TCP) has been forwarded.", Port);
|
||||
Log.Write("server", "Your IP is: {0}", UPnP.NAT.GetExternalIP() );
|
||||
if (UPnP.NAT.DeleteForwardingRule(Port, ProtocolType.Tcp))
|
||||
Log.Write("server", "Port {0} (TCP) forwarding rules has been removed.", Port);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
OpenRA.Log.Write("server", "Can not remove UPnP portforwarding rules: {0}", e);
|
||||
}
|
||||
else
|
||||
Log.Write("server", "No UPnP-enabled router detected.");
|
||||
return;
|
||||
}
|
||||
|
||||
/* lobby rework todo:
|
||||
|
||||
@@ -19,13 +19,13 @@ namespace UPnP
|
||||
{
|
||||
public class NAT
|
||||
{
|
||||
public static TimeSpan _timeout = new TimeSpan(0, 0, 0, 3);
|
||||
static string _serviceUrl;
|
||||
|
||||
public static bool Discover()
|
||||
{
|
||||
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
|
||||
s.ReceiveTimeout = 3000; //3 seconds
|
||||
string req = "M-SEARCH * HTTP/1.1\r\n" +
|
||||
"HOST: 239.255.255.250:1900\r\n" +
|
||||
"ST:upnp:rootdevice\r\n" +
|
||||
@@ -35,56 +35,62 @@ namespace UPnP
|
||||
IPEndPoint ipe = new IPEndPoint(IPAddress.Broadcast, 1900);
|
||||
byte[] buffer = new byte[0x1000];
|
||||
|
||||
DateTime start = DateTime.Now;
|
||||
|
||||
try
|
||||
{
|
||||
s.SendTo(data, ipe);
|
||||
int length = 0;
|
||||
do
|
||||
{
|
||||
s.SendTo(data, ipe);
|
||||
|
||||
int length = 0;
|
||||
do
|
||||
{
|
||||
length = s.Receive(buffer);
|
||||
|
||||
string resp = Encoding.ASCII.GetString(buffer, 0, length).ToLower();
|
||||
if (resp.Contains("upnp:rootdevice"))
|
||||
{
|
||||
resp = resp.Substring(resp.ToLower().IndexOf("location:") + 9);
|
||||
resp = resp.Substring(0, resp.IndexOf("\r")).Trim();
|
||||
if (!string.IsNullOrEmpty(_serviceUrl = GetServiceUrl(resp)))
|
||||
return true;
|
||||
}
|
||||
} while (length > 0);
|
||||
} while ((start - DateTime.Now) < _timeout);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
OpenRA.Log.Write("server", "UPNP discover failed: {0}", e);
|
||||
}
|
||||
length = s.Receive(buffer);
|
||||
|
||||
return false;
|
||||
string resp = Encoding.ASCII.GetString(buffer, 0, length).ToLower();
|
||||
if (resp.Contains("upnp:rootdevice"))
|
||||
{
|
||||
resp = resp.Substring(resp.ToLower().IndexOf("location:") + 9);
|
||||
resp = resp.Substring(0, resp.IndexOf("\r")).Trim();
|
||||
if (!string.IsNullOrEmpty(_serviceUrl = GetServiceUrl(resp)))
|
||||
{
|
||||
s.Close();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} while (length > 0);
|
||||
s.Close();
|
||||
return false;
|
||||
}
|
||||
catch
|
||||
{
|
||||
s.Close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static String GetServiceUrl(string resp)
|
||||
{
|
||||
XmlDocument desc = new XmlDocument();
|
||||
desc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream());
|
||||
XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable);
|
||||
nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");
|
||||
XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr);
|
||||
if (!typen.Value.Contains("InternetGatewayDevice"))
|
||||
return null;
|
||||
XmlNode node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", nsMgr);
|
||||
if (node == null)
|
||||
return null;
|
||||
Uri respUri = new Uri(resp);
|
||||
Uri combinedUri = new Uri(respUri, node.Value);
|
||||
return combinedUri.AbsoluteUri;
|
||||
HttpWebRequest r = (HttpWebRequest)WebRequest.Create(resp);
|
||||
r.KeepAlive = false;
|
||||
using (WebResponse wres = r.GetResponse())
|
||||
{
|
||||
using (Stream ress = wres.GetResponseStream())
|
||||
{
|
||||
desc.Load(ress);
|
||||
XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable);
|
||||
nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");
|
||||
XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr);
|
||||
if (!typen.Value.Contains("InternetGatewayDevice"))
|
||||
return null;
|
||||
XmlNode node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", nsMgr);
|
||||
if (node == null)
|
||||
return null;
|
||||
Uri respUri = new Uri(resp);
|
||||
Uri combinedUri = new Uri(respUri, node.Value);
|
||||
return combinedUri.AbsoluteUri;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ForwardPort(int port, ProtocolType protocol, string description)
|
||||
public static bool ForwardPort(int port, ProtocolType protocol, string description)
|
||||
{
|
||||
if (string.IsNullOrEmpty(_serviceUrl))
|
||||
throw new Exception("No UPnP service available or Discover() has not been called");
|
||||
@@ -95,17 +101,23 @@ namespace UPnP
|
||||
"<NewPortMappingDescription>{3}</NewPortMappingDescription>"+
|
||||
"<NewLeaseDuration>0</NewLeaseDuration></u:AddPortMapping>",
|
||||
port, protocol.ToString().ToUpper(),Dns.GetHostAddresses(Dns.GetHostName())[0], description);
|
||||
SOAPRequest(_serviceUrl, body, "AddPortMapping");
|
||||
if (SOAPRequest(_serviceUrl, body, "AddPortMapping") != null)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void DeleteForwardingRule(int port, ProtocolType protocol)
|
||||
public static bool DeleteForwardingRule(int port, ProtocolType protocol)
|
||||
{
|
||||
if (string.IsNullOrEmpty(_serviceUrl))
|
||||
throw new Exception("No UPnP service available or Discover() has not been called");
|
||||
string body = String.Format("<u:DeletePortMapping xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">" +
|
||||
"<NewRemoteHost></NewRemoteHost><NewExternalPort>{0}</NewExternalPort>"+
|
||||
"<NewProtocol>{1}</NewProtocol></u:DeletePortMapping>", port, protocol.ToString().ToUpper() );
|
||||
SOAPRequest(_serviceUrl, body, "DeletePortMapping");
|
||||
if (SOAPRequest(_serviceUrl, body, "DeletePortMapping") != null)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static IPAddress GetExternalIP()
|
||||
@@ -122,24 +134,30 @@ namespace UPnP
|
||||
|
||||
private static XmlDocument SOAPRequest(string url, string soap, string function)
|
||||
{
|
||||
string req = "<?xml version=\"1.0\"?>" +
|
||||
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
|
||||
"<s:Body>" +
|
||||
soap +
|
||||
"</s:Body>" +
|
||||
"</s:Envelope>";
|
||||
WebRequest r = HttpWebRequest.Create(url);
|
||||
string body = "<?xml version=\"1.0\"?>" +
|
||||
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
|
||||
"<s:Body>" +
|
||||
soap +
|
||||
"</s:Body>" +
|
||||
"</s:Envelope>";
|
||||
HttpWebRequest r = (HttpWebRequest)WebRequest.Create(url);
|
||||
r.KeepAlive = false;
|
||||
r.Method = "POST";
|
||||
byte[] b = Encoding.UTF8.GetBytes(req);
|
||||
byte[] b = Encoding.UTF8.GetBytes(body);
|
||||
r.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WANIPConnection:1#" + function + "\"");
|
||||
r.ContentType = "text/xml; charset=\"utf-8\"";
|
||||
r.ContentLength = b.Length;
|
||||
r.GetRequestStream().Write(b, 0, b.Length);
|
||||
Stream newStream = r.GetRequestStream();
|
||||
newStream.Write(b, 0, b.Length);
|
||||
XmlDocument resp = new XmlDocument();
|
||||
WebResponse wres = r.GetResponse();
|
||||
Stream ress = wres.GetResponseStream();
|
||||
resp.Load(ress);
|
||||
return resp;
|
||||
using (WebResponse wres = r.GetResponse())
|
||||
{
|
||||
using (Stream ress = wres.GetResponseStream())
|
||||
{
|
||||
resp.Load(ress);
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
public class ProductionAirdropInfo : ProductionInfo
|
||||
{
|
||||
public readonly string ReadyAudio = "reinfor1.aud";
|
||||
public readonly string ReadyAudio = "Reinforce";
|
||||
[ActorReference] public readonly string ActorType = "c17";
|
||||
|
||||
public override object Create(ActorInitializer init) { return new ProductionAirdrop(this); }
|
||||
@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Cnc
|
||||
|
||||
rb.PlayCustomAnimRepeating(self, "idle");
|
||||
self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit));
|
||||
Sound.PlayToPlayer(self.Owner, (Info as ProductionAirdropInfo).ReadyAudio);
|
||||
Sound.PlayNotification(self.Owner, "Speech", (Info as ProductionAirdropInfo).ReadyAudio, self.Owner.Country.Race);
|
||||
}));
|
||||
a.QueueActivity(Fly.ToCell(endPos));
|
||||
a.QueueActivity(new RemoveSelf());
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace OpenRA.Mods.Cnc.Widgets
|
||||
else if (CurrentQueue.BuildableItems().Any(a => a.Name == clicked.Name))
|
||||
{
|
||||
Sound.Play(TabClick);
|
||||
Sound.Play(CurrentQueue.Info.QueuedAudio);
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, world.LocalPlayer.Country.Race);
|
||||
world.IssueOrder(Order.StartProduction(CurrentQueue.self, clicked.Name,
|
||||
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
|
||||
}
|
||||
@@ -164,13 +164,13 @@ namespace OpenRA.Mods.Cnc.Widgets
|
||||
// instant cancel of things we havent started yet and things that are finished
|
||||
if (first.Paused || first.Done || first.TotalCost == first.RemainingCost)
|
||||
{
|
||||
Sound.Play(CurrentQueue.Info.CancelledAudio);
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, world.LocalPlayer.Country.Race);
|
||||
world.IssueOrder(Order.CancelProduction(CurrentQueue.self, clicked.Name,
|
||||
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
Sound.Play(CurrentQueue.Info.OnHoldAudio);
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, world.LocalPlayer.Country.Race);
|
||||
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, clicked.Name, true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,9 +102,9 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2083", "2114", Path.Combine(PathToSHPs, "devast"), "--vehicle"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2115", "2146", Path.Combine(PathToSHPs, "combathturret"), "--vehicle"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2147", "2148", Path.Combine(PathToSHPs, "deathhandmissile")},
|
||||
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2245", "2284", Path.Combine(PathToSHPs, "saboteur"), "--infantry"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2325", "2388", Path.Combine(PathToSHPs, "saboteurdeath"), "--infantrydeath"},
|
||||
//rifleinfantry repetitions?
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2389", "2420", Path.Combine(PathToSHPs, "deviatortank"), "--vehicle"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2421", "2452", Path.Combine(PathToSHPs, "raider"), "--vehicle"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2453", "2484", Path.Combine(PathToSHPs, "combato"), "--vehicle"},
|
||||
@@ -164,7 +164,14 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2991", "2992", Path.Combine(PathToSHPs, "starporto"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2993", "2995", Path.Combine(PathToSHPs, "lighto"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2996", "2997", Path.Combine(PathToSHPs, "palaceo"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3370", "3380", Path.Combine(PathToSHPs, "unload"), "--vehicle"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2998", "2998", Path.Combine(PathToSHPs, "sietch"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "2999", "3000", Path.Combine(PathToSHPs, "starportc"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3001", "3003", Path.Combine(PathToSHPs, "heavyc"), "--building"},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3004", "3005", Path.Combine(PathToSHPs, "palacec"), "--building"},
|
||||
//conyardc repetition
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3008", "3013", Path.Combine(PathToSHPs, "plates")},
|
||||
//projectiles
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3370", "3380", Path.Combine(PathToSHPs, "unload"), "--projectile"},
|
||||
//explosions
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3549", "3564", Path.Combine(PathToSHPs, "wormjaw")},
|
||||
new string[] {"--r8", PathToDataR8, PathToPalette, "3565", "3585", Path.Combine(PathToSHPs, "wormdust")},
|
||||
@@ -474,6 +481,11 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "missile_launch.png"), "96"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "mouse.png"), "48"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "spice0.png"), "32"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "sietch.png"), "64"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "starportc.png"), "96"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "heavyc.png"), "96"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "palacec.png"), "96"},
|
||||
new string[] {"--shp", Path.Combine(PathToSHPs, "plates.png"), "32"},
|
||||
};
|
||||
|
||||
var SHPsToTranspose = new string[][]
|
||||
|
||||
@@ -21,13 +21,15 @@ namespace OpenRA.Mods.RA
|
||||
enum State { Wait, Turn, Dock, Loop, Undock, Complete };
|
||||
|
||||
readonly Actor proc;
|
||||
readonly int angle;
|
||||
readonly Harvester harv;
|
||||
readonly RenderUnit ru;
|
||||
State state;
|
||||
|
||||
public RAHarvesterDockSequence(Actor self, Actor proc)
|
||||
public RAHarvesterDockSequence(Actor self, Actor proc, int angle)
|
||||
{
|
||||
this.proc = proc;
|
||||
this.angle = angle;
|
||||
state = State.Turn;
|
||||
harv = self.Trait<Harvester>();
|
||||
ru = self.Trait<RenderUnit>();
|
||||
@@ -41,7 +43,7 @@ namespace OpenRA.Mods.RA
|
||||
return this;
|
||||
case State.Turn:
|
||||
state = State.Dock;
|
||||
return Util.SequenceActivities(new Turn(64), this);
|
||||
return Util.SequenceActivities(new Turn(angle), this);
|
||||
case State.Dock:
|
||||
ru.PlayCustomAnimation(self, "dock", () => {ru.PlayCustomAnimRepeating(self, "dock-loop"); state = State.Loop;});
|
||||
state = State.Wait;
|
||||
|
||||
@@ -25,6 +25,7 @@ namespace OpenRA.Mods.RA
|
||||
public readonly int TickLifetime = 30;
|
||||
public readonly int TickVelocity = 2;
|
||||
public readonly int TickRate = 10;
|
||||
public readonly int DockAngle = 64;
|
||||
|
||||
public virtual object Create(ActorInitializer init) { return new OreRefinery(init.self, this); }
|
||||
}
|
||||
@@ -45,7 +46,7 @@ namespace OpenRA.Mods.RA
|
||||
public bool AllowDocking { get { return !preventDock; } }
|
||||
public CVec DeliverOffset { get { return (CVec)Info.DockOffset; } }
|
||||
|
||||
public virtual Activity DockSequence(Actor harv, Actor self) { return new RAHarvesterDockSequence(harv, self); }
|
||||
public virtual Activity DockSequence(Actor harv, Actor self) { return new RAHarvesterDockSequence(harv, self, Info.DockAngle); }
|
||||
|
||||
public OreRefinery(Actor self, OreRefineryInfo info)
|
||||
{
|
||||
|
||||
@@ -24,11 +24,11 @@ namespace OpenRA.Mods.RA
|
||||
public float BuildSpeed = 0.4f;
|
||||
public readonly int LowPowerSlowdown = 3;
|
||||
|
||||
public readonly string ReadyAudio = "unitrdy1.aud";
|
||||
public readonly string BlockedAudio = "nobuild1.aud";
|
||||
public readonly string QueuedAudio = "train1.aud";
|
||||
public readonly string OnHoldAudio = "onhold1.aud";
|
||||
public readonly string CancelledAudio = "cancld1.aud";
|
||||
public readonly string ReadyAudio = "UnitReady";
|
||||
public readonly string BlockedAudio = "NoBuild";
|
||||
public readonly string QueuedAudio = "Training";
|
||||
public readonly string OnHoldAudio = "OnHold";
|
||||
public readonly string CancelledAudio = "Cancelled";
|
||||
|
||||
public virtual object Create(ActorInitializer init) { return new ProductionQueue(init.self, init.self.Owner.PlayerActor, this); }
|
||||
}
|
||||
@@ -211,17 +211,15 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (isBuilding && !hasPlayedSound)
|
||||
{
|
||||
Sound.PlayToPlayer(order.Player, Info.ReadyAudio);
|
||||
hasPlayedSound = true;
|
||||
hasPlayedSound = Sound.PlayNotification(self.Owner, "Speech", Info.ReadyAudio, self.Owner.Country.Race);
|
||||
}
|
||||
else if (!isBuilding)
|
||||
{
|
||||
if (BuildUnit(order.TargetString))
|
||||
Sound.PlayToPlayer(order.Player, Info.ReadyAudio);
|
||||
Sound.PlayNotification(self.Owner, "Speech", Info.ReadyAudio, self.Owner.Country.Race);
|
||||
else if (!hasPlayedSound && time > 0)
|
||||
{
|
||||
Sound.PlayToPlayer(order.Player, Info.BlockedAudio);
|
||||
hasPlayedSound = true;
|
||||
hasPlayedSound = Sound.PlayNotification(self.Owner, "Speech", Info.BlockedAudio, self.Owner.Country.Race);
|
||||
}
|
||||
}
|
||||
})));
|
||||
|
||||
@@ -374,15 +374,15 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
{
|
||||
// instant cancel of things we havent really started yet, and things that are finished
|
||||
if (producing.Paused || producing.Done || producing.TotalCost == producing.RemainingCost)
|
||||
{
|
||||
Sound.Play(CurrentQueue.Info.CancelledAudio);
|
||||
{
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, world.LocalPlayer.Country.Race);
|
||||
int numberToCancel = Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1;
|
||||
|
||||
world.IssueOrder(Order.CancelProduction(CurrentQueue.self, item, numberToCancel));
|
||||
}
|
||||
else
|
||||
{
|
||||
Sound.Play(CurrentQueue.Info.OnHoldAudio);
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, world.LocalPlayer.Country.Race);
|
||||
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, item, true));
|
||||
}
|
||||
}
|
||||
@@ -391,7 +391,8 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
|
||||
void StartProduction( World world, string item )
|
||||
{
|
||||
Sound.Play(CurrentQueue.Info.QueuedAudio);
|
||||
|
||||
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, world.LocalPlayer.Country.Race);
|
||||
world.IssueOrder(Order.StartProduction(CurrentQueue.self, item,
|
||||
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
|
||||
}
|
||||
|
||||
BIN
artsrc/d2k/OrthodoxHerbertarian.ttf
Normal file
@@ -12,6 +12,14 @@ Speech:
|
||||
BaseAttack: baseatk1
|
||||
HarvesterAttack:
|
||||
Leave: batlcon1
|
||||
UnitReady: unitredy
|
||||
NoBuild: nobuild1
|
||||
Training: bldging1
|
||||
OnHold: onhold1
|
||||
Cancelled: cancel1
|
||||
Building: bldging1
|
||||
ConstructionComplete: constru1
|
||||
Reinforce: reinfor1
|
||||
|
||||
Sounds:
|
||||
Notifications:
|
||||
|
||||
@@ -29,19 +29,15 @@ FACT:
|
||||
Group: Building
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: constru1.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: ConstructionComplete
|
||||
ProductionQueue@Defense:
|
||||
Type: Defense
|
||||
Group: Defense
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: constru1.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: ConstructionComplete
|
||||
BaseBuilding:
|
||||
ProductionBar:
|
||||
|
||||
@@ -180,10 +176,6 @@ PYLE:
|
||||
Group: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: unitredy.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
ProductionBar:
|
||||
|
||||
HAND:
|
||||
@@ -220,10 +212,6 @@ HAND:
|
||||
Group: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: unitredy.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
ProductionBar:
|
||||
|
||||
AFLD:
|
||||
@@ -262,10 +250,7 @@ AFLD:
|
||||
Group: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio:
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
ProductionBar:
|
||||
|
||||
WEAP:
|
||||
@@ -305,10 +290,6 @@ WEAP:
|
||||
Group: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: unitredy.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
ProductionBar:
|
||||
|
||||
HQ:
|
||||
@@ -430,10 +411,6 @@ HPAD:
|
||||
Group: Aircraft
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: bldging1.aud
|
||||
ReadyAudio: unitredy.aud
|
||||
OnHoldAudio: onhold1.aud
|
||||
CancelledAudio: cancel1.aud
|
||||
ProductionBar:
|
||||
|
||||
EYE:
|
||||
|
||||
@@ -8,25 +8,18 @@
|
||||
# construction yard crane animations missing
|
||||
# welding animation (factories) missing
|
||||
# chimney animation (refinery) missing
|
||||
# harvest animation missing
|
||||
# harvester unload animation ugly
|
||||
# harvest animation missing (sand is spit out)
|
||||
# add more spice tiles and make them fit
|
||||
# add game logic for concrete plates (use terrain overlay from bridges/ressources)
|
||||
# allow placing turrets on walls
|
||||
# add grenade thrower
|
||||
# make sandworm behave like a moving anti-vehicle mine
|
||||
# add neutral buildings: emperor palace, fremen siech, smugglers factory
|
||||
# add deathhand missile (nuke)
|
||||
# maybe add ornithocopter strikes (they are currently directly contrallable units with non-reloading machine guns as in Dune II)
|
||||
# allow upgrades
|
||||
# make sandworm behave like a moving anti-everything mine (currently not attacking anything)
|
||||
# add muzzles and explosions (currently falls back to RA)
|
||||
# create a shellmap (currently just a blank placeholder)
|
||||
# rework chrome UI, dialoges, tabs
|
||||
# add sonic tank weapon (currently uses tesla)
|
||||
# starport prices should vary
|
||||
# black spots on buildings should be fading team colors
|
||||
# some transparent tiles (see Atreides Hightech Factory) should be white
|
||||
# gamefile extraction (setup/setup.z) from CD fails
|
||||
# support patch 1.06 gamefiles: DATA.R8 has more frames and currently fails to extract, also featuring new terrain with white houses and new unit: grenade thrower
|
||||
# support patch 1.06 gamefiles: DATA.R8 has more frames and currently fails to extract, also featuring new terrain with white houses and new units: grenade thrower, stealth raider icon
|
||||
# put TilesetBuilder.Export into OpenRA.Utility to call the functions directly when extracting game-files (instead of opening a GUI)
|
||||
# group number metrics are off
|
||||
# building offsets wrong (worst for towers)
|
||||
# building offsets wrong (worst for towers)
|
||||
# spice blooms should explode and create new spice field instead of growing spice
|
||||
@@ -138,12 +138,12 @@ tabs-selected: tabs.png
|
||||
harkonnen-Vehicle: 80,120,27,41
|
||||
harkonnen-Plane: 80,160,27,41
|
||||
harkonnen-Ship: 80,200,27,41
|
||||
ordos-Building: 0,0,27,41
|
||||
ordos-Defense: 0,40,27,41
|
||||
ordos-Infantry: 0,80,27,41
|
||||
ordos-Vehicle: 0,120,27,41
|
||||
ordos-Plane: 0,160,27,41
|
||||
ordos-Ship: 0,200,27,41
|
||||
ordos-Building: 160,0,27,41
|
||||
ordos-Defense: 160,40,27,41
|
||||
ordos-Infantry: 160,80,27,41
|
||||
ordos-Vehicle: 160,120,27,41
|
||||
ordos-Plane: 160,160,27,41
|
||||
ordos-Ship: 160,200,27,41
|
||||
|
||||
tabs-ready: tabs.png
|
||||
atreides-Building: 27,0,27,41
|
||||
@@ -158,12 +158,12 @@ tabs-ready: tabs.png
|
||||
harkonnen-Vehicle: 107,120,27,41
|
||||
harkonnen-Plane: 107,160,27,41
|
||||
harkonnen-Ship: 107,200,27,41
|
||||
ordos-Building: 27,0,27,41
|
||||
ordos-Defense: 27,40,27,41
|
||||
ordos-Infantry: 27,80,27,41
|
||||
ordos-Vehicle: 27,120,27,41
|
||||
ordos-Plane: 27,160,27,41
|
||||
ordos-Ship: 27,200,27,41
|
||||
ordos-Building: 187,0,27,41
|
||||
ordos-Defense: 187,40,27,41
|
||||
ordos-Infantry: 187,80,27,41
|
||||
ordos-Vehicle: 187,120,27,41
|
||||
ordos-Plane: 187,160,27,41
|
||||
ordos-Ship: 187,200,27,41
|
||||
|
||||
tabs-normal: tabs.png
|
||||
atreides-Building: 54,0,27,41
|
||||
@@ -178,19 +178,19 @@ tabs-normal: tabs.png
|
||||
harkonnen-Vehicle: 134,120,27,41
|
||||
harkonnen-Plane: 134,160,27,41
|
||||
harkonnen-Ship: 134,200,27,41
|
||||
ordos-Building: 54,0,27,41
|
||||
ordos-Defense: 54,40,27,41
|
||||
ordos-Infantry: 54,80,27,41
|
||||
ordos-Vehicle: 54,120,27,41
|
||||
ordos-Plane: 54,160,27,41
|
||||
ordos-Ship: 54,200,27,41
|
||||
ordos-Building: 214,0,27,41
|
||||
ordos-Defense: 214,40,27,41
|
||||
ordos-Infantry: 214,80,27,41
|
||||
ordos-Vehicle: 214,120,27,41
|
||||
ordos-Plane: 214,160,27,41
|
||||
ordos-Ship: 214,200,27,41
|
||||
|
||||
flags: buttons.png
|
||||
atreides: 0,84,21,23
|
||||
harkonnen: 22,84,23,23
|
||||
ordos: 45,84,22,23
|
||||
random: 67,84,23,23
|
||||
spectator: 67,84,23,23
|
||||
atreides: 0,86,22,21
|
||||
harkonnen: 22,86,23,21
|
||||
ordos: 45,86,22,21
|
||||
random: 67,86,23,21
|
||||
spectator: 67,86,23,21
|
||||
|
||||
dialog2: dialog.png
|
||||
background: 513,1,126,126
|
||||
|
||||
@@ -80,7 +80,7 @@ Background@SERVER_LOBBY:
|
||||
Width:23
|
||||
Height:23
|
||||
X:5
|
||||
Y:0
|
||||
Y:2
|
||||
Label@FACTIONNAME:
|
||||
Text:Faction
|
||||
Width:70
|
||||
@@ -147,10 +147,10 @@ Background@SERVER_LOBBY:
|
||||
Y:0
|
||||
Children:
|
||||
Image@FACTIONFLAG:
|
||||
Width:30
|
||||
Height:15
|
||||
Width:23
|
||||
Height:23
|
||||
X:5
|
||||
Y:5
|
||||
Y:2
|
||||
Label@FACTIONNAME:
|
||||
Text:Faction
|
||||
Width:60
|
||||
|
||||
@@ -150,13 +150,13 @@ Cursors:
|
||||
enter-blocked-minimap:
|
||||
start:104
|
||||
c4:
|
||||
start:252
|
||||
length: 4
|
||||
start:248
|
||||
length: 8
|
||||
x: 12
|
||||
y: 12
|
||||
c4-minimap:
|
||||
start:252
|
||||
length: 4
|
||||
start:248
|
||||
length: 8
|
||||
x: 12
|
||||
y: 12
|
||||
guard:
|
||||
@@ -202,7 +202,7 @@ Cursors:
|
||||
x: 12
|
||||
y: 12
|
||||
nuke:
|
||||
start:244
|
||||
start:240
|
||||
length: 8
|
||||
x: 12
|
||||
y: 12
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
Metadata:
|
||||
Title: Dune 2000
|
||||
Title: Dune 2000 (beta)
|
||||
Description: early version of the Dune 2000 mod
|
||||
Version: {DEV_VERSION}
|
||||
Author: The OpenD2k Developers
|
||||
Author: The OpenRA Developers
|
||||
|
||||
Folders:
|
||||
.
|
||||
@@ -86,7 +86,7 @@ Movies:
|
||||
|
||||
LoadScreen: D2kLoadScreen
|
||||
InstallerMenuWidget: INSTALL_PANEL
|
||||
TestFile: carryall.shp
|
||||
TestFile: plates.shp
|
||||
PackageURL: http://open-ra.org/get-dependency.php?file=d2k-packages
|
||||
|
||||
ServerTraits:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# requires Dune 2000/DATA/GAMESFX copied to ~/.openra/Content/d2k
|
||||
# requires Dune 2000/DATA/GAMESFX copied to $PlatformSupportDir/Content/d2k
|
||||
|
||||
Speech:
|
||||
DefaultVariant: .AUD
|
||||
@@ -19,6 +19,15 @@ Speech:
|
||||
BaseAttack: ATACK
|
||||
HarvesterAttack: HATTK
|
||||
Leave: ABORT
|
||||
UnitReady: UNRDY
|
||||
NoRoom: NROOM
|
||||
Training: TRAIN
|
||||
OnHold: HOLD
|
||||
Cancelled: CANCL
|
||||
Building: BUILD
|
||||
BuildingReady: BDRDY
|
||||
OrderPlaced: ORDER
|
||||
Reinforce: REINF
|
||||
|
||||
Sounds:
|
||||
Notifications:
|
||||
|
||||
@@ -71,7 +71,7 @@ ORNI:
|
||||
Valued:
|
||||
Cost: 1000
|
||||
Tooltip:
|
||||
Name: Ornithocopter
|
||||
Name: Ornithopter
|
||||
Description: Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles.\n Weak vs Tanks
|
||||
Health:
|
||||
HP: 150
|
||||
@@ -97,4 +97,62 @@ ORNI:
|
||||
FallsToEarth:
|
||||
Explosion: UnitExplode
|
||||
SmokeTrailWhenDamaged:
|
||||
Offset: 0,-10
|
||||
Offset: 0,-10
|
||||
|
||||
ORNI.bomber:
|
||||
CarpetBomb:
|
||||
Range: 3
|
||||
Weapon: ParaBomb
|
||||
Inherits: ^Plane
|
||||
Health:
|
||||
HP: 60
|
||||
Armor:
|
||||
Type: Light
|
||||
Plane:
|
||||
ROT: 5
|
||||
Speed: 16
|
||||
RepairBuildings: repaira,repairo,repairh
|
||||
RearmBuildings: starporta,starporto,starporth
|
||||
LimitedAmmo:
|
||||
Ammo: 7
|
||||
RenderUnit:
|
||||
Image: orni
|
||||
WithShadow:
|
||||
-Selectable:
|
||||
-GainsExperience:
|
||||
Tooltip:
|
||||
Name: Ornithopter
|
||||
FallsToEarth:
|
||||
Spins: no
|
||||
Moves: yes
|
||||
Explosion: UnitExplode
|
||||
SmokeTrailWhenDamaged:
|
||||
Offset: 0,-10
|
||||
|
||||
CARRYALL.infantry:
|
||||
ParaDrop:
|
||||
LZRange: 4
|
||||
Inherits: ^Plane
|
||||
Health:
|
||||
HP: 60
|
||||
Armor:
|
||||
Type: Light
|
||||
Plane:
|
||||
ROT: 5
|
||||
Speed: 16
|
||||
RepairBuildings: repaira,repairo,repairh
|
||||
RearmBuildings: starporta,starporto,starporth
|
||||
RenderUnit:
|
||||
Image: carryall
|
||||
WithShadow:
|
||||
Cargo:
|
||||
MaxWeight: 5
|
||||
Types: Infantry
|
||||
-Selectable:
|
||||
-GainsExperience:
|
||||
Tooltip:
|
||||
Name: Carryall
|
||||
FallsToEarth:
|
||||
Spins: no
|
||||
Moves: yes
|
||||
Explosion: UnitExplode
|
||||
@@ -6,18 +6,6 @@ CONYARDA:
|
||||
IntoActor: mcva
|
||||
Offset:1,1
|
||||
Facing: 270
|
||||
ProductionQueue@Building:
|
||||
QueuedAudio: AI_BUILD.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
ReadyAudio: AI_BDRDY.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
ProductionQueue@Defense:
|
||||
QueuedAudio: AI_BUILD.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
ReadyAudio: AI_BDRDY.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
PWRA:
|
||||
Inherits: ^POWER
|
||||
@@ -61,41 +49,86 @@ HARVESTERA:
|
||||
Buildable:
|
||||
Prerequisites: heavya,refa
|
||||
Owner: atreides
|
||||
BuiltAt: heavya
|
||||
RenderUnit:
|
||||
Image: HARVESTER
|
||||
|
||||
HARVESTERA.starport:
|
||||
Inherits: HARVESTERA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 895
|
||||
|
||||
TRIKEA:
|
||||
Inherits: ^TRIKE
|
||||
Buildable:
|
||||
Prerequisites: lighta
|
||||
Owner: atreides
|
||||
BuiltAt: lighta
|
||||
RenderUnit:
|
||||
Image: TRIKE
|
||||
|
||||
TRIKEA.starport:
|
||||
Inherits: TRIKEA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 149
|
||||
|
||||
QUADA:
|
||||
Inherits: ^QUAD
|
||||
Buildable:
|
||||
Prerequisites: lighta
|
||||
Owner: atreides
|
||||
BuiltAt: lighta
|
||||
RenderUnit:
|
||||
Image: QUAD
|
||||
|
||||
QUADA.starport:
|
||||
Inherits: QUADA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 295
|
||||
|
||||
SIEGETANKA:
|
||||
Inherits: ^SIEGETANK
|
||||
Buildable:
|
||||
Prerequisites: heavya, radara
|
||||
Owner: atreides
|
||||
RenderUnit:
|
||||
BuiltAt: heavya
|
||||
RenderUnitTurreted:
|
||||
Image: SIEGETANK
|
||||
|
||||
SIEGETANKA.starport:
|
||||
Inherits: SIEGETANKA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 495
|
||||
|
||||
MISSILETANKA:
|
||||
Inherits: ^MISSILETANK
|
||||
Buildable:
|
||||
Prerequisites: heavya
|
||||
Owner: atreides
|
||||
BuiltAt: heavya
|
||||
RenderUnit:
|
||||
Image: MISSILETANK
|
||||
|
||||
MISSILETANKA.starport:
|
||||
Inherits: MISSILETANKA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 599
|
||||
|
||||
CARRYALLA:
|
||||
Inherits: ^CARRYALL
|
||||
Buildable:
|
||||
@@ -105,29 +138,26 @@ CARRYALLA:
|
||||
RenderUnit:
|
||||
Image: CARRYALL
|
||||
|
||||
CARRYALLA.starport:
|
||||
Inherits: CARRYALLA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 999
|
||||
|
||||
BARRA:
|
||||
Inherits: ^BARRACKS
|
||||
Buildable:
|
||||
Prerequisites: pwra
|
||||
Owner: atreides
|
||||
ProductionQueue@Infantry:
|
||||
ReadyAudio: AI_UNRDY.AUD
|
||||
QueuedAudio:AI_TRAIN.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
|
||||
HIGHTECHA:
|
||||
Inherits: ^HIGHTECH
|
||||
Buildable:
|
||||
Prerequisites: radara
|
||||
Owner: atreides
|
||||
ProductionQueue@Plane:
|
||||
ReadyAudio: AI_UNRDY.AUD
|
||||
QueuedAudio:AI_TRAIN.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
RESEARCHA:
|
||||
Inherits: ^RESEARCH
|
||||
@@ -140,6 +170,17 @@ PALACEA:
|
||||
Buildable:
|
||||
Prerequisites: researcha
|
||||
Owner: atreides
|
||||
AirstrikePower:
|
||||
Image: orniicon
|
||||
Description: Air Strike
|
||||
ChargeTime: 180
|
||||
LongDesc: Ornithopter drops a load of parachuted\nbombs on your target.
|
||||
UnitType: orni.bomber
|
||||
SelectTargetSound:
|
||||
FlareType:
|
||||
CanPowerDown:
|
||||
RequiresPower:
|
||||
SupportPowerChargeBar:
|
||||
|
||||
SILOA:
|
||||
Inherits: ^SILO
|
||||
@@ -154,12 +195,6 @@ LIGHTA:
|
||||
Owner: atreides
|
||||
RenderBuildingWarFactory:
|
||||
Image: LIGHTA
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: AI_UNRDY.AUD
|
||||
QueuedAudio:AI_TRAIN.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
HEAVYA:
|
||||
Inherits: ^HEAVY
|
||||
@@ -168,12 +203,6 @@ HEAVYA:
|
||||
Owner: atreides
|
||||
RenderBuildingWarFactory:
|
||||
Image: HEAVYA
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: AI_UNRDY.AUD
|
||||
QueuedAudio:AI_TRAIN.AUD
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
RADARA:
|
||||
Inherits: ^RADAR
|
||||
@@ -186,14 +215,6 @@ STARPORTA:
|
||||
Buildable:
|
||||
Prerequisites: radara
|
||||
Owner: atreides
|
||||
ProductionAirdrop:
|
||||
ReadyAudio: AI_REINF.AUD
|
||||
ProductionQueue@Vehicle:
|
||||
QueuedAudio: AI_ORDER.AUD
|
||||
ReadyAudio:
|
||||
OnHoldAudio: AI_HOLD.AUD
|
||||
CancelledAudio: AI_CANCL.AUD
|
||||
BlockedAudio: AI_NROOM.AUD
|
||||
|
||||
REPAIRA:
|
||||
Inherits: ^REPAIR
|
||||
@@ -206,6 +227,7 @@ MCVA:
|
||||
Buildable:
|
||||
Prerequisites: heavya,repaira
|
||||
Owner: atreides
|
||||
BuiltAt: heavya
|
||||
Transforms:
|
||||
Facing: 10
|
||||
IntoActor: conyarda
|
||||
@@ -214,11 +236,32 @@ MCVA:
|
||||
RenderUnit:
|
||||
Image: DMCV
|
||||
|
||||
MCVA.starport:
|
||||
Inherits: MCVA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 1499
|
||||
|
||||
COMBATA:
|
||||
Inherits: ^COMBAT
|
||||
Tooltip:
|
||||
Icon: combataicon
|
||||
Buildable:
|
||||
Prerequisites: heavya
|
||||
Owner: atreides
|
||||
BuiltAt: heavya
|
||||
RenderUnitTurreted:
|
||||
Image: COMBATA
|
||||
|
||||
COMBATA.starport:
|
||||
Inherits: COMBATA
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 595
|
||||
|
||||
SONICTANK:
|
||||
Inherits: ^Vehicle
|
||||
@@ -227,11 +270,13 @@ SONICTANK:
|
||||
BuildPaletteOrder: 15
|
||||
Prerequisites: heavya,researcha
|
||||
Owner: atreides
|
||||
BuiltAt: heavya
|
||||
Valued:
|
||||
Cost: 1500
|
||||
Tooltip:
|
||||
Name: Sonic Tank
|
||||
Description: Fires a sound wave\n Strong vs Infantry.\n Weak vs Tanks
|
||||
Icon: sonictankicon
|
||||
Selectable:
|
||||
Bounds: 30,30
|
||||
Health:
|
||||
@@ -243,6 +288,7 @@ SONICTANK:
|
||||
RevealsShroud:
|
||||
Range: 7
|
||||
RenderUnit:
|
||||
Image: SONICTANK
|
||||
AttackFrontal:
|
||||
PrimaryWeapon: TTankZap
|
||||
PrimaryOffset: 0,0,0,-5
|
||||
|
||||
@@ -6,18 +6,6 @@ CONYARDH:
|
||||
IntoActor: mcvh
|
||||
Offset:1,1
|
||||
Facing: 270
|
||||
ProductionQueue@Building:
|
||||
QueuedAudio: HI_BUILD.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
ReadyAudio: HI_BDRDY.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
ProductionQueue@Defense:
|
||||
QueuedAudio: HI_BUILD.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
ReadyAudio: HI_BDRDY.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
PWRH:
|
||||
Inherits: ^POWER
|
||||
@@ -46,6 +34,14 @@ HARVESTERH:
|
||||
RenderUnit:
|
||||
Image: HARVESTER
|
||||
|
||||
HARVESTERH.starport:
|
||||
Inherits: HARVESTERH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 895
|
||||
|
||||
TRIKEH:
|
||||
Inherits: ^TRIKE
|
||||
Buildable:
|
||||
@@ -54,6 +50,14 @@ TRIKEH:
|
||||
RenderUnit:
|
||||
Image: TRIKE
|
||||
|
||||
TRIKEH.starport:
|
||||
Inherits: TRIKEH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 149
|
||||
|
||||
QUADH:
|
||||
Inherits: ^QUAD
|
||||
Buildable:
|
||||
@@ -62,14 +66,30 @@ QUADH:
|
||||
RenderUnit:
|
||||
Image: QUAD
|
||||
|
||||
QUADH.starport:
|
||||
Inherits: QUADH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 295
|
||||
|
||||
SIEGETANKH:
|
||||
Inherits: ^SIEGETANK
|
||||
Buildable:
|
||||
Prerequisites: heavyh, radarh
|
||||
Owner: harkonnen
|
||||
RenderUnit:
|
||||
RenderUnitTurreted:
|
||||
Image: SIEGETANK
|
||||
|
||||
SIEGETANKH.starport:
|
||||
Inherits: SIEGETANKH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporta
|
||||
Valued:
|
||||
Cost: 495
|
||||
|
||||
MISSILETANKH:
|
||||
Inherits: ^MISSILETANK
|
||||
Buildable:
|
||||
@@ -78,6 +98,14 @@ MISSILETANKH:
|
||||
RenderUnit:
|
||||
Image: MISSILETANK
|
||||
|
||||
MISSILETANKH.starport:
|
||||
Inherits: MISSILETANKH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 599
|
||||
|
||||
CARRYALLH:
|
||||
Inherits: ^CARRYALL
|
||||
Buildable:
|
||||
@@ -87,17 +115,19 @@ CARRYALLH:
|
||||
RenderUnit:
|
||||
Image: CARRYALL
|
||||
|
||||
CARRYALLH.starport:
|
||||
Inherits: CARRYALLH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 999
|
||||
|
||||
BARRH:
|
||||
Inherits: ^BARRACKS
|
||||
Buildable:
|
||||
Prerequisites: pwrh
|
||||
Owner: harkonnen
|
||||
ProductionQueue@Infantry:
|
||||
ReadyAudio: HI_UNRDY.AUD
|
||||
QueuedAudio:HI_TRAIN.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
GUNTOWERH:
|
||||
Inherits: ^GUNTOWER
|
||||
@@ -122,12 +152,6 @@ HIGHTECHH:
|
||||
Buildable:
|
||||
Prerequisites: radarh
|
||||
Owner: harkonnen
|
||||
ProductionQueue@Plane:
|
||||
ReadyAudio: HI_UNRDY.AUD
|
||||
QueuedAudio:HI_TRAIN.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
RESEARCHH:
|
||||
Inherits: ^RESEARCH
|
||||
@@ -140,6 +164,20 @@ PALACEH:
|
||||
Buildable:
|
||||
Prerequisites: researchh
|
||||
Owner: harkonnen
|
||||
NukePower:
|
||||
Image: deathhandicon
|
||||
ChargeTime: 540
|
||||
Description: Death Hand
|
||||
LongDesc: Launches a nuclear missile at a target location.
|
||||
BeginChargeSound: HI_PREP.AUD
|
||||
EndChargeSound: HI_DHRDY.AUD
|
||||
SelectTargetSound:
|
||||
LaunchSound: HI_LAUNC.AUD
|
||||
MissileWeapon: atomic
|
||||
SpawnOffset: 10,0
|
||||
CanPowerDown:
|
||||
RequiresPower:
|
||||
SupportPowerChargeBar:
|
||||
|
||||
SILOH:
|
||||
Inherits: ^SILO
|
||||
@@ -154,12 +192,6 @@ LIGHTH:
|
||||
Owner: harkonnen
|
||||
RenderBuildingWarFactory:
|
||||
Image: LIGHTH
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: HI_UNRDY.AUD
|
||||
QueuedAudio:HI_TRAIN.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
HEAVYH:
|
||||
Inherits: ^HEAVY
|
||||
@@ -168,12 +200,6 @@ HEAVYH:
|
||||
Owner: harkonnen
|
||||
RenderBuildingWarFactory:
|
||||
Image: HEAVYH
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: HI_UNRDY.AUD
|
||||
QueuedAudio:HI_TRAIN.AUD
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
RADARH:
|
||||
Inherits: ^RADAR
|
||||
@@ -186,14 +212,6 @@ STARPORTH:
|
||||
Buildable:
|
||||
Prerequisites: radarh
|
||||
Owner: harkonnen
|
||||
ProductionAirdrop:
|
||||
ReadyAudio: HI_REINF.AUD
|
||||
ProductionQueue@Vehicle:
|
||||
QueuedAudio: HI_ORDER.AUD
|
||||
ReadyAudio:
|
||||
OnHoldAudio: HI_HOLD.AUD
|
||||
CancelledAudio: HI_CANCL.AUD
|
||||
BlockedAudio: HI_NROOM.AUD
|
||||
|
||||
REPAIRH:
|
||||
Inherits: ^REPAIR
|
||||
@@ -214,11 +232,31 @@ MCVH:
|
||||
RenderUnit:
|
||||
Image: DMCV
|
||||
|
||||
MCVH.starport:
|
||||
Inherits: MCVH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 1499
|
||||
|
||||
COMBATH:
|
||||
Inherits: ^COMBAT
|
||||
Tooltip:
|
||||
Icon: combathicon
|
||||
Buildable:
|
||||
Prerequisites: heavyh
|
||||
Owner: harkonnen
|
||||
RenderUnitTurreted:
|
||||
Image: COMBATH
|
||||
|
||||
COMBATH.starport:
|
||||
Inherits: COMBATH
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporth
|
||||
Valued:
|
||||
Cost: 595
|
||||
|
||||
DEVAST:
|
||||
Inherits: ^Tank
|
||||
|
||||
@@ -6,18 +6,6 @@ CONYARDO:
|
||||
IntoActor: mcvo
|
||||
Offset:1,1
|
||||
Facing: 270
|
||||
ProductionQueue@Building:
|
||||
QueuedAudio: OI_BUILD.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
ReadyAudio: OI_BDRDY.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
ProductionQueue@Defense:
|
||||
QueuedAudio: OI_BUILD.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
ReadyAudio: OI_BDRDY.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
PWRO:
|
||||
Inherits: ^POWER
|
||||
@@ -43,12 +31,6 @@ BARRO:
|
||||
Buildable:
|
||||
Prerequisites: pwro
|
||||
Owner: ordos
|
||||
ProductionQueue@Infantry:
|
||||
ReadyAudio: OI_UNRDY.AUD
|
||||
QueuedAudio:OI_TRAIN.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
GUNTOWERO:
|
||||
Inherits: ^GUNTOWER
|
||||
@@ -73,12 +55,6 @@ HIGHTECHO:
|
||||
Buildable:
|
||||
Prerequisites: radaro
|
||||
Owner: ordos
|
||||
ProductionQueue@Plane:
|
||||
ReadyAudio: OI_UNRDY.AUD
|
||||
QueuedAudio:OI_TRAIN.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
RESEARCHO:
|
||||
Inherits: ^RESEARCH
|
||||
@@ -91,6 +67,20 @@ PALACEO:
|
||||
Buildable:
|
||||
Prerequisites: researcho
|
||||
Owner: ordos
|
||||
ParatroopersPower:
|
||||
Image: carryallicon
|
||||
UnitType: carryall.infantry
|
||||
FlareTime: 0
|
||||
ChargeTime: 360
|
||||
Description: Paratroopers
|
||||
LongDesc: A Carryall drops a squad of Infantry \nanywhere on the map
|
||||
Prerequisites: HIGHTECHO
|
||||
DropItems: RIFLE, RIFLE, ENGINEER, BAZOOKA, BAZOOKA
|
||||
SelectTargetSound:
|
||||
FlareType:
|
||||
CanPowerDown:
|
||||
RequiresPower:
|
||||
SupportPowerChargeBar:
|
||||
|
||||
SILOO:
|
||||
Inherits: ^SILO
|
||||
@@ -105,12 +95,6 @@ LIGHTO:
|
||||
Owner: ordos
|
||||
RenderBuildingWarFactory:
|
||||
Image: LIGHTO
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: OI_UNRDY.AUD
|
||||
QueuedAudio:OI_TRAIN.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
HEAVYO:
|
||||
Inherits: ^HEAVY
|
||||
@@ -119,12 +103,6 @@ HEAVYO:
|
||||
Owner: ordos
|
||||
RenderBuildingWarFactory:
|
||||
Image: HEAVYO
|
||||
ProductionQueue@Vehicle:
|
||||
ReadyAudio: OI_UNRDY.AUD
|
||||
QueuedAudio:OI_TRAIN.AUD
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
RADARO:
|
||||
Inherits: ^RADAR
|
||||
@@ -137,14 +115,6 @@ STARPORTO:
|
||||
Buildable:
|
||||
Prerequisites: radaro
|
||||
Owner: ordos
|
||||
ProductionAirdrop:
|
||||
ReadyAudio: OI_REINF.AUD
|
||||
ProductionQueue@Vehicle:
|
||||
QueuedAudio: OI_ORDER.AUD
|
||||
ReadyAudio:
|
||||
OnHoldAudio: OI_HOLD.AUD
|
||||
CancelledAudio: OI_CANCL.AUD
|
||||
BlockedAudio: OI_NROOM.AUD
|
||||
|
||||
REPAIRO:
|
||||
Inherits: ^REPAIR
|
||||
@@ -165,6 +135,14 @@ MCVO:
|
||||
RenderUnit:
|
||||
Image: DMCV
|
||||
|
||||
MCVO.starport:
|
||||
Inherits: MCVO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 1499
|
||||
|
||||
HARVESTERO:
|
||||
Inherits: ^HARVESTER
|
||||
Buildable:
|
||||
@@ -173,11 +151,31 @@ HARVESTERO:
|
||||
RenderUnit:
|
||||
Image: HARVESTER
|
||||
|
||||
HARVESTERO.starport:
|
||||
Inherits: HARVESTERO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 895
|
||||
|
||||
COMBATO:
|
||||
Inherits: ^COMBAT
|
||||
Tooltip:
|
||||
Icon: combatoicon
|
||||
Buildable:
|
||||
Prerequisites: heavyo
|
||||
Owner: ordos
|
||||
RenderUnitTurreted:
|
||||
Image: COMBATO
|
||||
|
||||
COMBATO.starport:
|
||||
Inherits: COMBATO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 595
|
||||
|
||||
RAIDER:
|
||||
Inherits: ^Vehicle
|
||||
@@ -209,6 +207,11 @@ RAIDER:
|
||||
SecondaryWeapon: M60mg
|
||||
SecondaryOffset: 0,0,0,-4
|
||||
AutoTarget:
|
||||
Cargo:
|
||||
Types: Infantry
|
||||
MaxWeight: 1
|
||||
PipCount: 1
|
||||
UnloadFacing: 220
|
||||
|
||||
QUADO:
|
||||
Inherits: ^QUAD
|
||||
@@ -218,14 +221,30 @@ QUADO:
|
||||
RenderUnit:
|
||||
Image: QUAD
|
||||
|
||||
QUADO.starport:
|
||||
Inherits: QUADO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 295
|
||||
|
||||
SIEGETANKO:
|
||||
Inherits: ^SIEGETANK
|
||||
Buildable:
|
||||
Prerequisites: heavyo, radaro
|
||||
Owner: ordos
|
||||
RenderUnit:
|
||||
RenderUnitTurreted:
|
||||
Image: SIEGETANK
|
||||
|
||||
SIEGETANKO.starport:
|
||||
Inherits: SIEGETANKO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 495
|
||||
|
||||
MISSILETANKO:
|
||||
Inherits: ^MISSILETANK
|
||||
Buildable:
|
||||
@@ -234,6 +253,14 @@ MISSILETANKO:
|
||||
RenderUnit:
|
||||
Image: MISSILETANK
|
||||
|
||||
MISSILETANKO.starport:
|
||||
Inherits: MISSILETANKO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 599
|
||||
|
||||
CARRYALLO:
|
||||
Inherits: ^CARRYALL
|
||||
Buildable:
|
||||
@@ -243,6 +270,14 @@ CARRYALLO:
|
||||
RenderUnit:
|
||||
Image: CARRYALL
|
||||
|
||||
CARRYALLO.starport:
|
||||
Inherits: CARRYALLO
|
||||
Buildable:
|
||||
Queue: Ship
|
||||
BuiltAt: starporto
|
||||
Valued:
|
||||
Cost: 999
|
||||
|
||||
DEVIATORTANK:
|
||||
Inherits: ^Tank
|
||||
Valued:
|
||||
@@ -264,10 +299,6 @@ DEVIATORTANK:
|
||||
RevealsShroud:
|
||||
Range: 6
|
||||
RenderUnit:
|
||||
# Captures:
|
||||
# CaptureTypes:
|
||||
# Range: 5
|
||||
# wastedAfterwards: false
|
||||
AttackLoyalty:
|
||||
PrimaryWeapon: FakeMissile
|
||||
PrimaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25
|
||||
|
||||
@@ -21,14 +21,6 @@
|
||||
Value: 2500
|
||||
BaseBuilding:
|
||||
ProductionBar:
|
||||
ProductionQueue@Building:
|
||||
Type: Building
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
ProductionQueue@Defense:
|
||||
Type: Defense
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
^POWER:
|
||||
Inherits: ^Building
|
||||
@@ -86,10 +78,6 @@
|
||||
Produces: Infantry
|
||||
PrimaryBuilding:
|
||||
ProductionBar:
|
||||
ProductionQueue@Infantry:
|
||||
Type: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
^HIGHTECH:
|
||||
Inherits: ^Building
|
||||
@@ -120,10 +108,6 @@
|
||||
Produces: Plane
|
||||
PrimaryBuilding:
|
||||
ProductionBar:
|
||||
ProductionQueue@Plane:
|
||||
Type: Plane
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
^RESEARCH:
|
||||
Inherits: ^Building
|
||||
@@ -193,6 +177,8 @@
|
||||
Bib:
|
||||
-RenderBuilding:
|
||||
OreRefinery:
|
||||
DockOffset: 2,1
|
||||
DockAngle: 144
|
||||
StoresOre:
|
||||
PipColor: Green
|
||||
PipCount: 20
|
||||
@@ -236,7 +222,7 @@
|
||||
Cost: 1000
|
||||
Tooltip:
|
||||
Name: Light Factory
|
||||
Description: produces light vehicles.
|
||||
Description: Produces light vehicles.
|
||||
Building:
|
||||
Power: -30
|
||||
Footprint: xxx xxx
|
||||
@@ -257,10 +243,6 @@
|
||||
Produces: Vehicle
|
||||
PrimaryBuilding:
|
||||
ProductionBar:
|
||||
ProductionQueue@Vehicle:
|
||||
Type: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
^HEAVY:
|
||||
Inherits: ^Building
|
||||
@@ -271,7 +253,7 @@
|
||||
Cost: 2000
|
||||
Tooltip:
|
||||
Name: Heavy Factory
|
||||
Description: produces tanks
|
||||
Description: Produces heavy vehicles.
|
||||
Building:
|
||||
Power: -30
|
||||
Footprint: _x_ xxx xxx
|
||||
@@ -293,10 +275,6 @@
|
||||
Produces: Vehicle
|
||||
PrimaryBuilding:
|
||||
ProductionBar:
|
||||
ProductionQueue@Vehicle:
|
||||
Type: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
|
||||
^RADAR:
|
||||
RequiresPower:
|
||||
@@ -329,7 +307,7 @@
|
||||
Cost: 2000
|
||||
Tooltip:
|
||||
Name: Starport
|
||||
Description: Provides a dropzone for vehicle reinforcements
|
||||
Description: Dropzone for cheap reinforcements
|
||||
Buildable:
|
||||
Queue: Building
|
||||
BuildPaletteOrder: 60
|
||||
@@ -343,19 +321,16 @@
|
||||
Range: 7
|
||||
Bib:
|
||||
RallyPoint:
|
||||
RallyPoint: 4,2
|
||||
RallyPoint: 2,2
|
||||
BelowUnits:
|
||||
Exit@1:
|
||||
SpawnOffset: -24,0
|
||||
ExitCell: 3,1
|
||||
ExitCell: 2,1
|
||||
ProductionAirdrop:
|
||||
Produces: Vehicle
|
||||
Produces: Ship
|
||||
ActorType: frigate
|
||||
ProductionQueue@Vehicle:
|
||||
Type: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
ProductionBar:
|
||||
PrimaryBuilding:
|
||||
|
||||
^WALL:
|
||||
Buildable:
|
||||
@@ -480,8 +455,9 @@
|
||||
Description: Repairs vehicles and allows\n the construction of additional bases.
|
||||
Building:
|
||||
Power: -30
|
||||
Footprint: xxx xxx xxx
|
||||
Dimensions: 3,3
|
||||
Footprint: xxx xxx
|
||||
Dimensions: 3,2
|
||||
Bib:
|
||||
Health:
|
||||
HP: 800
|
||||
Armor:
|
||||
@@ -492,4 +468,89 @@
|
||||
Reservable:
|
||||
RepairsUnits:
|
||||
Interval: 10
|
||||
RallyPoint:
|
||||
RallyPoint:
|
||||
RallyPoint: 2,2
|
||||
|
||||
SIETCH:
|
||||
Inherits: ^Building
|
||||
Tooltip:
|
||||
Name: Fremen Sietch
|
||||
Building:
|
||||
Power: 0
|
||||
Footprint: xx xx
|
||||
Dimensions: 2,2
|
||||
TerrainTypes: Cliff
|
||||
Health:
|
||||
HP: 400
|
||||
Armor:
|
||||
Type: Heavy
|
||||
RevealsShroud:
|
||||
Range: 10
|
||||
-GivesBuildableArea:
|
||||
-Sellable:
|
||||
-Capturable:
|
||||
-CapturableBar:
|
||||
|
||||
STARPORTC:
|
||||
Inherits: ^STARPORT
|
||||
ProductionAirdrop:
|
||||
ReadyAudio:
|
||||
-Buildable:
|
||||
|
||||
PALACEC:
|
||||
Inherits: ^PALACE
|
||||
-Buildable:
|
||||
|
||||
HEAVYC:
|
||||
Inherits: ^HEAVY
|
||||
-Buildable:
|
||||
RenderBuildingWarFactory:
|
||||
Image: HEAVYC
|
||||
|
||||
#4PLATES:
|
||||
# Inherits: ^WALL
|
||||
# Buildable:
|
||||
# BuildPaletteOrder: 2000
|
||||
# Owner: atreides, harkonnen, ordos
|
||||
# Tooltip:
|
||||
# Name: Fundament
|
||||
# Description: Pretty useless at the moment.
|
||||
# Icon: 4plateicon
|
||||
# Building:
|
||||
# TerrainTypes: Rock
|
||||
# Footprint: =
|
||||
# BelowUnits:
|
||||
# LineBuild:
|
||||
# Range: 4
|
||||
# RenderBuildingWall:
|
||||
# HasMakeAnimation: false
|
||||
# Image: PLATES
|
||||
# Wall:
|
||||
# CrushClasses: plates
|
||||
# -SelectionDecorations:
|
||||
# -Selectable:
|
||||
|
||||
#6PLATES:
|
||||
# Inherits: ^WALL
|
||||
# Buildable:
|
||||
# BuildPaletteOrder: 3000
|
||||
# Owner: atreides, harkonnen, ordos
|
||||
# Valued:
|
||||
# Cost: 120
|
||||
# Tooltip:
|
||||
# Name: Fundament
|
||||
# Description: Pretty useless at the moment.
|
||||
# Icon: 6plateicon
|
||||
# Building:
|
||||
# TerrainTypes: Rock
|
||||
# Footprint: =
|
||||
# BelowUnits:
|
||||
# LineBuild:
|
||||
# Range: 6
|
||||
# RenderBuildingWall:
|
||||
# HasMakeAnimation: false
|
||||
# Image: PLATES
|
||||
# Wall:
|
||||
# CrushClasses: plates
|
||||
# -SelectionDecorations:
|
||||
# -Selectable:
|
||||
@@ -1,5 +1,41 @@
|
||||
Player:
|
||||
TechTree:
|
||||
ClassicProductionQueue@Building:
|
||||
Type: Building
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: BuildingReady
|
||||
BlockedAudio: NoRoom
|
||||
ClassicProductionQueue@Defense:
|
||||
Type: Defense
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: BuildingReady
|
||||
BlockedAudio: NoRoom
|
||||
ClassicProductionQueue@Vehicle:
|
||||
Type: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
BlockedAudio: NoRoom
|
||||
ClassicProductionQueue@Infantry:
|
||||
Type: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
BlockedAudio: NoRoom
|
||||
ClassicProductionQueue@Ship:
|
||||
Type: Ship
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
BlockedAudio: NoRoom
|
||||
QueuedAudio: OrderPlaced
|
||||
ReadyAudio:
|
||||
ClassicProductionQueue@Plane:
|
||||
Type: Plane
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
BlockedAudio: NoRoom
|
||||
PlaceBuilding:
|
||||
SupportPowerManager:
|
||||
ConquestVictoryConditions:
|
||||
@@ -53,7 +89,7 @@ Player:
|
||||
SquadSize: 10
|
||||
PlayerColorPalette:
|
||||
BasePalette: d2k
|
||||
RemapIndex: 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
|
||||
RemapIndex: 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240
|
||||
BaseAttackNotifier:
|
||||
HarvesterAttackNotifier:
|
||||
|
||||
|
||||
@@ -88,6 +88,11 @@
|
||||
PrimaryWeapon: M60mg
|
||||
PrimaryOffset: 0,0,0,-4
|
||||
AutoTarget:
|
||||
Cargo:
|
||||
Types: Infantry
|
||||
MaxWeight: 1
|
||||
PipCount: 1
|
||||
UnloadFacing: 220
|
||||
|
||||
^QUAD:
|
||||
Inherits: ^Vehicle
|
||||
|
||||
@@ -79,6 +79,9 @@ trike:
|
||||
idle:
|
||||
Start: 0
|
||||
Facings: 32
|
||||
unload:
|
||||
Start: 0
|
||||
Facings: 32
|
||||
|
||||
quad:
|
||||
idle:
|
||||
@@ -532,6 +535,14 @@ conyarda:
|
||||
Length: *
|
||||
damaged-idle:
|
||||
Start: 1
|
||||
# build: cranea
|
||||
# Start: 0
|
||||
# Length: 14
|
||||
# Tick: 75
|
||||
# damaged-build: cranea
|
||||
# Start: 0
|
||||
# Length: 14
|
||||
# Tick: 75
|
||||
|
||||
repaira:
|
||||
idle:
|
||||
@@ -1031,6 +1042,9 @@ raider:
|
||||
idle:
|
||||
Start: 0
|
||||
Facings: 32
|
||||
unload:
|
||||
Start: 0
|
||||
Facings: 32
|
||||
|
||||
deviatortank:
|
||||
idle:
|
||||
@@ -1285,4 +1299,44 @@ sandworm:
|
||||
Tick: 1600
|
||||
wormattack: wormjaw
|
||||
Start: 0
|
||||
Length: 15
|
||||
Length: 15
|
||||
|
||||
atomic:
|
||||
up: deathhandmissile
|
||||
Start: 0
|
||||
Length: 1
|
||||
down: deathhandmissile
|
||||
Start: 1
|
||||
Length: 1
|
||||
|
||||
# falls back to RA
|
||||
parabomb:
|
||||
open:
|
||||
Start: 0
|
||||
Length: 8
|
||||
idle:
|
||||
Start: 8
|
||||
Length: 5
|
||||
|
||||
# falls back to RA
|
||||
parach:
|
||||
open:
|
||||
Start: 0
|
||||
Length: 5
|
||||
idle:
|
||||
Start: 5
|
||||
Length: 11
|
||||
|
||||
plates:
|
||||
idle:
|
||||
Start: 0
|
||||
Length: 6
|
||||
scratched-idle:
|
||||
Start: 0
|
||||
Length: 6
|
||||
damaged-idle:
|
||||
Start: 0
|
||||
Length: 6
|
||||
critical-idle:
|
||||
Start: 0
|
||||
Length: 6
|
||||
BIN
mods/d2k/uibits/alternate-loadscreen.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 53 KiB |
BIN
mods/d2k/uibits/misc.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
mods/d2k/uibits/tabs.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
@@ -571,4 +571,24 @@ Vulcan:
|
||||
Explosion: piffs
|
||||
InfDeath: 2
|
||||
Damage: 10
|
||||
Delay: 10
|
||||
Delay: 10
|
||||
|
||||
ParaBomb:
|
||||
ROF: 10
|
||||
Range: 4.5
|
||||
Report:
|
||||
Projectile: GravityBomb
|
||||
Image: PARABOMB
|
||||
Warhead:
|
||||
Spread: 6
|
||||
Versus:
|
||||
None: 30%
|
||||
Wood: 75%
|
||||
Light: 75%
|
||||
Concrete: 50%
|
||||
Explosion: self_destruct
|
||||
WaterExplosion: small_splash
|
||||
InfDeath: 4
|
||||
SmudgeType: Crater
|
||||
Damage: 500
|
||||
ImpactSound: kaboom15
|
||||
@@ -12,6 +12,13 @@ Speech:
|
||||
BaseAttack: baseatk1
|
||||
HarvesterAttack:
|
||||
Leave: bct1
|
||||
UnitReady: unitrdy1
|
||||
NoBuild: nobuild1
|
||||
Training: train1
|
||||
OnHold: onhold1
|
||||
Cancelled: cancld1
|
||||
Building: abldgin1
|
||||
ConstructionComplete: conscmp1
|
||||
|
||||
Sounds:
|
||||
Notifications:
|
||||
|
||||
@@ -12,6 +12,15 @@ FCOM:
|
||||
Range: 10
|
||||
Bib:
|
||||
|
||||
HOSP:
|
||||
Inherits: ^CivBuilding
|
||||
Building:
|
||||
Footprint: xx xx
|
||||
Dimensions: 2,2
|
||||
Tooltip:
|
||||
Name: Hospital
|
||||
RepairsUnits:
|
||||
|
||||
V01:
|
||||
Inherits: ^CivBuilding
|
||||
Building:
|
||||
@@ -121,6 +130,15 @@ MISS:
|
||||
Type: Wood
|
||||
Bib:
|
||||
|
||||
BIO:
|
||||
Inherits: ^CivBuilding
|
||||
Building:
|
||||
Footprint: xx xx
|
||||
Dimensions: 2,2
|
||||
Tooltip:
|
||||
Name: Biological Lab
|
||||
|
||||
|
||||
OILB:
|
||||
Inherits: ^CivBuilding
|
||||
Selectable:
|
||||
|
||||
@@ -111,6 +111,9 @@
|
||||
Offset: 0,-10
|
||||
CrushableInfantry:
|
||||
CrushSound: squishy2.aud
|
||||
RepairableNear:
|
||||
Buildings: hosp
|
||||
CloseEnough: 1
|
||||
|
||||
^Ship:
|
||||
AppearsOnRadar:
|
||||
|
||||
@@ -4,14 +4,14 @@ Player:
|
||||
Type: Building
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: abldgin1.aud
|
||||
ReadyAudio: conscmp1.aud
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: ConstructionComplete
|
||||
ClassicProductionQueue@Defense:
|
||||
Type: Defense
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
QueuedAudio: abldgin1.aud
|
||||
ReadyAudio: conscmp1.aud
|
||||
QueuedAudio: Building
|
||||
ReadyAudio: ConstructionComplete
|
||||
ClassicProductionQueue@Vehicle:
|
||||
Type: Vehicle
|
||||
BuildSpeed: .4
|
||||
|
||||