Subversion Repositories Games.Carmageddon

Rev

Rev 18 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18 Rev 20
Line 1... Line 1...
1
#include "network.h"
1
#include "network.h"
2
#include "brender.h"
2
#include "brender/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"
-
 
23
#include "replay.h"
22
#include "replay.h"
24
#include "spark.h"
23
#include "spark.h"
25
#include "structur.h"
24
#include "structur.h"
26
#include "utility.h"
25
#include "utility.h"
27
#include "world.h"
26
#include "world.h"
Line 159... Line 158...
159
}
158
}
160
 
159
 
161
// IDA: void __cdecl HaltNetServiceReentrancy()
160
// IDA: void __cdecl HaltNetServiceReentrancy()
162
void HaltNetServiceReentrancy(void) {
161
void HaltNetServiceReentrancy(void) {
163
    LOG_TRACE("()");
162
    LOG_TRACE("()");
164
 
-
 
165
    gIn_net_service = 1;
163
    NOT_IMPLEMENTED();
166
}
164
}
167
 
165
 
168
// IDA: void __usercall NetSendHeadupToAllPlayers(char *pMessage@<EAX>)
166
// IDA: void __usercall NetSendHeadupToAllPlayers(char *pMessage@<EAX>)
169
void NetSendHeadupToAllPlayers(char* pMessage) {
167
void NetSendHeadupToAllPlayers(char* pMessage) {
170
    tNet_contents* the_contents;
168
    tNet_contents* the_contents;
Line 176... Line 174...
176
    }
174
    }
177
}
175
}
178
 
176
 
179
// IDA: void __usercall NetSendHeadupToEverybody(char *pMessage@<EAX>)
177
// IDA: void __usercall NetSendHeadupToEverybody(char *pMessage@<EAX>)
180
void NetSendHeadupToEverybody(char* pMessage) {
178
void NetSendHeadupToEverybody(char* pMessage) {
181
    tNet_contents* the_contents;
179
    //tNet_contents* the_contents; // Pierre-Marie Baty -- unused variable
182
    LOG_TRACE("(\"%s\")", pMessage);
180
    LOG_TRACE("(\"%s\")", pMessage);
183
 
-
 
184
    if (gNet_mode == eNet_mode_none) {
-
 
185
        return;
181
    NOT_IMPLEMENTED();
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);
-
 
192
}
182
}
193
 
183
 
194
// IDA: void __usercall NetSendHeadupToPlayer(char *pMessage@<EAX>, tPlayer_ID pPlayer@<EDX>)
184
// IDA: void __usercall NetSendHeadupToPlayer(char *pMessage@<EAX>, tPlayer_ID pPlayer@<EDX>)
195
void NetSendHeadupToPlayer(char* pMessage, tPlayer_ID pPlayer) {
185
void NetSendHeadupToPlayer(char* pMessage, tPlayer_ID pPlayer) {
196
    tNet_message* message;
186
    //tNet_message* message; // Pierre-Marie Baty -- unused variable
197
    LOG_TRACE("(\"%s\", %d)", pMessage, pPlayer);
187
    LOG_TRACE("(\"%s\", %d)", pMessage, pPlayer);
198
 
-
 
199
    if (gNet_mode == eNet_mode_none) {
-
 
200
        return;
188
    NOT_IMPLEMENTED();
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
    }
-
 
211
}
189
}
212
 
190
 
213
// IDA: void __cdecl InitialisePlayerStati()
191
// IDA: void __cdecl InitialisePlayerStati()
214
void InitialisePlayerStati(void) {
192
void InitialisePlayerStati(void) {
215
    int i;
193
    int i;
Line 398... Line 376...
398
}
376
}
399
 
377
 
400
// IDA: void __usercall NetDisposePlayer(tNet_game_player_info *pPlayer@<EAX>)
378
// IDA: void __usercall NetDisposePlayer(tNet_game_player_info *pPlayer@<EAX>)
401
void NetDisposePlayer(tNet_game_player_info* pPlayer) {
379
void NetDisposePlayer(tNet_game_player_info* pPlayer) {
402
    LOG_TRACE("(%p)", pPlayer);
380
    LOG_TRACE("(%p)", pPlayer);
403
 
-
 
404
    PDNetDisposePlayer(pPlayer);
381
    NOT_IMPLEMENTED();
405
}
382
}
406
 
383
 
407
// IDA: void __usercall FillInThisPlayer(tNet_game_details *pGame@<EAX>, tNet_game_player_info *pPlayer@<EDX>, int pCar_index@<EBX>, int pHost@<ECX>)
384
// IDA: void __usercall FillInThisPlayer(tNet_game_details *pGame@<EAX>, tNet_game_player_info *pPlayer@<EDX>, int pCar_index@<EBX>, int pHost@<ECX>)
408
void FillInThisPlayer(tNet_game_details* pGame, tNet_game_player_info* pPlayer, int pCar_index, int pHost) {
385
void FillInThisPlayer(tNet_game_details* pGame, tNet_game_player_info* pPlayer, int pCar_index, int pHost) {
409
    LOG_TRACE("(%p, %p, %d, %d)", pGame, pPlayer, pCar_index, pHost);
386
    LOG_TRACE("(%p, %p, %d, %d)", pGame, pPlayer, pCar_index, pHost);
Line 481... Line 458...
481
}
458
}
482
 
