Index: Daodan/MSVC/Flatline.c
===================================================================
--- Daodan/MSVC/Flatline.c	(revision 584)
+++ Daodan/MSVC/Flatline.c	(revision 585)
@@ -4,4 +4,5 @@
 #include "Flatline_Server.h"
 #include "Flatline_Events.h"
+#include "Daodan_Utility.h"
 #include <Windows.h>
 //#include <sys/time.h>
@@ -295,8 +296,8 @@
 		input_packet.id = PLAYER_INPUT;
 		input_packet.input_struct.Time = ONgGameState->GameTime;
-		input_packet.input_struct.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
-		input_packet.input_struct.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
-		input_packet.input_struct.MouseDeltaX = ((GameState*)(ONgGameState))->Input.MouseDeltaX;
-		input_packet.input_struct.MouseDeltaY = ((GameState*)(ONgGameState))->Input.MouseDeltaY;
+		input_packet.input_struct.Actions1 = ONgGameState->Input.Current.Actions1;
+		input_packet.input_struct.Actions2 = ONgGameState->Input.Current.Actions2;
+		input_packet.input_struct.MouseDeltaX = ONgGameState->Input.MouseDeltaX;
+		input_packet.input_struct.MouseDeltaY = ONgGameState->Input.MouseDeltaY;
 
 		sent_bytes = NetUDPSocket_Send(client_sock,(sockaddr *) &address, (char*)&input_packet, sizeof(input_struct) + FLATLINE_HEADER);
@@ -331,4 +332,6 @@
 		if(PlayerList[i] == 0) continue;
 		
+
+
 		Player = PlayerList[i]->Chr;
 		Active_Player = ONrGetActiveCharacter( PlayerList[i]->Chr);
@@ -421,4 +424,10 @@
 		if(Active_Player == 0) continue;
 
+		
+		if(client_connected) {
+			Active_Player->PlayingFilm.Flags = 1;
+		}
+
+
 		if( client_connected && DoWeUpdateThis( PlayerList[i]->UpdateFlags, PFlag_Position) )
 		{
@@ -443,5 +452,7 @@
 				//TODO: Check age of animation
 				///////////////////////////////////
-
+				DDrConsole_PrintF("Changing animation from %s to %s", 
+					TMrInstance_GetInstanceName( Active_Player->Animation ),
+					TMrInstance_GetInstanceName( PlayerList[i]->Animation ) );
 				// set the characters animation
 				/*ONrCharacter_SetAnimationInternal(Player,
@@ -449,7 +460,7 @@
 				Active_Player->AnimationToState,
 				0,
-				Animation);*/
+				PlayerList[i]->Animation);*/
 				//ONrCharacter_NewAnimationHook(Player, Active_Player);
-				ONrCharacter_SetAnimationExternal(Player, TRrAnimation_GetFrom(PlayerList[i]->Animation), PlayerList[i]->Animation, 0);
+				ONrCharacter_SetAnimationExternal(Player, TRrAnimation_GetFrom(PlayerList[i]->Animation), PlayerList[i]->Animation, 1);
 				//ONrCharacter_NewAnimationHook(Player, Active_Player);
 			}
@@ -520,5 +531,7 @@
 						{
 							Target->Frame += 2;
-							Target->thrownBy = Player->Number;
+							DDrConsole_PrintF("Thrown by player %hi", Player->Number );
+							DDrStartupMessage("Thrown by player %hi", Player->Number );
+							Target->thrownBy = Player->Number & 0x00ff;
 						}
 					}
@@ -535,5 +548,4 @@
 		PlayerList[i]->UpdateFlags &= ~( 1 << PFlag_Throws );
 
-		//Active_Player->PlayingFilm.Flags = 1;
 		Active_Input = &(Active_Player->Input);
 
Index: Daodan/MSVC/Flatline_Client.c
===================================================================
--- Daodan/MSVC/Flatline_Client.c	(revision 584)
+++ Daodan/MSVC/Flatline_Client.c	(revision 585)
@@ -73,5 +73,5 @@
 
 
-					//DDrPatch_Byte(0x04ED6FB, 0xEB);
+					DDrPatch_Byte(0x04ED6FB, 0xEB);
 
 					//DDrConsole_PrintF("Slot %i",  ((connect_reply*)packet)->player_slot);
Index: Daodan/MSVC/Flatline_PacketBuilder.c
===================================================================
--- Daodan/MSVC/Flatline_PacketBuilder.c	(revision 584)
+++ Daodan/MSVC/Flatline_PacketBuilder.c	(revision 585)
@@ -32,5 +32,5 @@
 	{
 		memcpy( DataPointer, &PI->InputFromClient, sizeof(PlayerInput));
-		PI->InputFromClient = PI->Input;
+		PI->Input = PI->InputFromClient;
 
 		FLAG_AND_INCREMENT( PFlag_Input );
@@ -99,5 +99,5 @@
 	if(APlayer)
 	{
-		if( memcmp(&PI->Position, &APlayer->PhyContext->Position, sizeof(Vector3)) )
+		if( (APlayer->PhyContext) && memcmp(&PI->Position, &APlayer->PhyContext->Position, sizeof(Vector3)) )
 		{
 			Vector3* ptr = (Vector3*)DataPointer;
@@ -109,5 +109,5 @@
 		if(APlayer->Animation != PI->Animation)
 		{
-			sprintf_s( DataPointer, 32, "%s", TMrInstance_GetInstanceName( PI->Animation ) );
+			sprintf_s( DataPointer, 32, "%s", TMrInstance_GetInstanceName( APlayer->Animation ) );
 			PI->Animation = APlayer->Animation;
 			
@@ -137,5 +137,5 @@
 	}
 	
-	PD->Size = (char)DataPointer - (char)PD;
+	PD->Size = (uint32_t)DataPointer - (uint32_t)PD;
 
 	PI->UpdateFlags = PD->UpdateFlags;	
@@ -168,19 +168,23 @@
 			assert( BuildData[p].Size < 255 );
 			
-			//If we hit maximum size, send the packet and reset the buffer for a new one
-			if( BuildData[p].Size + PacketSize > max_packet_size )
+			if( BuildData[p].Size > 0 )
 			{
-				UDPServer_SendToAll(&OutputPacket, PacketSize + FLATLINE_HEADER);
-			
-				memset( OutputPacket.data, 0, PacketSize );
-				OutputPointer = OutputPacket.data;
-				PacketSize = 0;
+
+				//If we hit maximum size, send the packet and reset the buffer for a new one
+				if( BuildData[p].Size + PacketSize > max_packet_size )
+				{
+					UDPServer_SendToAll(&OutputPacket, PacketSize + FLATLINE_HEADER);
+
+					memset( OutputPacket.data, 0, PacketSize );
+					OutputPointer = OutputPacket.data;
+					PacketSize = 0;
+				}
+
+				//add to the packet
+				memcpy( OutputPointer, &BuildData[p], BuildData[p].Size );
+
+				OutputPointer += BuildData[p].Size;
+				PacketSize += BuildData[p].Size;
 			}
-			
-			//add to the packet
-			memcpy( OutputPointer, &BuildData[p], BuildData[p].Size );
-			
-			OutputPointer += BuildData[p].Size;
-			PacketSize += BuildData[p].Size;
 		}
 	}
