about summary refs log tree commit diff
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-02-27 15:03:57 +0100
committeroy <Tom_Adams@web.de>2011-02-27 15:03:57 +0100
commitd9ce7203871cea0046144bce175df5bf1d7fcc19 (patch)
tree10ecc4f818eb7c5f1402a774a351e6d7bc9a04bf
parent45eee0c8c2bb5af6629db9adefeecea88a547fb4 (diff)
downloadzcatch-d9ce7203871cea0046144bce175df5bf1d7fcc19.tar.gz
zcatch-d9ce7203871cea0046144bce175df5bf1d7fcc19.zip
made engine an interface
-rw-r--r--src/engine/client/client.cpp56
-rw-r--r--src/engine/client/client.h47
-rw-r--r--src/engine/client/graphics.cpp3
-rw-r--r--src/engine/client/sound.cpp2
-rw-r--r--src/engine/client/sound.h3
-rw-r--r--src/engine/client/srvbrowse.cpp1
-rw-r--r--src/engine/engine.h31
-rw-r--r--src/engine/masterserver.h2
-rw-r--r--src/engine/server/register.cpp1
-rw-r--r--src/engine/server/server.cpp49
-rw-r--r--src/engine/server/server.h3
-rw-r--r--src/engine/shared/console.cpp1
-rw-r--r--src/engine/shared/datafile.cpp1
-rw-r--r--src/engine/shared/demo.cpp1
-rw-r--r--src/engine/shared/engine.cpp109
-rw-r--r--src/engine/shared/engine.h26
-rw-r--r--src/engine/shared/masterserver.cpp22
-rw-r--r--src/engine/shared/network.cpp1
-rw-r--r--src/engine/shared/packer.cpp1
-rw-r--r--src/engine/shared/snapshot.cpp1
-rw-r--r--src/engine/shared/storage.cpp1
-rw-r--r--src/game/client/components/skins.cpp1
-rw-r--r--src/game/editor/ed_editor.cpp1
23 files changed, 158 insertions, 206 deletions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index 67f954dd..ccc21da7 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -6,29 +6,42 @@
 
 #include <base/math.h>
 #include <base/system.h>
-#include <engine/shared/engine.h>
 
-#include <engine/shared/protocol.h>
-#include <engine/shared/snapshot.h>
+#include <engine/client.h>
+#include <engine/config.h>
+#include <engine/console.h>
+#include <engine/editor.h>
+#include <engine/engine.h>
+#include <engine/graphics.h>
+#include <engine/input.h>
+#include <engine/keys.h>
+#include <engine/map.h>
+#include <engine/masterserver.h>
+#include <engine/serverbrowser.h>
+#include <engine/sound.h>
+#include <engine/storage.h>
+#include <engine/textrender.h>
+
+#include <engine/shared/config.h>
 #include <engine/shared/compression.h>
+#include <engine/shared/datafile.h>
+#include <engine/shared/demo.h>
+#include <engine/shared/memheap.h>
 #include <engine/shared/network.h>
-#include <engine/shared/config.h>
 #include <engine/shared/packer.h>
-#include <engine/shared/memheap.h>
-#include <engine/shared/datafile.h>
-#include <engine/shared/ringbuffer.h>
 #include <engine/shared/protocol.h>
-
-#include <engine/shared/demo.h>
+#include <engine/shared/ringbuffer.h>
+#include <engine/shared/snapshot.h>
 
 #include <mastersrv/mastersrv.h>
 #include <versionsrv/versionsrv.h>
 
+#include "srvbrowse.h"
 #include "client.h"
 
 #if defined(CONF_FAMILY_WINDOWS)
-	#define _WIN32_WINNT 0x0500
-	#define NOGDI
+	#define _WIN32_WINNT 0x0501
+	#define WIN32_LEAN_AND_MEAN
 	#include <windows.h>
 #endif
 