459
 
483
// IDA: void __usercall PlayerHasLeft(int pIndex@<EAX>)
460
// IDA: void __usercall PlayerHasLeft(int pIndex@<EAX>)
484
void PlayerHasLeft(int pIndex) {
461
void PlayerHasLeft(int pIndex) {
485
    LOG_TRACE("(%d)", pIndex);
462
    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;
-
 
493
        }
463
    NOT_IMPLEMENTED();
494
    }
-
 
495
}
464
}
496
 
465
 
497
// IDA: void __usercall NetPlayersChanged(int pNew_count@<EAX>, tNet_game_player_info *pNew_players@<EDX>)
466
// IDA: void __usercall NetPlayersChanged(int pNew_count@<EAX>, tNet_game_player_info *pNew_players@<EDX>)
498
void NetPlayersChanged(int pNew_count, tNet_game_player_info* pNew_players) {
467
void NetPlayersChanged(int pNew_count, tNet_game_player_info* pNew_players) {
499
    int i;
468
    int i;
Line 504... Line 473...
504
    int player_still_there;
473
    int player_still_there;
505
    tPlayer_ID old_fox_it;
474
    tPlayer_ID old_fox_it;
506
    LOG_TRACE("(%d, %p)", pNew_count, pNew_players);
475
    LOG_TRACE("(%d, %p)", pNew_count, pNew_players);
507
 
476
 
508
    if (gCurrent_net_game->type == eNet_game_type_tag || gCurrent_net_game->type == eNet_game_type_foxy) {
477
    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
-
 
513
            old_fox_it = gNet_players[gIt_or_fox].ID;
478
        old_fox_it = gNet_players[gIt_or_fox].ID;
514
#ifdef DETHRACE_FIX_BUGS
-
 
515
        }
-
 
516
#endif
-
 
517
    }
479
    }
