mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-20 14:00:20 +02:00
1022 lines
28 KiB
C
1022 lines
28 KiB
C
/*
|
|
NETWORK_CLIENT_MANAGER.C
|
|
|
|
symbols in this file:
|
|
001141C0 0040:
|
|
_code_001141c0 (0000)
|
|
00114200 0060:
|
|
_network_game_client_dispose (0000)
|
|
00114260 0020:
|
|
_network_game_client_keep_alive (0000)
|
|
00114280 0070:
|
|
_network_game_client_get_state (0000)
|
|
001142F0 0100:
|
|
_network_game_client_initiate_join_game (0000)
|
|
001143F0 0070:
|
|
_network_game_client_set_machine (0000)
|
|
00114460 0030:
|
|
_network_game_client_get_machine (0000)
|
|
00114490 0040:
|
|
_network_game_client_get_machine_index (0000)
|
|
001144D0 0040:
|
|
_network_game_client_get_available_games (0000)
|
|
00114510 0040:
|
|
_network_game_client_get_error (0000)
|
|
00114550 0040:
|
|
_network_game_client_get_seconds_to_game_start (0000)
|
|
00114590 0010:
|
|
_network_game_client_write (0000)
|
|
001145A0 00d0:
|
|
_network_game_client_address_matches_server (0000)
|
|
00114670 0070:
|
|
_network_game_client_game_out_of_sync (0000)
|
|
001146E0 00b0:
|
|
_network_game_client_ponged (0000)
|
|
00114790 0110:
|
|
_network_game_client_accepted_into_game (0000)
|
|
001148A0 0130:
|
|
_network_game_client_game_settings_updated (0000)
|
|
001149D0 0060:
|
|
_unstrip_player_index (0000)
|
|
00114A30 01a0:
|
|
_network_game_client_game_has_started (0000)
|
|
00114BD0 0190:
|
|
_network_game_client_handle_game_update (0000)
|
|
00114D60 0100:
|
|
_network_game_client_add_player_to_game (0000)
|
|
00114E60 0050:
|
|
_network_game_client_switch_to_postgame (0000)
|
|
00114EB0 00b0:
|
|
_network_game_client_switch_to_pregame (0000)
|
|
00114F60 0040:
|
|
_network_game_client_get_connection (0000)
|
|
00114FA0 0050:
|
|
_network_game_client_get_remote_server_address (0000)
|
|
00114FF0 0040:
|
|
_network_game_client_get_game (0000)
|
|
00115030 0040:
|
|
_network_game_client_server_has_started_game (0000)
|
|
00115070 0040:
|
|
_network_game_client_get_next_update_number (0000)
|
|
001150B0 0040:
|
|
_network_client_get_oos (0000)
|
|
001150F0 01f0:
|
|
_network_game_client_add_player (0000)
|
|
001152E0 0100:
|
|
_network_game_client_update_local_player_data (0000)
|
|
001153E0 00d0:
|
|
_network_game_client_request_start_time_change (0000)
|
|
001154B0 0050:
|
|
_network_game_client_countdown_timer_update (0000)
|
|
00115500 0030:
|
|
_network_game_client_advertised_game_is_valid (0000)
|
|
00115530 02d0:
|
|
_code_00115530 (0000)
|
|
00115800 0050:
|
|
_code_00115800 (0000)
|
|
00115850 00c0:
|
|
_code_00115850 (0000)
|
|
00115910 0080:
|
|
_code_00115910 (0000)
|
|
00115990 0260:
|
|
_network_game_client_leave_game (0000)
|
|
00115BF0 01f0:
|
|
_network_game_client_request_remove_player (0000)
|
|
00115DE0 0170:
|
|
_network_game_client_remove_player (0000)
|
|
00115F50 0050:
|
|
_network_game_client_new_advertised_game (0000)
|
|
00115FA0 0070:
|
|
_network_game_client_game_shutdown (0000)
|
|
00116010 00e0:
|
|
_network_game_client_reset (0000)
|
|
001160F0 02c0:
|
|
_code_001160f0 (0000)
|
|
001163B0 0180:
|
|
_code_001163b0 (0000)
|
|
00116530 00d0:
|
|
_code_00116530 (0000)
|
|
00116600 0190:
|
|
_code_00116600 (0000)
|
|
00116790 00a0:
|
|
_code_00116790 (0000)
|
|
00116830 0090:
|
|
_network_game_client_create (0000)
|
|
001168C0 0130:
|
|
_network_game_client_idle (0000)
|
|
001169F0 00c0:
|
|
_network_game_client_rejected_by_game (0000)
|
|
0027FC5C 0018:
|
|
??_C@_0BI@DEMLIONO@network?5client?5disposed?$AA@ (0000)
|
|
0027FC74 002d:
|
|
??_C@_0CN@POHNGKMA@network_game_client_dont_use_dir@ (0000)
|
|
0027FCA4 0033:
|
|
??_C@_0DD@GHLNCEHN@c?3?2halo?2SOURCE?2networking?2networ@ (0000)
|
|
0027FCD8 0007:
|
|
??_C@_06DGDLPBAN@client?$AA@ (0000)
|
|
0027FCE0 0035:
|
|
??_C@_0DF@IEPBBGCD@failed?5attempt?5to?5initiate?5a?5con@ (0000)
|
|
0027FD18 0023:
|
|
??_C@_0CD@NIGOILLF@attempting?5to?5connect?5to?5game?5?$EA?5@ (0000)
|
|
0027FD40 00e1:
|
|
??_C@_0OB@CAKDCBMD@client?5?$CG?$CG?5?$CIclient?9?$DOstate?5?$DN?$DN?5_net@ (0000)
|
|
0027FE28 0065:
|
|
??_C@_0GF@JAOOPLIH@client?5?$CG?$CG?5?$CIclient?9?$DOmachine_index@ (0000)
|
|
0027FE90 001e:
|
|
??_C@_0BO@IIIGFMHE@address?9?$DOaddress?4ipv4_address?$AA@ (0000)
|
|
0027FEB0 0010:
|
|
??_C@_0BA@IONABMGK@address?5?$CB?$DN?5NULL?$AA@ (0000)
|
|
0027FEC0 0013:
|
|
??_C@_0BD@PONNKDL@client?9?$DOconnection?$AA@ (0000)
|
|
0027FED4 000f:
|
|
??_C@_0P@FOLJNCCO@client?5?$CB?$DN?5NULL?$AA@ (0000)
|
|
0027FEE4 002d:
|
|
??_C@_0CN@FOHIFFFA@local?5machine?5is?5out?5of?5sync?5wit@ (0000)
|
|
0027FF14 0036:
|
|
??_C@_0DG@JNMFILGG@received?5a?5pong?5from?5a?5system?5we@ (0000)
|
|
0027FF4C 0020:
|
|
??_C@_0CA@IDICKDHG@received?5a?5pong?5from?5the?5future?$AA@ (0000)
|
|
0027FF6C 0019:
|
|
??_C@_0BJ@NIPOLBAB@client?5?$CG?$CG?5source_address?$AA@ (0000)
|
|
0027FF88 004c:
|
|
??_C@_0EM@DJKCNCJP@received?5a?5message_server_machin@ (0000)
|
|
0027FFD4 003b:
|
|
??_C@_0DL@PONBKBJJ@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280010 005b:
|
|
??_C@_0FL@OHPOKFBL@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
0028006C 0033:
|
|
??_C@_0DD@POLEJMBC@successfully?5joined?5a?5net?5game?$DL?5@ (0000)
|
|
002800A0 0064:
|
|
??_C@_0GE@OLBCDHF@client?5?$CG?$CG?5source_address?5?$CG?$CG?5mess@ (0000)
|
|
00280108 005e:
|
|
??_C@_0FO@NIJHHMKN@invalid?5message_server_game_sett@ (0000)
|
|
00280168 0021:
|
|
??_C@_0CB@KMIKJFNP@player?5count?5?$CFd?5machine?5count?5?$CFd@ (0000)
|
|
00280190 0060:
|
|
??_C@_0GA@FCJMEIKG@received?5updated?5game?5settings?5f@ (0000)
|
|
002801F0 0017:
|
|
??_C@_0BH@KPFLOHLF@precaching?5map?5?8?$CFs?8?4?4?4?$AA@ (0000)
|
|
00280208 0019:
|
|
??_C@_0BJ@MGLALEIH@client?5?$CG?$CG?5message_packet?$AA@ (0000)
|
|
00280224 0027:
|
|
??_C@_0CH@CHLJGLMB@failed?5to?5load?5the?5necessary?5gam@ (0000)
|
|
0028024C 0031:
|
|
??_C@_0DB@BGLEMKKH@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280280 0051:
|
|
??_C@_0FB@NFJPBNDI@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
002802D4 0028:
|
|
??_C@_0CI@DFFIDDAF@local?5machine?5is?5loaded?5?$CG?5ready?5@ (0000)
|
|
00280300 0040:
|
|
??_C@_0EA@MFKNPKNH@client?5?$CG?$CG?5?$CIclient?9?$DOstate?5?$DN?$DN?5_net@ (0000)
|
|
00280340 0036:
|
|
??_C@_0DG@PKKMJLJH@client?5is?5lagging?5behind?5the?5ser@ (0000)
|
|
00280378 0061:
|
|
??_C@_0GB@LLAIIL@out?5of?5sync?3?5client?1server?5rando@ (0000)
|
|
002803DC 002d:
|
|
??_C@_0CN@HEOJJEAC@not?5a?5bug?0?5but?5update?5?$CFd?5time?5?$CFd@ (0000)
|
|
0028040C 003e:
|
|
??_C@_0DO@OFILJPBP@out?5of?5sync?3?5missed?5a?5server?5upd@ (0000)
|
|
0028044C 003c:
|
|
??_C@_0DM@JCJEPCIA@added?5new?5player?5to?5the?5game?5?$CIma@ (0000)
|
|
00280488 0011:
|
|
??_C@_0BB@NJALFKEL@client?5?$CG?$CG?5player?$AA@ (0000)
|
|
0028049C 0016:
|
|
??_C@_0BG@OEHGDLGH@switching?5to?5postgame?$AA@ (0000)
|
|
002804B4 0015:
|
|
??_C@_0BF@FFECCEDB@switching?5to?5pregame?$AA@ (0000)
|
|
002804CC 001e:
|
|
??_C@_0BO@NFAGDPGC@client?5is?5in?5an?5unknown?5state?$AA@ (0000)
|
|
002804EC 002e:
|
|
??_C@_0CO@BDJGBKN@client?5tried?5to?5add?5a?5new?5player@ (0000)
|
|
00280520 0044:
|
|
??_C@_0EE@EPIGONGI@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280568 0064:
|
|
??_C@_0GE@JOEDNBHN@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
002805D0 0045:
|
|
??_C@_0EF@CDEPJEJP@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280618 0065:
|
|
??_C@_0GF@EOEDLFEI@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00280680 0039:
|
|
??_C@_0DJ@IAEGENPP@can?8t?5add?5players?5to?5a?5game?5unti@ (0000)
|
|
002806BC 0034:
|
|
??_C@_0DE@DFECLBOM@requesting?5a?5player?5addition?5?$CIco@ (0000)
|
|
002806F0 005a:
|
|
??_C@_0FK@DNGOMOFK@client?5?$CG?$CG?5?$CIlocal_player_index?$DO?$DN0@ (0000)
|
|
00280750 0075:
|
|
??_C@_0HF@KCCMHIFI@network_game_client_update_local@ (0000)
|
|
002807C8 0020:
|
|
??_C@_0CA@GNHJCNBC@network_player_is_valid?$CIplayer?$CJ?$AA@ (0000)
|
|
002807E8 002d:
|
|
??_C@_0CN@MLPKDKFB@player?9?$DOmachine_index?$DN?$DNclient?9?$DOm@ (0000)
|
|
00280818 005b:
|
|
??_C@_0FL@EPANHPNG@failed?5to?5send?5a?5message_client_@ (0000)
|
|
00280878 006b:
|
|
??_C@_0GL@IAFAMNHJ@network_game_client_request_star@ (0000)
|
|
002808E8 0042:
|
|
??_C@_0EC@OCMHEGGP@?$CIrequest_type?$DO?$DN0?$CJ?5?$CG?$CG?5?$CIrequest_ty@ (0000)
|
|
0028092C 0038:
|
|
??_C@_0DI@NNABEADG@there?5is?5?$CFs?5?$CFs?5net?5game?5with?5?$CFd?5@ (0000)
|
|
00280964 0009:
|
|
??_C@_08EDJFMNDP@a?5closed?$AA@ (0000)
|
|
00280970 0008:
|
|
??_C@_07JPIGLNNP@an?5open?$AA@ (0000)
|
|
00280978 0013:
|
|
??_C@_0BD@DEAGDPEH@?$DMunknown?5platform?$DO?$AA@ (0000)
|
|
0028098C 0003:
|
|
??_C@_02LHFGBEJL@PC?$AA@ (0000)
|
|
00280990 0005:
|
|
??_C@_04KEMOGDLN@XBox?$AA@ (0000)
|
|
00280998 0008:
|
|
??_C@_17JLFEDMMI@?$AA?$DP?$AA?$DP?$AA?$DP?$AA?$AA@ (0000)
|
|
002809A0 0050:
|
|
??_C@_0FA@NLFFOHBN@not?5fatal?0?5but?5we?5have?5to?5many?5a@ (0000)
|
|
002809F0 000f:
|
|
??_C@_0P@JAPJELHA@current?9?$DOvalid?$AA@ (0000)
|
|
00280A00 0065:
|
|
??_C@_0GF@OLAKLCGH@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00280A68 005f:
|
|
??_C@_0FP@INNHEEHK@network_game_client_handle_messa@ (0000)
|
|
00280AC8 004b:
|
|
??_C@_0EL@PNCEEMAP@network_connection_disconnect?$CI?$CJ?5@ (0000)
|
|
00280B18 0066:
|
|
??_C@_0GG@PLNHOJNK@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00280B80 0049:
|
|
??_C@_0EJ@ENIOKCKK@network_connection_disconnect?$CI?$CJ?5@ (0000)
|
|
00280BD0 004a:
|
|
??_C@_0EK@GLADDNKH@network_connection_disconnect?$CI?$CJ?5@ (0000)
|
|
00280C20 0045:
|
|
??_C@_0EF@IGAGJDLA@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280C68 004a:
|
|
??_C@_0EK@PGHLLHE@network_connection_disconnect?$CI?$CJ?5@ (0000)
|
|
00280CB4 0032:
|
|
??_C@_0DC@NBAMODMB@?$CBnetwork_connection_connected?$CIcl@ (0000)
|
|
00280CE8 0015:
|
|
??_C@_0BF@IHNDJMJI@leaving?5network?5game?$AA@ (0000)
|
|
00280D00 001d:
|
|
??_C@_0BN@LOKEMLAG@client?5?$CG?$CG?5client?9?$DOconnection?$AA@ (0000)
|
|
00280D20 0049:
|
|
??_C@_0EJ@ENDAFHHG@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280D70 0069:
|
|
??_C@_0GJ@FAIKKIGI@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00280DE0 0047:
|
|
??_C@_0EH@PAHGGHIO@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280E28 0047:
|
|
??_C@_0EH@NIHALOOC@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00280E70 003e:
|
|
??_C@_0DO@LCAGMDAF@can?8t?5remove?5players?5from?5a?5game@ (0000)
|
|
00280EB0 0033:
|
|
??_C@_0DD@MJJEPI@requesting?5a?5player?5removal?5?$CIcon@ (0000)
|
|
00280EE4 0039:
|
|
??_C@_0DJ@ICFAMCBO@client?8s?5can?5only?5remove?5players@ (0000)
|
|
00280F20 002a:
|
|
??_C@_0CK@HGKAMGLN@client?5?$CG?$CG?5network_player_is_vali@ (0000)
|
|
00280F50 004b:
|
|
??_C@_0EL@IAJNHEOO@network?5game?5tried?5to?5delete?5a?5p@ (0000)
|
|
00280F9C 003a:
|
|
??_C@_0DK@NONHICBE@no?5local?5players?5remain?5in?5the?5g@ (0000)
|
|
00280FD8 0027:
|
|
??_C@_0CH@HDEKFDCH@?$CFx?5quit?5of?5of?5game?5at?5tick?5?$CFd?5?$CIn@ (0000)
|
|
00281000 001f:
|
|
??_C@_0BP@BGMFPCP@the?5game?5host?5is?5shutting?5down?$AA@ (0000)
|
|
00281020 002b:
|
|
??_C@_0CL@FIOOPCIN@failed?5to?5reinitialize?5network?5g@ (0000)
|
|
0028104C 002f:
|
|
??_C@_0CP@KMAGFDPK@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00281080 004f:
|
|
??_C@_0EP@PHHJAEIL@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
002810D0 0040:
|
|
??_C@_0EA@BPICBMAG@failed?5to?5create?5a?5message_clien@ (0000)
|
|
00281110 0060:
|
|
??_C@_0GA@PDNHMAGG@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00281170 0028:
|
|
??_C@_0CI@BAIHEHNF@sent?5out?5a?5broadcast?5game?5search@ (0000)
|
|
00281198 005f:
|
|
??_C@_0FP@MCNPILK@network_game_client_process_inco@ (0000)
|
|
002811F8 0049:
|
|
??_C@_0EJ@CNGHFAJM@network_connection_idle?$CI?$CJ?5failed@ (0000)
|
|
00281244 0030:
|
|
??_C@_0DA@OHNFENCP@network_game_client_initiate_joi@ (0000)
|
|
00281278 0047:
|
|
??_C@_0EH@NDJKGODE@network_connection_idle?$CI?$CJ?5failed@ (0000)
|
|
002812C0 0045:
|
|
??_C@_0EF@EDNLPKBO@client?5connection?5process?5has?5ti@ (0000)
|
|
00281308 005d:
|
|
??_C@_0FN@FLBCCMKM@network_game_client_process_inco@ (0000)
|
|
00281368 003c:
|
|
??_C@_0DM@ONBHNBGE@failed?5to?5create?5a?5message_clien@ (0000)
|
|
002813A8 0056:
|
|
??_C@_0FG@EPCJDBOJ@network_game_client_write?$CI?$CJ?5fail@ (0000)
|
|
00281400 005d:
|
|
??_C@_0FN@PFNMPIAB@network_game_client_process_inco@ (0000)
|
|
00281460 0047:
|
|
??_C@_0EH@HNFELKJJ@network_connection_idle?$CI?$CJ?5failed@ (0000)
|
|
002814A8 0046:
|
|
??_C@_0EG@BKDKHIKF@network_connection_idle?$CI?$CJ?5failed@ (0000)
|
|
002814F0 001c:
|
|
??_C@_0BM@GGCBKEBE@new2?5idle?5in?5game?5abort?5hit?$AA@ (0000)
|
|
0028150C 001b:
|
|
??_C@_0BL@IEONCJFK@new?5idle?5in?5game?5abort?5hit?$AA@ (0000)
|
|
00281528 005c:
|
|
??_C@_0FM@JKCCAGHN@network_game_client_process_inco@ (0000)
|
|
00281588 0050:
|
|
??_C@_0FA@IKFHHCAC@network?5client?5connection?5has?5be@ (0000)
|
|
002815D8 002d:
|
|
??_C@_0CN@GOKOEOFK@network?5connection?5went?5down?5?$CIid@ (0000)
|
|
00281608 005e:
|
|
??_C@_0FO@IANECALJ@network_game_client_process_inco@ (0000)
|
|
00281668 0048:
|
|
??_C@_0EI@HOIILDIN@network_connection_idle?$CI?$CJ?5failed@ (0000)
|
|
002816B0 0049:
|
|
??_C@_0EJ@KIFFADMI@network_game_create_client?$CI?$CJ?5fai@ (0000)
|
|
002816FC 002e:
|
|
??_C@_0CO@LNIBCIDF@?$CBnetwork_game_client_dont_use_di@ (0000)
|
|
0028172C 0018:
|
|
??_C@_0BI@HFOMKHNG@?$CB?$CCunknown?5client?5state?$CC?$AA@ (0000)
|
|
00281744 002b:
|
|
??_C@_0CL@EHLJKOCJ@network_game_client_idle_postgam@ (0000)
|
|
00281770 0029:
|
|
??_C@_0CJ@NNEAELPC@network_game_client_idle_ingame?$CI@ (0000)
|
|
0028179C 002a:
|
|
??_C@_0CK@IFHOOMMF@network_game_client_idle_pregame@ (0000)
|
|
002817C8 002a:
|
|
??_C@_0CK@NBDMDINO@network_game_client_idle_joining@ (0000)
|
|
002817F4 002c:
|
|
??_C@_0CM@IDLHBFKK@network_game_client_idle_searchi@ (0000)
|
|
00281820 0024:
|
|
??_C@_0CE@DOGOGKDE@unable?5to?5join?5game?3?5reason?$DN?5?$CD?$CFd@ (0000)
|
|
00281844 0024:
|
|
??_C@_0CE@JOPGMOA@_rejection_code_blacklisted_mach@ (0000)
|
|
00281868 001f:
|
|
??_C@_0BP@EHGPFGEK@_rejection_code_game_is_closed?$AA@ (0000)
|
|
00281888 001d:
|
|
??_C@_0BN@IDHMJFHO@_rejection_code_game_is_full?$AA@ (0000)
|
|
002818A8 001d:
|
|
??_C@_0BN@NIEJJECI@_rejection_code_bad_password?$AA@ (0000)
|
|
002818C8 001f:
|
|
??_C@_0BP@MGMNOIHD@_rejection_code_bad_join_token?$AA@ (0000)
|
|
002818E8 0020:
|
|
??_C@_0CA@EEFCENHL@_rejection_code_version_too_new?$AA@ (0000)
|
|
00281908 0020:
|
|
??_C@_0CA@JCNAFAAD@_rejection_code_version_too_old?$AA@ (0000)
|
|
004566D8 0002:
|
|
_allow_out_of_sync (0000)
|
|
_network_game_client_dont_use_directly_in_use (0001)
|
|
*/
|
|
|
|
/* ---------- headers */
|
|
|
|
#include "cseries.h"
|
|
|
|
/* ---------- constants */
|
|
|
|
enum
|
|
{
|
|
MAXIMUM_NETWORK_MACHINE_COUNT = 4,
|
|
_error_silent = 2
|
|
};
|
|
|
|
/* ---------- macros */
|
|
|
|
#define network_machine_is_valid(machine) \
|
|
((machine) && (machine)->machine_index >= 0 && \
|
|
(machine)->machine_index < MAXIMUM_NETWORK_MACHINE_COUNT)
|
|
|
|
/* ---------- structures */
|
|
|
|
struct network_machine
|
|
{
|
|
byte __unknown0[0x40];
|
|
char machine_index;
|
|
byte __padding41[3];
|
|
};
|
|
|
|
struct network_game
|
|
{
|
|
byte __unknown0[0x114];
|
|
struct network_machine machines[MAXIMUM_NETWORK_MACHINE_COUNT];
|
|
byte __unknown224[0x210];
|
|
};
|
|
|
|
struct network_advertised_game
|
|
{
|
|
byte __unknown0[0x2C];
|
|
unsigned long update_time;
|
|
byte __unknown30[0xB1];
|
|
boolean valid;
|
|
};
|
|
|
|
struct data_array;
|
|
|
|
struct data_iterator
|
|
{
|
|
struct data_array *data;
|
|
short absolute_index;
|
|
short pad;
|
|
long datum_index;
|
|
unsigned long signature;
|
|
};
|
|
|
|
struct network_game_client
|
|
{
|
|
unsigned short machine_index;
|
|
byte __padding2[2];
|
|
byte available_games[0x828];
|
|
void *connection;
|
|
byte __padding830[4];
|
|
unsigned long connection_attempt_time;
|
|
byte __padding838[0x24];
|
|
struct network_game game;
|
|
unsigned long join_in_progress;
|
|
byte __paddingC94[4];
|
|
unsigned long next_update_number;
|
|
unsigned long __unknownC9C;
|
|
byte __paddingCA0[4];
|
|
short seconds_to_game_start;
|
|
short state;
|
|
short error;
|
|
byte __paddingCAA[2];
|
|
boolean out_of_sync;
|
|
boolean connection_silent;
|
|
};
|
|
|
|
typedef char network_machine_size_assert[
|
|
sizeof(struct network_machine) == 0x44 ? 1 : -1];
|
|
typedef char network_game_size_assert[
|
|
sizeof(struct network_game) == 0x434 ? 1 : -1];
|
|
typedef char network_advertised_game_update_time_offset_assert[
|
|
offsetof(struct network_advertised_game, update_time) == 0x2C ? 1 : -1];
|
|
typedef char network_advertised_game_valid_offset_assert[
|
|
offsetof(struct network_advertised_game, valid) == 0xE1 ? 1 : -1];
|
|
typedef char data_iterator_size_assert[
|
|
sizeof(struct data_iterator) == 0x10 ? 1 : -1];
|
|
typedef char data_iterator_datum_index_offset_assert[
|
|
offsetof(struct data_iterator, datum_index) == 8 ? 1 : -1];
|
|
typedef char network_game_client_connection_offset_assert[
|
|
offsetof(struct network_game_client, connection) == 0x82C ? 1 : -1];
|
|
typedef char network_game_client_connection_attempt_time_offset_assert[
|
|
offsetof(struct network_game_client, connection_attempt_time) == 0x834 ? 1 : -1];
|
|
typedef char network_game_client_game_offset_assert[
|
|
offsetof(struct network_game_client, game) == 0x85C ? 1 : -1];
|
|
typedef char network_game_client_join_in_progress_offset_assert[
|
|
offsetof(struct network_game_client, join_in_progress) == 0xC90 ? 1 : -1];
|
|
typedef char network_game_client_next_update_number_offset_assert[
|
|
offsetof(struct network_game_client, next_update_number) == 0xC98 ? 1 : -1];
|
|
typedef char network_game_client_unknownC9C_offset_assert[
|
|
offsetof(struct network_game_client, __unknownC9C) == 0xC9C ? 1 : -1];
|
|
typedef char network_game_client_seconds_to_game_start_offset_assert[
|
|
offsetof(struct network_game_client, seconds_to_game_start) == 0xCA4 ? 1 : -1];
|
|
typedef char network_game_client_error_offset_assert[
|
|
offsetof(struct network_game_client, error) == 0xCA8 ? 1 : -1];
|
|
typedef char network_game_client_out_of_sync_offset_assert[
|
|
offsetof(struct network_game_client, out_of_sync) == 0xCAC ? 1 : -1];
|
|
typedef char network_game_client_connection_silent_offset_assert[
|
|
offsetof(struct network_game_client, connection_silent) == 0xCAD ? 1 : -1];
|
|
|
|
/* ---------- prototypes */
|
|
|
|
boolean network_connection_write(
|
|
void *connection,
|
|
void *message,
|
|
unsigned short message_size,
|
|
void *address,
|
|
long flags);
|
|
void network_connection_keep_alive(
|
|
void *connection);
|
|
void network_connection_get_address(
|
|
void *connection,
|
|
void *address,
|
|
boolean include_port);
|
|
void network_connection_delete(
|
|
void *connection);
|
|
unsigned long system_milliseconds(
|
|
void);
|
|
void game_engine_switch_to_postgame(
|
|
void);
|
|
void network_event(
|
|
char *format,
|
|
...);
|
|
boolean network_game_is_splitscreen_local(
|
|
void);
|
|
boolean transport_network_available(
|
|
void);
|
|
void error(
|
|
short priority,
|
|
const char *format,
|
|
...);
|
|
void display_error_when_main_menu_loaded(
|
|
short error_code);
|
|
void network_game_reset_for_next_round(
|
|
struct network_game *game,
|
|
boolean load_ui);
|
|
void network_game_reset_to_pregame_ui(
|
|
void);
|
|
void network_game_client_all_local_players_have_quit(
|
|
void);
|
|
short local_player_get_next(
|
|
short local_player_index);
|
|
void display_error(
|
|
short error_code,
|
|
short local_player_index,
|
|
boolean modal,
|
|
boolean pause_game_time);
|
|
void data_iterator_new(
|
|
struct data_iterator *iterator,
|
|
struct data_array *data);
|
|
void *data_iterator_next(
|
|
struct data_iterator *iterator);
|
|
|
|
boolean network_game_client_write(
|
|
void *connection,
|
|
void *message,
|
|
unsigned short message_size,
|
|
void *address,
|
|
long flags);
|
|
|
|
boolean code_001141c0(
|
|
void);
|
|
void network_game_client_dispose(
|
|
struct network_game_client *client);
|
|
void network_game_client_game_out_of_sync(
|
|
struct network_game_client *client);
|
|
long unstrip_player_index(
|
|
long player_index);
|
|
|
|
short network_game_client_get_state(
|
|
struct network_game_client *client,
|
|
short *state_data);
|
|
boolean network_game_client_set_machine(
|
|
struct network_game_client *client,
|
|
struct network_machine *machine);
|
|
void network_game_client_switch_to_postgame(
|
|
struct network_game_client *client);
|
|
boolean network_game_client_switch_to_pregame(
|
|
struct network_game_client *client);
|
|
void network_game_client_countdown_timer_update(
|
|
struct network_game_client *client,
|
|
short seconds_to_game_start);
|
|
boolean network_game_client_advertised_game_is_valid(
|
|
struct network_advertised_game *advertised_game);
|
|
void network_game_client_game_shutdown(
|
|
struct network_game_client *client);
|
|
void network_game_client_reset(
|
|
struct network_game_client *client,
|
|
boolean leave_connection_open);
|
|
void network_game_client_rejected_by_game(
|
|
struct network_game_client *client,
|
|
void *source_address,
|
|
unsigned short rejection_code);
|
|
|
|
struct network_machine *network_game_client_get_machine(
|
|
struct network_game_client *client);
|
|
short network_game_client_get_machine_index(
|
|
struct network_game_client *client);
|
|
void *network_game_client_get_available_games(
|
|
struct network_game_client *client);
|
|
short network_game_client_get_error(
|
|
struct network_game_client *client);
|
|
short network_game_client_get_seconds_to_game_start(
|
|
struct network_game_client *client);
|
|
void network_game_client_keep_alive(
|
|
struct network_game_client *client);
|
|
void *network_game_client_get_connection(
|
|
struct network_game_client *client);
|
|
void network_game_client_get_remote_server_address(
|
|
struct network_game_client *client,
|
|
void *address);
|
|
struct network_game *network_game_client_get_game(
|
|
struct network_game_client *client);
|
|
boolean network_game_client_server_has_started_game(
|
|
struct network_game_client *client);
|
|
long network_game_client_get_next_update_number(
|
|
struct network_game_client *client);
|
|
boolean network_client_get_oos(
|
|
struct network_game_client *client);
|
|
|
|
/* ---------- globals */
|
|
|
|
extern struct data_array *player_data;
|
|
|
|
boolean allow_out_of_sync = FALSE;
|
|
boolean network_game_client_dont_use_directly_in_use = FALSE;
|
|
|
|
/* ---------- public code */
|
|
|
|
boolean code_001141c0(
|
|
void)
|
|
{
|
|
boolean connected = TRUE;
|
|
|
|
if (!network_game_is_splitscreen_local())
|
|
{
|
|
connected = transport_network_available();
|
|
|
|
if (!connected)
|
|
{
|
|
error(_error_silent, "network connection went down!");
|
|
display_error_when_main_menu_loaded(6);
|
|
}
|
|
}
|
|
|
|
return connected;
|
|
}
|
|
|
|
void network_game_client_dispose(
|
|
struct network_game_client *client)
|
|
{
|
|
if (client)
|
|
{
|
|
if (client->connection)
|
|
network_connection_delete(client->connection);
|
|
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0xB2,
|
|
network_game_client_dont_use_directly_in_use);
|
|
|
|
network_game_client_dont_use_directly_in_use = FALSE;
|
|
}
|
|
|
|
network_event("network client disposed");
|
|
|
|
return;
|
|
}
|
|
|
|
void network_game_client_game_out_of_sync(
|
|
struct network_game_client *client)
|
|
{
|
|
short local_player_index;
|
|
|
|
if (!allow_out_of_sync)
|
|
{
|
|
network_event("local machine is out of sync with the server");
|
|
|
|
if (!client->out_of_sync)
|
|
{
|
|
for (local_player_index = local_player_get_next(NONE);
|
|
local_player_index != NONE;
|
|
local_player_index = local_player_get_next(local_player_index))
|
|
{
|
|
display_error(8, local_player_index, TRUE, FALSE);
|
|
}
|
|
}
|
|
|
|
client->out_of_sync = TRUE;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
long unstrip_player_index(
|
|
long player_index)
|
|
{
|
|
struct data_iterator iterator;
|
|
long result = NONE;
|
|
|
|
data_iterator_new(&iterator, player_data);
|
|
|
|
while (data_iterator_next(&iterator))
|
|
{
|
|
if ((iterator.datum_index & 0xFFFF) == (player_index & 0xFFFF))
|
|
{
|
|
result = iterator.datum_index;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
short network_game_client_get_state(
|
|
struct network_game_client *client,
|
|
short *state_data)
|
|
{
|
|
unsigned long elapsed_time;
|
|
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0xF9,
|
|
client);
|
|
|
|
if (state_data)
|
|
{
|
|
*state_data = 0;
|
|
|
|
if (client->state == 1)
|
|
{
|
|
elapsed_time = system_milliseconds() * 100 -
|
|
client->connection_attempt_time * 100;
|
|
*state_data = (short)(elapsed_time / 120000);
|
|
}
|
|
}
|
|
|
|
return client->state;
|
|
}
|
|
|
|
boolean network_game_client_set_machine(
|
|
struct network_game_client *client,
|
|
struct network_machine *machine)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x1E1,
|
|
client && (client->machine_index<MAXIMUM_NETWORK_MACHINE_COUNT) && network_machine_is_valid(machine));
|
|
|
|
csmemcpy(
|
|
&client->game.machines[client->machine_index],
|
|
machine,
|
|
sizeof(*machine));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void network_game_client_switch_to_postgame(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x48C,
|
|
client);
|
|
|
|
game_engine_switch_to_postgame();
|
|
client->state = 4;
|
|
network_event("switching to postgame");
|
|
|
|
return;
|
|
}
|
|
|
|
boolean network_game_client_switch_to_pregame(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x499,
|
|
client);
|
|
|
|
if (client->state != 2)
|
|
{
|
|
network_game_reset_for_next_round(&client->game, TRUE);
|
|
network_connection_keep_alive(client->connection);
|
|
client->next_update_number = 0;
|
|
client->join_in_progress = TRUE;
|
|
client->__unknownC9C = 0;
|
|
client->connection_silent = FALSE;
|
|
client->state = 2;
|
|
client->out_of_sync = FALSE;
|
|
network_event("switching to pregame");
|
|
network_game_reset_to_pregame_ui();
|
|
network_connection_keep_alive(client->connection);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void network_game_client_countdown_timer_update(
|
|
struct network_game_client *client,
|
|
short seconds_to_game_start)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x5C3,
|
|
client);
|
|
|
|
client->seconds_to_game_start = seconds_to_game_start;
|
|
|
|
return;
|
|
}
|
|
|
|
boolean network_game_client_advertised_game_is_valid(
|
|
struct network_advertised_game *advertised_game)
|
|
{
|
|
boolean valid = TRUE;
|
|
|
|
if (!advertised_game->valid ||
|
|
(long)(system_milliseconds() - advertised_game->update_time) > 6000)
|
|
{
|
|
valid = FALSE;
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
void network_game_client_game_shutdown(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x3FC,
|
|
client);
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x662,
|
|
client);
|
|
|
|
if (client->error == 0)
|
|
client->error = 8;
|
|
|
|
network_event("the game host is shutting down");
|
|
network_game_client_all_local_players_have_quit();
|
|
|
|
return;
|
|
}
|
|
|
|
struct network_machine *network_game_client_get_machine(
|
|
struct network_game_client *client)
|
|
{
|
|
if (client && client->machine_index < MAXIMUM_NETWORK_MACHINE_COUNT)
|
|
return &client->game.machines[client->machine_index];
|
|
|
|
return NULL;
|
|
}
|
|
|
|
short network_game_client_get_machine_index(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x1FD,
|
|
client);
|
|
|
|
return client->machine_index;
|
|
}
|
|
|
|
void *network_game_client_get_available_games(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x2AC,
|
|
client);
|
|
|
|
return client->available_games;
|
|
}
|
|
|
|
short network_game_client_get_error(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x2B4,
|
|
client);
|
|
|
|
return client->error;
|
|
}
|
|
|
|
short network_game_client_get_seconds_to_game_start(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x2BC,
|
|
client);
|
|
|
|
return client->seconds_to_game_start;
|
|
}
|
|
|
|
void network_game_client_keep_alive(
|
|
struct network_game_client *client)
|
|
{
|
|
network_connection_keep_alive(client->connection);
|
|
|
|
return;
|
|
}
|
|
|
|
void *network_game_client_get_connection(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4B3,
|
|
client);
|
|
|
|
return client->connection;
|
|
}
|
|
|
|
void network_game_client_get_remote_server_address(
|
|
struct network_game_client *client,
|
|
void *address)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4BC,
|
|
client);
|
|
|
|
network_connection_get_address(client->connection, address, FALSE);
|
|
|
|
return;
|
|
}
|
|
|
|
struct network_game *network_game_client_get_game(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4CD,
|
|
client);
|
|
|
|
return &client->game;
|
|
}
|
|
|
|
boolean network_game_client_server_has_started_game(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4D5,
|
|
client);
|
|
|
|
return client->next_update_number > 0;
|
|
}
|
|
|
|
long network_game_client_get_next_update_number(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4DD,
|
|
client);
|
|
|
|
return client->next_update_number;
|
|
}
|
|
|
|
boolean network_client_get_oos(
|
|
struct network_game_client *client)
|
|
{
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x4E5,
|
|
client);
|
|
|
|
return client->out_of_sync;
|
|
}
|
|
|
|
boolean network_game_client_write(
|
|
void *connection,
|
|
void *message,
|
|
unsigned short message_size,
|
|
void *address,
|
|
long flags)
|
|
{
|
|
return network_connection_write(
|
|
connection,
|
|
message,
|
|
message_size,
|
|
address,
|
|
flags);
|
|
}
|
|
|
|
void network_game_client_rejected_by_game(
|
|
struct network_game_client *client,
|
|
void *source_address,
|
|
unsigned short rejection_code)
|
|
{
|
|
const char *reason = "<unknown>";
|
|
|
|
match_assert(
|
|
"c:\\halo\\SOURCE\\networking\\network_client_manager.c",
|
|
0x35A,
|
|
client && source_address);
|
|
|
|
client->state = 0;
|
|
|
|
switch (rejection_code)
|
|
{
|
|
case 0:
|
|
reason = "_rejection_code_version_too_old";
|
|
break;
|
|
|
|
case 1:
|
|
reason = "_rejection_code_version_too_new";
|
|
break;
|
|
|
|
case 2:
|
|
reason = "_rejection_code_bad_join_token";
|
|
break;
|
|
|
|
case 3:
|
|
reason = "_rejection_code_bad_password";
|
|
break;
|
|
|
|
case 4:
|
|
reason = "_rejection_code_game_is_full";
|
|
break;
|
|
|
|
case 5:
|
|
reason = "_rejection_code_game_is_closed";
|
|
break;
|
|
|
|
case 6:
|
|
reason = "_rejection_code_blacklisted_machine";
|
|
break;
|
|
}
|
|
|
|
network_event(
|
|
"unable to join game: reason= #%d/%s",
|
|
rejection_code,
|
|
reason);
|
|
network_game_client_reset(client, TRUE);
|
|
|
|
return;
|
|
}
|
|
|
|
/* ---------- private code */
|