@@ -1748,7 +1761,7 @@ void CClient::VersionUpdate()
 {
 	if(m_VersionInfo.m_State == 0)
 	{
-		m_Engine.HostLookup(&m_VersionInfo.m_VersionServeraddr, g_Config.m_ClVersionServer);
+		Engine()->HostLookup(&m_VersionInfo.m_VersionServeraddr, g_Config.m_ClVersionServer);
 		m_VersionInfo.m_State++;
 	}
 	else if(m_VersionInfo.m_State == 1)
@@ -1773,11 +1786,6 @@ void CClient::VersionUpdate()
 	}
 }
 
-void CClient::InitEngine(const char *pAppname)
-{
-	m_Engine.Init(pAppname);
-}
-
 void CClient::RegisterInterfaces()
 {
 	Kernel()->RegisterInterface(static_cast<IDemoRecorder*>(&m_DemoRecorder));
@@ -1788,6 +1796,7 @@ void CClient::RegisterInterfaces()
 void CClient::InitInterfaces()
 {
 	// fetch interfaces
+	m_pEngine = Kernel()->RequestInterface<IEngine>();
 	m_pEditor = Kernel()->RequestInterface<IEditor>();
 	m_pGraphics = Kernel()->RequestInterface<IEngineGraphics>();
 	m_pSound = Kernel()->RequestInterface<IEngineSound>();
@@ -2280,15 +2289,12 @@ int main(int argc, const char **argv) // ignore_convention
 	}
 #endif
 
-	// init the engine
-	dbg_msg("client", "starting...");
-	m_Client.InitEngine("Teeworlds");
-
 	IKernel *pKernel = IKernel::Create();
 	pKernel->RegisterInterface(&m_Client);
 	m_Client.RegisterInterfaces();
 
 	// create the components
+	IEngine *pEngine = CreateEngine("Teeworlds");
 	IConsole *pConsole = CreateConsole(CFGFLAG_CLIENT);
 	IStorage *pStorage = CreateStorage("Teeworlds", argc, argv); // ignore_convention
 	IConfig *pConfig = CreateConfig();
@@ -2302,8 +2308,9 @@ int main(int argc, const char **argv) // ignore_convention
 	{
 		bool RegisterFail = false;
 
-		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IConsole*>(pConsole));
-		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IConfig*>(pConfig));
+		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pEngine);
+		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pConsole);
+		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pConfig);
 
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IEngineGraphics*>(pEngineGraphics)); // register graphics as both
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IGraphics*>(pEngineGraphics));
@@ -2332,7 +2339,7 @@ int main(int argc, const char **argv) // ignore_convention
 	}
 
 	pConfig->Init();
-	pEngineMasterServer->Init(m_Client.Engine());
+	pEngineMasterServer->Init();
 	pEngineMasterServer->Load();
 
 	// register all console commands
@@ -2359,6 +2366,7 @@ int main(int argc, const char **argv) // ignore_convention
 	m_Client.Engine()->InitLogfile();
 
 	// run the client
+	dbg_msg("client", "starting...");
 	m_Client.Run();
 
 	// write down the config and quit
diff --git a/src/engine/client/client.h b/src/engine/client/client.h
index 8768f23a..2c0f5f86 100644
--- a/src/engine/client/client.h
+++ b/src/engine/client/client.h
@@ -3,28 +3,6 @@
 #ifndef ENGINE_CLIENT_CLIENT_H
 #define ENGINE_CLIENT_CLIENT_H
 