518
    for (i = 0; i < pNew_count; i++) {
480
    for (i = 0; i < pNew_count; i++) {
519
        new_player = 1;
481
        new_player = 1;
520
        for (j = 0; j < gNumber_of_net_players; j++) {
482
        for (j = 0; j < gNumber_of_net_players; j++) {
521
            if (pNew_players[i].ID == gNet_players[j].ID) {
483
            if (pNew_players[i].ID == gNet_players[j].ID) {
Line 648... Line 610...
648
}
610
}
649
 
611
 
650
// IDA: int __usercall NetInitClient@<EAX>(tNet_game_details *pDetails@<EAX>)
612
// IDA: int __usercall NetInitClient@<EAX>(tNet_game_details *pDetails@<EAX>)
651
int NetInitClient(tNet_game_details* pDetails) {
613
int NetInitClient(tNet_game_details* pDetails) {
652
    LOG_TRACE("(%p)", pDetails);
614
    LOG_TRACE("(%p)", pDetails);
653
 
-
 
654
    return PDNetInitClient(pDetails);
615
    NOT_IMPLEMENTED();
655
}
616
}
656
 
617
 
657
// IDA: int __usercall NetJoinGameLowLevel@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>)
618
// IDA: int __usercall NetJoinGameLowLevel@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>)
658
int NetJoinGameLowLevel(tNet_game_details* pDetails, char* pPlayer_name) {
619
int NetJoinGameLowLevel(tNet_game_details* pDetails, char* pPlayer_name) {
659
    LOG_TRACE("(%p, \"%s\")", pDetails, pPlayer_name);
620
    LOG_TRACE("(%p, \"%s\")", pDetails, pPlayer_name);
660
 
621
 
661
    return PDNetJoinGame(pDetails, pPlayer_name);
622
    return PDNetJoinGame(pDetails, pPlayer_name);
662
}
623
}
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);
-
 
669
 
624
 
670
// IDA: int __usercall NetJoinGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>, int pCar_index@<EBX>)
625
// IDA: int __usercall NetJoinGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>, int pCar_index@<EBX>)
671
int NetJoinGame(tNet_game_details* pDetails, char* pPlayer_name, int pCar_index) {
626
int NetJoinGame(tNet_game_details* pDetails, char* pPlayer_name, int pCar_index) {
672
    int result;
627
    int result;
673
    tNet_message* the_message;
628
    tNet_message* the_message;
Line 759... Line 714...
759
    return PDNetSendMessageToAddress(pDetails, pMessage, pAddress);
714
    return PDNetSendMessageToAddress(pDetails, pMessage, pAddress);
760
}
715
}
761
 
716
 
762
// IDA: int __usercall NetSendMessageToPlayer@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, tPlayer_ID pPlayer@<EBX>)
717
// IDA: int __usercall NetSendMessageToPlayer@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, tPlayer_ID pPlayer@<EBX>)
763
int NetSendMessageToPlayer(tNet_game_details* pDetails, tNet_message* pMessage, tPlayer_ID pPlayer) {
718
int NetSendMessageToPlayer(tNet_game_details* pDetails, tNet_message* pMessage, tPlayer_ID pPlayer) {
764
    int i;
719
    //int i; // Pierre-Marie Baty -- unused variable
765
    LOG_TRACE("(%p, %p, %d)", pDetails, pMessage, pPlayer);
720
    LOG_TRACE("(%p, %p, %d)", pDetails, pMessage, pPlayer);
766
 
-
 
767
    if (gNet_mode == eNet_mode_none) {
-
 
768
        return -3;
721
    NOT_IMPLEMENTED();
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;
-
 
779
}
722
}
780
 
723
 
781
// IDA: int __usercall NetSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
724
// IDA: int __usercall NetSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
782
int NetSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage) {
725
int NetSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage) {
783
    LOG_TRACE("(%p, %p)", pDetails, pMessage);
726
    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();
-
 
790
    DoCheckSum(pMessage);
727
    NOT_IMPLEMENTED();
791
    return PDNetSendMessageToAddress(pDetails, pMessage, &pDetails->pd_net_info);
-
 
792
}
728
}
793
 
729
 
794
// IDA: int __usercall NetReplyToMessage@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pIncoming_message@<EDX>, tNet_message *pReply_message@<EBX>)
730
// IDA: int __usercall NetReplyToMessage@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pIncoming_message@<EDX>, tNet_message *pReply_message@<EBX>)
795
int NetReplyToMessage(tNet_game_details* pDetails, tNet_message* pIncoming_message, tNet_message* pReply_message) {
731
int NetReplyToMessage(tNet_game_details* pDetails, tNet_message* pIncoming_message, tNet_message* pReply_message) {
796
    LOG_TRACE("(%p, %p, %p)", pDetails, pIncoming_message, pReply_message);
732
    LOG_TRACE("(%p, %p, %p)", pDetails, pIncoming_message, pReply_message);
797
 
-
 
798
    return NetSendMessageToPlayer(pDetails, pReply_message, pIncoming_message->sender);
733
    NOT_IMPLEMENTED();
799
}
734
}
800
 
735
 
801
// IDA: int __usercall NetSendMessageToAllPlayers@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
736
// IDA: int __usercall NetSendMessageToAllPlayers@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
802
int NetSendMessageToAllPlayers(tNet_game_details* pDetails, tNet_message* pMessage) {
737
int NetSendMessageToAllPlayers(tNet_game_details* pDetails, tNet_message* pMessage) {
803
    LOG_TRACE("(%p, %p)", pDetails, pMessage);
738
    LOG_TRACE("(%p, %p)", pDetails, pMessage);
Line 906... Line 841...
906
 
841
 
907
// IDA: tS32 __usercall NetCalcSizeDecider@<EAX>(tNet_contents *pContents@<EAX>)
842
// IDA: tS32 __usercall NetCalcSizeDecider@<EAX>(tNet_contents *pContents@<EAX>)
908
tS32 NetCalcSizeDecider(tNet_contents* pContents) {
843
tS32 NetCalcSizeDecider(tNet_contents* pContents) {
909
    //tS32 the_decider; // Pierre-Marie Baty -- unused variable
844
    //tS32 the_decider; // Pierre-Marie Baty -- unused variable
910
    LOG_TRACE("(%p)", pContents);
845
    LOG_TRACE("(%p)", pContents);
911
 
-
 
912
    return 0;
846
    NOT_IMPLEMENTED();
913
}
847
}
914
 
848
 
915
// IDA: tNet_message* __usercall NetBuildMessage@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
849
// IDA: tNet_message* __usercall NetBuildMessage@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
916
tNet_message* NetBuildMessage(tNet_message_type pType, tS32 pSize_decider) {
850
tNet_message* NetBuildMessage(tNet_message_type pType, tS32 pSize_decider) {
917
    tNet_message* the_message;
851
    tNet_message* the_message;
Line 928... Line 862...
928
    return the_message;
862
    return the_message;
929
}
863
}
930
 
864
 
931
// IDA: tNet_contents* __usercall NetGetToHostContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
865
// IDA: tNet_contents* __usercall NetGetToHostContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
932
tNet_contents* NetGetToHostContents(tNet_message_type pType, tS32 pSize_decider) {
866
tNet_contents* NetGetToHostContents(tNet_message_type pType, tS32 pSize_decider) {
933
    tU32 the_size;
867
    //tU32 the_size; // Pierre-Marie Baty -- unused variable
934
    tNet_contents* contents;
868
    //tNet_contents* contents; // Pierre-Marie Baty -- unused variable
935
    LOG_TRACE("(%d, %d)", pType, pSize_decider);
869
    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++;
-
 
952
    return contents;
870
    NOT_IMPLEMENTED();
953
}
871
}
954
 
872
 
955
// IDA: tNet_contents* __usercall NetGetBroadcastContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
873
// IDA: tNet_contents* __usercall NetGetBroadcastContents@<EAX>(tNet_message_type pType@<EAX>, tS32 pSize_decider@<EDX>)
956
tNet_contents* NetGetBroadcastContents(tNet_message_type pType, tS32 pSize_decider) {
874
tNet_contents* NetGetBroadcastContents(tNet_message_type pType, tS32 pSize_decider) {
957
    tU32 the_size;
875
    tU32 the_size;
Line 1049... Line 967...
1049
                }
967
                }
1050
                *(void**)last_message = pointer;
968
                *(void**)last_message = pointer;
1051
            } else {
969
            } else {
1052
                gMessage_to_free = pointer;
970
                gMessage_to_free = pointer;
1053
            }
971
            }
1054
            pointer = (char*)pointer + sizeof(void*);
972
            pointer = ((void**)pointer)[1];
1055
        }
973
        }
