Index: Daodan/MSVC/Flatline.c
===================================================================
--- Daodan/MSVC/Flatline.c	(revision 580)
+++ Daodan/MSVC/Flatline.c	(revision 581)
@@ -425,8 +425,8 @@
 						//PlayerList[i]->Chr = ((GameState *)ONgGameState)->CharacterStorage;
 
-						PlayerList[i]->Actions1 = pd->Inputs.Actions1;
+/*						PlayerList[i]->Actions1 = pd->Inputs.Actions1;
 						PlayerList[i]->Actions2 = pd->Inputs.Actions2;
 						PlayerList[i]->MouseDeltaX = pd->Inputs.MouseDeltaX;
-						PlayerList[i]->MouseDeltaY = pd->Inputs.MouseDeltaY;
+						PlayerList[i]->MouseDeltaY = pd->Inputs.MouseDeltaY;*/
 						memcpy( &(PlayerList[i]->player_data), pd, sizeof(player_data) );
 
@@ -484,6 +484,21 @@
 				case PK_PING:
 					packet.id = PK_PONG;
-
 					NetUDPSocket_Send(client_sock, (sockaddr *) &address, (char*)&packet, FLATLINE_HEADER + 4);		
+					break;
+				case PK_ALL_INPUT:
+					if(1)
+					{
+						int Player;
+						for(Player = 0; Player < MAX_CONNECTIONS; Player++)
+						{
+							if(PlayerList[Player])
+							{
+								PlayerList[Player]->Actions1 = packet.all_input[Player].Actions1;
+								PlayerList[Player]->Actions2 = packet.all_input[Player].Actions2;
+								PlayerList[Player]->MouseDeltaX = packet.all_input[Player].MouseDeltaX;
+								PlayerList[Player]->MouseDeltaY = packet.all_input[Player].MouseDeltaY;
+							}
+						}
+					}
 					break;
 				default:
