Compare commits

..

20 Commits

Author SHA1 Message Date
Matthias Mailänder
3e3977776d fixes #2322 (stuck units when leaving repair pad)
by adding bibs and defining a sane default rallypoint exit cell
2012-07-21 00:01:26 +02:00
Matthias Mailänder
36fbddbb5c fix d2k production queues
ClassicProductionQueue gets support for new notification system
d2k now uses the ClassicProductionQueue system to avoid spamming
Starport has cheaper threshold prices
adds a new production queue but has long delivery times
also no starport price fluctuation to improve balancing
2012-07-20 23:05:28 +02:00
Matthias Mailänder
e33d988301 d2k UI reskinning complete, thanks to @JOoGraphics 2012-07-20 20:00:09 +02:00
Matthias Mailänder
a55167c9ac another d2k loadscreen made by @katzsmile 2012-07-19 23:16:05 +02:00
Matthias Mailänder
d0a4555a1f new admin icon that does fit and some more icons for the future 2012-07-19 21:37:24 +02:00
Matthias Mailänder
4724ac6b00 experimenting with concrete plates
pretty useless at the moment, removed by default
2012-07-19 20:08:59 +02:00
Matthias Mailänder
d998367d35 d2k UI improvements by @JOoGraphics 2012-07-19 17:56:41 +02:00
Matthias Mailänder
0e9e7d0a9d added http://dunefont.co.nr/ to artsrc
maybe used for logos, splashscreens or menus later
2012-07-18 22:08:46 +02:00
Matthias Mailänder
5e1e5903d6 reworked d2k dialog UI, thanks to @JOoGraphics 2012-07-18 19:11:06 +02:00
Matthias Mailänder
25fae5d109 fixed d2k harvester dock animation 2012-07-17 22:03:30 +02:00
Matthias Mailänder
44b8630c71 support reversed remapping for d2k 2012-07-17 17:01:37 +02:00
Matthias Mailänder
6204bfcabf added hospital/bio lab to RA 2012-07-17 14:18:10 +02:00
Matthias Mailänder
1355a9f837 added extra d2k buildings for creeps/neutral
new SHPs, needs update for d2k-packages.zip
2012-07-17 14:02:22 +02:00
Matthias Mailänder
db8f22cdbf d2k harvester unload a little less ugly, RALint fixes
frames were swapped, offset and turnaround still wrong
remember: this changes unload.shp (copy to dl-mirrors)
2012-07-16 22:23:56 +02:00
Matthias Mailänder
860ec9d85f added passenger seat to trike/raider 2012-07-16 21:11:27 +02:00
Matthias Mailänder
5f2f25b758 added d2k superweapons, fixed c4/nuke cursor 2012-07-16 21:02:55 +02:00
Matthias Mailänder
3728685c67 fixed UPnP more crashes
proper timeout: does not crash/lag if no UPnP devices are found
close all ports, sockets, responses after they have been used
so it does not crash when port forwarding for the 2nd time
put all exceptions logs into OpenRA sourcecode
2012-07-15 22:31:02 +02:00
Matthias Mailänder
5e6b8deec1 remove ugly test map again 2012-07-15 18:39:48 +02:00
Matthias Mailänder
21f2b0df43 fixed a crash when siege tanks are built 2012-07-15 18:39:17 +02:00
Chris Forbes
2100484598 fix name of the-duell map for d2k; space breaks rpm build 2012-07-15 12:40:58 +12:00
43 changed files with 805 additions and 362 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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:

View File

@@ -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;
}
}
}
}
}

View File

@@ -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());

View File

@@ -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));
}
}

View File

@@ -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[][]

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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);
}
}
})));

View File

@@ -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));
}

Binary file not shown.

View 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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

Binary file not shown.

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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:

View File

@@ -88,6 +88,11 @@
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-4
AutoTarget:
Cargo:
Types: Infantry
MaxWeight: 1
PipCount: 1
UnloadFacing: 220
^QUAD:
Inherits: ^Vehicle

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 53 KiB

BIN
mods/d2k/uibits/misc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
mods/d2k/uibits/tabs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -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

View File

@@ -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:

View File

@@ -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:

View File

@@ -111,6 +111,9 @@
Offset: 0,-10
CrushableInfantry:
CrushSound: squishy2.aud
RepairableNear:
Buildings: hosp
CloseEnough: 1
^Ship:
AppearsOnRadar:

View File

@@ -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