1056
    }
974
    }
1057
    if (pointer == NULL) {
975
    if (pointer == NULL) {
1058
        LOG_PANIC("null pointer!");
976
        LOG_PANIC("null pointer!");
1059
        message = NULL;
977
        message = NULL;
Line 1155... Line 1073...
1155
    tNet_message* message;
1073
    tNet_message* message;
1156
    tNet_game_player_info* new_players;
1074
    tNet_game_player_info* new_players;
1157
    LOG_TRACE("(%p, %p)", pContents, pSender_address);
1075
    LOG_TRACE("(%p, %p)", pContents, pSender_address);
1158
 
1076
 
1159
    new_player_count = gNumber_of_net_players;
1077
    new_player_count = gNumber_of_net_players;
1160
    new_players = BrMemAllocate((new_player_count + 1) * sizeof(tNet_game_player_info), kMem_player_list_join);
1078
    new_players = BrMemAllocate(new_player_count + 1 * sizeof(tNet_game_player_info), kMem_player_list_join);
1161
    memcpy(new_players, gNet_players, gNumber_of_net_players * sizeof(tNet_game_player_info));
1079
    memcpy(new_players, gNet_players, gNumber_of_net_players * sizeof(tNet_game_player_info));
1162
 
1080
 
1163
    if ((!gCurrent_net_game->options.open_game && gProgram_state.racing) || gCurrent_net_game->num_players > 5 || gDont_allow_joiners) {
1081
    if ((!gCurrent_net_game->options.open_game && gProgram_state.racing) || gCurrent_net_game->num_players > 5 || gDont_allow_joiners) {
1164
        message = NetBuildMessage(NETMSGID_NEWPLAYERLIST, 0);
1082
        message = NetBuildMessage(NETMSGID_NEWPLAYERLIST, 0);
1165
        // Send player count = 0 when race has already begun or is full
1083
        // Send player count = 0 when race has already begun or is full
Line 1203... Line 1121...
1203
    }
1121
    }
1204
}
1122
}
1205
 
1123
 
1206
// IDA: void __usercall KickPlayerOut(tPlayer_ID pID@<EAX>)
1124
// IDA: void __usercall KickPlayerOut(tPlayer_ID pID@<EAX>)
1207
void KickPlayerOut(tPlayer_ID pID) {
1125
void KickPlayerOut(tPlayer_ID pID) {
1208
    int i;
1126
    //int i; // Pierre-Marie Baty -- unused variable
1209
    int j;
1127
    //int j; // Pierre-Marie Baty -- unused variable
1210
    int new_player_count;
1128
    //int new_player_count; // Pierre-Marie Baty -- unused variable
1211
    tNet_game_player_info* new_players;
1129
    //tNet_game_player_info* new_players; // Pierre-Marie Baty -- unused variable
1212
    LOG_TRACE("(%d)", pID);
1130
    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);
-
 
1238
    SendOutPlayerList();
1131
    NOT_IMPLEMENTED();
1239
}
1132
}
1240
 
1133
 
1241
// IDA: void __usercall ReceivedLeave(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>)
1134
// IDA: void __usercall ReceivedLeave(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>)
1242
void ReceivedLeave(tNet_contents* pContents, tNet_message* pMessage) {
1135
void ReceivedLeave(tNet_contents* pContents, tNet_message* pMessage) {
1243
    LOG_TRACE("(%p, %p)", pContents, pMessage);
1136
    LOG_TRACE("(%p, %p)", pContents, pMessage);
1244
 
-
 
1245
    KickPlayerOut(pMessage->sender);
1137
    NOT_IMPLEMENTED();
1246
}
1138
}
1247
 