@@ -532,5 +547,5 @@
 {
 	uint16_t i;
-
+	flatline_packet all_input = {0};
 	ActiveCharacter * Active_Player = ONgGameState->ActiveCharacters;
 	Active_Player->PhyContext->Rotation;
@@ -557,4 +572,6 @@
 	if(!(server_started || client_connected)) return ONgGameState;
 
+	all_input.id = PK_ALL_INPUT;
+
 	if(server_started && ONgGameState->GameTime % 120 == 0)
 	{
@@ -568,4 +585,17 @@
 		if(PlayerList[i] == 0) continue;
 
+
+		if(i == 0) {
+			all_input.all_input[i].Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
+			all_input.all_input[i].Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
+			all_input.all_input[i].MouseDeltaX = ONgGameState->Input.MouseDeltaX;
+			all_input.all_input[i].MouseDeltaY = ONgGameState->Input.MouseDeltaY;
+		}
+		else{
+			all_input.all_input[i].Actions1 = PlayerList[i]->Actions1;
+			all_input.all_input[i].Actions2 = PlayerList[i]->Actions2;
+			all_input.all_input[i].MouseDeltaX = PlayerList[i]->MouseDeltaX;
+			all_input.all_input[i].MouseDeltaY = PlayerList[i]->MouseDeltaY;
+		}
 
 		Player = PlayerList[i]->Chr;
@@ -614,11 +644,11 @@
 		if(Active_Player == 0) continue;
 		Active_Input = &(Active_Player->Input);
-		if(server_started) {
+
+		if(server_started && strcmp(PlayerList[i]->player_data.Animation, TMrInstance_GetInstanceName(Active_Player->Animation))) 
+		{
 			player_data * data;
 			flatline_packet data_out = {0};
 
-			if(!strcmp(PlayerList[i]->player_data.Animation, TMrInstance_GetInstanceName(Active_Player->Animation)))
-				continue;
-
+			
 			data_out.id = PLAYER_DATA;
 			data = (void*)&(data_out.data);
@@ -652,16 +682,4 @@
 
 
-			if(i == 0) {
-				data->Inputs.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
-				data->Inputs.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
-				data->Inputs.MouseDeltaX = ONgGameState->Input.MouseDeltaX;
-				data->Inputs.MouseDeltaY = ONgGameState->Input.MouseDeltaY;
-			}
-			else{
-				data->Inputs.Actions1 = PlayerList[i]->Actions1;
-				data->Inputs.Actions2 = PlayerList[i]->Actions2;
-				data->Inputs.MouseDeltaX = PlayerList[i]->MouseDeltaX;
-				data->Inputs.MouseDeltaY = PlayerList[i]->MouseDeltaY;
-			}
 			data->Ping = PlayerList[i]->Ping;
 			memcpy( &(PlayerList[i]->player_data), data, sizeof(player_data) );
@@ -690,6 +708,17 @@
 				player_data* pd = &PlayerList[i]->player_data;
 
-				if(PlayerList[i]->DataApplied) continue;
-
+
+				//Note to self: sort out which needs to be applied the first time and which the second.
+				switch(PlayerList[i]->DataApplied)
+				{
+				case 1:
+					PlayerList[i]->DataApplied = 2;
+					break;
+				case 0:
+					PlayerList[i]->DataApplied = 1;
+				case 2:
+					continue;
+				}
+				
 				Player->Health = PlayerList[i]->player_data.Health;
 				PlayerList[i]->Chr->MaxHealth = PlayerList[i]->player_data.MaxHealth;
@@ -698,8 +727,8 @@
 				PlayerList[i]->Chr->DesiredFacing = PlayerList[i]->player_data.DesiredFacing;
 
-				PlayerList[i]->Actions1 = PlayerList[i]->player_data.Inputs.Actions1;
+/*				PlayerList[i]->Actions1 = PlayerList[i]->player_data.Inputs.Actions1;
 				PlayerList[i]->Actions2 = PlayerList[i]->player_data.Inputs.Actions2;
 				PlayerList[i]->MouseDeltaX = PlayerList[i]->player_data.Inputs.MouseDeltaX;
-				PlayerList[i]->MouseDeltaY = PlayerList[i]->player_data.Inputs.MouseDeltaY;
+				PlayerList[i]->MouseDeltaY = PlayerList[i]->player_data.Inputs.MouseDeltaY;*/
 				Active_Player->PhyContext->Position = PlayerList[i]->player_data.Position;
 				OldAnimation = Active_Player->Animation;
@@ -757,4 +786,5 @@
 							//Player->Flags |= 0x00000010;
 							ONrCharacter_SetAnimationExternal(Player, TRrAnimation_GetFrom(Animation), Animation, 0);
+							//ONrCharacter_NewAnimationHook(Player, Active_Player);
 						}
 
@@ -811,8 +841,12 @@
 					}
 				}
-				PlayerList[i]->DataApplied = 1;
-
-			}
-		}
+
+			}
+		}
+
+	}
+	if(server_started)
+	{
+		UDPServer_SendToAll(&all_input, FLATLINE_HEADER + sizeof(player_input) * 32);
 	}
 
Index: Daodan/MSVC/Flatline.h
===================================================================
--- Daodan/MSVC/Flatline.h	(revision 580)
+++ Daodan/MSVC/Flatline.h	(revision 581)
@@ -121,5 +121,5 @@
 	uint32_t Health;
 	uint32_t MaxHealth;
-	input_struct Inputs;
+	//input_struct Inputs;
 	int rare_sync_index;
 	char Animation[32];
@@ -144,4 +144,11 @@
 	int intArray[];
 } flatline_event;
+
+typedef struct {
+	float MouseDeltaX;
+	float MouseDeltaY;
+	uint32_t Actions1;
+	uint32_t Actions2;
+} player_input;
 
 //used for storing data about each player
@@ -163,4 +170,5 @@
 		flatline_event	flatline_event;
 		uint32_t		ping;
+		player_input	all_input[32];
 	};
 } flatline_packet;
@@ -190,4 +198,5 @@
 	PK_PING,
 	PK_PONG,
+	PK_ALL_INPUT,
 };
 