-
-#include <engine/console.h>
-#include <engine/editor.h>
-#include <engine/graphics.h>
-#include <engine/textrender.h>
-#include <engine/client.h>
-#include <engine/config.h>
-#include <engine/serverbrowser.h>
-#include <engine/sound.h>
-#include <engine/input.h>
-#include <engine/keys.h>
-#include <engine/map.h>
-#include <engine/masterserver.h>
-#include <engine/storage.h>
-
-#include <engine/shared/engine.h>
-#include <engine/shared/protocol.h>
-#include <engine/shared/demo.h>
-#include <engine/shared/network.h>
-
-#include "srvbrowse.h"
-
 class CGraph
 {
 public:
@@ -106,6 +84,7 @@ public:
 class CClient : public IClient, public CDemoPlayer::IListner
 {
 	// needed interfaces
+	IEngine *m_pEngine;
 	IEditor *m_pEditor;
 	IEngineInput *m_pInput;
 	IEngineGraphics *m_pGraphics;
@@ -122,11 +101,10 @@ class CClient : public IClient, public CDemoPlayer::IListner
 		PREDICTION_MARGIN=1000/50/2, // magic network prediction value
 	};
 
-	CNetClient m_NetClient;
-	CDemoPlayer m_DemoPlayer;
-	CDemoRecorder m_DemoRecorder;
-	CEngine m_Engine;
-	CServerBrowser m_ServerBrowser;
+	class CNetClient m_NetClient;
+	class CDemoPlayer m_DemoPlayer;
+	class CDemoRecorder m_DemoRecorder;
+	class CServerBrowser m_ServerBrowser;
 
 	char m_aServerAddressStr[256];
 
@@ -191,28 +169,30 @@ class CClient : public IClient, public CDemoPlayer::IListner
 	CGraph m_FpsGraph;
 
 	// the game snapshots are modifiable by the game
-	CSnapshotStorage m_SnapshotStorage;
+	class CSnapshotStorage m_SnapshotStorage;
 	CSnapshotStorage::CHolder *m_aSnapshots[NUM_SNAPSHOT_TYPES];
 
 	int m_RecivedSnapshots;
 	char m_aSnapshotIncommingData[CSnapshot::MAX_SIZE];
 
-	CSnapshotStorage::CHolder m_aDemorecSnapshotHolders[NUM_SNAPSHOT_TYPES];
+	class CSnapshotStorage::CHolder m_aDemorecSnapshotHolders[NUM_SNAPSHOT_TYPES];
 	char *m_aDemorecSnapshotData[NUM_SNAPSHOT_TYPES][2][CSnapshot::MAX_SIZE];
 
-	CSnapshotDelta m_SnapshotDelta;
+	class CSnapshotDelta m_SnapshotDelta;
 
 	//
-	CServerInfo m_CurrentServerInfo;
+	class CServerInfo m_CurrentServerInfo;
 	int64 m_CurrentServerInfoRequestTime; // >= 0 should request, == -1 got info
 
 	// version info
 	struct
 	{
 		int m_State;
-		CHostLookup m_VersionServeraddr;
+		class CHostLookup m_VersionServeraddr;
 	} m_VersionInfo;
+
 public:
+	IEngine *Engine() { return m_pEngine; }
 	IEngineGraphics *Graphics() { return m_pGraphics; }
 	IEngineInput *Input() { return m_pInput; }
 	IEngineSound *Sound() { return m_pSound; }
@@ -298,7 +278,6 @@ public:
 
 	void Update();
 
-	void InitEngine(const char *pAppname);
 	void RegisterInterfaces();
 	void InitInterfaces();
 
@@ -327,7 +306,5 @@ public:
 
 	void AutoScreenshot_Start();
 	void AutoScreenshot_Cleanup();
-
-	virtual class CEngine *Engine() { return &m_Engine; }
 };
 #endif
diff --git a/src/engine/client/graphics.cpp b/src/engine/client/graphics.cpp
index f313e6e3..99f5e095 100644
--- a/src/engine/client/graphics.cpp
+++ b/src/engine/client/graphics.cpp
@@ -21,14 +21,13 @@
 #include <base/system.h>
 #include <engine/external/pnglite/pnglite.h>
 
-#include <engine/shared/engine.h>
 #include <engine/shared/config.h>
 #include <engine/graphics.h>
 #include <engine/storage.h>
 #include <engine/keys.h>
 #include <engine/console.h>
 
-#include <math.h>
+#include <math.h> // cosf, sinf
 
 #include "graphics.h"
 
diff --git a/src/engine/client/sound.cpp b/src/engine/client/sound.cpp
index fea79285..55ca2939 100644
--- a/src/engine/client/sound.cpp
+++ b/src/engine/client/sound.cpp
@@ -1,6 +1,8 @@
 /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
 /* If you are missing that file, acquire a complete release at teeworlds.com.                */
 #include <base/system.h>