1139
 
1248
// IDA: void __usercall NetFullScreenMessage(int pStr_index@<EAX>, int pLeave_it_up_there@<EDX>)
1140
// IDA: void __usercall NetFullScreenMessage(int pStr_index@<EAX>, int pLeave_it_up_there@<EDX>)
1249
void NetFullScreenMessage(int pStr_index, int pLeave_it_up_there) {
1141
void NetFullScreenMessage(int pStr_index, int pLeave_it_up_there) {
1250
    tU32 start_time;
1142
    tU32 start_time;
Line 1319... Line 1211...
1319
 
1211
 
1320
// IDA: void __usercall ReceivedHosticide(tNet_contents *pContents@<EAX>)
1212
// IDA: void __usercall ReceivedHosticide(tNet_contents *pContents@<EAX>)
1321
void ReceivedHosticide(tNet_contents* pContents) {
1213
void ReceivedHosticide(tNet_contents* pContents) {
1322
    LOG_TRACE("(%p)", pContents);
1214
    LOG_TRACE("(%p)", pContents);
1323
 
1215
 
1324
    HostHasBittenTheDust(kMiscString_GAME_TERMINATED_BY_HOST);
1216
    HostHasBittenTheDust(73);
1325
}
1217
}
1326
 
1218
 
1327
// IDA: void __cdecl ConfirmReceipt()
1219
// IDA: void __cdecl ConfirmReceipt()
1328
void ConfirmReceipt(void) {
1220
void ConfirmReceipt(void) {
1329
    //tNet_message* the_message; // Pierre-Marie Baty -- unused variable
1221
    //tNet_message* the_message; // Pierre-Marie Baty -- unused variable
Line 1419... Line 1311...
1419
    }
1311
    }
1420
}
1312
}
1421
 
1313
 
1422
// IDA: void __usercall ReceivedStartRace(tNet_contents *pContents@<EAX>)
1314
// IDA: void __usercall ReceivedStartRace(tNet_contents *pContents@<EAX>)
1423
void ReceivedStartRace(tNet_contents* pContents) {
1315
void ReceivedStartRace(tNet_contents* pContents) {
1424
    int i;
1316
    //int i; // Pierre-Marie Baty -- unused variable
1425
    int index;
1317
    //int index; // Pierre-Marie Baty -- unused variable
1426
    LOG_TRACE("(%p)", pContents);
1318
    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();
-
 
1436
                }
1319
    NOT_IMPLEMENTED();
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
    }
-
 
1471
}
1320
}
1472
 
1321
 
1473
// IDA: void __usercall ReceivedGuaranteeReply(tNet_contents *pContents@<EAX>)
1322
// IDA: void __usercall ReceivedGuaranteeReply(tNet_contents *pContents@<EAX>)
1474
void ReceivedGuaranteeReply(tNet_contents* pContents) {
1323
void ReceivedGuaranteeReply(tNet_contents* pContents) {
1475
    int i;
1324
    int i;
Line 1512... Line 1361...
1512
    //tNet_message* message; // Pierre-Marie Baty -- unused variable
1361
    //tNet_message* message; // Pierre-Marie Baty -- unused variable
1513
    LOG_TRACE("(%p)", pContents);
1362
    LOG_TRACE("(%p)", pContents);
1514
 
1363
 
1515
    if (pContents->data.heres_where_we_at.race_index != gProgram_state.current_race_index) {
1364
    if (pContents->data.heres_where_we_at.race_index != gProgram_state.current_race_index) {
1516
        NetLeaveGame(gCurrent_net_game);
1365
        NetLeaveGame(gCurrent_net_game);
1517
        NetFullScreenMessage(kMiscString_RACE_CHANGED_DURING_LOADING, 0);
1366
        NetFullScreenMessage(128, 0);
1518
        gProgram_state.prog_status = eProg_idling;
1367
        gProgram_state.prog_status = eProg_idling;
1519
    }
1368
    }
1520
    if (pContents->data.heres_where_we_at.race_has_started) {
1369
    if (pContents->data.heres_where_we_at.race_has_started) {
1521
        if (gCurrent_net_game->options.open_game) {
1370
        if (gCurrent_net_game->options.open_game) {
1522
            gPending_race = pContents->data.heres_where_we_at.pending_race;
1371
            gPending_race = pContents->data.heres_where_we_at.pending_race;
1523
        } else {
1372
        } else {
1524
            NetFullScreenMessage(kMiscString_SORRY_YOU_RE_TOO_LATE, 0);
1373
            NetFullScreenMessage(89, 0);
1525
            gProgram_state.prog_status = eProg_idling;
1374
            gProgram_state.prog_status = eProg_idling;
1526
        }
1375
        }
1527
    }
1376
    }
1528
}
1377
}
1529
 
