diff --git a/Makefile b/Makefile
index 8442ab00db..9352d34d51 100644
--- a/Makefile
+++ b/Makefile
@@ -63,7 +63,7 @@ INSTALL_PROGRAM = $(INSTALL) -m755
INSTALL_DATA = $(INSTALL) -m644
# program targets
-CORE = fileformats rcg rgl rsdl rnull game utility geoip
+CORE = fileformats rcg rgl rsdl rnull game utility geoip irc
TOOLS = editor tsbuild ralint
VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`)
@@ -97,6 +97,14 @@ game_FLAGS = -win32icon:OpenRA.Game/OpenRA.ico
PROGRAMS += game
game: $(game_TARGET)
+irc_SRCS := $(shell find OpenRA.Irc/ -iname '*.cs')
+irc_TARGET = OpenRA.Irc.dll
+irc_KIND = library
+irc_DEPS = $(fileformats_TARGET) $(game_TARGET)
+irc_LIBS = $(COMMON_LIBS) $(irc_DEPS)
+PROGRAMS += irc
+irc: $(irc_TARGET)
+
# Renderer dlls
rsdl_SRCS := $(shell find OpenRA.Renderer.SdlCommon/ -iname '*.cs')
rsdl_TARGET = OpenRA.Renderer.SdlCommon.dll
@@ -141,8 +149,8 @@ STD_MOD_DEPS = $(STD_MOD_LIBS) $(ralint_TARGET)
mod_ra_SRCS := $(shell find OpenRA.Mods.RA/ -iname '*.cs')
mod_ra_TARGET = mods/ra/OpenRA.Mods.RA.dll
mod_ra_KIND = library
-mod_ra_DEPS = $(STD_MOD_DEPS) $(utility_TARGET) $(geoip_TARGET)
-mod_ra_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(utility_TARGET) $(geoip_TARGET)
+mod_ra_DEPS = $(STD_MOD_DEPS) $(utility_TARGET) $(geoip_TARGET) $(irc_TARGET)
+mod_ra_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(utility_TARGET) $(geoip_TARGET) $(irc_TARGET)
PROGRAMS += mod_ra
mod_ra: $(mod_ra_TARGET)
diff --git a/OpenRA.FileFormats/OpenRA.FileFormats.csproj b/OpenRA.FileFormats/OpenRA.FileFormats.csproj
index 02c58d7291..95e2f659fa 100644
--- a/OpenRA.FileFormats/OpenRA.FileFormats.csproj
+++ b/OpenRA.FileFormats/OpenRA.FileFormats.csproj
@@ -120,7 +120,10 @@
+
+
+
diff --git a/OpenRA.FileFormats/Primitives/ActionQueue.cs b/OpenRA.FileFormats/Primitives/ActionQueue.cs
index d7a5939a83..483537d942 100644
--- a/OpenRA.FileFormats/Primitives/ActionQueue.cs
+++ b/OpenRA.FileFormats/Primitives/ActionQueue.cs
@@ -36,7 +36,7 @@ namespace OpenRA.FileFormats
while (!actions.Empty && actions.Peek().Time <= t)
{
var da = actions.Pop();
- a += da.Action;
+ a = da.Action + a;
}
}
a();
diff --git a/OpenRA.FileFormats/Primitives/IObservableCollection.cs b/OpenRA.FileFormats/Primitives/IObservableCollection.cs
new file mode 100644
index 0000000000..f7da4fe6c3
--- /dev/null
+++ b/OpenRA.FileFormats/Primitives/IObservableCollection.cs
@@ -0,0 +1,25 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using System.Collections;
+
+namespace OpenRA.FileFormats.Primitives
+{
+ public interface IObservableCollection
+ {
+ event Action