+#include <engine/graphics.h>
+#include <engine/storage.h>
 #include <engine/shared/config.h>
 
 #include "SDL.h"
diff --git a/src/engine/client/sound.h b/src/engine/client/sound.h
index 1372b9c4..0c45f1ab 100644
--- a/src/engine/client/sound.h
+++ b/src/engine/client/sound.h
@@ -4,9 +4,6 @@
 #define ENGINE_CLIENT_SOUND_H
 
 #include <engine/sound.h>
-#include <engine/storage.h>
-#include <engine/graphics.h>
-#include <engine/shared/engine.h>
 
 class CSound : public IEngineSound
 {
diff --git a/src/engine/client/srvbrowse.cpp b/src/engine/client/srvbrowse.cpp
index b9eeac11..540cadf3 100644
--- a/src/engine/client/srvbrowse.cpp
+++ b/src/engine/client/srvbrowse.cpp
@@ -8,7 +8,6 @@
 #include <engine/shared/protocol.h>
 #include <engine/shared/config.h>
 #include <engine/shared/memheap.h>
-#include <engine/shared/engine.h>
 
 #include <engine/masterserver.h>
 #include <engine/console.h>
diff --git a/src/engine/engine.h b/src/engine/engine.h
new file mode 100644
index 00000000..73f68b0a
--- /dev/null
+++ b/src/engine/engine.h
@@ -0,0 +1,31 @@
+/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
+/* If you are missing that file, acquire a complete release at teeworlds.com.                */
+#ifndef ENGINE_ENGINE_H
+#define ENGINE_ENGINE_H
+
+#include "kernel.h"
+#include <engine/shared/jobs.h>
+
+class CHostLookup
+{
+public:
+	CJob m_Job;
+	char m_aHostname[128];
+	NETADDR m_Addr;
+};
+
+class IEngine : public IInterface
+{
+	MACRO_INTERFACE("engine", 0)
+
+protected:
+	class CJobPool m_HostLookupPool;
+
+public:
+	virtual void InitLogfile() = 0;
+	virtual void HostLookup(CHostLookup *pLookup, const char *pHostname) = 0;
+};
+
+extern IEngine *CreateEngine(const char *pAppname);
+
+#endif
diff --git a/src/engine/masterserver.h b/src/engine/masterserver.h
index d13ea6b4..1788a18d 100644
--- a/src/engine/masterserver.h
+++ b/src/engine/masterserver.h
@@ -15,7 +15,7 @@ public:
 		MAX_MASTERSERVERS=4
 	};
 
-	virtual void Init(class CEngine *pEngine) = 0;
+	virtual void Init() = 0;
 	virtual void SetDefault() = 0;
 	virtual int Load() = 0;
 	virtual int Save() = 0;
diff --git a/src/engine/server/register.cpp b/src/engine/server/register.cpp
index 36b26f1e..20c7d173 100644
--- a/src/engine/server/register.cpp
+++ b/src/engine/server/register.cpp
@@ -3,7 +3,6 @@
 #include <base/system.h>
 #include <engine/shared/network.h>
 #include <engine/shared/config.h>
-#include <engine/shared/engine.h>
 #include <engine/console.h>
 #include <engine/masterserver.h>
 
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 5341a38c..7977c4fc 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -3,26 +3,22 @@
 
 #include <base/system.h>
 
-#include <engine/shared/config.h>
-#include <engine/shared/engine.h>
-
-#include <engine/shared/protocol.h>
-#include <engine/shared/snapshot.h>
+#include <engine/config.h>
+#include <engine/console.h>
+#include <engine/engine.h>
+#include <engine/map.h>
+#include <engine/masterserver.h>
+#include <engine/server.h>
+#include <engine/storage.h>
 
 #include <engine/shared/compression.h>
-
-#include <engine/shared/network.h>
 #include <engine/shared/config.h>
-#include <engine/shared/packer.h>
 #include <engine/shared/datafile.h>
 #include <engine/shared/demo.h>