1378
 
Line 1553... Line 1402...
1553
}
1402
}
1554
 
1403
 
1555
// IDA: void __usercall ReceivedTimeSync(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>, tU32 pReceive_time@<EBX>)
1404
// IDA: void __usercall ReceivedTimeSync(tNet_contents *pContents@<EAX>, tNet_message *pMessage@<EDX>, tU32 pReceive_time@<EBX>)
1556
void ReceivedTimeSync(tNet_contents* pContents, tNet_message* pMessage, tU32 pReceive_time) {
1405
void ReceivedTimeSync(tNet_contents* pContents, tNet_message* pMessage, tU32 pReceive_time) {
1557
    LOG_TRACE("(%p, %p, %d)", pContents, pMessage, pReceive_time);
1406
    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;
-
 
1561
    }
1407
    NOT_IMPLEMENTED();
1562
}
1408
}
1563
 
1409
 
1564
// IDA: void __usercall ReceivedConfirm(tNet_contents *pContents@<EAX>)
1410
// IDA: void __usercall ReceivedConfirm(tNet_contents *pContents@<EAX>)
1565
void ReceivedConfirm(tNet_contents* pContents) {
1411
void ReceivedConfirm(tNet_contents* pContents) {
1566
    int i;
1412
    //int i; // Pierre-Marie Baty -- unused variable
1567
    LOG_TRACE("(%p)", pContents);
1413
    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;
-
 
1572
            return;
1414
    NOT_IMPLEMENTED();
1573
        }
-
 
1574
    }
-
 
1575
}
1415
}
1576
 
1416
 
1577
// IDA: void __usercall ReceivedDisableCar(tNet_contents *pContents@<EAX>)
1417
// IDA: void __usercall ReceivedDisableCar(tNet_contents *pContents@<EAX>)
1578
void ReceivedDisableCar(tNet_contents* pContents) {
1418
void ReceivedDisableCar(tNet_contents* pContents) {
1579
    LOG_TRACE("(%p)", pContents);
1419
    LOG_TRACE("(%p)", pContents);
1580
 
-
 
-
 
1420
    NOT_IMPLEMENTED();
1581
}
1421
}
1582
 
1422
 
1583
// IDA: void __usercall ReceivedEnableCar(tNet_contents *pContents@<EAX>)
1423
// IDA: void __usercall ReceivedEnableCar(tNet_contents *pContents@<EAX>)
1584
void ReceivedEnableCar(tNet_contents* pContents) {
1424
void ReceivedEnableCar(tNet_contents* pContents) {
1585
    LOG_TRACE("(%p)", pContents);
1425
    LOG_TRACE("(%p)", pContents);
1586
 
-
 
-
 
1426
    NOT_IMPLEMENTED();
1587
}
1427
}
1588
 
1428
 
1589
// IDA: void __usercall ReceivedScores(tNet_contents *pContents@<EAX>)
1429
// IDA: void __usercall ReceivedScores(tNet_contents *pContents@<EAX>)
1590
void ReceivedScores(tNet_contents* pContents) {
1430
void ReceivedScores(tNet_contents* pContents) {
1591
    int i;
1431
    //int i; // Pierre-Marie Baty -- unused variable
1592
    LOG_TRACE("(%p)", pContents);
1432
    LOG_TRACE("(%p)", pContents);
1593
 
-
 
1594
    UseGeneralScore(pContents->data.scores.general_score);
-
 
1595
    for (i = 0; i < gNumber_of_net_players; i++) {
1433
    NOT_IMPLEMENTED();
1596
        gNet_players[i].score = pContents->data.scores.scores[i];
-
 
1597
    }
-
 
1598
}
1434
}
1599
 
1435
 
1600
// IDA: void __usercall ReceivedWasted(tNet_contents *pContents@<EAX>)
1436
// IDA: void __usercall ReceivedWasted(tNet_contents *pContents@<EAX>)
1601
void ReceivedWasted(tNet_contents* pContents) {
1437
void ReceivedWasted(tNet_contents* pContents) {
1602
    tNet_game_player_info* victim;
1438
    //tNet_game_player_info* victim; // Pierre-Marie Baty -- unused variable
1603
    tNet_game_player_info* culprit;
1439
    //tNet_game_player_info* culprit; // Pierre-Marie Baty -- unused variable
1604
    char s[256];
1440
    //char s[256]; // Pierre-Marie Baty -- unused variable
1605
    tCar_spec* car;
1441
    //tCar_spec* car; // Pierre-Marie Baty -- unused variable
1606
    static tS32 last_got_wasted_time;
1442
    //static tS32 last_got_wasted_time; // Pierre-Marie Baty -- unused variable
1607
    static tS32 last_wasted_em_time;
1443
    //static tS32 last_wasted_em_time; // Pierre-Marie Baty -- unused variable
1608
    static tS32 last_wasty_message_time;
1444
    //static tS32 last_wasty_message_time; // Pierre-Marie Baty -- unused variable
1609
    static tNet_game_player_info* last_culprit;
1445
    //static tNet_game_player_info* last_culprit; // Pierre-Marie Baty -- unused variable
1610
    static tNet_game_player_info* last_victim;
1446
    //static tNet_game_player_info* last_victim; // Pierre-Marie Baty -- unused variable
1611
    LOG_TRACE("(%p)", pContents);
1447
    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) {
-
 
1659
            PratcamEvent(32);
1448
    NOT_IMPLEMENTED();
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
    }
-
 
1668
}
1449
}
1669
 
