diff --git a/.gitignore b/.gitignore
index 90009635cb..709b88727a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,15 +4,14 @@ bin/ai/*
!bin/ai/compat*.nut
!bin/ai/regression
!bin/data
+!bin/baseset
bin/baseset/*
!bin/baseset/openttd.grf
!bin/baseset/opntitle.dat
!bin/baseset/orig_extra.grf
-!bin/baseset/orig_*.obg
-!bin/baseset/orig_*.obs
-!bin/baseset/no_sound.obs
-!bin/baseset/no_music.obm
-!bin/baseset/orig_*.obm
+!bin/game
+bin/game/*
+!bin/game/compat*.nut
!bin/scripts
bin/scripts/*
!bin/scripts/*.example
@@ -50,8 +49,3 @@ src/os/windows/ottdres.rc
!/config.lib
!*.in
*.tmp
-
-/game/
-/openttd
-grf/.nmlcache/
-grf/cmclient.grf
diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj
index 588a2248cc..87ac61f310 100644
--- a/projects/openttd_vs140.vcxproj
+++ b/projects/openttd_vs140.vcxproj
@@ -1373,6 +1373,13 @@
+
+
+
+
+
+
+
diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters
index 6953eef76c..5e8a96d693 100644
--- a/projects/openttd_vs140.vcxproj.filters
+++ b/projects/openttd_vs140.vcxproj.filters
@@ -103,6 +103,9 @@
{c76ff9f1-1e62-46d8-8d55-000000000033}
+
+ {c76ff9f1-1e62-46d8-8d55-000000000034}
+
@@ -3210,6 +3213,27 @@
Threading
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj
index ecce50f7d6..30f3223e3c 100644
--- a/projects/openttd_vs141.vcxproj
+++ b/projects/openttd_vs141.vcxproj
@@ -1373,6 +1373,13 @@
+
+
+
+
+
+
+
diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters
index 6953eef76c..5e8a96d693 100644
--- a/projects/openttd_vs141.vcxproj.filters
+++ b/projects/openttd_vs141.vcxproj.filters
@@ -103,6 +103,9 @@
{c76ff9f1-1e62-46d8-8d55-000000000033}
+
+ {c76ff9f1-1e62-46d8-8d55-000000000034}
+
@@ -3210,6 +3213,27 @@
Threading
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj
index 97738b0682..c41e992cbf 100644
--- a/projects/openttd_vs142.vcxproj
+++ b/projects/openttd_vs142.vcxproj
@@ -1373,6 +1373,13 @@
+
+
+
+
+
+
+
diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters
index 6953eef76c..5e8a96d693 100644
--- a/projects/openttd_vs142.vcxproj.filters
+++ b/projects/openttd_vs142.vcxproj.filters
@@ -103,6 +103,9 @@
{c76ff9f1-1e62-46d8-8d55-000000000033}
+
+ {c76ff9f1-1e62-46d8-8d55-000000000034}
+
@@ -3210,6 +3213,27 @@
Threading
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
+
+ CityMania
+
diff --git a/source.list b/source.list
index 844a768c38..2acc57bdac 100644
--- a/source.list
+++ b/source.list
@@ -1218,3 +1218,12 @@ sound/null_s.cpp
# Threading
thread.h
+
+# CityMania
+citymania/cm_event.hpp
+citymania/cm_game.hpp
+citymania/cm_game.cpp
+citymania/cm_main.hpp
+citymania/cm_main.cpp
+citymania/cm_type.hpp
+citymania/extensions/cmext_town.hpp
diff --git a/src/citymania/cm_event.hpp b/src/citymania/cm_event.hpp
new file mode 100644
index 0000000000..9fd7c122ac
--- /dev/null
+++ b/src/citymania/cm_event.hpp
@@ -0,0 +1,123 @@
+#ifndef CM_EVENT_HPP
+#define CM_EVENT_HPP
+
+#include "cm_type.hpp"
+#include "../cargo_type.h"
+#include "../company_type.h"
+#include "../economy_type.h"
+#include "../station_type.h"
+#include "../town_type.h"
+
+#include
+#include