288 |
|
player_data * data = (void*)packet->data; |
289 |
|
uint16_t i = data->PlayerNum; |
290 |
|
//DDrConsole_PrintF("Got data for Player %i, %x", i, PlayerList[i]); |
291 |
< |
if (!PlayerList[i] || i > max_connections) break; |
292 |
< |
PlayerList[i]->Chr = ((GameState *)ONgGameState)->CharacterStorage; |
291 |
> |
if (i > max_connections || PlayerList[i] == 0) break; |
292 |
> |
|
293 |
> |
//PlayerList[i]->Chr = ((GameState *)ONgGameState)->CharacterStorage; |
294 |
> |
|
295 |
|
PlayerList[i]->Chr->Health = data->Health; |
296 |
|
PlayerList[i]->Chr->MaxHealth = data->MaxHealth; |
297 |
|
PlayerList[i]->Chr->Position = data->Position; |
303 |
|
PlayerList[i]->Actions1 = data->Inputs.Actions1; |
304 |
|
PlayerList[i]->Actions2 = data->Inputs.Actions2; |
305 |
|
ActiveCharacter * Active = ((ActiveCharacter*)(ONrGetActiveCharacter(PlayerList[i]->Chr))); |
306 |
+ |
if(!Active) break; |
307 |
|
|
305 |
– |
//needs special case for jumping\possibly falling characters |
308 |
|
Active->PhyContext_->Position = data->Position; |
309 |
|
|
310 |
< |
//antilag, lol. |
311 |
< |
if((int)*((char*)(Active + 0x1AF8) + 0x166) > data->Frame) |
312 |
< |
*(uint16_t *)((char*)Active + 0x1C88) = data->Frame; |
310 |
> |
/* |
311 |
> |
int ptr = 0; |
312 |
> |
(TMrInstance_GetDataPtr('TRAM',data->Animation,&ptr)); *(void**)((char*)Active + 0x1AF8) = ptr; |
313 |
> |
|
314 |
> |
*(uint16_t *)((char*)Active + 0x1AFC) = data->AnimationToState; |
315 |
> |
*(uint16_t *)((char*)Active + 0x1AFE) = data->AnimationFromState; |
316 |
> |
*(uint16_t *)((char*)Active + 0x1B00) = data->AnimationType; |
317 |
> |
*(uint16_t *)((char*)Active + 0x1B02) = data->NextAnimationType; |
318 |
> |
*(uint16_t *)((char*)Active + 0x1B04) = data->AnimationType2; |
319 |
> |
*/ |
320 |
> |
if((int)*((char*)(Active + 0x1AF8) + 0x166) > data->Frame + 1) |
321 |
> |
*(uint16_t *)((char*)Active + 0x1C88) = data->Frame + 1; |
322 |
> |
|
323 |
|
break; |
324 |
|
default: |
325 |
|
DDrConsole_PrintF("Warning, recieved badly formed packet!"); |
389 |
|
return ONgGameState; |
390 |
|
} |
391 |
|
#endif |
392 |
< |
if(!server_started) return ONgGameState; |
392 |
> |
if(!(server_started || client_connected)) return ONgGameState; |
393 |
|
uint16_t i; |
394 |
|
for(i = 0; i < max_connections; i++) { |
395 |
< |
if(!PlayerList[i]) continue; |
395 |
> |
if(PlayerList[i] == 0) continue; |
396 |
|
char * Active_Player = (void*)ONrGetActiveCharacter(PlayerList[i]->Chr); |
397 |
< |
if(!Active_Player) return ONgGameState; |
397 |
> |
|
398 |
> |
if(Active_Player == 0) continue; |
399 |
|
GameInput * Active_Input = (void*)( Active_Player + 0x2158); |
400 |
< |
|
400 |
> |
if(server_started) { |
401 |
|
flatline_packet data_out = {0}; |
402 |
|
data_out.id = PLAYER_DATA; |
403 |
|
player_data * data = (void*)&(data_out.data); |
411 |
|
data->DesiredFacing = PlayerList[i]->Chr->DesiredFacing; |
412 |
|
data->CosmeticFacing = PlayerList[i]->Chr->CosmeticFacing; |
413 |
|
data->Frame = *(Active_Player + 0x1C88); |
414 |
< |
data->Inputs.Actions1 = PlayerList[i]->Actions1; |
415 |
< |
data->Inputs.Actions2 = PlayerList[i]->Actions2; |
416 |
< |
|
417 |
< |
if(!server_started || i != 0 ) { |
414 |
> |
memcpy(data->Animation, TMrInstance_GetInstanceName(*(void **)(Active_Player + 0x1AF8)), 32); |
415 |
> |
data->AnimationToState = *(uint16_t *)(Active_Player + 0x1AFC); |
416 |
> |
data->AnimationFromState = *(uint16_t *)(Active_Player + 0x1AFE); |
417 |
> |
data->AnimationType = *(uint16_t *)(Active_Player + 0x1B00); |
418 |
> |
data->NextAnimationType = *(uint16_t *)(Active_Player + 0x1B02); |
419 |
> |
data->AnimationType2= *(uint16_t *)(Active_Player + 0x1B04); |
420 |
> |
if(i == 0) { |
421 |
> |
data->Inputs.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1; |
422 |
> |
data->Inputs.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2; |
423 |
> |
} |
424 |
> |
else{ |
425 |
> |
data->Inputs.Actions1 = PlayerList[i]->Actions1; |
426 |
> |
data->Inputs.Actions2 = PlayerList[i]->Actions2; |
427 |
> |
} |
428 |
> |
UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER); |
429 |
> |
} |
430 |
> |
|
431 |
> |
if( (server_started && i !=0) || (!server_started && i != client_slot)) { |
432 |
|
Active_Input->Stop.Actions1 = ~PlayerList[i]->Actions1 & Active_Input->Current.Actions1; |
433 |
|
Active_Input->Stop.Actions2 = ~PlayerList[i]->Actions2 & Active_Input->Current.Actions2; |
434 |
|
Active_Input->Start.Actions1 = ~Active_Input->Current.Actions1 & PlayerList[i]->Actions1; |
439 |
|
Active_Input->Stopped.Actions2 = ~Active_Input->Current.Actions2; |
440 |
|
Active_Input->MouseDeltaX = PlayerList[i]->MouseDeltaX; |
441 |
|
Active_Input->MouseDeltaY = PlayerList[i]->MouseDeltaY; |
442 |
< |
UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER); |
416 |
< |
} |
442 |
> |
} |
443 |
|
} |
444 |
|
return ONgGameState; |
445 |
|
} |