Rev 11 | Rev 20 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 11 | Rev 18 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | #include "network.h" |
1 | #include "network.h" |
| 2 | #include " |
2 | #include "brender.h" |
| 3 | #include "car.h" |
3 | #include "car.h" |
| 4 | #include "controls.h" |
4 | #include "controls.h" |
| 5 | #include "displays.h" |
5 | #include "displays.h" |
| 6 | #include "errors.h" |
6 | #include "errors.h" |
| 7 | #include "globvars.h" |
7 | #include "globvars.h" |
| Line 17... | Line 17... | ||
| 17 | #include "pd/net.h" |
17 | #include "pd/net.h" |
| 18 | #include "pd/sys.h" |
18 | #include "pd/sys.h" |
| 19 | #include "pedestrn.h" |
19 | #include "pedestrn.h" |
| 20 | #include "piping.h" |
20 | #include "piping.h" |
| 21 | #include "powerup.h" |
21 | #include "powerup.h" |
| - | 22 | #include "pratcam.h" |
|
| 22 | #include "replay.h" |
23 | #include "replay.h" |
| 23 | #include "spark.h" |
24 | #include "spark.h" |
| 24 | #include "structur.h" |
25 | #include "structur.h" |
| 25 | #include "utility.h" |
26 | #include "utility.h" |
| 26 | #include "world.h" |
27 | #include "world.h" |
| Line 158... | Line 159... | ||
| 158 | } |
159 | } |
| 159 | 160 | ||
| 160 | // IDA: void __cdecl HaltNetServiceReentrancy() |
161 | // IDA: void __cdecl HaltNetServiceReentrancy() |
| 161 | void HaltNetServiceReentrancy(void) { |
162 | void HaltNetServiceReentrancy(void) { |
| 162 | LOG_TRACE("()"); |
163 | LOG_TRACE("()"); |
| - | 164 | ||
| 163 |
|
165 | gIn_net_service = 1; |
| 164 | } |
166 | } |
| 165 | 167 | ||
| 166 | // IDA: void __usercall NetSendHeadupToAllPlayers(char *pMessage@<EAX>) |
168 | // IDA: void __usercall NetSendHeadupToAllPlayers(char *pMessage@<EAX>) |
| 167 | void NetSendHeadupToAllPlayers(char* pMessage) { |
169 | void NetSendHeadupToAllPlayers(char* pMessage) { |
| 168 | tNet_contents* the_contents; |
170 | tNet_contents* the_contents; |
| Line 174... | Line 176... | ||
| 174 | } |
176 | } |
| 175 | } |
177 | } |
| 176 | 178 | ||
| 177 | // IDA: void __usercall NetSendHeadupToEverybody(char *pMessage@<EAX>) |
179 | // IDA: void __usercall NetSendHeadupToEverybody(char *pMessage@<EAX>) |
| 178 | void NetSendHeadupToEverybody(char* pMessage) { |
180 | void NetSendHeadupToEverybody(char* pMessage) { |
| 179 |
|
181 | tNet_contents* the_contents; |
| 180 | LOG_TRACE("(\"%s\")", pMessage); |
182 | LOG_TRACE("(\"%s\")", pMessage); |
| - | 183 | ||
| - | 184 | if (gNet_mode == eNet_mode_none) { |
|
| 181 |
|
185 | return; |
| - | 186 | } |
|
| - | 187 | if (gProgram_state.racing) { |
|
| - | 188 | NewTextHeadupSlot(4, 0, 3000, -4, pMessage); |
|
| - | 189 | } |
|
| - | 190 | the_contents = NetGetBroadcastContents(NETMSGID_HEADUP, 0); |
|
| - | 191 | strcpy(the_contents->data.headup.text, pMessage); |
|
| 182 | } |
192 | } |
| 183 | 193 | ||
| 184 | // IDA: void __usercall NetSendHeadupToPlayer(char *pMessage@<EAX>, tPlayer_ID pPlayer@<EDX>) |
194 | // IDA: void __usercall NetSendHeadupToPlayer(char *pMessage@<EAX>, tPlayer_ID pPlayer@<EDX>) |
| 185 | void NetSendHeadupToPlayer(char* pMessage, tPlayer_ID pPlayer) { |
195 | void NetSendHeadupToPlayer(char* pMessage, tPlayer_ID pPlayer) { |
| 186 |
|
196 | tNet_message* message; |
| 187 | LOG_TRACE("(\"%s\", %d)", pMessage, pPlayer); |
197 | LOG_TRACE("(\"%s\", %d)", pMessage, pPlayer); |
| - | 198 | ||
| - | 199 | if (gNet_mode == eNet_mode_none) { |
|
| 188 |
|
200 | return; |
| - | 201 | } |
|
| - | 202 | if (gLocal_net_ID == pPlayer) { |
|
| - | 203 | if (gProgram_state.racing) { |
|
| - | 204 | NewTextHeadupSlot(4, 0, 3000, -4, pMessage); |
|
| - | 205 | } |
|
| - | 206 | } else { |
|
| - | 207 | message = NetBuildMessage(NETMSGID_HEADUP, 0); |
|
| - | 208 | strcpy(message->contents.data.headup.text, pMessage); |
|
| - | 209 | NetGuaranteedSendMessageToPlayer(gCurrent_net_game, message, pPlayer, 0); |
|
| - | 210 | } |
|
| 189 | } |
211 | } |
| 190 | 212 | ||
| 191 | // IDA: void __cdecl InitialisePlayerStati() |
213 | // IDA: void __cdecl InitialisePlayerStati() |
| 192 | void InitialisePlayerStati(void) { |
214 | void InitialisePlayerStati(void) { |
| 193 | int i; |
215 | int i; |
| Line 376... | Line 398... | ||
| 376 | } |
398 | } |
| 377 | 399 | ||
| 378 | // IDA: void __usercall NetDisposePlayer(tNet_game_player_info *pPlayer@<EAX>) |
400 | // IDA: void __usercall NetDisposePlayer(tNet_game_player_info *pPlayer@<EAX>) |
| 379 | void NetDisposePlayer(tNet_game_player_info* pPlayer) { |
401 | void NetDisposePlayer(tNet_game_player_info* pPlayer) { |
| 380 | LOG_TRACE("(%p)", pPlayer); |
402 | LOG_TRACE("(%p)", pPlayer); |
| - | 403 | ||
| 381 |
|
404 | PDNetDisposePlayer(pPlayer); |
| 382 | } |
405 | } |
| 383 | 406 | ||
| 384 | // IDA: void __usercall FillInThisPlayer(tNet_game_details *pGame@<EAX>, tNet_game_player_info *pPlayer@<EDX>, int pCar_index@<EBX>, int pHost@<ECX>) |
407 | // IDA: void __usercall FillInThisPlayer(tNet_game_details *pGame@<EAX>, tNet_game_player_info *pPlayer@<EDX>, int pCar_index@<EBX>, int pHost@<ECX>) |
| 385 | void FillInThisPlayer(tNet_game_details* pGame, tNet_game_player_info* pPlayer, int pCar_index, int pHost) { |
408 | void FillInThisPlayer(tNet_game_details* pGame, tNet_game_player_info* pPlayer, int pCar_index, int pHost) { |
| 386 | LOG_TRACE("(%p, %p, %d, %d)", pGame, pPlayer, pCar_index, pHost); |
409 | LOG_TRACE("(%p, %p, %d, %d)", pGame, pPlayer, pCar_index, pHost); |
| Line 458... | Line 481... | ||
| 458 | } |
481 | } |
| 459 | 482 | ||
| 460 | // IDA: void __usercall PlayerHasLeft(int pIndex@<EAX>) |
483 | // IDA: void __usercall PlayerHasLeft(int pIndex@<EAX>) |
| 461 | void PlayerHasLeft(int pIndex) { |
484 | void PlayerHasLeft(int pIndex) { |
| 462 | LOG_TRACE("(%d)", pIndex); |
485 | LOG_TRACE("(%d)", pIndex); |
| - | 486 | ||
| - | 487 | if (gCurrent_net_game->options.random_car_choice && (gCurrent_net_game->options.car_choice == eNet_car_all || gCurrent_net_game->options.car_choice == eNet_car_both)) { |
|
| - | 488 | if (gNet_players[pIndex].car_index >= 0) { |
|
| - | 489 | gCar_details[gNet_players[pIndex].car_index].ownership = eCar_owner_none; |
|
| - | 490 | } |
|
| - | 491 | if (gNet_players[pIndex].next_car_index >= 0) { |
|
| - | 492 | gCar_details[gNet_players[pIndex].next_car_index].ownership = eCar_owner_none; |
|
| 463 |
|
493 | } |
| - | 494 | } |
|
| 464 | } |
495 | } |
| 465 | 496 | ||
| 466 | // IDA: void __usercall NetPlayersChanged(int pNew_count@<EAX>, tNet_game_player_info *pNew_players@<EDX>) |
497 | // IDA: void __usercall NetPlayersChanged(int pNew_count@<EAX>, tNet_game_player_info *pNew_players@<EDX>) |
| 467 | void NetPlayersChanged(int pNew_count, tNet_game_player_info* pNew_players) { |
498 | void NetPlayersChanged(int pNew_count, tNet_game_player_info* pNew_players) { |
| 468 | int i; |
499 | int i; |
| Line 473... | Line 504... | ||
| 473 | int player_still_there; |
504 | int player_still_there; |
| 474 | tPlayer_ID old_fox_it; |
505 | tPlayer_ID old_fox_it; |
| 475 | LOG_TRACE("(%d, %p)", pNew_count, pNew_players); |
506 | LOG_TRACE("(%d, %p)", pNew_count, pNew_players); |
| 476 | 507 | ||
| 477 | if (gCurrent_net_game->type == eNet_game_type_tag || gCurrent_net_game->type == eNet_game_type_foxy) { |
508 | if (gCurrent_net_game->type == eNet_game_type_tag || gCurrent_net_game->type == eNet_game_type_foxy) { |
| - | 509 | #ifdef DETHRACE_FIX_BUGS |
|
| - | 510 | old_fox_it = -1; |
|
| - | 511 | if (gIt_or_fox >= 0) { |
|
| - | 512 | #endif |
|
| 478 | old_fox_it = gNet_players[gIt_or_fox].ID; |
513 | old_fox_it = gNet_players[gIt_or_fox].ID; |
| - | 514 | #ifdef DETHRACE_FIX_BUGS |
|
| - | 515 | } |
|
| - | 516 | #endif |
|
| 479 | } |
517 | } |
| 480 | for (i = 0; i < pNew_count; i++) { |
518 | for (i = 0; i < pNew_count; i++) { |
| 481 | new_player = 1; |
519 | new_player = 1; |
| 482 | for (j = 0; j < gNumber_of_net_players; j++) { |
520 | for (j = 0; j < gNumber_of_net_players; j++) { |
| 483 | if (pNew_players[i].ID == gNet_players[j].ID) { |
521 | if (pNew_players[i].ID == gNet_players[j].ID) { |
| Line 610... | Line 648... | ||
| 610 | } |
648 | } |
| 611 | 649 | ||
| 612 | // IDA: int __usercall NetInitClient@<EAX>(tNet_game_details *pDetails@<EAX>) |
650 | // IDA: int __usercall NetInitClient@<EAX>(tNet_game_details *pDetails@<EAX>) |
| 613 | int NetInitClient(tNet_game_details* pDetails) { |
651 | int NetInitClient(tNet_game_details* pDetails) { |
| 614 | LOG_TRACE("(%p)", pDetails); |
652 | LOG_TRACE("(%p)", pDetails); |
| - | 653 | ||
| 615 |
|
654 | return PDNetInitClient(pDetails); |
| 616 | } |
655 | } |
| 617 | 656 | ||
| 618 | // IDA: int __usercall NetJoinGameLowLevel@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>) |
657 | // IDA: int __usercall NetJoinGameLowLevel@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>) |
| 619 | int NetJoinGameLowLevel(tNet_game_details* pDetails, char* pPlayer_name) { |
658 | int NetJoinGameLowLevel(tNet_game_details* pDetails, char* pPlayer_name) { |
| 620 | LOG_TRACE("(%p, \"%s\")", pDetails, pPlayer_name); |
659 | LOG_TRACE("(%p, \"%s\")", pDetails, pPlayer_name); |
| 621 | 660 | ||
| 622 | return PDNetJoinGame(pDetails, pPlayer_name); |
661 | return PDNetJoinGame(pDetails, pPlayer_name); |
| 623 | } |
662 | } |
| - | 663 | ||
| - | 664 | DR_STATIC_ASSERT(offsetof(tNet_message_join, player_info) == 4); |
|
| - | 665 | DR_STATIC_ASSERT(offsetof(tNet_game_player_info, this_players_time_stamp) == 0x10); |
|
| - | 666 | DR_STATIC_ASSERT(offsetof(tNet_game_player_info, wasted) == 0x68); |
|
| - | 667 | DR_STATIC_ASSERT(offsetof(tNet_game_player_info, initial_position) == 0x8c); |
|
| - | 668 | DR_STATIC_ASSERT(offsetof(tNet_game_player_info, car) == 0xbc); |
|
| 624 | 669 | ||
| 625 | // IDA: int __usercall NetJoinGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>, int pCar_index@<EBX>) |
670 | // IDA: int __usercall NetJoinGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>, int pCar_index@<EBX>) |
| 626 | int NetJoinGame(tNet_game_details* pDetails, char* pPlayer_name, int pCar_index) { |
671 | int NetJoinGame(tNet_game_details* pDetails, char* pPlayer_name, int pCar_index) { |
| 627 | int result; |
672 | int result; |
| 628 | tNet_message* the_message; |
673 | tNet_message* the_message; |
| Line 714... | Line 759... | ||
| 714 | return PDNetSendMessageToAddress(pDetails, pMessage, pAddress); |
759 | return PDNetSendMessageToAddress(pDetails, pMessage, pAddress); |
| 715 | } |
760 | } |
| 716 | 761 | ||
| 717 | // IDA: int __usercall NetSendMessageToPlayer@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, tPlayer_ID pPlayer@<EBX>) |
762 | // IDA: int __usercall NetSendMessageToPlayer@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, tPlayer_ID pPlayer@<EBX>) |
| 718 | int NetSendMessageToPlayer(tNet_game_details* pDetails, tNet_message* pMessage, tPlayer_ID pPlayer) { |
763 | int NetSendMessageToPlayer(tNet_game_details* pDetails, tNet_message* pMessage, tPlayer_ID pPlayer) { |
| 719 |
|
764 | int i; |
| 720 | LOG_TRACE("(%p, %p, %d)", pDetails, pMessage, pPlayer); |
765 | LOG_TRACE("(%p, %p, %d)", pDetails, pMessage, pPlayer); |
| - | 766 | ||
| - | 767 | if (gNet_mode == eNet_mode_none) { |
|
| 721 |
|
768 | return -3; |
| - | 769 | } |
|
| - | 770 | pMessage->sender = gLocal_net_ID; |
|
| - | 771 | pMessage->senders_time_stamp = PDGetTotalTime(); |
|
| - | 772 | for (i = 0; i < gNumber_of_net_players; i++) { |
|
| - | 773 | if (gNet_players[i].ID == pPlayer) { |
|
| - | 774 | GetCheckSum(pMessage); |
|
| - | 775 | return PDNetSendMessageToAddress(pDetails, pMessage, &gNet_players[i]); |
|
| - | 776 | } |
|
| - | 777 | } |
|
| - | 778 | return -3; |
|
| 722 | } |
779 | } |
| 723 | 780 | ||
| 724 | // IDA: int __usercall NetSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>) |
781 | // IDA: int __usercall NetSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>) |
| 725 | int NetSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage) { |
782 | int NetSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage) { |
| 726 | LOG_TRACE("(%p, %p)", pDetails, pMessage); |
783 | LOG_TRACE("(%p, %p)", pDetails, pMessage); |
| - | 784 | ||
| - | 785 | if (gNet_mode == eNet_mode_none) { |
|
| - | 786 | return -3; |
|
| - | 787 | } |
|
| - | 788 | pMessage->sender = gLocal_net_ID; |
|
| - | 789 | pMessage->senders_time_stamp = PDGetTotalTime(); |
|
| 727 |
|
790 | DoCheckSum(pMessage); |
| - | 791 | return PDNetSendMessageToAddress(pDetails, pMessage, &pDetails->pd_net_info); |
|
| 728 | } |
792 | } |
| 729 | 793 | ||
| 730 | // IDA: int __usercall NetReplyToMessage@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pIncoming_message@<EDX>, tNet_message *pReply_message@<EBX>) |
794 | // IDA: int __usercall NetReplyToMessage@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pIncoming_message@<EDX>, tNet_message *pReply_message@<EBX>) |
| 731 | int NetReplyToMessage(tNet_game_details* pDetails, tNet_message* pIncoming_message, tNet_message* pReply_message) { |
795 | int NetReplyToMessage(tNet_game_details* pDetails, tNet_message* pIncoming_message, tNet_message* pReply_message) { |
| 732 | LOG_TRACE("(%p, %p, %p)", pDetails, pIncoming_message, pReply_message); |
796 | LOG_TRACE("(%p, %p, %p)", pDetails, pIncoming_message, pReply_message); |
| - | 797 | ||
| 733 |
|
798 | return NetSendMessageToPlayer(pDetails, pReply_message, pIncoming_message->sender); |
| 734 | } |
799 | } |
| 735 | 800 | ||
| 736 | // IDA: int __usercall NetSendMessageToAllPlayers@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>) |
801 | // IDA: int __usercall NetSendMessageToAllPlayers@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>) |
| 737 | int NetSendMessageToAllPlayers(tNet_game_details* pDetails, tNet_message* pMessage) { |
802 | int NetSendMessageToAllPlayers(tNet_game_details* pDetails, tNet_message* pMessage) { |
| 738 | LOG_TRACE("(%p, %p)", pDetails, pMessage); |
803 | LOG_TRACE("(%p, %p)", pDetails, pMessage); |
| Line 841... | Line 906... | ||
| 841 | 906 | ||
| 842 | // IDA: tS32 __usercall NetCalcSizeDecider@<EAX>(tNet_contents *pContents@<EAX>) |
907 | // IDA: tS32 __usercall NetCalcSizeDecider@<EAX>(tNet_contents *pContents@<EAX>) |
| 843 | tS32 NetCalcSizeDecider(tNet_contents* pContents) { |
908 | tS32 NetCalcSizeDecider(tNet_contents* pContents) { |
| 844 | //tS32 the_decider; // Pierre-Marie Baty -- unused variable |
909 | //tS32 the_decider; // Pierre-Marie Baty -- unused variable |
| 845 | LOG_TRACE("(%p)", pContents); |
910 | LOG_TRACE("(%p)", pContents); |
| - | 911 | ||
| 846 |
|
912 | return 0; |
| 847 | } |
913 | } |
| 848 | 914 | ||
| 849 | // IDA: tNet_message* __usercall NetBuildMessage@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
915 | // IDA: tNet_message* __usercall NetBuildMessage@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
| 850 | tNet_message* NetBuildMessage(tNet_message_type pType, tS32 pSize_decider) { |
916 | tNet_message* NetBuildMessage(tNet_message_type pType, tS32 pSize_decider) { |
| 851 | tNet_message* the_message; |
917 | tNet_message* the_message; |
| Line 862... | Line 928... | ||
| 862 | return the_message; |
928 | return the_message; |
| 863 | } |
929 | } |
| 864 | 930 | ||
| 865 | // IDA: tNet_contents* __usercall NetGetToHostContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
931 | // IDA: tNet_contents* __usercall NetGetToHostContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
| 866 | tNet_contents* NetGetToHostContents(tNet_message_type pType, tS32 pSize_decider) { |
932 | tNet_contents* NetGetToHostContents(tNet_message_type pType, tS32 pSize_decider) { |
| 867 |
|
933 | tU32 the_size; |
| 868 |
|
934 | tNet_contents* contents; |
| 869 | LOG_TRACE("(%d, %d)", pType, pSize_decider); |
935 | LOG_TRACE("(%d, %d)", pType, pSize_decider); |
| - | 936 | ||
| - | 937 | the_size = NetGetContentsSize(pType, pSize_decider); |
|
| - | 938 | if (gTo_host_stack && the_size + gTo_host_stack->overall_size > MAX_MESAGE_STACK_SIZE) { |
|
| - | 939 | NetSendMessageToHost(gCurrent_net_game, gTo_host_stack); |
|
| - | 940 | gTo_host_stack = 0; |
|
| - | 941 | } |
|
| - | 942 | if (!gTo_host_stack) { |
|
| - | 943 | gTo_host_stack = NetAllocateMessage(MAX_MESAGE_STACK_SIZE); |
|
| - | 944 | gTo_host_stack->overall_size = offsetof(tNet_message, contents); |
|
| - | 945 | gTo_host_stack->num_contents = 0; |
|
| - | 946 | } |
|
| - | 947 | contents = (tNet_contents*)((char*)gTo_host_stack + gTo_host_stack->overall_size); |
|
| - | 948 | gTo_host_stack->overall_size += the_size; |
|
| - | 949 | contents->header.type = pType; |
|
| - | 950 | contents->header.contents_size = the_size; |
|
| - | 951 | gTo_host_stack->num_contents++; |
|
| 870 |
|
952 | return contents; |
| 871 | } |
953 | } |
| 872 | 954 | ||
| 873 | // IDA: tNet_contents* __usercall NetGetBroadcastContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
955 | // IDA: tNet_contents* __usercall NetGetBroadcastContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>) |
| 874 | tNet_contents* NetGetBroadcastContents(tNet_message_type pType, tS32 pSize_decider) { |
956 | tNet_contents* NetGetBroadcastContents(tNet_message_type pType, tS32 pSize_decider) { |
| 875 | tU32 the_size; |
957 | tU32 the_size; |
| Line 967... | Line 1049... | ||
| 967 | } |
1049 | } |
| 968 | *(void**)last_message = pointer; |
1050 | *(void**)last_message = pointer; |
| 969 | } else { |
1051 | } else { |
| 970 | gMessage_to_free = pointer; |
1052 | gMessage_to_free = pointer; |
| 971 | } |
1053 | } |
| 972 | pointer = ( |
1054 | pointer = (char*)pointer + sizeof(void*); |
| 973 | } |
1055 | } |
| 974 | } |
1056 | } |
| 975 | if (pointer == NULL) { |
1057 | if (pointer == NULL) { |
| 976 | LOG_PANIC("null pointer!"); |
1058 | LOG_PANIC("null pointer!"); |
| 977 | message = NULL; |
1059 | message = NULL; |
| Line 1073... | Line 1155... | ||
| 1073 | tNet_message* message; |
1155 | tNet_message* message; |
| 1074 | tNet_game_player_info* new_players; |
1156 | tNet_game_player_info* new_players; |
| 1075 | LOG_TRACE("(%p, %p)", pContents, pSender_address); |
1157 | LOG_TRACE("(%p, %p)", pContents, pSender_address); |
| 1076 | 1158 | ||
| 1077 | new_player_count = gNumber_of_net_players; |
1159 | new_player_count = gNumber_of_net_players; |
| 1078 | new_players = BrMemAllocate(new_player_count + 1 * sizeof(tNet_game_player_info), kMem_player_list_join); |
1160 | new_players = BrMemAllocate((new_player_count + 1) * sizeof(tNet_game_player_info), kMem_player_list_join); |
| 1079 | memcpy(new_players, gNet_players, gNumber_of_net_players * sizeof(tNet_game_player_info)); |
1161 | memcpy(new_players, gNet_players, gNumber_of_net_players * sizeof(tNet_game_player_info)); |
| 1080 | 1162 | ||
| 1081 | if ((!gCurrent_net_game->options.open_game && gProgram_state.racing) || gCurrent_net_game->num_players > 5 || gDont_allow_joiners) { |
1163 | if ((!gCurrent_net_game->options.open_game && gProgram_state.racing) || gCurrent_net_game->num_players > 5 || gDont_allow_joiners) { |
| 1082 | message = NetBuildMessage(NETMSGID_NEWPLAYERLIST, 0); |
1164 | message = NetBuildMessage(NETMSGID_NEWPLAYERLIST, 0); |
| 1083 | // Send player count = 0 when race has already begun or is full |
1165 | // Send player count = 0 when race has already begun or is full |
| Line 1121... | Line 1203... | ||
| 1121 | } |
1203 | } |
| 1122 | } |
1204 | } |
| 1123 | 1205 | ||
| 1124 | // IDA: void __usercall KickPlayerOut(tPlayer_ID pID@<EAX>) |
1206 | // IDA: void __usercall KickPlayerOut(tPlayer_ID pID@<EAX>) |
| 1125 | void KickPlayerOut(tPlayer_ID pID) { |
1207 | void KickPlayerOut(tPlayer_ID pID) { |
| 1126 |
|
1208 | int i; |
| 1127 |
|
1209 | int j; |
| 1128 |
|
1210 | int new_player_count; |
| 1129 |
|
1211 | tNet_game_player_info* new_players; |
| 1130 | LOG_TRACE("(%d)", pID); |
1212 | LOG_TRACE("(%d)", pID); |
| - | 1213 | ||
| - | 1214 | new_player_count = gNumber_of_net_players; |
|
| - | 1215 | new_players = (tNet_game_player_info*)BrMemAllocate(sizeof(tNet_game_player_info) * gNumber_of_net_players, kMem_player_list_leave); |
|
| - | 1216 | memcpy(new_players, gNet_players, sizeof(tNet_game_player_info) * new_player_count); |
|
| - | 1217 | for (i = 0; i < new_player_count; i++) { |
|
| - | 1218 | if (new_players[i].ID == pID) { |
|
| - | 1219 | if (new_players[i].car_index >= 0) { |
|
| - | 1220 | gCar_details[new_players[i].car_index].ownership = eCar_owner_none; |
|
| - | 1221 | } |
|
| - | 1222 | if (new_players[i].next_car_index >= 0 && gCurrent_net_game->options.random_car_choice && (gCurrent_net_game->options.car_choice == eNet_car_all || gCurrent_net_game->options.car_choice == eNet_car_both)) { |
|
| - | 1223 | gCar_details[new_players[i].next_car_index].ownership = eCar_owner_none; |
|
| - | 1224 | } |
|
| - | 1225 | #ifdef DETHRACE_FIX_BUGS |
|
| - | 1226 | for (j = i; j < new_player_count - 1; j++) { |
|
| - | 1227 | #else |
|
| - | 1228 | for (j = i; j < new_player_count; j++) { |
|
| - | 1229 | #endif |
|
| - | 1230 | memcpy(&new_players[j], &new_players[j + 1], sizeof(tNet_game_player_info)); |
|
| - | 1231 | } |
|
| - | 1232 | new_player_count--; |
|
| - | 1233 | break; |
|
| - | 1234 | } |
|
| - | 1235 | } |
|
| - | 1236 | NetPlayersChanged(new_player_count, new_players); |
|
| - | 1237 | BrMemFree(new_players); |
|
| 1131 |
|
1238 | SendOutPlayerList(); |
| 1132 | } |
1239 | } |
| 1133 | 1240 | ||
| 1134 | // IDA: void __usercall ReceivedLeave(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>) |
1241 | // IDA: void __usercall ReceivedLeave(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>) |
| 1135 | void ReceivedLeave(tNet_contents* pContents, tNet_message* pMessage) { |
1242 | void ReceivedLeave(tNet_contents* pContents, tNet_message* pMessage) { |
| 1136 | LOG_TRACE("(%p, %p)", pContents, pMessage); |
1243 | LOG_TRACE("(%p, %p)", pContents, pMessage); |
| - | 1244 | ||
| 1137 |
|
1245 | KickPlayerOut(pMessage->sender); |
| 1138 | } |
1246 | } |
| 1139 | 1247 | ||
| 1140 | // IDA: void __usercall NetFullScreenMessage(int pStr_index@<EAX>, int pLeave_it_up_there@<EDX>) |
1248 | // IDA: void __usercall NetFullScreenMessage(int pStr_index@<EAX>, int pLeave_it_up_there@<EDX>) |
| 1141 | void NetFullScreenMessage(int pStr_index, int pLeave_it_up_there) { |
1249 | void NetFullScreenMessage(int pStr_index, int pLeave_it_up_there) { |
| 1142 | tU32 start_time; |
1250 | tU32 start_time; |
| Line 1211... | Line 1319... | ||
| 1211 | 1319 | ||
| 1212 | // IDA: void __usercall ReceivedHosticide(tNet_contents *pContents@<EAX>) |
1320 | // IDA: void __usercall ReceivedHosticide(tNet_contents *pContents@<EAX>) |
| 1213 | void ReceivedHosticide(tNet_contents* pContents) { |
1321 | void ReceivedHosticide(tNet_contents* pContents) { |
| 1214 | LOG_TRACE("(%p)", pContents); |
1322 | LOG_TRACE("(%p)", pContents); |
| 1215 | 1323 | ||
| 1216 | HostHasBittenTheDust( |
1324 | HostHasBittenTheDust(kMiscString_GAME_TERMINATED_BY_HOST); |
| 1217 | } |
1325 | } |
| 1218 | 1326 | ||
| 1219 | // IDA: void __cdecl ConfirmReceipt() |
1327 | // IDA: void __cdecl ConfirmReceipt() |
| 1220 | void ConfirmReceipt(void) { |
1328 | void ConfirmReceipt(void) { |
| 1221 | //tNet_message* the_message; // Pierre-Marie Baty -- unused variable |
1329 | //tNet_message* the_message; // Pierre-Marie Baty -- unused variable |
| Line 1311... | Line 1419... | ||
| 1311 | } |
1419 | } |
| 1312 | } |
1420 | } |
| 1313 | 1421 | ||
| 1314 | // IDA: void __usercall ReceivedStartRace(tNet_contents *pContents@<EAX>) |
1422 | // IDA: void __usercall ReceivedStartRace(tNet_contents *pContents@<EAX>) |
| 1315 | void ReceivedStartRace(tNet_contents* pContents) { |
1423 | void ReceivedStartRace(tNet_contents* pContents) { |
| 1316 |
|
1424 | int i; |
| 1317 |
|
1425 | int index; |
| 1318 | LOG_TRACE("(%p)", pContents); |
1426 | LOG_TRACE("(%p)", pContents); |
| - | 1427 | ||
| - | 1428 | if (pContents->data.player_list.number_of_players == -1) { |
|
| - | 1429 | if (gProgram_state.racing) { |
|
| - | 1430 | index = pContents->data.start_race.car_list[0].index; |
|
| - | 1431 | BrMatrix34Copy(&gNet_players[index].car->car_master_actor->t.t.mat, &pContents->data.start_race.car_list[0].mat); |
|
| - | 1432 | ReinitialiseCar(gNet_players[index].car); |
|
| - | 1433 | if (gThis_net_player_index == index) { |
|
| - | 1434 | if (!gInterface_within_race_mode) { |
|
| - | 1435 | FadePaletteDown(); |
|
| 1319 |
|
1436 | } |
| - | 1437 | CancelPendingCunningStunt(); |
|
| - | 1438 | gProgram_state.credits_earned = gInitial_net_credits[gCurrent_net_game->options.starting_money_index]; |
|
| - | 1439 | gProgram_state.credits_lost = 0; |
|
| - | 1440 | InitialiseExternalCamera(); |
|
| - | 1441 | } |
|
| - | 1442 | gNet_players[index].last_waste_message = 0; |
|
| - | 1443 | gNet_players[index].wasteage_attributed = 0; |
|
| - | 1444 | } |
|
| - | 1445 | } else if (gSynch_race_start) { |
|
| - | 1446 | for (i = 0; i < pContents->data.start_race.car_count; i++) { |
|
| - | 1447 | gNet_players[pContents->data.start_race.car_list[i].index].next_car_index = pContents->data.start_race.car_list[i].next_car_index; |
|
| - | 1448 | } |
|
| - | 1449 | } else { |
|
| - | 1450 | for (i = 0; i < pContents->data.player_list.number_of_players; i++) { |
|
| - | 1451 | gCurrent_race.number_of_racers = i + 1; |
|
| - | 1452 | gCurrent_race.opponent_list[i].index = -1; |
|
| - | 1453 | gCurrent_race.opponent_list[i].ranking = -1; |
|
| - | 1454 | gCurrent_race.opponent_list[i].car_spec = gNet_players[pContents->data.start_race.car_list[i].index].car; |
|
| - | 1455 | gCurrent_race.opponent_list[i].net_player_index = pContents->data.start_race.car_list[i].index; |
|
| - | 1456 | gNet_players[gCurrent_race.opponent_list[i].net_player_index].last_waste_message = 0; |
|
| - | 1457 | gNet_players[gCurrent_race.opponent_list[i].net_player_index].wasteage_attributed = 0; |
|
| - | 1458 | if (!gProgram_state.racing || gCurrent_race.opponent_list[i].car_spec->driver != eDriver_local_human) { |
|
| - | 1459 | BrMatrix34Copy(&gCurrent_race.opponent_list[i].car_spec->car_master_actor->t.t.mat, &pContents->data.start_race.car_list[i].mat); |
|
| - | 1460 | InitialiseCar(gCurrent_race.opponent_list[i].car_spec); |
|
| - | 1461 | } |
|
| - | 1462 | gNet_players[pContents->data.start_race.car_list[i].index].next_car_index = pContents->data.start_race.car_list[i].next_car_index; |
|
| - | 1463 | } |
|
| - | 1464 | gPending_race = pContents->data.player_list.batch_number; |
|
| - | 1465 | gCurrent_race.number_of_racers = pContents->data.player_list.number_of_players; |
|
| - | 1466 | gSynch_race_start = 1; |
|
| - | 1467 | if (!pContents->data.player_list.this_index || gProgram_state.racing) { |
|
| - | 1468 | gWait_for_it = 0; |
|
| - | 1469 | } |
|
| - | 1470 | } |
|
| 1320 | } |
1471 | } |
| 1321 | 1472 | ||
| 1322 | // IDA: void __usercall ReceivedGuaranteeReply(tNet_contents *pContents@<EAX>) |
1473 | // IDA: void __usercall ReceivedGuaranteeReply(tNet_contents *pContents@<EAX>) |
| 1323 | void ReceivedGuaranteeReply(tNet_contents* pContents) { |
1474 | void ReceivedGuaranteeReply(tNet_contents* pContents) { |
| 1324 | int i; |
1475 | int i; |
| Line 1361... | Line 1512... | ||
| 1361 | //tNet_message* message; // Pierre-Marie Baty -- unused variable |
1512 | //tNet_message* message; // Pierre-Marie Baty -- unused variable |
| 1362 | LOG_TRACE("(%p)", pContents); |
1513 | LOG_TRACE("(%p)", pContents); |
| 1363 | 1514 | ||
| 1364 | if (pContents->data.heres_where_we_at.race_index != gProgram_state.current_race_index) { |
1515 | if (pContents->data.heres_where_we_at.race_index != gProgram_state.current_race_index) { |
| 1365 | NetLeaveGame(gCurrent_net_game); |
1516 | NetLeaveGame(gCurrent_net_game); |
| 1366 | NetFullScreenMessage( |
1517 | NetFullScreenMessage(kMiscString_RACE_CHANGED_DURING_LOADING, 0); |
| 1367 | gProgram_state.prog_status = eProg_idling; |
1518 | gProgram_state.prog_status = eProg_idling; |
| 1368 | } |
1519 | } |
| 1369 | if (pContents->data.heres_where_we_at.race_has_started) { |
1520 | if (pContents->data.heres_where_we_at.race_has_started) { |
| 1370 | if (gCurrent_net_game->options.open_game) { |
1521 | if (gCurrent_net_game->options.open_game) { |
| 1371 | gPending_race = pContents->data.heres_where_we_at.pending_race; |
1522 | gPending_race = pContents->data.heres_where_we_at.pending_race; |
| 1372 | } else { |
1523 | } else { |
| 1373 | NetFullScreenMessage( |
1524 | NetFullScreenMessage(kMiscString_SORRY_YOU_RE_TOO_LATE, 0); |
| 1374 | gProgram_state.prog_status = eProg_idling; |
1525 | gProgram_state.prog_status = eProg_idling; |
| 1375 | } |
1526 | } |
| 1376 | } |
1527 | } |
| 1377 | } |
1528 | } |
| 1378 | 1529 | ||
| Line 1402... | Line 1553... | ||
| 1402 | } |
1553 | } |
| 1403 | 1554 | ||
| 1404 | // IDA: void __usercall ReceivedTimeSync(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>, tU32 pReceive_time@<EBX>) |
1555 | // IDA: void __usercall ReceivedTimeSync(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>, tU32 pReceive_time@<EBX>) |
| 1405 | void ReceivedTimeSync(tNet_contents* pContents, tNet_message* pMessage, tU32 pReceive_time) { |
1556 | void ReceivedTimeSync(tNet_contents* pContents, tNet_message* pMessage, tU32 pReceive_time) { |
| 1406 | LOG_TRACE("(%p, %p, %d)", pContents, pMessage, pReceive_time); |
1557 | LOG_TRACE("(%p, %p, %d)", pContents, pMessage, pReceive_time); |
| - | 1558 | ||
| - | 1559 | if (pMessage->senders_time_stamp - pContents->data.time_sync.race_start_time > pReceive_time + 10) { |
|
| - | 1560 | gRace_start -= pMessage->senders_time_stamp - pContents->data.time_sync.race_start_time - pReceive_time; |
|
| 1407 |
|
1561 | } |
| 1408 | } |
1562 | } |
| 1409 | 1563 | ||
| 1410 | // IDA: void __usercall ReceivedConfirm(tNet_contents *pContents@<EAX>) |
1564 | // IDA: void __usercall ReceivedConfirm(tNet_contents *pContents@<EAX>) |
| 1411 | void ReceivedConfirm(tNet_contents* pContents) { |
1565 | void ReceivedConfirm(tNet_contents* pContents) { |
| 1412 |
|
1566 | int i; |
| 1413 | LOG_TRACE("(%p)", pContents); |
1567 | LOG_TRACE("(%p)", pContents); |
| - | 1568 | ||
| - | 1569 | for (i = 0; i < gNumber_of_net_players; i++) { |
|
| - | 1570 | if (gNet_players[i].ID == pContents->data.confirm.player) { |
|
| - | 1571 | gNet_players[i].awaiting_confirmation = 0; |
|
| 1414 |
|
1572 | return; |
| - | 1573 | } |
|
| - | 1574 | } |
|
| 1415 | } |
1575 | } |
| 1416 | 1576 | ||
| 1417 | // IDA: void __usercall ReceivedDisableCar(tNet_contents *pContents@<EAX>) |
1577 | // IDA: void __usercall ReceivedDisableCar(tNet_contents *pContents@<EAX>) |
| 1418 | void ReceivedDisableCar(tNet_contents* pContents) { |
1578 | void ReceivedDisableCar(tNet_contents* pContents) { |
| 1419 | LOG_TRACE("(%p)", pContents); |
1579 | LOG_TRACE("(%p)", pContents); |
| 1420 | NOT_IMPLEMENTED(); |
- | |
| - | 1580 | ||
| 1421 | } |
1581 | } |
| 1422 | 1582 | ||
| 1423 | // IDA: void __usercall ReceivedEnableCar(tNet_contents *pContents@<EAX>) |
1583 | // IDA: void __usercall ReceivedEnableCar(tNet_contents *pContents@<EAX>) |
| 1424 | void ReceivedEnableCar(tNet_contents* pContents) { |
1584 | void ReceivedEnableCar(tNet_contents* pContents) { |
| 1425 | LOG_TRACE("(%p)", pContents); |
1585 | LOG_TRACE("(%p)", pContents); |
| 1426 | NOT_IMPLEMENTED(); |
- | |
| - | 1586 | ||
| 1427 | } |
1587 | } |
| 1428 | 1588 | ||
| 1429 | // IDA: void __usercall ReceivedScores(tNet_contents *pContents@<EAX>) |
1589 | // IDA: void __usercall ReceivedScores(tNet_contents *pContents@<EAX>) |
| 1430 | void ReceivedScores(tNet_contents* pContents) { |
1590 | void ReceivedScores(tNet_contents* pContents) { |
| 1431 |
|
1591 | int i; |
| 1432 | LOG_TRACE("(%p)", pContents); |
1592 | LOG_TRACE("(%p)", pContents); |
| - | 1593 | ||
| - | 1594 | UseGeneralScore(pContents->data.scores.general_score); |
|
| 1433 |
|
1595 | for (i = 0; i < gNumber_of_net_players; i++) { |
| - | 1596 | gNet_players[i].score = pContents->data.scores.scores[i]; |
|
| - | 1597 | } |
|
| 1434 | } |
1598 | } |
| 1435 | 1599 | ||
| 1436 | // IDA: void __usercall ReceivedWasted(tNet_contents *pContents@<EAX>) |
1600 | // IDA: void __usercall ReceivedWasted(tNet_contents *pContents@<EAX>) |
| 1437 | void ReceivedWasted(tNet_contents* pContents) { |
1601 | void ReceivedWasted(tNet_contents* pContents) { |
| 1438 |
|
1602 | tNet_game_player_info* victim; |
| 1439 |
|
1603 | tNet_game_player_info* culprit; |
| 1440 |
|
1604 | char s[256]; |
| 1441 |
|
1605 | tCar_spec* car; |
| 1442 |
|
1606 | static tS32 last_got_wasted_time; |
| 1443 |
|
1607 | static tS32 last_wasted_em_time; |
| 1444 |
|
1608 | static tS32 last_wasty_message_time; |
| 1445 |
|
1609 | static tNet_game_player_info* last_culprit; |
| 1446 |
|
1610 | static tNet_game_player_info* last_victim; |
| 1447 | LOG_TRACE("(%p)", pContents); |
1611 | LOG_TRACE("(%p)", pContents); |
| - | 1612 | ||
| - | 1613 | victim = NetPlayerFromID(pContents->data.wasted.victim); |
|
| - | 1614 | if (victim == NULL) { |
|
| - | 1615 | return; |
|
| - | 1616 | } |
|
| - | 1617 | victim->car->knackered = 1; |
|
| - | 1618 | if (pContents->data.wasted.victim == gLocal_net_ID) { |
|
| - | 1619 | if (gCurrent_net_game->type == eNet_game_type_fight_to_death) { |
|
| - | 1620 | DoFancyHeadup(kFancyHeadupYouLost); |
|
| - | 1621 | gRace_finished = 1; |
|
| - | 1622 | } else { |
|
| - | 1623 | last_got_wasted_time = PDGetTotalTime(); |
|
| - | 1624 | if (last_got_wasted_time - last_wasted_em_time > 1000) { |
|
| - | 1625 | DoFancyHeadup(kFancyHeadupYouAreWasted); |
|
| - | 1626 | } else { |
|
| - | 1627 | DoFancyHeadup(kFancyHeadupYouAreBothWasted); |
|
| - | 1628 | } |
|
| - | 1629 | } |
|
| - | 1630 | } |
|
| - | 1631 | if (pContents->data.wasted.culprit == -1) { |
|
| - | 1632 | if (victim->last_waste_message == 0) { |
|
| - | 1633 | victim->last_waste_message = GetTotalTime(); |
|
| - | 1634 | } |
|
| - | 1635 | } else if (!victim->wasteage_attributed) { |
|
| - | 1636 | if (pContents->data.wasted.culprit == -2) { |
|
| - | 1637 | culprit = NULL; |
|
| - | 1638 | } else { |
|
| - | 1639 | culprit = NetPlayerFromID(pContents->data.wasted.culprit); |
|
| - | 1640 | } |
|
| - | 1641 | if (culprit != NULL && gNet_mode == eNet_mode_host && gCurrent_net_game->type == eNet_game_type_car_crusher) { |
|
| - | 1642 | culprit->score++; |
|
| - | 1643 | if (culprit->score >= gCurrent_net_game->options.race_end_target) { |
|
| - | 1644 | DeclareWinner(culprit - gNet_players); |
|
| - | 1645 | } |
|
| - | 1646 | } |
|
| - | 1647 | victim->last_waste_message = GetTotalTime(); |
|
| - | 1648 | victim->wasteage_attributed = 1; |
|
| - | 1649 | if (victim == last_culprit && culprit == last_victim && victim != NULL && culprit != NULL && PDGetTotalTime() - last_wasty_message_time < 1000) { |
|
| - | 1650 | sprintf(s, "%s %s %s %s", victim->player_name, GetMiscString(kMiscString_AND), culprit->player_name, GetMiscString(kMiscString_WASTED_EACH_OTHER)); |
|
| - | 1651 | } else { |
|
| - | 1652 | sprintf(s, "%s %s %s", victim->player_name, GetMiscString(kMiscString_WastedBy), culprit ? culprit->player_name : GetMiscString(kMiscString_COP)); |
|
| - | 1653 | } |
|
| - | 1654 | NewTextHeadupSlot2(4, 0, 3000, -4, s, 0); |
|
| - | 1655 | last_wasty_message_time = PDGetTotalTime(); |
|
| - | 1656 | last_culprit = culprit; |
|
| - | 1657 | last_victim = victim; |
|
| - | 1658 | if (pContents->data.wasted.culprit == gLocal_net_ID) { |
|
| 1448 |
|
1659 | PratcamEvent(32); |
| - | 1660 | last_wasted_em_time = PDGetTotalTime(); |
|
| - | 1661 | if (last_wasted_em_time - last_got_wasted_time > 1000) { |
|
| - | 1662 | DoFancyHeadup(kFancyHeadupYouWastedEm); |
|
| - | 1663 | } else { |
|
| - | 1664 | DoFancyHeadup(kFancyHeadupYouAreBothWasted); |
|
| - | 1665 | } |
|
| - | 1666 | } |
|
| - | 1667 | } |
|
| 1449 | } |
1668 | } |
| 1450 | 1669 | ||
| 1451 | // IDA: void __usercall ReceivedCarDetailsReq(tNet_contents *pContents@<EAX>, void *pSender_address@<EDX>) |
1670 | // IDA: void __usercall ReceivedCarDetailsReq(tNet_contents *pContents@<EAX>, void *pSender_address@<EDX>) |
| 1452 | void ReceivedCarDetailsReq(tNet_contents* pContents, void* pSender_address) { |
1671 | void ReceivedCarDetailsReq(tNet_contents* pContents, void* pSender_address) { |
| 1453 | tNet_message* message; |
1672 | tNet_message* message; |
| Line 1483... | Line 1702... | ||
| 1483 | gReceived_car_details = 1; |
1702 | gReceived_car_details = 1; |
| 1484 | } |
1703 | } |
| 1485 | 1704 | ||
| 1486 | // IDA: void __usercall ReceivedGameScores(tNet_contents *pContents@<EAX>) |
1705 | // IDA: void __usercall ReceivedGameScores(tNet_contents *pContents@<EAX>) |
| 1487 | void ReceivedGameScores(tNet_contents* pContents) { |
1706 | void ReceivedGameScores(tNet_contents* pContents) { |
| 1488 |
|
1707 | int i; |
| 1489 | LOG_TRACE("(%p)", pContents); |
1708 | LOG_TRACE("(%p)", pContents); |
| - | 1709 | ||
| 1490 |
|
1710 | gReceived_game_scores = 1; |
| - | 1711 | for (i = 0; i < gNumber_of_net_players; i++) { |
|
| - | 1712 | gNet_players[i].played = pContents->data.game_scores.scores[i].played; |
|
| - | 1713 | gNet_players[i].won = pContents->data.game_scores.scores[i].won; |
|
| - | 1714 | gNet_players[i].games_score = pContents->data.game_scores.scores[i].score; |
|
| - | 1715 | } |
|
| 1491 | } |
1716 | } |
| 1492 | 1717 | ||
| 1493 | // IDA: void __usercall ReceivedMessage(tNet_message *pMessage@<EAX>, void *pSender_address@<EDX>, tU32 pReceive_time@<EBX>) |
1718 | // IDA: void __usercall ReceivedMessage(tNet_message *pMessage@<EAX>, void *pSender_address@<EDX>, tU32 pReceive_time@<EBX>) |
| 1494 | void ReceivedMessage(tNet_message* pMessage, void* pSender_address, tU32 pReceive_time) { |
1719 | void ReceivedMessage(tNet_message* pMessage, void* pSender_address, tU32 pReceive_time) { |
| 1495 | tNet_contents* contents; |
1720 | tNet_contents* contents; |
| Line 1669... | Line 1894... | ||
| 1669 | NewTextHeadupSlot(4, 0, 3000, -4, s); |
1894 | NewTextHeadupSlot(4, 0, 3000, -4, s); |
| 1670 | } |
1895 | } |
| 1671 | } |
1896 | } |
| 1672 | } |
1897 | } |
| 1673 | } else if (!gHost_died && gNumber_of_net_players != 0 && gNet_players[0].last_heard_from_him != 0 && the_time - gNet_players[0].last_heard_from_him >= 20000) { |
1898 | } else if (!gHost_died && gNumber_of_net_players != 0 && gNet_players[0].last_heard_from_him != 0 && the_time - gNet_players[0].last_heard_from_him >= 20000) { |
| 1674 | HostHasBittenTheDust( |
1899 | HostHasBittenTheDust(kMiscString_PANIC_HOST_HAS_DISAPPEARED); |
| 1675 | } |
1900 | } |
| 1676 | } |
1901 | } |
| 1677 | 1902 | ||
| 1678 | // IDA: void __cdecl CheckForPendingStartRace() |
1903 | // IDA: void __cdecl CheckForPendingStartRace() |
| 1679 | void CheckForPendingStartRace(void) { |
1904 | void CheckForPendingStartRace(void) { |
| Line 1782... | Line 2007... | ||
| 1782 | } |
2007 | } |
| 1783 | 2008 | ||
| 1784 | // IDA: int __usercall NetGuaranteedSendMessageToEverybody@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>) |
2009 | // IDA: int __usercall NetGuaranteedSendMessageToEverybody@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>) |
| 1785 | int NetGuaranteedSendMessageToEverybody(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) { |
2010 | int NetGuaranteedSendMessageToEverybody(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) { |
| 1786 | LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail); |
2011 | LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail); |
| - | 2012 | ||
| - | 2013 | pMessage->sender = gLocal_net_ID; |
|
| - | 2014 | pMessage->senders_time_stamp = PDGetTotalTime(); |
|
| 1787 |
|
2015 | pMessage->num_contents = 1; |
| - | 2016 | pMessage->guarantee_number = 0; |
|
| - | 2017 | ReceivedMessage(pMessage, &gNet_players[gThis_net_player_index], GetRaceTime()); |
|
| - | 2018 | return NetGuaranteedSendMessageToAllPlayers(pDetails, pMessage, pNotifyFail); |
|
| 1788 | } |
2019 | } |
| 1789 | 2020 | ||
| 1790 | // IDA: int __usercall NetGuaranteedSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>) |
2021 | // IDA: int __usercall NetGuaranteedSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>) |
| 1791 | int NetGuaranteedSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) { |
2022 | int NetGuaranteedSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) { |
| 1792 | LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail); |
2023 | LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail); |
| Line 1891... | Line 2122... | ||
| 1891 | } |
2122 | } |
| 1892 | 2123 | ||
| 1893 | // IDA: int __usercall SampleFailNotifier@<EAX>(tU32 pAge@<EAX>, tNet_message *pMessage@<EDX>) |
2124 | // IDA: int __usercall SampleFailNotifier@<EAX>(tU32 pAge@<EAX>, tNet_message *pMessage@<EDX>) |
| 1894 | int SampleFailNotifier(tU32 pAge, tNet_message* pMessage) { |
2125 | int SampleFailNotifier(tU32 pAge, tNet_message* pMessage) { |
| 1895 | LOG_TRACE("(%d, %p)", pAge, pMessage); |
2126 | LOG_TRACE("(%d, %p)", pAge, pMessage); |
| - | 2127 | ||
| 1896 |
|
2128 | return pAge > 9999; |
| 1897 | } |
2129 | } |
| 1898 | 2130 | ||
| 1899 | // IDA: void __cdecl NetWaitForGuaranteeReplies() |
2131 | // IDA: void __cdecl NetWaitForGuaranteeReplies() |
| 1900 | void NetWaitForGuaranteeReplies(void) { |
2132 | void NetWaitForGuaranteeReplies(void) { |
| 1901 | tU32 start_time; |
2133 | tU32 start_time; |
| Line 1910... | Line 2142... | ||
| 1910 | } |
2142 | } |
| 1911 | } |
2143 | } |
| 1912 | 2144 | ||
| 1913 | // IDA: tNet_game_player_info* __usercall NetPlayerFromID@<EAX>(tPlayer_ID pPlayer@<EAX>) |
2145 | // IDA: tNet_game_player_info* __usercall NetPlayerFromID@<EAX>(tPlayer_ID pPlayer@<EAX>) |
| 1914 | tNet_game_player_info* NetPlayerFromID(tPlayer_ID pPlayer) { |
2146 | tNet_game_player_info* NetPlayerFromID(tPlayer_ID pPlayer) { |
| 1915 |
|
2147 | int i; |
| 1916 | LOG_TRACE("(%d)", pPlayer); |
2148 | LOG_TRACE("(%d)", pPlayer); |
| - | 2149 | ||
| - | 2150 | for (i = 0; i < gNumber_of_net_players; i++) { |
|
| - | 2151 | if (gNet_players[i].ID == pPlayer) { |
|
| - | 2152 | return &gNet_players[i]; |
|
| - | 2153 | } |
|
| - | 2154 | } |
|
| 1917 |
|
2155 | return 0; |
| 1918 | } |
2156 | } |
| 1919 | 2157 | ||
| 1920 | // IDA: tCar_spec* __usercall NetCarFromPlayerID@<EAX>(tPlayer_ID pPlayer@<EAX>) |
2158 | // IDA: tCar_spec* __usercall NetCarFromPlayerID@<EAX>(tPlayer_ID pPlayer@<EAX>) |
| 1921 | tCar_spec* NetCarFromPlayerID(tPlayer_ID pPlayer) { |
2159 | tCar_spec* NetCarFromPlayerID(tPlayer_ID pPlayer) { |
| 1922 |
|
2160 | int i; |
| 1923 |
|
2161 | tNet_game_player_info* player; |
| 1924 | LOG_TRACE("(%d)", pPlayer); |
2162 | LOG_TRACE("(%d)", pPlayer); |
| - | 2163 | ||
| - | 2164 | player = NetPlayerFromID(pPlayer); |
|
| - | 2165 | if (player) { |
|
| - | 2166 | return player->car; |
|
| - | 2167 | } |
|
| 1925 |
|
2168 | return NULL; |
| 1926 | } |
2169 | } |
| 1927 | 2170 | ||
| 1928 | // IDA: tNet_game_player_info* __usercall NetPlayerFromCar@<EAX>(tCar_spec *pCar@<EAX>) |
2171 | // IDA: tNet_game_player_info* __usercall NetPlayerFromCar@<EAX>(tCar_spec *pCar@<EAX>) |
| 1929 | tNet_game_player_info* NetPlayerFromCar(tCar_spec* pCar) { |
2172 | tNet_game_player_info* NetPlayerFromCar(tCar_spec* pCar) { |
| 1930 |
|
2173 | int i; |
| 1931 | LOG_TRACE("(%p)", pCar); |
2174 | LOG_TRACE("(%p)", pCar); |
| - | 2175 | ||
| - | 2176 | for (i = 0; i < gNumber_of_net_players; i++) { |
|
| - | 2177 | if (gNet_players[i].car == pCar) { |
|
| - | 2178 | return &gNet_players[i]; |
|
| - | 2179 | } |
|
| - | 2180 | } |
|
| 1932 |
|
2181 | return 0; |
| 1933 | } |
2182 | } |
| 1934 | 2183 | ||
| 1935 | // IDA: tU32 __usercall DoCheckSum@<EAX>(tNet_message *pMessage@<EAX>) |
2184 | // IDA: tU32 __usercall DoCheckSum@<EAX>(tNet_message *pMessage@<EAX>) |
| 1936 | tU32 DoCheckSum(tNet_message* pMessage) { |
2185 | tU32 DoCheckSum(tNet_message* pMessage) { |
| 1937 | //int i; // Pierre-Marie Baty -- unused variable |
2186 | //int i; // Pierre-Marie Baty -- unused variable |