Index: Daodan/src/Flatline.c
===================================================================
--- Daodan/src/Flatline.c	(revision 485)
+++ Daodan/src/Flatline.c	(revision 486)
@@ -289,6 +289,8 @@
 			uint16_t i = data->PlayerNum;
 			//DDrConsole_PrintF("Got data for Player %i, %x", i, PlayerList[i]);
-			if (!PlayerList[i] || i > max_connections) break;
-			PlayerList[i]->Chr = ((GameState *)ONgGameState)->CharacterStorage;
+			if (i > max_connections || PlayerList[i] == 0) break;
+			
+			//PlayerList[i]->Chr = ((GameState *)ONgGameState)->CharacterStorage;
+			
 			PlayerList[i]->Chr->Health = data->Health;
 			PlayerList[i]->Chr->MaxHealth = data->MaxHealth;
@@ -302,11 +304,21 @@
 			PlayerList[i]->Actions2 = data->Inputs.Actions2;
 			ActiveCharacter * Active = ((ActiveCharacter*)(ONrGetActiveCharacter(PlayerList[i]->Chr)));
-			
-			//needs special case for jumping\possibly falling characters
+			if(!Active) break;
+			
 			Active->PhyContext_->Position = data->Position;
 			
-			//antilag, lol.
-			if((int)*((char*)(Active + 0x1AF8) + 0x166) > data->Frame)
-			*(uint16_t *)((char*)Active + 0x1C88) = data->Frame;
+			/*
+			int ptr = 0;
+			(TMrInstance_GetDataPtr('TRAM',data->Animation,&ptr)); *(void**)((char*)Active + 0x1AF8) = ptr;
+						
+			*(uint16_t *)((char*)Active + 0x1AFC) = data->AnimationToState;
+			*(uint16_t *)((char*)Active + 0x1AFE) = data->AnimationFromState; 
+			*(uint16_t *)((char*)Active + 0x1B00) = data->AnimationType;
+			*(uint16_t *)((char*)Active + 0x1B02) = data->NextAnimationType;
+			*(uint16_t *)((char*)Active + 0x1B04) = data->AnimationType2;
+			*/
+			if((int)*((char*)(Active + 0x1AF8) + 0x166) > data->Frame + 1)
+			*(uint16_t *)((char*)Active + 0x1C88) = data->Frame + 1;
+				
 			break;
 		default:
@@ -378,12 +390,13 @@
 	}
 #endif
-	if(!server_started) return ONgGameState;
+	if(!(server_started || client_connected)) return ONgGameState;
 	uint16_t i;
 	for(i = 0; i < max_connections; i++) {
-		if(!PlayerList[i]) continue;
+		if(PlayerList[i] == 0) continue;
 		char * Active_Player = (void*)ONrGetActiveCharacter(PlayerList[i]->Chr);
-		if(!Active_Player) return ONgGameState;
+		
+		if(Active_Player == 0) continue;
 		GameInput * Active_Input = (void*)( Active_Player + 0x2158);
-			
+		if(server_started) {
 			flatline_packet data_out = {0};
 			data_out.id = PLAYER_DATA;
@@ -399,8 +412,22 @@
 			data->CosmeticFacing = PlayerList[i]->Chr->CosmeticFacing;
 			data->Frame = *(Active_Player + 0x1C88);
-			data->Inputs.Actions1 = PlayerList[i]->Actions1;
-			data->Inputs.Actions2 = PlayerList[i]->Actions2;
-
-			if(!server_started || i != 0 ) {
+			memcpy(data->Animation, TMrInstance_GetInstanceName(*(void **)(Active_Player + 0x1AF8)), 32);
+			data->AnimationToState = *(uint16_t *)(Active_Player + 0x1AFC);
+			data->AnimationFromState = *(uint16_t *)(Active_Player + 0x1AFE);
+			data->AnimationType = *(uint16_t *)(Active_Player + 0x1B00);
+			data->NextAnimationType = *(uint16_t *)(Active_Player + 0x1B02);
+			data->AnimationType2= *(uint16_t *)(Active_Player + 0x1B04);
+			if(i == 0) {
+				data->Inputs.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
+				data->Inputs.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
+			}
+			else{
+				data->Inputs.Actions1 = PlayerList[i]->Actions1;
+				data->Inputs.Actions2 = PlayerList[i]->Actions2;
+			}
+			UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER);
+		}
+		
+		if( (server_started && i !=0) || (!server_started && i != client_slot)) {
 			Active_Input->Stop.Actions1 = ~PlayerList[i]->Actions1 & Active_Input->Current.Actions1;
 			Active_Input->Stop.Actions2 = ~PlayerList[i]->Actions2 & Active_Input->Current.Actions2;
@@ -413,6 +440,5 @@
 			Active_Input->MouseDeltaX = PlayerList[i]->MouseDeltaX;
 			Active_Input->MouseDeltaY = PlayerList[i]->MouseDeltaY;
-			UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER);
-			}
+		}
 	}
 	return ONgGameState;
Index: Daodan/src/Flatline.h
===================================================================
--- Daodan/src/Flatline.h	(revision 485)
+++ Daodan/src/Flatline.h	(revision 486)
@@ -115,4 +115,10 @@
 	input_struct Inputs;
 	uint16_t Frame;
+	char Animation[32];
+	uint16_t AnimationToState;
+	uint16_t AnimationFromState;
+	uint16_t AnimationType;
+	uint16_t NextAnimationType;
+	uint16_t AnimationType2;
 } player_data;
 
