about summary refs log tree commit diff
path: root/src/tools
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
commit72c06a258940696093f255fb1061beb58e1cdd0b (patch)
tree36b9a7712eec2d4f07837eab9c38ef1c5af85319 /src/tools
parente56feb597bc743677633432f77513b02907fd169 (diff)
downloadzcatch-72c06a258940696093f255fb1061beb58e1cdd0b.tar.gz
zcatch-72c06a258940696093f255fb1061beb58e1cdd0b.zip
copied refactor to trunk
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/crapnet.cpp204
-rw-r--r--src/tools/dilate.c2
-rw-r--r--src/tools/fake_server.c232
-rw-r--r--src/tools/fake_server.cpp211
-rw-r--r--src/tools/map_resave.c36
-rw-r--r--src/tools/map_resave.cpp44
-rw-r--r--src/tools/tileset_borderfix.c2
7 files changed, 359 insertions, 372 deletions
diff --git a/src/tools/crapnet.cpp b/src/tools/crapnet.cpp
index 888f3b2e..e05cc237 100644
--- a/src/tools/crapnet.cpp
+++ b/src/tools/crapnet.cpp
@@ -1,167 +1,167 @@
-/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
+// copyright (c) 2007 magnus auvinen, see licence.txt for more info
 #include <base/system.h>
 
 #include <cstdlib>
 
-struct PACKET
+struct CPacket
 {
-	PACKET *prev;
-	PACKET *next;
+	CPacket *m_pPrev;
+	CPacket *m_pNext;
 	
-	NETADDR send_to;
-	int64 timestamp;
-	int id;
-	int data_size;
-	char data[1];
+	NETADDR m_SendTo;
+	int64 m_Timestamp;
+	int m_Id;
+	int m_DataSize;
+	char m_aData[1];
 };
 
-static PACKET *first = (PACKET *)0;
-static PACKET *last = (PACKET *)0;
-static int current_latency = 0;
+static CPacket *m_pFirst = (CPacket *)0;
+static CPacket *m_pLast = (CPacket *)0;
+static int m_CurrentLatency = 0;
 
-struct PINGCONFIG
+struct CPingConfig
 {
-	int base;
-	int flux;
-	int spike;
-	int loss;
-	int delay;
-	int delay_freq;
+	int m_Base;
+	int m_Flux;
+	int m_Spike;
+	int m_Loss;
+	int m_Delay;
+	int m_DelayFreq;
 };
 