-
-#include <engine/server.h>
-#include <engine/map.h>
-#include <engine/console.h>
-#include <engine/storage.h>
-#include <engine/masterserver.h>
-#include <engine/config.h>
+#include <engine/shared/network.h>
+#include <engine/shared/packer.h>
+#include <engine/shared/protocol.h>
+#include <engine/shared/snapshot.h>
 
 #include <mastersrv/mastersrv.h>
 
@@ -30,8 +26,8 @@
 #include "server.h"
 
 #if defined(CONF_FAMILY_WINDOWS) 
-	#define _WIN32_WINNT 0x0500
-	#define NOGDI
+	#define _WIN32_WINNT 0x0501
+	#define WIN32_LEAN_AND_MEAN
 	#include <windows.h>
 #endif
 
@@ -1046,11 +1042,6 @@ int CServer::LoadMap(const char *pMapName)
 	return 1;
 }
 
-void CServer::InitEngine(const char *pAppname)
-{
-	m_Engine.Init(pAppname);
-}
-
 void CServer::InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole)
 {
 	m_Register.Init(pNetServer, pMasterServer, pConsole);
@@ -1062,9 +1053,6 @@ int CServer::Run()
 	m_pMap = Kernel()->RequestInterface<IEngineMap>();
 	m_pStorage = Kernel()->RequestInterface<IStorage>();
 
-	//snap_init_id();
-	net_init();
-	
 	//
 	Console()->RegisterPrintCallback(SendRconLineAuthed, this);
 
@@ -1495,14 +1483,11 @@ int main(int argc, const char **argv) // ignore_convention
 	}
 #endif
 
-	// init the engine
-	dbg_msg("server", "starting...");
 	CServer *pServer = CreateServer();
-	pServer->InitEngine("Teeworlds");
-	
 	IKernel *pKernel = IKernel::Create();
 
 	// create the components
+	IEngine *pEngine = CreateEngine("Teeworlds");
 	IEngineMap *pEngineMap = CreateEngineMap();
 	IGameServer *pGameServer = CreateGameServer();
 	IConsole *pConsole = CreateConsole(CFGFLAG_SERVER);
@@ -1516,6 +1501,7 @@ int main(int argc, const char **argv) // ignore_convention
 		bool RegisterFail = false;
 
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pServer); // register as both
+		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pEngine);
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IEngineMap*>(pEngineMap)); // register as both
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast<IMap*>(pEngineMap));
 		RegisterFail = RegisterFail || !pKernel->RegisterInterface(pGameServer);
@@ -1530,7 +1516,7 @@ int main(int argc, const char **argv) // ignore_convention
 	}
 	
 	pConfig->Init();
-	pEngineMasterServer->Init(pServer->Engine());
+	pEngineMasterServer->Init();
 	pEngineMasterServer->Load();
 		
 	// register all console commands
@@ -1547,9 +1533,10 @@ int main(int argc, const char **argv) // ignore_convention
 	// restore empty config strings to their defaults
 	pConfig->RestoreStrings();
 	
-	pServer->Engine()->InitLogfile();
+	pEngine->InitLogfile();
 
 	// run the server
+	dbg_msg("server", "starting...");
 	pServer->Run();
 	
 	// free
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index 6bee026e..74b524a8 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -48,7 +48,6 @@ public:
 	class IGameServer *GameServer() { return m_pGameServer; }
 	class IConsole *Console() { return m_pConsole; }
 	class IStorage *Storage() { return m_pStorage; }
-	class CEngine *Engine() { return &m_Engine; }
 
 	class CClient
 	{
@@ -120,7 +119,6 @@ public:
 	int m_CurrentMapSize;	
 	
 	CDemoRecorder m_DemoRecorder;
-	CEngine m_Engine;
 	CRegister m_Register;
 	
 	CServer();
@@ -172,7 +170,6 @@ public:
 	char *GetMapName();
 	int LoadMap(const char *pMapName);
 
-	void InitEngine(const char *pAppname);
 	void InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole);
 	int Run();
 
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp
index 987e252b..3241d05d 100644
--- a/src/engine/shared/console.cpp
+++ b/src/engine/shared/console.cpp
@@ -6,7 +6,6 @@
 #include <engine/storage.h>
 #include "console.h"
 #include "config.h"