1450
 
1670
// IDA: void __usercall ReceivedCarDetailsReq(tNet_contents *pContents@<EAX>, void *pSender_address@<EDX>)
1451
// IDA: void __usercall ReceivedCarDetailsReq(tNet_contents *pContents@<EAX>, void *pSender_address@<EDX>)
1671
void ReceivedCarDetailsReq(tNet_contents* pContents, void* pSender_address) {
1452
void ReceivedCarDetailsReq(tNet_contents* pContents, void* pSender_address) {
1672
    tNet_message* message;
1453
    tNet_message* message;
Line 1702... Line 1483...
1702
    gReceived_car_details = 1;
1483
    gReceived_car_details = 1;
1703
}
1484
}
1704
 
1485
 
1705
// IDA: void __usercall ReceivedGameScores(tNet_contents *pContents@<EAX>)
1486
// IDA: void __usercall ReceivedGameScores(tNet_contents *pContents@<EAX>)
1706
void ReceivedGameScores(tNet_contents* pContents) {
1487
void ReceivedGameScores(tNet_contents* pContents) {
1707
    int i;
1488
    //int i; // Pierre-Marie Baty -- unused variable
1708
    LOG_TRACE("(%p)", pContents);
1489
    LOG_TRACE("(%p)", pContents);
1709
 
-
 
1710
    gReceived_game_scores = 1;
1490
    NOT_IMPLEMENTED();
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
    }
-
 
1716
}
1491
}
1717
 
1492
 
1718
// IDA: void __usercall ReceivedMessage(tNet_message *pMessage@<EAX>, void *pSender_address@<EDX>, tU32 pReceive_time@<EBX>)
1493
// IDA: void __usercall ReceivedMessage(tNet_message *pMessage@<EAX>, void *pSender_address@<EDX>, tU32 pReceive_time@<EBX>)
1719
void ReceivedMessage(tNet_message* pMessage, void* pSender_address, tU32 pReceive_time) {
1494
void ReceivedMessage(tNet_message* pMessage, void* pSender_address, tU32 pReceive_time) {
1720
    tNet_contents* contents;
1495
    tNet_contents* contents;
Line 1894... Line 1669...
1894
                    NewTextHeadupSlot(4, 0, 3000, -4, s);
1669
                    NewTextHeadupSlot(4, 0, 3000, -4, s);
1895
                }
1670
                }
1896
            }
1671
            }
1897
        }
1672
        }
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) {
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) {
1899
        HostHasBittenTheDust(kMiscString_PANIC_HOST_HAS_DISAPPEARED);
1674
        HostHasBittenTheDust(91);
1900
    }
1675
    }
1901
}
1676
}
1902
 
1677
 
1903
// IDA: void __cdecl CheckForPendingStartRace()
1678
// IDA: void __cdecl CheckForPendingStartRace()
1904
void CheckForPendingStartRace(void) {
1679
void CheckForPendingStartRace(void) {
Line 2007... Line 1782...
2007
}
1782
}
2008
 
1783
 
2009
// IDA: int __usercall NetGuaranteedSendMessageToEverybody@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>)
1784
// IDA: int __usercall NetGuaranteedSendMessageToEverybody@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>)
2010
int NetGuaranteedSendMessageToEverybody(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) {
1785
int NetGuaranteedSendMessageToEverybody(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) {
2011
    LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail);
1786
    LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail);
2012
 
-
 
2013
    pMessage->sender = gLocal_net_ID;
-
 
2014
    pMessage->senders_time_stamp = PDGetTotalTime();
-
 
2015
    pMessage->num_contents = 1;
1787
    NOT_IMPLEMENTED();
2016
    pMessage->guarantee_number = 0;
-
 
2017
    ReceivedMessage(pMessage, &gNet_players[gThis_net_player_index], GetRaceTime());
-
 
2018
    return NetGuaranteedSendMessageToAllPlayers(pDetails, pMessage, pNotifyFail);
-
 
2019
}
1788
}
2020
 
1789
 
