ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSVC/Flatline.c
(Generate patch)

Comparing Daodan/MSVC/Flatline.c (file contents):
Revision 572 by gumby, Sun Aug 29 19:13:47 2010 UTC vs.
Revision 573 by gumby, Thu Sep 9 09:27:04 2010 UTC

# Line 1 | Line 1
1   #include "Flatline.h"
2   #include "Oni_Character.h"
3   #include "Flatline_Server.h"
4 + #include "Flatline_Client.h"
5 + #include "Daodan_Utility.h"
6   //#include <sys/time.h>
7   #include <time.h>
8   uint32_t last1 = 0; uint32_t last2 = 0;
# Line 16 | Line 18 | const char * Rejection_Messages[][255] =
18  
19   #define BETTER_SYNC
20  
21 + void PlayerDisconnect( int Player )
22 + {
23 +        ONrGameState_DeleteCharacter(PlayerList[Player]->Chr);
24 +        memset(PlayerList[Player], 0, sizeof(player_info));
25 +        PlayerList[Player] = 0;
26 +        if(server_started)
27 +        {
28 +                FLsPublic_Event( EV_DISCONNECT, &Player );
29 +        }
30 + }
31 +
32   void DoRareSync( short Player, sockaddr_in * sender )
33   {
34          flatline_packet sync = {0};    
# Line 74 | Line 87 | bool FLrServer_PacketCallback(char* data
87                  
88                          //if(Players[i].ip == sender.sin_addr.S_un.S_addr) break; //needs to send an error message
89                          sender.sin_addr.S_un.S_addr = htonl(sender.sin_addr.S_un.S_addr);
90 <                        playah = FLrServer_AddPlayer(from,packet->connect_send.name, 0);
90 >                        playah = FLrServer_AddPlayer(from,packet->connect_send.name, 0, 0);
91                          DDrConsole_PrintF("%s connected from %s", packet->connect_send.name, inet_ntoa(sender.sin_addr ) );
92                          if(!((int)playah > -5 && (int)playah <= 0)) {
93                                  flatline_packet new_char = {0};
# Line 96 | Line 109 | bool FLrServer_PacketCallback(char* data
109                                  memset(Char, 0, sizeof(CharacterObject));
110                                  Char->Header.Type = 'CHAR';
111                                  Char->OSD.Options = chr_dontaim;
112 +                                //Build the NEWCHARACTERs for the new player
113                                  for(j = 0; j < max_connections; j++) {
114                                          if(PlayerList[j] != 0) {
115                                                  new_char.new_player.Playernumber = j;
# Line 200 | Line 214 | bool FLrServer_PacketCallback(char* data
214                  case RARE_SYNC_DATA_REQUEST:
215                          DoRareSync( packet->sync_request , &sender);
216                          break;
217 +                case NULL_PACKET:
218 +                        if(1)
219 +                        {
220 +                                int p;
221 +                                char arr[9999];
222 +                                for (p = 0; p < datalen; p++)
223 +                                {
224 +                                        sprintf(arr,"%x",((char*)&packet)[p]);
225 +                                }
226 +                                DDrStartupMessage(arr);
227 +                        }
228 +                        break;
229                  default:
230                          DDrConsole_PrintF("Warning, recieved badly formed packet!");
231                          break;
# Line 207 | Line 233 | bool FLrServer_PacketCallback(char* data
233          return true;
234   }
235  
236 + void* TSrScores = 0;
237 +
238 + void FLrInit_Scores()
239 + {
240 +        void* TSFFTahoma;
241 +        int returnval;
242 +
243 +        if(!TSrScores){
244 +                TMrInstance_GetDataPtr( 'TSFF', "Tahoma", &TSFFTahoma);
245 +                returnval = TSrContext_New( TSFFTahoma, 7, 1, 1,  0, &TSrScores);
246 +                TSrContext_SetShade(TSrScores, 0xFFFFFFFF);
247 +        }
248 +        return;
249 + }
250 +
251 + void FLrRun_Scores()
252 + {
253 +        if(TSrScores)
254 +        {
255 +                const int scores_top = 20;
256 +                const int scores_left = 15;
257 +                //Convert to grabbing the height directly plox
258 +                const int line_height = 15;
259 +                                                unsigned char alpha = 0xCC;
260 +                unsigned int z;
261 +                uint16_t point[2] = {scores_left,scores_top};
262 +                //TSrContext_DrawText(TSrScores, "Name HP/HP", 0xCC, 0, point);
263 +                point[0] += 20;
264 +                TSrContext_DrawText(TSrScores, "Name", alpha, 0, point);
265 +                point[0] += 100;
266 +                TSrContext_DrawText(TSrScores, "Dmg", alpha, 0, point);
267 +                point[0] += 30;
268 +                TSrContext_DrawText(TSrScores, "K", alpha, 0, point);
269 +                point[0] += 30;
270 +                TSrContext_DrawText(TSrScores, "D", alpha, 0, point);
271 +                point[0] += 30;
272 +                TSrContext_DrawText(TSrScores, "Health", alpha, 0, point);
273 +                point[0] = scores_left;
274 +
275 +                point[1] += line_height;
276 +                for(z = 0; z < MAX_CONNECTIONS; z++)
277 +                {
278 +                        if(PlayerList[z])
279 +                        {
280 +
281 +                                char tempString[32];
282 +
283 +                                sprintf(tempString, "%i", z);
284 +                                TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
285 +                                point[0] += 20;
286 +                                
287 +
288 +                                TSrContext_DrawText(TSrScores, PlayerList[z]->Chr->Name, alpha, 0, point);
289 +                                point[0] += 100;
290 +
291 +                                sprintf(tempString, "%i", PlayerList[z]->Chr->Damage);
292 +                                TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
293 +                                point[0] += 30;
294 +                                sprintf(tempString, "%i", PlayerList[z]->Chr->Kills);
295 +                                TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
296 +                                point[0] += 30;
297 +                                sprintf(tempString, "%i", PlayerList[z]->player_data.Deaths);
298 +                                TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
299 +                                point[0] += 30;
300 +                                if(PlayerList[z]->Chr->Health)
301 +                                {
302 +                                        sprintf(tempString, "%i", PlayerList[z]->Chr->Health);
303 +                                        TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
304 +                                        point[0] += 25;
305 +                                        sprintf(tempString, "/%i", PlayerList[z]->Chr->MaxHealth);
306 +                                        TSrContext_DrawText(TSrScores, tempString, alpha, 0, point);
307 +                                }
308 +                                else
309 +                                {
310 +                                        TSrContext_SetShade(TSrScores, 0x00FF0000);
311 +                                        TSrContext_DrawText(TSrScores, "DEAD", alpha, 0, point);
312 +                                        TSrContext_SetShade(TSrScores, 0xFFFFFFFF);
313 +                                }
314 +                                point[0] = scores_left;
315 +                                point[1] += line_height;
316 +                        }
317 +                }
318 +        }
319 + }
320 +
321   bool FLrServer_Run()
322   {
323          // Get the local hostname
324          char szHostName[255];
325                  struct hostent *host_entry;
326          gethostname(szHostName, 255);
327 <
327 >        FLrInit_Scores();
328          host_entry=gethostbyname(szHostName);
329          DDrConsole_PrintF("Server started at %s...", inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list));
330          return NetUDPServer_Listen(27777, FLrServer_PacketCallback);
# Line 285 | Line 396 | bool FLrClient_Run(flatline_packet* pack
396          {
397                  ActiveCharacter * Active;
398                  flatline_packet packet;
399 +                        FLrInit_Scores();
400   //#define SPAM_INPUT
401   #ifdef SPAM_INPUT
402                  struct timeval lasttime;
# Line 328 | Line 440 | bool FLrClient_Run(flatline_packet* pack
440                  case MESSAGE:
441                          COrMessage_Print(packet.data, "chat", 0);
442                          break;
443 +                case NULL_PACKET:
444 +                        if(1)
445 +                        {
446 +                                int p;
447 +                                char arr[9999];
448 +                                for (p = 0; p < len; p++)
449 +                                {
450 +                                        sprintf(arr,"%x",((char*)&packet)[p]);
451 +                                }
452 +                                DDrStartupMessage(arr);
453 +                        }
454 +                        break;
455                  case CONNECT_SEND:
456                          ;if(1) {
457                                  flatline_packet connect_recv;
# Line 339 | Line 463 | bool FLrClient_Run(flatline_packet* pack
463                  case NEW_PLAYER:
464                          ;if(1) { //haxhaxhax
465                          CharacterObject* Char = &(packet.new_player.Character);
466 <                        uint32_t chr_index = 0;
466 >                        uint32_t chr_index = packet.new_player.Playernumber;
467                          Character* PC;
468                          DDrConsole_PrintF("%i |  %i", packet.new_player.Playernumber ,client_slot);
469                          //Char->OSD.Options = 0;
# Line 351 | Line 475 | bool FLrClient_Run(flatline_packet* pack
475                          }
476                          else {
477                                  ONrGameState_NewCharacter(Char, NULL, NULL, &chr_index);
478 <                                ONgGameState->CharacterStorage[chr_index].field_1E8 = 0;
478 >                                ONgGameState->CharacterStorage[chr_index].charType = 0;
479                                  PlayerList[packet.new_player.Playernumber] = &Players[chr_index];
480                                  Players[chr_index].Chr = &(ONgGameState->CharacterStorage[chr_index]);
481                                  Players[chr_index].Chr->Flags &= 0xFFBFFFFF;
482 +                                Players[chr_index].Chr->MaxHealth = 200;
483                                  Players[chr_index].spawnnumber = chr_index;
484                                  DDrConsole_PrintF("Spawning player %s, class %s, slot  %i", ((new_player*)(packet.data))->Character.OSD.Name, ((new_player*)(packet.data))->Character.OSD.Class,chr_index) ;
485                          }
# Line 403 | Line 528 | bool FLrClient_Run(flatline_packet* pack
528                                          flatline_packet sync_request = {0};
529                                          sync_request.id = RARE_SYNC_DATA_REQUEST;
530                                          sync_request.sync_request = i;
531 <                                        DDrConsole_PrintF( "Requesting sync data for player %i, old index %u", i, PlayerList[i]->rare_sync_index);
531 >                                        //DDrConsole_PrintF( "Requesting sync data for player %i, old index %u, new index %i", i, PlayerList[i]->rare_sync_index, data->rare_sync_index);
532                                          sent_bytes = NetUDPSocket_Send(client_sock,(sockaddr *) &address, (char*)&sync_request, FLATLINE_HEADER + sizeof(int) );
533                          }
534  
# Line 470 | Line 595 | bool FLrClient_Run(flatline_packet* pack
595                          PlayerList[i]->rare_sync_index = packet.rare_sync_data.index;
596                          }
597                          break;
598 <                        
598 >                case FLATLINE_EVENT:
599 >                        FLcEvent_Handler(packet.flatline_event.event_index, packet.flatline_event.intArray);
600                  default:
601                          DDrConsole_PrintF("Warning, recieved badly formed packet!");
602                          break;
# Line 505 | Line 631 | uint16_t FLr_FindEmptyListSlot() {
631          }
632          return -1;
633   }
634 <        typedef struct
635 <        {
636 <                uint16_t x;
637 <                uint16_t y;
638 <                
634 >        typedef struct
635 >        {
636 >                uint16_t x;
637 >                uint16_t y;
638 >                
639          } IMtPoint2D;
640   static flatline_packet cache_input = {0};
641   extern void* TSrTest;
642 +
643 + void ONrCharacter_SetAnimationInternal(Character *ioCharacter, ActiveCharacter *ioActiveCharacter,
644 +                                                                           short inFromState, short inNextAnimType, const void *inAnimation)
645 + {
646 +        void            *characterClass = ioCharacter->ONCC;
647 +        //void  *collection = ioCharacter->characterClass;
648 +        short index = ioCharacter->Number;//ONrCharacter_GetIndex(ioCharacter);
649 +        short animType;
650 +        if(inAnimation == NULL) return;
651 +        //UUmAssert(NULL != inAnimation);
652 +        
653 +        animType = *((char*)inAnimation  + 0x15A);
654 +        
655 +        ioActiveCharacter->Animation = inAnimation;
656 +        ioActiveCharacter->Frame = 0;
657 +        ioActiveCharacter->AnimationFromState = inFromState;
658 +        ioActiveCharacter->AnimationType = animType;
659 +        ioActiveCharacter->NextAnimationType = inNextAnimType;
660 +        ioActiveCharacter->AnimationToState = TRrAnimation_GetTo((void *)inAnimation);
661 +
662 +        //UUmAssertTrigRange(ioCharacter->facing);
663 +
664 + /*      if (gDebugCharacters && (index == gDebugCharacterTarget)) {
665 +                COrConsole_Printf("anim %s state %s type %s length %d",
666 +                        TRrAnimation_GetName(inAnimation),
667 +                        ONrAnimStateToString(TRrAnimation_GetTo(inAnimation)),  
668 +                        ONrAnimTypeToString(TRrAnimation_GetType(inAnimation)),
669 +                        TRrAnimation_GetDuration(inAnimation));
670 +        }*/
671 +
672 +        return;
673 + }
674 +
675 + char ONrAnimState_IsFallen(short inAnimState)
676 + {
677 +        char result = false;
678 +
679 +        switch(inAnimState)
680 +        {
681 +        case 18://ONcAnimState_Fallen_Back:
682 +        case 50://ONcAnimState_Fallen_Front:
683 +                        result = true;
684 +                break;
685 +        }
686 +
687 +        return result;
688 + }
689 +
690 + void FLrRespawn(int i)
691 + {
692 +        DDrConsole_Print( "Respawn!");
693 +        ONrCorpse_Create(PlayerList[i]->Chr);
694 +        ONrCharacter_SetHitPoints( PlayerList[i]->Chr, PlayerList[i]->Chr->MaxHealth);
695 + }
696   void * ONICALL FLrInput_Update_Keys(void)
697   {
698          uint16_t i;
# Line 524 | Line 704 | void * ONICALL FLrInput_Update_Keys(void
704                  );
705          */      
706          ActiveCharacter * Active_Player = ONgGameState->ActiveCharacters;
707 <        Active_Player->PhyContext->Rotation;
708 <        Active_Player->PhyContext->Position;
709 <        ONgGameState->PlayerCharacter->Position;
707 >        //Active_Player->PhyContext->Rotation;
708 >        //Active_Player->PhyContext->Position;
709 >        //ONgGameState->PlayerCharacter->Position;
710  
711  
712          
# Line 563 | Line 743 | void * ONICALL FLrInput_Update_Keys(void
743                  //return ONgGameState;
744          }
745   #endif
746 <        //Testing drawing text to the screen...this failed. Will need to get it working eventually.
567 <        if( TSrTest )
568 <        {
569 < //              OniRectangle TextRect = { 128, 128, 256, 256 };
570 <                IMtPoint2D Point = {50, 50};
571 <                //TSrContext_DrawText(TSrTest, "Testing woohoo", 255, 0, &Point);
572 <                TSrContext_DrawText(TSrTest, "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", 255, 0, &Point);    
573 <                
574 <        }
746 >
747          if(!(server_started || client_connected)) return ONgGameState;
748  
749          for(i = 0; i < max_connections; i++) {
750                  ActiveCharacter * Active_Player;
751                  GameInput * Active_Input;
752                  if(PlayerList[i] == 0) continue;
753 <                
754 <                //is this right?
755 <                Active_Player = (void*)ONrGetActiveCharacter( PlayerList[i]->Chr);
756 <        
757 <                if(Active_Player == 0) continue;
758 <                Active_Input = &(Active_Player->Input);
759 <                if(server_started) {
760 <                        player_data * data;
761 <                        flatline_packet data_out = {0};
762 <
763 <                        //if( PlayerList[i]->Chr->Health == 0) PlayerList[i]->Chr->Health = PlayerList[i]->Chr->MaxHealth;
764 <
765 <                        data_out.id = PLAYER_DATA;
766 <                        data = (void*)&(data_out.data);
767 <                        data->PlayerNum = i;
596 <                        data->Health = PlayerList[i]->Chr->Health;
597 <                        data->MaxHealth = PlayerList[i]->Chr->MaxHealth;
598 <                        data->Position = PlayerList[i]->Chr->Position;
599 <                        data->Location = PlayerList[i]->Chr->Location;
600 <                        data->LastPosition = PlayerList[i]->Chr->LastPosition;
601 <                        data->Facing = PlayerList[i]->Chr->Facing;
602 <                        data->DesiredFacing = PlayerList[i]->Chr->DesiredFacing;
603 <                        data->CosmeticFacing = PlayerList[i]->Chr->CosmeticFacing;
604 <
605 <
606 <                        data->Position = Active_Player->PhyContext->Position;
607 <                        
608 <                        if( PlayerList[i]->OldClass != PlayerList[i]->Chr->ONCC || memcmp( &(PlayerList[i]->Inventory), &(PlayerList[i]->Chr->Inventory), sizeof(Inventory) ) )
753 >                if( !PlayerList[i]->Chr || (PlayerList[i]->flags == PF_SCRIPTEDAI && PlayerList[i]->Chr->Flags & ONcCharacterFlag_Dead ) )
754 >                {
755 >                        PlayerDisconnect(i);
756 >                        continue;
757 >                }
758 >                PlayerList[i]->Chr->Inventory.Weapons[0] = 0;
759 >                PlayerList[i]->Chr->Inventory.Weapons[1] = 0;
760 >                PlayerList[i]->Chr->Inventory.Weapons[2] = 0;
761 >                if( !client_connected && PlayerList[i]->Chr->Flags & ONcCharacterFlag_Dead )//dead
762 >                {
763 >                        char doRespawn = false;
764 >                        uint32_t Actions1Bitmask = Action_Punch | Action_Kick;
765 >                        uint32_t Actions2Bitmask = Action2_Fire1 | Action2_Fire2;
766 >                        if(client_connected) continue;
767 >                        if(PlayerList[i]->state == STATE_ALIVE)
768                          {
769 <                                PlayerList[i]->OldClass = PlayerList[i]->Chr->ONCC;
770 <                                memcpy( &(PlayerList[i]->Inventory), &(PlayerList[i]->Chr->Inventory), sizeof(Inventory) );
612 <                                PlayerList[i]->rare_sync_index++;
613 <
769 >                                PlayerList[i]->state = STATE_DEAD;
770 >                                PlayerList[i]->player_data.Deaths++;
771                          }
772 <                        
773 <                        data->rare_sync_index = PlayerList[i]->rare_sync_index;
774 <                        
775 < #if 0
776 <                        data->Frame = Active_Player->Frame;    
620 <                        memcpy(data->Animation, TMrInstance_GetInstanceName(Active_Player->Animation), 32);
621 <                        data->AnimationToState = Active_Player->AnimationToState;
622 <                        data->AnimationFromState = Active_Player->AnimationFromState;
623 <                        data->AnimationType = Active_Player->AnimationType;
624 <                        data->NextAnimationType = Active_Player->NextAnimationType;
625 <                        data->InterpolationCurrentFrame = Active_Player->InterpolationCurrentFrame;
626 <                        data->InterpolationFromState = Active_Player->InterpolationFromState;
627 <                        data->InterpolationLength = Active_Player->InterpolationLength;
628 <                        memcpy(data->InterpolationStartRotations, Active_Player->InterpolationStartRotations,
629 <                                sizeof(Quaternion) * 19);
630 <                        //                      data->InterpolationStartRotations = Active_Player->InterpolationStartRotations;
631 <                        memcpy(data->BoneMatrices, Active_Player->BoneMatrices,
632 <                                sizeof(Quaternion) * 19);
633 <                        data->Stitch = Active_Player->Stitch;
634 <                        data->StitchHeight = Active_Player->StitchHeight;
635 <                        data->StitchVelocity = Active_Player->StitchVelocity;
636 <                        
637 <                        data->Overlay = Active_Player->Overlay;
638 <                        memcpy( data->OverlayRotations, Active_Player->OverlayRotations
639 <                                ,sizeof(Quaternion) * 19);
640 < #endif
641 <                        if(i == 0) {
642 <                                data->Inputs.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
643 <                                data->Inputs.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
644 <                                data->Inputs.MouseDeltaX = ONgGameState->Input.MouseDeltaX;
645 <                                data->Inputs.MouseDeltaY = ONgGameState->Input.MouseDeltaY;
646 <                        }
647 <                        else{
648 <                                data->Inputs.Actions1 = PlayerList[i]->Actions1;
649 <                                data->Inputs.Actions2 = PlayerList[i]->Actions2;
650 <                                data->Inputs.MouseDeltaX = PlayerList[i]->MouseDeltaX;
651 <                                data->Inputs.MouseDeltaY = PlayerList[i]->MouseDeltaY;
772 >                        if((i == 0 && ( ONgGameState->Input.Current.Actions1 & Actions1Bitmask || ONgGameState->Input.Current.Actions2 & Actions2Bitmask ))
773 >                                || (PlayerList[i]->Actions1 & Actions1Bitmask) || (PlayerList[i]->Actions2 & Actions2Bitmask) )
774 >                        {
775 >                                FLrRespawn(i);
776 >                                PlayerList[i]->state = STATE_ALIVE;
777                          }
778 <                        memcpy( &(PlayerList[i]->player_data), data, sizeof(player_data) );
654 <                        
655 <                        UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER);
778 >                        continue;
779                  }
780 <                
780 >                else
781 >                {
782 >                        Active_Player = (void*)ONrGetActiveCharacter( PlayerList[i]->Chr);
783 >                //      if(Active_Player == 0) continue;
784 >                        //Active_Input = &(Active_Player->Input);
785 >                        if(server_started) {
786 >                                player_data * data;
787 >                                flatline_packet data_out = {0};
788 >
789 >                                //if( PlayerList[i]->Chr->Health == 0) PlayerList[i]->Chr->Health = PlayerList[i]->Chr->MaxHealth;
790 >
791 >                                data_out.id = PLAYER_DATA;
792 >                                data = (void*)&(data_out.data);
793 >                                data->Deaths = PlayerList[i]->player_data.Deaths;
794 >                                data->PlayerNum = i;
795 >                                data->Kills = PlayerList[i]->Chr->Kills;
796 >                                data->Damage = PlayerList[i]->Chr->Damage;
797 >                                data->Health = PlayerList[i]->Chr->Health;
798 >                                data->MaxHealth = PlayerList[i]->Chr->MaxHealth;
799 >                                data->Facing = PlayerList[i]->Chr->Facing;
800 >                                data->DesiredFacing = PlayerList[i]->Chr->DesiredFacing;
801 >                                if(Active_Player && Active_Player->PhyContext)
802 >                                        data->Position = Active_Player->PhyContext->Position;
803 >
804 >                                if( PlayerList[i]->OldClass != PlayerList[i]->Chr->ONCC || memcmp( &(PlayerList[i]->Inventory), &(PlayerList[i]->Chr->Inventory), sizeof(Inventory) ) )
805 >                                {
806 >                                        PlayerList[i]->OldClass = PlayerList[i]->Chr->ONCC;
807 >                                        memcpy( &(PlayerList[i]->Inventory), &(PlayerList[i]->Chr->Inventory), sizeof(Inventory) );
808 >                                        PlayerList[i]->rare_sync_index++;
809 >
810 >                                }
811 >                                data->rare_sync_index = PlayerList[i]->rare_sync_index;
812 >                                if(Active_Player)
813 >                                {
814 >                                        data->Frame = Active_Player->Frame;    
815 >                                        memcpy(data->Animation, TMrInstance_GetInstanceName(Active_Player->Animation), 32);
816 >
817 >                                        if(Active_Player->targetThrow)
818 >                                        {
819 >                                                ActiveCharacter* Target = ONrGetActiveCharacter(Active_Player->ThrowTargetCharacter);
820 >                                                if(Target)
821 >                                                {
822 >                                                        data->throw_data.throwing = Players[Active_Player->throwing].list_slot;
823 >                                                        data->throw_data.throwFrame = Target->Frame;
824 >                                                        strcpy_s(data->throw_data.throwName, 32, TMrInstance_GetInstanceName(Active_Player->targetThrow));
825 >                                                }
826 >                                        }
827 >                                }
828 >                                if(i == 0) {
829 >                                        data->Inputs.Actions1 = ((GameState*)(ONgGameState))->Input.Current.Actions1;
830 >                                        data->Inputs.Actions2 = ((GameState*)(ONgGameState))->Input.Current.Actions2;
831 >                                        data->Inputs.MouseDeltaX = ONgGameState->Input.MouseDeltaX;
832 >                                        data->Inputs.MouseDeltaY = ONgGameState->Input.MouseDeltaY;
833 >                                }
834 >                                else{
835 >                                        data->Inputs.Actions1 = PlayerList[i]->Actions1;
836 >                                        data->Inputs.Actions2 = PlayerList[i]->Actions2;
837 >                                        data->Inputs.MouseDeltaX = PlayerList[i]->MouseDeltaX;
838 >                                        data->Inputs.MouseDeltaY = PlayerList[i]->MouseDeltaY;
839 >                                }
840 >                                memcpy( &(PlayerList[i]->player_data), data, sizeof(player_data) );
841 >
842 >                                UDPServer_SendToAll(&data_out, sizeof(player_data) + FLATLINE_HEADER);
843 >                        }
844 >                }
845 >                if(Active_Player == 0) continue;
846 >                else Active_Input = &(Active_Player->Input);
847                  if( (server_started && i !=0)  || (!server_started/* && i != client_slot*/) )
848                  {
660                        //this just made sync even worse...
661 #ifdef JITTER_FIX
662                        input_struct * New_Input = &PlayerList[i]->MouseDeltaX;
663                        input_struct * Cache_Input = &PlayerList[i]->CacheInput;
664                        Active_Input->Stop.Actions1 = ~Cache_Input->Actions1 & Active_Input->Current.Actions1;
665                        Active_Input->Stop.Actions2 = ~Cache_Input->Actions2 & Active_Input->Current.Actions2;
666                        Active_Input->Start.Actions1 = ~Active_Input->Current.Actions1 & Cache_Input->Actions1;
667                        Active_Input->Start.Actions2 = ~Active_Input->Current.Actions2 & Cache_Input->Actions2;
668                        Active_Input->Current.Actions1 = Cache_Input->Actions1;
669                        Active_Input->Current.Actions2 = Cache_Input->Actions2;
670                        Active_Input->Stopped.Actions1 = ~Active_Input->Current.Actions1;
671                        Active_Input->Stopped.Actions2 = ~Active_Input->Current.Actions2;
672                        Active_Input->MouseDeltaX = Cache_Input->MouseDeltaX;
673                        Active_Input->MouseDeltaY = Cache_Input->MouseDeltaY;
674                        memcpy( Cache_Input, New_Input, sizeof(input_struct));
675 #else
676        
849                          Active_Input->Stop.Actions1 = ~PlayerList[i]->Actions1 & Active_Input->Current.Actions1;
850                          Active_Input->Stop.Actions2 = ~PlayerList[i]->Actions2 & Active_Input->Current.Actions2;
851                          Active_Input->Start.Actions1 = ~Active_Input->Current.Actions1 & PlayerList[i]->Actions1;
# Line 698 | Line 870 | void * ONICALL FLrInput_Update_Keys(void
870                  );
871                  */
872                          
873 <                
874 < #endif
873 >                        if( !server_started )
874 >                        {
875 >                                if(PlayerList[i]->player_data.Health != 0)
876 >                                {
877 >                                        Character* character = PlayerList[i]->Chr;
878 >                                        void* animation;
879 >                                        void* prev_character_animation = Active_Player->Animation;
880 >                                        int error;
881 >                                        td* throw_data= &PlayerList[i]->player_data.throw_data;
882 >
883 >                                        if(PlayerList[i]->Chr->Flags & ONcCharacterFlag_Dead)
884 >                                        {
885 >                                                FLrRespawn(i);
886 >                                        }
887  
888 < #ifdef BETTER_SYNC
889 <                        if( !server_started && PlayerList[i]->player_data.Health != 0) {
890 <                                PlayerList[i]->Chr->Health = PlayerList[i]->player_data.Health;
891 <                                PlayerList[i]->Chr->MaxHealth = PlayerList[i]->player_data.MaxHealth;
892 <                                PlayerList[i]->Chr->Position = PlayerList[i]->player_data.Position;
893 <                                PlayerList[i]->Chr->Location = PlayerList[i]->player_data.Location;
894 <                                PlayerList[i]->Chr->LastPosition = PlayerList[i]->player_data.LastPosition;
895 <                                PlayerList[i]->Chr->Facing = PlayerList[i]->player_data.Facing;
896 <                                PlayerList[i]->Chr->DesiredFacing = PlayerList[i]->player_data.DesiredFacing;
897 <                                PlayerList[i]->Chr->CosmeticFacing = PlayerList[i]->player_data.CosmeticFacing;
898 <                                PlayerList[i]->Actions1 = PlayerList[i]->player_data.Inputs.Actions1;
899 <                                PlayerList[i]->Actions2 = PlayerList[i]->player_data.Inputs.Actions2;
900 <                                PlayerList[i]->MouseDeltaX = PlayerList[i]->player_data.Inputs.MouseDeltaX;
901 <                                PlayerList[i]->MouseDeltaY = PlayerList[i]->player_data.Inputs.MouseDeltaY;
902 <                                Active_Player->PhyContext->Position = PlayerList[i]->player_data.Position;
903 <                        }
904 < #endif
888 >                                        PlayerList[i]->Chr->Health = PlayerList[i]->player_data.Health;
889 >                                        PlayerList[i]->Chr->MaxHealth = PlayerList[i]->player_data.MaxHealth;
890 >                                        PlayerList[i]->Chr->Facing = PlayerList[i]->player_data.Facing;
891 >                                        PlayerList[i]->Chr->DesiredFacing = PlayerList[i]->player_data.DesiredFacing;
892 >                                        PlayerList[i]->Actions1 = PlayerList[i]->player_data.Inputs.Actions1;
893 >                                        PlayerList[i]->Actions2 = PlayerList[i]->player_data.Inputs.Actions2;
894 >                                        PlayerList[i]->MouseDeltaX = PlayerList[i]->player_data.Inputs.MouseDeltaX;
895 >                                        PlayerList[i]->MouseDeltaY = PlayerList[i]->player_data.Inputs.MouseDeltaY;
896 >                                        PlayerList[i]->Chr->Damage = PlayerList[i]->player_data.Damage;
897 >                                        PlayerList[i]->Chr->Kills = PlayerList[i]->player_data.Kills;
898 >                                        if(Active_Player->PhyContext)
899 >                                                Active_Player->PhyContext->Position = PlayerList[i]->player_data.Position;
900 >
901 >                                        if (!(character->Flags & ONcCharacterFlag_BeingThrown/*ONcCharacterFlag_BeingThrown*/) &&
902 >                                                (PlayerList[i]->player_data.Animation[0] != '\0'))
903 >                                        {
904 >                                                // get a pointer to the animation
905 >                                                error =
906 >                                                        TMrInstance_GetDataPtr(
907 >                                                        'TRAM',
908 >                                                        PlayerList[i]->player_data.Animation,
909 >                                                        &animation);
910 >                                                if (error == 0)
911 >                                                {
912 >                                                        short   num_frames;
913 >                                                        char            updateAnimation = true;
914 >
915 >                                                        // if the character is dead, make sure this animation is appropriate for death
916 >                                                        if (character->Flags & 0x00000001)
917 >                                                        {
918 >                                                                int curToState = TRrAnimation_GetTo(Active_Player->Animation);
919 >                                                                int newToState = TRrAnimation_GetTo(animation);
920 >
921 >                                                                // if we are currently heading towards fallen and the new animation would not
922 >                                                                // then this is a better animation to run when we are dead
923 >                                                                if ((ONrAnimState_IsFallen(curToState)) &&
924 >                                                                        (!ONrAnimState_IsFallen(newToState)))
925 >                                                                {
926 >                                                                        updateAnimation = false;
927 >                                                                }
928 >                                                        }
929 >
930 >                                                        if ((updateAnimation) && (Active_Player->Animation == animation))
931 >                                                        {
932 >                                                                int     oldFrame = Active_Player->Frame;
933 >                                                                int     newFrame = PlayerList[i]->player_data.Frame;
934 >
935 >                                                                if (abs(oldFrame - newFrame) < 2)
936 >                                                                {
937 >                                                                        updateAnimation = false;
938 >                                                                }
939 >                                                        }
940 >
941 >                                                        if (updateAnimation)
942 >                                                        {
943 >                                                                // set the characters animation
944 >                                                                ONrCharacter_SetAnimationInternal(
945 >                                                                        character, Active_Player,
946 >                                                                        TRrAnimation_GetFrom(Active_Player->Animation),
947 >                                                                        0,
948 >                                                                        animation);
949 >                                                                //PlayerList[i]->player_data.Animation[0] = 0;
950 >                                                        }
951 >
952 >                                                        num_frames = TRrAnimation_GetDuration(Active_Player->Animation);
953 >
954 >                                                        if (PlayerList[i]->player_data.Frame >= num_frames)
955 >                                                        {
956 >                                                                Active_Player->Frame = num_frames - 1;
957 >                                                        }
958 >                                                        else
959 >                                                        {
960 >                                                                Active_Player->Frame = PlayerList[i]->player_data.Frame ;
961 >                                                        }
962 >                                                }
963 >                                        }
964  
965 +                                        if (throw_data->throwName[0] && PlayerList[throw_data->throwing])
966 +                                        {
967 +                                                int realIndex = PlayerList[throw_data->throwing]->Chr->Number;
968 +                                                if ((throw_data->throwing != 0xFFFF) &&
969 +                                                        (realIndex != Active_Player->throwing) &&
970 +                                                        (throw_data->throwFrame < 10))
971 +                                                {
972 +                                                        void    *throw_animation;
973 +                                                        ActiveCharacter* Target;
974 +
975 +                                                        // get the animation
976 +                                                        error =
977 +                                                                TMrInstance_GetDataPtr(
978 +                                                                'TRAM',
979 +                                                                throw_data->throwName,
980 +                                                                &throw_animation);
981 +                                                        if (error != 0) return ONgGameState;
982 +
983 +                                                        // set the throw target
984 +                                                        Active_Player->ThrowTargetCharacter = &ONgGameState->CharacterStorage[realIndex];
985 +                                                        Target = ONrGetActiveCharacter(Active_Player->ThrowTargetCharacter);
986 +                                                        if(Target)
987 +                                                        {
988 +                                                                if ((Target->Animation != throw_animation) &&
989 +                                                                        (prev_character_animation != animation) &&
990 +                                                                        !(Active_Player->ThrowTargetCharacter->Flags & ONcCharacterFlag_BeingThrown))
991 +                                                                {
992 +                                                                        // set the throw variables
993 +                                                                        Active_Player->targetThrow      = throw_animation;
994 +                                                                        Active_Player->throwing         = realIndex;
995 +
996 +                                                                        // run the throw
997 +                                                                        ONrCharacter_NewAnimationHook(character, Active_Player);
998 +                                                                        if (Active_Player->ThrowTargetCharacter)
999 +                                                                        {
1000 +                                                                                Target->Frame += 2;
1001 +                                                                                Target->thrownBy = character->Number;
1002 +                                                                                DDrConsole_PrintF("Thrownby %i!!!!", Target->thrownBy);
1003 +                                                                                DDrStartupMessage("Thrownby %i!!!!", Target->thrownBy);
1004 +                                                                        }
1005 +                                                                }
1006 +                                                        }
1007 +                                                }
1008 +                                        }
1009 +                                }
1010 +
1011 +                        }
1012                  }
1013          }
1014  
1015          return ONgGameState;
1016 + }
1017 +
1018 + int EventPlusArgs[EV_MAX + 1][2] =
1019 + {
1020 +        {EV_RESPAWN,    1},
1021 +        {EV_DISCONNECT, 1},
1022 +        {EV_DOOR_OPEN,  1},
1023 +        {EV_MAX,                0},
1024 + };
1025 +
1026 + int FLrEvent_GetNumArgs( int eventIndex )
1027 + {
1028 +        return EventPlusArgs[1][eventIndex];
1029 +
1030 + }
1031 +
1032 + char * FLrHook_DoorOpen( DoorObject *inDoor, Character *Char)
1033 + {
1034 +        if(server_started)
1035 +        {
1036 +                FLsPublic_Event( EV_DOOR_OPEN, &inDoor->Door.ID );
1037 +        }
1038 +        return (inDoor->Door.class);
1039   }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)