-#include "engine.h"
 #include "linereader.h"
 
 const char *CConsole::CResult::GetString(unsigned Index)
diff --git a/src/engine/shared/datafile.cpp b/src/engine/shared/datafile.cpp
index a24ea765..74583ab8 100644
--- a/src/engine/shared/datafile.cpp
+++ b/src/engine/shared/datafile.cpp
@@ -4,7 +4,6 @@
 #include <base/system.h>
 #include <engine/storage.h>
 #include "datafile.h"
-#include "engine.h"
 #include <zlib.h>
 
 static const int DEBUG=0;
diff --git a/src/engine/shared/demo.cpp b/src/engine/shared/demo.cpp
index 0433d6a3..bf883456 100644
--- a/src/engine/shared/demo.cpp
+++ b/src/engine/shared/demo.cpp
@@ -9,7 +9,6 @@
 #include "snapshot.h"
 #include "compression.h"
 #include "network.h"
-#include "engine.h"
 
 static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
 static const unsigned char gs_ActVersion = 2;
diff --git a/src/engine/shared/engine.cpp b/src/engine/shared/engine.cpp
index ea06c57c..442a5dfe 100644
--- a/src/engine/shared/engine.cpp
+++ b/src/engine/shared/engine.cpp
@@ -3,81 +3,70 @@
 
 #include <base/system.h>
 
+#include <engine/engine.h>
 #include <engine/shared/config.h>
-#include <engine/shared/engine.h>
 #include <engine/shared/network.h>
 #include <engine/console.h>
-#include "linereader.h"
 
-// compiled-in data-dir path
-#define DATA_DIR "data"
 
-//static int engine_find_datadir(char *argv0);
-/*
-static void con_dbg_dumpmem(IConsole::IResult *result, void *user_data)
+static int HostLookupThread(void *pUser)
 {
-	mem_debug_dump();
+	CHostLookup *pLookup = (CHostLookup *)pUser;
+	net_host_lookup(pLookup->m_aHostname, &pLookup->m_Addr, NETTYPE_IPV4);
+	return 0;
 }
 
-static void con_dbg_lognetwork(IConsole::IResult *result, void *user_data)
+class CEngine : public IEngine
 {
-	CNetBase::OpenLog("network_sent.dat", "network_recv.dat");
-}*/
-
-/*
-static char application_save_path[512] = {0};
-static char datadir[512] = {0};
+public:
+	/*
+	static void con_dbg_dumpmem(IConsole::IResult *result, void *user_data)
+	{
+		mem_debug_dump();
+	}
 
-const char *engine_savepath(const char *filename, char *buffer, int max)
-{
-	str_format(buffer, max, "%s/%s", application_save_path, filename);
-	return buffer;
-}*/
+	static void con_dbg_lognetwork(IConsole::IResult *result, void *user_data)
+	{
+		CNetBase::OpenLog("network_sent.dat", "network_recv.dat");
+	}*/
 
-void CEngine::Init(const char *pAppname)
-{
-	dbg_logger_stdout();
-	dbg_logger_debugger();
+	CEngine(const char *pAppname)
+	{
+		dbg_logger_stdout();
+		dbg_logger_debugger();
 	
-	//
-	dbg_msg("engine", "running on %s-%s-%s", CONF_FAMILY_STRING, CONF_PLATFORM_STRING, CONF_ARCH_STRING);
-#ifdef CONF_ARCH_ENDIAN_LITTLE
-	dbg_msg("engine", "arch is little endian");
-#elif defined(CONF_ARCH_ENDIAN_BIG)
-	dbg_msg("engine", "arch is big endian");
-#else
-	dbg_msg("engine", "unknown endian");
-#endif
+		//
+		dbg_msg("engine", "running on %s-%s-%s", CONF_FAMILY_STRING, CONF_PLATFORM_STRING, CONF_ARCH_STRING);
+	#ifdef CONF_ARCH_ENDIAN_LITTLE
+		dbg_msg("engine", "arch is little endian");
+	#elif defined(CONF_ARCH_ENDIAN_BIG)
+		dbg_msg("engine", "arch is big endian");
+	#else
+		dbg_msg("engine", "unknown endian");
+	#endif
 
-	// init the network
-	net_init();
-	CNetBase::Init();
+		// init the network
+		net_init();
+		CNetBase::Init();
 	
-	m_HostLookupPool.Init(1);
+		m_HostLookupPool.Init(1);
 
-	//MACRO_REGISTER_COMMAND("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_dumpmem, 0x0, "Dump the memory");
-	//MACRO_REGISTER_COMMAND("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_lognetwork, 0x0, "Log the network");
-	
-	// reset the config
-	//config_reset();
-}
+		//MACRO_REGISTER_COMMAND("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_dumpmem, 0x0, "Dump the memory");
+		//MACRO_REGISTER_COMMAND("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_lognetwork, 0x0, "Log the network");
+	}
 