2021
// IDA: int __usercall NetGuaranteedSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>)
1790
// IDA: int __usercall NetGuaranteedSendMessageToHost@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, int (*pNotifyFail)(tU32, tNet_message*)@<EBX>)
2022
int NetGuaranteedSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) {
1791
int NetGuaranteedSendMessageToHost(tNet_game_details* pDetails, tNet_message* pMessage, int (*pNotifyFail)(tU32, tNet_message*)) {
2023
    LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail);
1792
    LOG_TRACE("(%p, %p, %p)", pDetails, pMessage, pNotifyFail);
Line 2122... Line 1891...
2122
}
1891
}
2123
 
1892
 
2124
// IDA: int __usercall SampleFailNotifier@<EAX>(tU32 pAge@<EAX>, tNet_message *pMessage@<EDX>)
1893
// IDA: int __usercall SampleFailNotifier@<EAX>(tU32 pAge@<EAX>, tNet_message *pMessage@<EDX>)
2125
int SampleFailNotifier(tU32 pAge, tNet_message* pMessage) {
1894
int SampleFailNotifier(tU32 pAge, tNet_message* pMessage) {
2126
    LOG_TRACE("(%d, %p)", pAge, pMessage);
1895
    LOG_TRACE("(%d, %p)", pAge, pMessage);
2127
 
-
 
2128
    return pAge > 9999;
1896
    NOT_IMPLEMENTED();
2129
}
1897
}
2130
 
1898
 
2131
// IDA: void __cdecl NetWaitForGuaranteeReplies()
1899
// IDA: void __cdecl NetWaitForGuaranteeReplies()
2132
void NetWaitForGuaranteeReplies(void) {
1900
void NetWaitForGuaranteeReplies(void) {
2133
    tU32 start_time;
1901
    tU32 start_time;
Line 2142... Line 1910...
2142
    }
1910
    }
2143
}
1911
}
2144
 
1912
 
2145
// IDA: tNet_game_player_info* __usercall NetPlayerFromID@<EAX>(tPlayer_ID pPlayer@<EAX>)
1913
// IDA: tNet_game_player_info* __usercall NetPlayerFromID@<EAX>(tPlayer_ID pPlayer@<EAX>)
2146
tNet_game_player_info* NetPlayerFromID(tPlayer_ID pPlayer) {
1914
tNet_game_player_info* NetPlayerFromID(tPlayer_ID pPlayer) {
2147
    int i;
1915
    //int i; // Pierre-Marie Baty -- unused variable
2148
    LOG_TRACE("(%d)", pPlayer);
1916
    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
    }
-
 
2155
    return 0;
1917
    NOT_IMPLEMENTED();
2156
}
1918
}
2157
 
1919
 
2158
// IDA: tCar_spec* __usercall NetCarFromPlayerID@<EAX>(tPlayer_ID pPlayer@<EAX>)
1920
// IDA: tCar_spec* __usercall NetCarFromPlayerID@<EAX>(tPlayer_ID pPlayer@<EAX>)
2159
tCar_spec* NetCarFromPlayerID(tPlayer_ID pPlayer) {
1921
tCar_spec* NetCarFromPlayerID(tPlayer_ID pPlayer) {
2160
    int i;
1922
    //int i; // Pierre-Marie Baty -- unused variable
2161
    tNet_game_player_info* player;
1923
    //tNet_game_player_info* player; // Pierre-Marie Baty -- unused variable
2162
    LOG_TRACE("(%d)", pPlayer);
1924
    LOG_TRACE("(%d)", pPlayer);
2163
 
-
 
2164
    player = NetPlayerFromID(pPlayer);
-
 
2165
    if (player) {
-
 
2166
        return player->car;
-
 
2167
    }
-
 
2168
    return NULL;
1925
    NOT_IMPLEMENTED();
2169
}
1926
}
2170
 
1927
 
2171
// IDA: tNet_game_player_info* __usercall NetPlayerFromCar@<EAX>(tCar_spec *pCar@<EAX>)
1928
// IDA: tNet_game_player_info* __usercall NetPlayerFromCar@<EAX>(tCar_spec *pCar@<EAX>)
2172
tNet_game_player_info* NetPlayerFromCar(tCar_spec* pCar) {
1929
tNet_game_player_info* NetPlayerFromCar(tCar_spec* pCar) {
2173
    int i;
1930
    //int i; // Pierre-Marie Baty -- unused variable
2174
    LOG_TRACE("(%p)", pCar);
1931
    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
    }
-
 
2181
    return 0;
1932
    NOT_IMPLEMENTED();
2182
}
1933
}
2183
 
1934
 
2184
// IDA: tU32 __usercall DoCheckSum@<EAX>(tNet_message *pMessage@<EAX>)
1935
// IDA: tU32 __usercall DoCheckSum@<EAX>(tNet_message *pMessage@<EAX>)
2185
tU32 DoCheckSum(tNet_message* pMessage) {
1936
tU32 DoCheckSum(tNet_message* pMessage) {
2186
    //int i; // Pierre-Marie Baty -- unused variable
1937
    //int i; // Pierre-Marie Baty -- unused variable