-static PINGCONFIG config_pings[] = {
+static CPingConfig m_aConfigPings[] = {
 //		base	flux	spike	loss	delay	delayfreq
 		{0,		0,		0,		0,		0,		0},
 		{40,	20,		100,		0,		0,		0},
 		{140,	40,		200,		0,		0,		0},
 };
 
-static int config_numpingconfs = sizeof(config_pings)/sizeof(PINGCONFIG);
-static int config_interval = 10; /* seconds between different pingconfigs */
-static int config_log = 0;
-static int config_reorder = 0;
+static int m_ConfigNumpingconfs = sizeof(m_aConfigPings)/sizeof(CPingConfig);
+static int m_ConfigInterval = 10; // seconds between different pingconfigs
+static int m_ConfigLog = 0;
+static int m_ConfigReorder = 0;
 
-int run(int port, NETADDR dest)
+void Run(int Port, NETADDR Dest)
 {
-	NETADDR src = {NETTYPE_IPV4, {0,0,0,0},port};
-	NETSOCKET socket = net_udp_create(src);
+	NETADDR Src = {NETTYPE_IPV4, {0,0,0,0}, Port};
+	NETSOCKET Socket = net_udp_create(Src);
 	
-	char buffer[1024*2];
-	int id = 0;
-	int delaycounter = 0;
+	char aBuffer[1024*2];
+	int Id = 0;
+	int Delaycounter = 0;
 	
 	while(1)
 	{
-		static int lastcfg = 0;
-		int n = ((time_get()/time_freq())/config_interval) % config_numpingconfs;
-		PINGCONFIG ping = config_pings[n];
+		static int Lastcfg = 0;
+		int n = ((time_get()/time_freq())/m_ConfigInterval) % m_ConfigNumpingconfs;
+		CPingConfig Ping = m_aConfigPings[n];
 		
-		if(n != lastcfg)
+		if(n != Lastcfg)
 			dbg_msg("crapnet", "cfg = %d", n);
-		lastcfg = n;
+		Lastcfg = n;
 		
 		// handle incomming packets
 		while(1)
 		{
 			// fetch data
-			int data_trash = 0;
-			NETADDR from;
-			int bytes = net_udp_recv(socket, &from, buffer, 1024*2);
-			if(bytes <= 0)
+			int DataTrash = 0;
+			NETADDR From;
+			int Bytes = net_udp_recv(Socket, &From, aBuffer, 1024*2);
+			if(Bytes <= 0)
 				break;
 				
-			if((rand()%100) < ping.loss) // drop the packet
+			if((rand()%100) < Ping.m_Loss) // drop the packet
 			{
-				if(config_log)
+				if(m_ConfigLog)
 					dbg_msg("crapnet", "dropped packet");
 				continue;
 			}
 
 			// create new packet				
-			PACKET *p = (PACKET *)mem_alloc(sizeof(PACKET)+bytes, 1);
+			CPacket *p = (CPacket *)mem_alloc(sizeof(CPacket)+Bytes, 1);
 
-			if(net_addr_comp(&from, &dest) == 0)
-				p->send_to = src; // from the server
+			if(net_addr_comp(&From, &Dest) == 0)
+				p->m_SendTo = Src; // from the server
 			else
 			{
-				src = from; // from the client
-				p->send_to = dest;
+				Src = From; // from the client
+				p->m_SendTo = Dest;
 			}
 
 			// queue packet
-			p->prev = last;
-			p->next = 0;
-			if(last)
-				last->next = p;
+			p->m_pPrev = m_pLast;
+			p->m_pNext = 0;
+			if(m_pLast)
+				m_pLast->m_pNext = p;
 			else
 			{
-				first = p;
-				last = p;
+				m_pFirst = p;
+				m_pLast = p;
 			}
-			last = p;
+			m_pLast = p;
 
 			// set data in packet
-			p->timestamp = time_get();
-			p->data_size = bytes;
-			p->id = id++;
-			mem_copy(p->data, buffer, bytes);
+			p->m_Timestamp = time_get();
+			p->m_DataSize = Bytes;
+			p->m_Id = Id++;
+			mem_copy(p->m_aData, aBuffer, Bytes);
 			
-			if(id > 20 && bytes > 6 && data_trash)
+			if(Id > 20 && Bytes > 6 && DataTrash)
 			{
-				p->data[6+(rand()%(bytes-6))] = rand()&255; // modify a byte
+				p->m_aData[6+(rand()%(Bytes-6))] = rand()&255; // modify a byte
 				if((rand()%10) == 0)
 				{
-					p->data_size -= rand()%32;
-					if(p->data_size < 6)
-						p->data_size = 6;
+					p->m_DataSize -= rand()%32;
+					if(p->m_DataSize < 6)
+						p->m_DataSize = 6;
 				}
 			}
 			
-			if(delaycounter <= 0)
+			if(Delaycounter <= 0)
 			{
-				if(ping.delay)
-					p->timestamp += (time_freq()*1000)/ping.delay;
-				delaycounter = ping.delay_freq;
+				if(Ping.m_Delay)
+					p->m_Timestamp += (time_freq()*1000)/Ping.m_Delay;
+				Delaycounter = Ping.m_DelayFreq;
 			}
-			delaycounter--;
+			Delaycounter--;
 	
-			if(config_log)
-				dbg_msg("crapnet", "<< %08d %d.%d.%d.%d:%5d (%d)", p->id, from.ip[0], from.ip[1], from.ip[2], from.ip[3], from.port, p->data_size);
+			if(m_ConfigLog)
+				dbg_msg("crapnet", "<< %08d %d.%d.%d.%d:%5d (%d)", p->m_Id, From.ip[0], From.ip[1], From.ip[2], From.ip[3], From.port, p->m_DataSize);
 		}
 		
 		//
 		/*while(1)
 		{*/
-		PACKET *p = 0;
-		PACKET *next = first;
+		CPacket *p = 0;
+		CPacket *pNext = m_pFirst;
 		while(1)
 		{
-			p = next;
+			p = pNext;
 			if(!p)
 				break;
-			next = p->next;
+			pNext = p->m_pNext;
 				
-			if((time_get()-p->timestamp) > current_latency)
+			if((time_get()-p->m_Timestamp) > m_CurrentLatency)
 			{
-				char flags[] = "  ";
+				char aFlags[] = "  ";
 
-				if(config_reorder && (rand()%2) == 0 && p->next)
+				if(m_ConfigReorder && (rand()%2) == 0 && p->m_pNext)
 				{
-					flags[0] = 'R';
-					p = first->next;
+					aFlags[0] = 'R';
+					p = m_pFirst->m_pNext;
 				}
 				
-				if(p->next)
-					p->next->prev = p->prev;
+				if(p->m_pNext)
+					p->m_pNext->m_pPrev = p->m_pPrev;
 				else
-					last = p->prev;
+					m_pLast = p->m_pPrev;
 					
-				if(p->prev)
-					p->prev->next = p->next;
+				if(p->m_pPrev)
+					p->m_pPrev->m_pNext = p->m_pNext;
 				else
-					first = p->next;
+					m_pFirst = p->m_pNext;
 					
-				/*PACKET *cur = first;
+				/*CPacket *cur = first;
 				while(cur)
 				{
 					dbg_assert(cur != p, "p still in list");
@@ -170,27 +170,27 @@ int run(int port, NETADDR dest)
 					
 				// send and remove packet
 				//if((rand()%20) != 0) // heavy packetloss
-				net_udp_send(socket, &p->send_to, p->data, p->data_size);
+				net_udp_send(Socket, &p->m_SendTo, p->m_aData, p->m_DataSize);
 				
 				// update lag
-				double flux = rand()/(double)RAND_MAX;
-				int ms_spike = ping.spike;
-				int ms_flux = ping.flux;
-				int ms_ping = ping.base;
-				current_latency = ((time_freq()*ms_ping)/1000) + (int64)(((time_freq()*ms_flux)/1000)*flux); // 50ms
+				double Flux = rand()/(double)RAND_MAX;
+				int MsSpike = Ping.m_Spike;
+				int MsFlux = Ping.m_Flux;
+				int MsPing = Ping.m_Base;
+				m_CurrentLatency = ((time_freq()*MsPing)/1000) + (int64)(((time_freq()*MsFlux)/1000)*Flux); // 50ms
 				
-				if(ms_spike && (p->id%100) == 0)
+				if(MsSpike && (p->m_Id%100) == 0)
 				{
-					current_latency += (time_freq()*ms_spike)/1000;
-					flags[1] = 'S';
+					m_CurrentLatency += (time_freq()*MsSpike)/1000;
+					aFlags[1] = 'S';
 				}
 
-				if(config_log)
+				if(m_ConfigLog)
 				{
-					dbg_msg("crapnet", ">> %08d %d.%d.%d.%d:%5d (%d) %s", p->id,
-						p->send_to.ip[0], p->send_to.ip[1],
-						p->send_to.ip[2], p->send_to.ip[3],
-						p->send_to.port, p->data_size, flags);
+					dbg_msg("crapnet", ">> %08d %d.%d.%d.%d:%5d (%d) %s", p->m_Id,
+						p->m_SendTo.ip[0], p->m_SendTo.ip[1],
+						p->m_SendTo.ip[2], p->m_SendTo.ip[3],
+						p->m_SendTo.port, p->m_DataSize, aFlags);
 				}
 				
 
@@ -202,10 +202,10 @@ int run(int port, NETADDR dest)
 	}
 }
 
-int main(int argc, char **argv)
+int main(int argc, char **argv) // ignore_convention
 {
-	NETADDR a = {NETTYPE_IPV4, {127,0,0,1},8303};
+	NETADDR Addr = {NETTYPE_IPV4, {127,0,0,1},8303};
 	dbg_logger_stdout();
-	run(8302, a);
+	Run(8302, Addr);
 	return 0;
 }
diff --git a/src/tools/dilate.c b/src/tools/dilate.c
index 57dce705..a8b28fc4 100644
--- a/src/tools/dilate.c
+++ b/src/tools/dilate.c
@@ -1,6 +1,6 @@
 /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
 
-#include "../engine/external/pnglite/pnglite.c"
+#include "./engine/external/pnglite/pnglite.c"
 
 typedef struct pixel_t
 {
diff --git a/src/tools/fake_server.c b/src/tools/fake_server.c
deleted file mode 100644
index 04eeac4d..00000000
--- a/src/tools/fake_server.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
-#include <base/system.h>
-#include <engine/e_config.h>
-#include <engine/e_network.h>
-#include <mastersrv/mastersrv.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-/*
- 32 version
- 64 servername
- 32 mapname
-  2 gametype
-  2 flags
-  4 progression
-  3 num players
-  3 max players
-  {
-  	48 name
-     6 score
-  } * players
-
-         111111111122222222223333333333444444444
-123456789012345678901234567890123456789012345678
-0.3 2d82e361de24cb25
-my own private little server
-magnus.auvinen@teeworlds.somehost-strage-host.com
-*/
-
-NETSERVER *net;
-
-int progression = 50;
-int game_type = 0;
-int flags = 0;
-
-const char *version = "0.3.0 2d82e361de24cb25";
-const char *map = "somemap";
-const char *server_name = "unnamed server";
-NETADDR master_servers[16] = {{0,{0},0}};
-int num_masters = 0;
-
-const char *player_names[16] = {0};
-int player_scores[16] = {0};
-int num_players = 0;
-int max_players = 0;
-
-
-
-static void send_heartbeats()
-{
-	static unsigned char data[sizeof(SERVERBROWSE_HEARTBEAT) + 2];
-	NETCHUNK packet;
-	int i;
-	
-	mem_copy(data, SERVERBROWSE_HEARTBEAT, sizeof(SERVERBROWSE_HEARTBEAT));
-	
-	packet.client_id = -1;
-	packet.flags = NETSENDFLAG_CONNLESS;
-	packet.data_size = sizeof(SERVERBROWSE_HEARTBEAT) + 2;
-	packet.data = &data;
-
-	/* supply the set port that the master can use if it has problems */	
-	data[sizeof(SERVERBROWSE_HEARTBEAT)] = 0;
-	data[sizeof(SERVERBROWSE_HEARTBEAT)+1] = 0;
-	
-	for(i = 0; i < num_masters; i++)
-	{
-		packet.address = master_servers[i];
-		netserver_send(net, &packet);
-	}
-}
-
-char infomsg[1024];
-int infomsg_size;
-
-static void writestr(const char *str)
-{
-	int l = strlen(str)+1;
-	memcpy(&infomsg[infomsg_size], str, l);
-	infomsg_size += l;
-}
-
-static void writeint(int i)
-{
-	char buf[64];
-	sprintf(buf, "%d", i);
-	writestr(buf);
-}
-
-static void build_infomessage()
-{
-	int i;
-	infomsg_size = sizeof(SERVERBROWSE_OLD_INFO);
-	memcpy(infomsg, SERVERBROWSE_OLD_INFO, infomsg_size);
-	
-	writestr(version);
-	writestr(server_name);
-	writestr(map);
-	writeint(game_type);
-	writeint(flags);
-	writeint(progression);
-	writeint(num_players);
-	writeint(max_players);
-	for(i = 0; i < num_players; i++)
-	{
-		writestr(player_names[i]);
-		writeint(player_scores[i]);
-	}
-}
-
-static void send_serverinfo(NETADDR *addr)
-{
-	NETCHUNK p;
-	p.client_id = -1;
-	p.address = *addr;
-	p.flags = NETSENDFLAG_CONNLESS;
-	p.data_size = infomsg_size;
-	p.data = infomsg;
-	netserver_send(net, &p);
-}
-
-static void send_fwcheckresponse(NETADDR *addr)
-{
-	NETCHUNK p;
-	p.client_id = -1;
-	p.address = *addr;
-	p.flags = NETSENDFLAG_CONNLESS;
-	p.data_size = sizeof(SERVERBROWSE_FWRESPONSE);
-	p.data = SERVERBROWSE_FWRESPONSE;
-	netserver_send(net, &p);
-}
-
-static int run()
-{
-	int64 next_heartbeat = 0;
-	NETADDR bindaddr = {NETTYPE_IPV4, {0},0};
-	net = netserver_open(bindaddr, 0, 0);
-	if(!net)
-		return -1;
-	
-	while(1)
-	{
-		NETCHUNK p;
-		netserver_update(net);
-		while(netserver_recv(net, &p))
-		{
-			if(p.client_id == -1)
-			{
-				if(p.data_size == sizeof(SERVERBROWSE_OLD_GETINFO) &&
-					memcmp(p.data, SERVERBROWSE_OLD_GETINFO, sizeof(SERVERBROWSE_OLD_GETINFO)) == 0)
-				{
-					send_serverinfo(&p.address);
-				}
-				else if(p.data_size == sizeof(SERVERBROWSE_FWCHECK) &&
-					memcmp(p.data, SERVERBROWSE_FWCHECK, sizeof(SERVERBROWSE_FWCHECK)) == 0)
-				{
-					send_fwcheckresponse(&p.address);
-				}
-			}
-		}
-		
-		/* send heartbeats if needed */
-		if(next_heartbeat < time_get())
-		{
-			next_heartbeat = time_get()+time_freq()*(15+(rand()%15));
-			send_heartbeats();
-		}
-		
-		thread_sleep(100);
-	}
-}
-
-int main(int argc, char **argv)
-{
-	net_init();
-	
-	while(argc)
-	{
-		if(strcmp(*argv, "-m") == 0)
-		{
-			argc--; argv++;
-			net_host_lookup(*argv, &master_servers[num_masters], NETTYPE_IPV4);
-			argc--; argv++;
-			master_servers[num_masters].port = atoi(*argv);
-			num_masters++;
-		}
-		else if(strcmp(*argv, "-p") == 0)
-		{
-			argc--; argv++;
-			player_names[num_players++] = *argv;
-			argc--; argv++;
-			player_scores[num_players] = atoi(*argv);
-		}
-		else if(strcmp(*argv, "-a") == 0)
-		{
-			argc--; argv++;
-			map = *argv;
-		}
-		else if(strcmp(*argv, "-x") == 0)
-		{
-			argc--; argv++;
-			max_players = atoi(*argv);
-		}
-		else if(strcmp(*argv, "-t") == 0)
-		{
-			argc--; argv++;
-			game_type = atoi(*argv);
-		}
-		else if(strcmp(*argv, "-g") == 0)
-		{
-			argc--; argv++;
-			progression = atoi(*argv);
-		}
-		else if(strcmp(*argv, "-f") == 0)
-		{
-			argc--; argv++;
-			flags = atoi(*argv);
-		}
-		else if(strcmp(*argv, "-n") == 0)
-		{
-			argc--; argv++;
-			server_name = *argv;
-		}
-		
-		argc--; argv++;
-	}
-	
-	build_infomessage();
-	return run();
-}
-
diff --git a/src/tools/fake_server.cpp b/src/tools/fake_server.cpp
new file mode 100644
index 00000000..b833c1b1
--- /dev/null
+++ b/src/tools/fake_server.cpp
@@ -0,0 +1,211 @@
+/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
+#include <stdlib.h> //rand
+#include <base/system.h>
+#include <engine/shared/config.h>
+#include <engine/shared/network.h>
+#include <mastersrv/mastersrv.h>
+
+CNetServer *pNet;
+
+int Progression = 50;
+int GameType = 0;
+int Flags = 0;
+
+const char *pVersion = "trunk";
+const char *pMap = "somemap";
+const char *pServerName = "unnamed server";
+
+NETADDR aMasterServers[16] = {{0,{0},0}};
+int NumMasters = 0;
+
+const char *PlayerNames[16] = {0};
+int PlayerScores[16] = {0};
+int NumPlayers = 0;
+int MaxPlayers = 0;
+
+char aInfoMsg[1024];
+int aInfoMsgSize;
+
+static void SendHeartBeats()
+{
+	static unsigned char aData[sizeof(SERVERBROWSE_HEARTBEAT) + 2];
+	CNetChunk Packet;
+	
+	mem_copy(aData, SERVERBROWSE_HEARTBEAT, sizeof(SERVERBROWSE_HEARTBEAT));
+	
+	Packet.m_ClientID = -1;
+	Packet.m_Flags = NETSENDFLAG_CONNLESS;
+	Packet.m_DataSize = sizeof(SERVERBROWSE_HEARTBEAT) + 2;
+	Packet.m_pData = &aData;
+
+	/* supply the set port that the master can use if it has problems */	
+	aData[sizeof(SERVERBROWSE_HEARTBEAT)] = 0;
+	aData[sizeof(SERVERBROWSE_HEARTBEAT)+1] = 0;
+	
+	for(int i = 0; i < NumMasters; i++)
+	{
+		Packet.m_Address = aMasterServers[i];
+		pNet->Send(&Packet);
+	}
+}
+
+static void WriteStr(const char *pStr)
+{
+	int l = str_length(pStr)+1;
+	mem_copy(&aInfoMsg[aInfoMsgSize], pStr, l);
+	aInfoMsgSize += l;
+}
+
+static void WriteInt(int i)
+{
+	char aBuf[64];
+	str_format(aBuf, sizeof(aBuf), "%d", i);
+	WriteStr(aBuf);
+}
+
+static void BuildInfoMsg()
+{
+	aInfoMsgSize = sizeof(SERVERBROWSE_OLD_INFO);
+	mem_copy(aInfoMsg, SERVERBROWSE_OLD_INFO, aInfoMsgSize);
+	
+	WriteStr(pVersion);
+	WriteStr(pServerName);
+	WriteStr(pMap);
+	WriteInt(GameType);
+	WriteInt(Flags);
+	WriteInt(Progression);
+	WriteInt(NumPlayers);
+	WriteInt(MaxPlayers);
+	
+	for(int i = 0; i < NumPlayers; i++)
+	{
+		WriteStr(PlayerNames[i]);
+		WriteInt(PlayerScores[i]);
+	}
+}
+
+static void SendServerInfo(NETADDR *pAddr)
+{
+	CNetChunk p;
+	p.m_ClientID = -1;
+	p.m_Address = *pAddr;
+	p.m_Flags = NETSENDFLAG_CONNLESS;
+	p.m_DataSize = aInfoMsgSize;
+	p.m_pData = aInfoMsg;
+	pNet->Send(&p);
+}
+
+static void SendFWCheckResponse(NETADDR *pAddr)
+{
+	CNetChunk p;
+	p.m_ClientID = -1;
+	p.m_Address = *pAddr;
+	p.m_Flags = NETSENDFLAG_CONNLESS;
+	p.m_DataSize = sizeof(SERVERBROWSE_FWRESPONSE);
+	p.m_pData = SERVERBROWSE_FWRESPONSE;
+	pNet->Send(&p);
+}
+
+static int Run()
+{
+	int64 NextHeartBeat = 0;
+	NETADDR BindAddr = {NETTYPE_IPV4, {0},0};
+	
+	if(!pNet->Open(BindAddr, 0, 0))
+		return 0;
+	
+	while(1)
+	{
+		CNetChunk p;
+		pNet->Update();
+		while(pNet->Recv(&p))
+		{
+			if(p.m_ClientID == -1)
+			{
+				if(p.m_DataSize == sizeof(SERVERBROWSE_OLD_GETINFO) &&
+					mem_comp(p.m_pData, SERVERBROWSE_OLD_GETINFO, sizeof(SERVERBROWSE_OLD_GETINFO)) == 0)
+				{
+					SendServerInfo(&p.m_Address);
+				}
+				else if(p.m_DataSize == sizeof(SERVERBROWSE_FWCHECK) &&
+					mem_comp(p.m_pData, SERVERBROWSE_FWCHECK, sizeof(SERVERBROWSE_FWCHECK)) == 0)
+				{
+					SendFWCheckResponse(&p.m_Address);
+				}
+			}
+		}
+		
+		/* send heartbeats if needed */
+		if(NextHeartBeat < time_get())
+		{
+			NextHeartBeat = time_get()+time_freq()*(15+(rand()%15));
+			SendHeartBeats();
+		}
+		
+		thread_sleep(100);
+	}
+}
+
+int main(int argc, char **argv)
+{
+	pNet = new CNetServer;
+	
+	while(argc)
+	{
+		// ?
+		/*if(str_comp(*argv, "-m") == 0)
+		{
+			argc--; argv++;
+			net_host_lookup(*argv, &aMasterServers[NumMasters], NETTYPE_IPV4);
+			argc--; argv++;
+			aMasterServers[NumMasters].port = str_toint(*argv);
+			NumMasters++;
+		}
+		else */if(str_comp(*argv, "-p") == 0)
+		{
+			argc--; argv++;
+			PlayerNames[NumPlayers++] = *argv;
+			argc--; argv++;
+			PlayerScores[NumPlayers] = str_toint(*argv);
+		}
+		else if(str_comp(*argv, "-a") == 0)
+		{
+			argc--; argv++;
+			pMap = *argv;
+		}
+		else if(str_comp(*argv, "-x") == 0)
+		{
+			argc--; argv++;
+			MaxPlayers = str_toint(*argv);
+		}
+		else if(str_comp(*argv, "-t") == 0)
+		{
+			argc--; argv++;
+			GameType = str_toint(*argv);
+		}
+		else if(str_comp(*argv, "-g") == 0)
+		{
+			argc--; argv++;
+			Progression = str_toint(*argv);
+		}
+		else if(str_comp(*argv, "-f") == 0)
+		{
+			argc--; argv++;
+			Flags = str_toint(*argv);
+		}
+		else if(str_comp(*argv, "-n") == 0)
+		{
+			argc--; argv++;
+			pServerName = *argv;
+		}
+		
+		argc--; argv++;
+	}
+	
+	BuildInfoMsg();
+	int RunReturn = Run();
+	
+	delete pNet;
+	return RunReturn;
+}
+
diff --git a/src/tools/map_resave.c b/src/tools/map_resave.c
deleted file mode 100644
index 37e00904..00000000
--- a/src/tools/map_resave.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
-#include <engine/e_datafile.h>
-
-int main(int argc, char **argv)
-{
-	int i, id, type, size;
-	void *ptr;
-	DATAFILE *df;
-	DATAFILE_OUT *df_out;
-
-	if(argc != 3)
-		return -1;
-
-	df = datafile_load(argv[1]);
-	df_out = datafile_create(argv[2]);
-
-	/* add all items */
-	for(i = 0; i < datafile_num_items(df); i++)
-	{
-		ptr = datafile_get_item(df, i, &type, &id);
-		size = datafile_get_itemsize(df, i);
-		datafile_add_item(df_out, type, id, size, ptr);
-	}
-
-	/* add all data */
-	for(i = 0; i < datafile_num_data(df); i++)
-	{
-		ptr = datafile_get_data(df, i);
-		size = datafile_get_datasize(df, i);
-		datafile_add_data(df_out, size, ptr);
-	}
-
-	datafile_unload(df);
-	datafile_finish(df_out);
-	return 0;
-}
diff --git a/src/tools/map_resave.cpp b/src/tools/map_resave.cpp
new file mode 100644
index 00000000..a6c55c43
--- /dev/null
+++ b/src/tools/map_resave.cpp
@@ -0,0 +1,44 @@
+// copyright (c) 2007 magnus auvinen, see licence.txt for more info
+#include <base/system.h>
+#include <engine/shared/datafile.h>
+#include <engine/storage.h>
+
+int main(int argc, const char **argv)
+{
+	IStorage *pStorage = CreateStorage("Teeworlds", argv[0]);
+	int Index, Id = 0, Type = 0, Size;
+	void *pPtr;
+	char aFileName[1024];
+	CDataFileReader DataFile;
+	CDataFileWriter df;
+
+	if(argc != 3)
+		return -1;
+
+	str_format(aFileName, sizeof(aFileName), "maps/%s", argv[2]);
+
+	if(!DataFile.Open(pStorage, argv[1]))
+		return -1;
+	if(!df.Open(pStorage, aFileName))
+		return -1;
+
+	// add all items
+	for(Index = 0; Index < DataFile.NumItems(); Index++)
+	{	
+		pPtr = DataFile.GetItem(Index, &Type, &Id);
+		Size = DataFile.GetItemSize(Index);
+		df.AddItem(Type, Id, Size, pPtr);
+	}
+
+	// add all data
+	for(Index = 0; Index < DataFile.NumData(); Index++)
+	{
+		pPtr = DataFile.GetData(Index);
+		Size = DataFile.GetDataSize(Index);
+		df.AddData(Size, pPtr);
+	}
+
+	DataFile.Close();
+	df.Finish();
+	return 0;
+}
diff --git a/src/tools/tileset_borderfix.c b/src/tools/tileset_borderfix.c
index 945f2832..90e512eb 100644
--- a/src/tools/tileset_borderfix.c
+++ b/src/tools/tileset_borderfix.c
@@ -1,6 +1,6 @@
 /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
 
-#include "../engine/external/pnglite/pnglite.c"
+#include "./engine/external/pnglite/pnglite.c"
 
 typedef struct pixel_t
 {