-void CEngine::InitLogfile()
-{
-	// open logfile if needed
-	if(g_Config.m_Logfile[0])
-		dbg_logger_file(g_Config.m_Logfile);
-}
+	void InitLogfile()
+	{
+		// open logfile if needed
+		if(g_Config.m_Logfile[0])
+			dbg_logger_file(g_Config.m_Logfile);
+	}
 
-static int HostLookupThread(void *pUser)
-{
-	CHostLookup *pLookup = (CHostLookup *)pUser;
-	net_host_lookup(pLookup->m_aHostname, &pLookup->m_Addr, NETTYPE_IPV4);
-	return 0;
-}
+	void HostLookup(CHostLookup *pLookup, const char *pHostname)
+	{
+		str_copy(pLookup->m_aHostname, pHostname, sizeof(pLookup->m_aHostname));
+		m_HostLookupPool.Add(&pLookup->m_Job, HostLookupThread, pLookup);
+	}
+};
 
-void CEngine::HostLookup(CHostLookup *pLookup, const char *pHostname)
-{
-	str_copy(pLookup->m_aHostname, pHostname, sizeof(pLookup->m_aHostname));
-	m_HostLookupPool.Add(&pLookup->m_Job, HostLookupThread, pLookup);
-}
+IEngine *CreateEngine(const char *pAppname) { return new CEngine(pAppname); }
diff --git a/src/engine/shared/engine.h b/src/engine/shared/engine.h
deleted file mode 100644
index 63b0cc09..00000000
--- a/src/engine/shared/engine.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
-/* If you are missing that file, acquire a complete release at teeworlds.com.                */
-#ifndef ENGINE_SHARED_E_ENGINE_H
-#define ENGINE_SHARED_E_ENGINE_H
-
-#include "jobs.h"
-
-class CHostLookup
-{
-public:
-	CJob m_Job;
-	char m_aHostname[128];
-	NETADDR m_Addr;
-};
-
-class CEngine
-{
-	class CJobPool m_HostLookupPool;
-
-public:
-	void Init(const char *pAppname);
-	void InitLogfile();
-	void HostLookup(CHostLookup *pLookup, const char *pHostname);
-};
-
-#endif
diff --git a/src/engine/shared/masterserver.cpp b/src/engine/shared/masterserver.cpp
index 308c3ed4..545cc16c 100644
--- a/src/engine/shared/masterserver.cpp
+++ b/src/engine/shared/masterserver.cpp
@@ -3,9 +3,11 @@
 #include <stdio.h>	// sscanf
 
 #include <base/system.h>
+
+#include <engine/engine.h>
 #include <engine/masterserver.h>
 #include <engine/storage.h>
-#include "engine.h"
+
 #include "linereader.h"
 
 class CMasterServer : public IEngineMasterServer
@@ -22,7 +24,8 @@ public:
 
 	CMasterInfo m_aMasterServers[MAX_MASTERSERVERS];
 	int m_NeedsUpdate;
-	CEngine *m_pEngine;
+	IEngine *m_pEngine;
+	IStorage *m_pStorage;
 	
 	CMasterServer()
 	{
@@ -98,9 +101,10 @@ public:
 		}
 	}
 
-	virtual void Init(class CEngine *pEngine)
+	virtual void Init()
 	{
-		m_pEngine = pEngine;
+		m_pEngine = Kernel()->RequestInterface<IEngine>();
+		m_pStorage = Kernel()->RequestInterface<IStorage>();
 	}
 
 	virtual void SetDefault()
@@ -115,12 +119,11 @@ public:
 		CLineReader LineReader;
 		IOHANDLE File;
 		int Count = 0;
-		IStorage *pStorage = Kernel()->RequestInterface<IStorage>();
-		if(!pStorage)
+		if(!m_pStorage)
 			return -1;
 		
 		// try to open file
-		File = pStorage->OpenFile("masters.cfg", IOFLAG_READ, IStorage::TYPE_SAVE);
+		File = m_pStorage->OpenFile("masters.cfg", IOFLAG_READ, IStorage::TYPE_SAVE);
 		if(!File)
 			return -1;
 		
@@ -161,12 +164,11 @@ public:
 	{
 		IOHANDLE File;
 
-		IStorage *pStorage = Kernel()->RequestInterface<IStorage>();
-		if(!pStorage)
+		if(!m_pStorage)
 			return -1;
 			
 		// try to open file
-		File = pStorage->OpenFile("masters.cfg", IOFLAG_WRITE, IStorage::TYPE_SAVE);
+		File = m_pStorage->OpenFile("masters.cfg", IOFLAG_WRITE, IStorage::TYPE_SAVE);
 		if(!File)
 			return -1;
 
diff --git a/src/engine/shared/network.cpp b/src/engine/shared/network.cpp
index 8e70d9cf..43c1e645 100644
--- a/src/engine/shared/network.cpp
+++ b/src/engine/shared/network.cpp
@@ -4,7 +4,6 @@
 
 
 #include "config.h"
-#include "engine.h"
 #include "network.h"
 #include "huffman.h"
 
diff --git a/src/engine/shared/packer.cpp b/src/engine/shared/packer.cpp
index 5519898d..cd211468 100644
--- a/src/engine/shared/packer.cpp
+++ b/src/engine/shared/packer.cpp
@@ -4,7 +4,6 @@
 
 #include "packer.h"
 #include "compression.h"
-#include "engine.h"
 #include "config.h"
 
 void CPacker::Reset()
diff --git a/src/engine/shared/snapshot.cpp b/src/engine/shared/snapshot.cpp
index f908d1c2..fee6afa2 100644
--- a/src/engine/shared/snapshot.cpp
+++ b/src/engine/shared/snapshot.cpp
@@ -1,7 +1,6 @@
 /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
 /* If you are missing that file, acquire a complete release at teeworlds.com.                */
 #include "snapshot.h"
-#include "engine.h"
 #include "compression.h"
 
 // CSnapshot
diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp
index 3d7257f4..2c7fafea 100644
--- a/src/engine/shared/storage.cpp
+++ b/src/engine/shared/storage.cpp
@@ -2,7 +2,6 @@
 /* If you are missing that file, acquire a complete release at teeworlds.com.                */
 #include <base/system.h>
 #include <engine/storage.h>
-#include "engine.h"
 #include "linereader.h"
 
 // compiled-in data-dir path
diff --git a/src/game/client/components/skins.cpp b/src/game/client/components/skins.cpp
index d27f34eb..6c845bb4 100644
--- a/src/game/client/components/skins.cpp
+++ b/src/game/client/components/skins.cpp
@@ -7,7 +7,6 @@
 
 #include <engine/graphics.h>
 #include <engine/storage.h>
-#include <engine/shared/engine.h>
 
 #include "skins.h"
 
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp
index bf122bfa..323df8b1 100644
--- a/src/game/editor/ed_editor.cpp
+++ b/src/game/editor/ed_editor.cpp
@@ -5,7 +5,6 @@
 
 #include <engine/shared/datafile.h>
 #include <engine/shared/config.h>
-#include <engine/shared/engine.h>
 #include <engine/client.h>
 #include <engine/console.h>
 #include <engine/graphics.h>