SESSION.H (28925B)
1 // 2 // Copyright 2020 Electronic Arts Inc. 3 // 4 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free 5 // software: you can redistribute it and/or modify it under the terms of 6 // the GNU General Public License as published by the Free Software Foundation, 7 // either version 3 of the License, or (at your option) any later version. 8 9 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed 10 // in the hope that it will be useful, but with permitted additional restrictions 11 // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT 12 // distributed with this program. You should have received a copy of the 13 // GNU General Public License along with permitted additional restrictions 14 // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection 15 16 /* $Header: /counterstrike/SESSION.H 4 3/10/97 6:23p Steve_tall $ */ 17 /*************************************************************************** 18 *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** 19 * * 20 * Project Name : Command & Conquer * 21 * * 22 * File Name : SESSION.H * 23 * * 24 * Programmer : Bill R. Randolph * 25 * * 26 * Start Date : 11/30/95 * 27 * * 28 * Last Update : November 30, 1995 [BRR] * 29 * * 30 * The purpose of this class is to contain those variables & routines * 31 * specifically related to a multiplayer game. * 32 * * 33 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 34 #ifndef SESSION_H 35 #define SESSION_H 36 37 #include "ipxaddr.h" 38 #include "msglist.h" 39 #include "connect.h" 40 41 //--------------------------------------------------------------------------- 42 // Forward declarations 43 //--------------------------------------------------------------------------- 44 class AircraftClass; 45 class AnimClass; 46 class BuildingClass; 47 class BulletClass; 48 class InfantryClass; 49 class UnitClass; 50 class PhoneEntryClass; 51 class CellClass; 52 53 //--------------------------------------------------------------------------- 54 // Defines 55 //--------------------------------------------------------------------------- 56 //........................................................................... 57 // Various limiting values 58 //........................................................................... 59 #define MPLAYER_BUILD_LEVEL_MAX 10 // max build level in multiplay 60 #define MAX_MPLAYER_COLORS 8 // max # of colors 61 62 //........................................................................... 63 // Max sizes of packets we want to send 64 // The IPX packet's size is IPX's max size (546), rounded down to accommodate 65 // the max number of events possible. 66 //........................................................................... 67 #define MAX_IPX_PACKET_SIZE (((546 - sizeof(CommHeaderType)) / \ 68 sizeof(EventClass) ) * sizeof(EventClass)) 69 #define MAX_SERIAL_PACKET_SIZE 256 70 71 //........................................................................... 72 // Max length of player names fields; attempt to use the constant for the 73 // HouseClass, if it's been defined; otherwise, define it myself. 74 //........................................................................... 75 #ifdef HOUSE_NAME_MAX 76 #define MPLAYER_NAME_MAX HOUSE_NAME_MAX 77 #else 78 #define MPLAYER_NAME_MAX 12 // max length of a player's name 79 #endif 80 81 //........................................................................... 82 // Values to control the multiplayer score screen 83 //........................................................................... 84 #define MAX_MULTI_NAMES 8 // max # names (rows) on the score screen 85 #define MAX_MULTI_GAMES 4 // max # games (columns) on the score screen 86 87 //........................................................................... 88 // Min value for MaxAhead, for both net & modem; only applies for 89 // COMM_PROTOCOL_MULTI_E_COMP. 90 //........................................................................... 91 #define MODEM_MIN_MAX_AHEAD 5 92 #define NETWORK_MIN_MAX_AHEAD 2 93 94 //........................................................................... 95 // Send period (in frames) for COMM_PROTOCOL_MULTI_E_COMP and above 96 //........................................................................... 97 #define DEFAULT_FRAME_SEND_RATE 3 98 99 //........................................................................... 100 // Modem-specific constants 101 //........................................................................... 102 #define PORTBUF_MAX 64 // dialog field sizes 103 #define IRQBUF_MAX 3 104 #define BAUDBUF_MAX 7 105 #define INITSTRBUF_MAX 41 106 #define CWAITSTRBUF_MAX 16 107 #define CREDITSBUF_MAX 5 108 #define PACKET_TIMING_TIMEOUT 40 // ticks b/w sending a timing packet 109 #define MODEM_NAME_MAX PORTBUF_MAX - 1 // Max length of modem name in list box 110 111 //--------------------------------------------------------------------------- 112 // Enums 113 //--------------------------------------------------------------------------- 114 //........................................................................... 115 // Types of games; used to tell which protocol we're using 116 //........................................................................... 117 typedef enum GameEnum { 118 GAME_NORMAL, // not multiplayer 119 GAME_MODEM, // modem game 120 GAME_NULL_MODEM, // NULL-modem 121 GAME_IPX, // IPX Network game 122 GAME_INTERNET, // Internet H2H 123 GAME_SKIRMISH, // 1 plr vs. AI's 124 GAME_TEN, // TEN Network game 125 GAME_MPATH, // MPath Network game 126 GAME_GLYPHX_MULTIPLAYER // Multiplayer game controlled by the GLYPHX engine. ST - 5/14/2019 11:41AM 127 } GameType; 128 129 //........................................................................... 130 // Various Modem-specific enums 131 //........................................................................... 132 typedef enum DetectPortType { 133 PORT_VALID = 0, 134 PORT_INVALID, 135 PORT_IRQ_INUSE 136 } DetectPortType; 137 138 typedef enum DialStatusType { 139 DIAL_CONNECTED = 0, 140 DIAL_NO_CARRIER, 141 DIAL_BUSY, 142 DIAL_ERROR, 143 DIAL_NO_DIAL_TONE, 144 DIAL_CANCELED 145 } DialStatusType; 146 147 typedef enum DialMethodType { 148 DIAL_TOUCH_TONE = 0, 149 DIAL_PULSE, 150 DIAL_METHODS 151 } DialMethodType; 152 153 typedef enum CallWaitStringType { 154 CALL_WAIT_TONE_1 = 0, 155 CALL_WAIT_TONE_2, 156 CALL_WAIT_PULSE, 157 CALL_WAIT_CUSTOM, 158 CALL_WAIT_STRINGS_NUM 159 } CallWaitStringType; 160 161 typedef enum ModemGameType { 162 MODEM_NULL_HOST = 0, 163 MODEM_NULL_JOIN, 164 MODEM_DIALER, 165 MODEM_ANSWERER 166 } ModemGameType; 167 168 //........................................................................... 169 // Commands sent over the serial Global Channel 170 //........................................................................... 171 typedef enum SerialCommandType { 172 SERIAL_CONNECT = 100, // Are you there? Hello? McFly? 173 SERIAL_GAME_OPTIONS = 101, // Hey, dudes, here's some new game options 174 SERIAL_SIGN_OFF = 102, // Bogus, dudes, my boss is coming; I'm outta here! 175 SERIAL_GO = 103, // OK, dudes, jump into the game loop! 176 SERIAL_MESSAGE = 104, // Here's a message 177 SERIAL_TIMING = 105, // timimg packet 178 SERIAL_SCORE_SCREEN = 106, // player at score screen 179 SERIAL_LOADGAME = 107, // Start the game, loading a saved game first 180 SERIAL_LAST_COMMAND, // last command 181 SERIAL_REQ_SCENARIO = 1000, // Reqest that host sends the scenario file to the other players. 182 SERIAL_FILE_INFO = 1001, // Info about the file that is going to be transferred 183 SERIAL_FILE_CHUNK = 1002, // A chunk of scenario 184 SERIAL_READY_TO_GO = 1003, // Sent in response to a 'GO' command 185 SERIAL_NO_SCENARIO = 1004 // Scenario isnt available on remote machine so we cant play 186 } SerialCommandType; 187 188 //........................................................................... 189 // Commands sent over the network Global Channel 190 //........................................................................... 191 typedef enum NetCommandType { 192 NET_QUERY_GAME, // Hey, what games are out there? 193 NET_ANSWER_GAME, // Yo, Here's my game's name! 194 NET_QUERY_PLAYER, // Hey, what players are in this game? 195 NET_ANSWER_PLAYER, // Yo, I'm in that game! 196 NET_CHAT_ANNOUNCE, // I'm at the chat screen 197 NET_CHAT_REQUEST, // Respond with a CHAT_ANNOUNCE, please. 198 NET_QUERY_JOIN, // Hey guys, can I play too? 199 NET_CONFIRM_JOIN, // Well, OK, if you really want to. 200 NET_REJECT_JOIN, // No, you can't join; sorry, dude. 201 NET_GAME_OPTIONS, // Hey, dudes, here's some new game options 202 NET_SIGN_OFF, // Bogus, dudes, my boss is coming; I'm outta here! 203 NET_GO, // OK, jump into the game loop! 204 NET_MESSAGE, // Here's a message 205 NET_PING, // I'm pinging you to take a time measurement 206 NET_LOADGAME, // start a game by loading a saved game 207 NET_REQ_SCENARIO =1000,// Reqest that host sends the scenario file to the other players. 208 NET_FILE_INFO =1001,// Info about the file that is going to be transferred 209 NET_FILE_CHUNK =1002,// A chunk of scenario 210 NET_READY_TO_GO =1003,// Sent in response to a 'GO' command 211 NET_NO_SCENARIO =1004 // Scenario isnt available on remote machine so we cant play 212 } NetCommandType; 213 214 //--------------------------------------------------------------------------- 215 // Structures 216 //--------------------------------------------------------------------------- 217 //........................................................................... 218 // An entry on the score screen is defined by this structure 219 //........................................................................... 220 typedef struct { 221 char Name[MPLAYER_NAME_MAX]; 222 int Wins; 223 int Kills[MAX_MULTI_GAMES]; 224 PlayerColorType Color; 225 } MPlayerScoreType; 226 227 //........................................................................... 228 // Settings for the serial port 229 //........................................................................... 230 typedef struct { 231 int Port; 232 int IRQ; 233 int Baud; 234 DialMethodType DialMethod; 235 int InitStringIndex; 236 int CallWaitStringIndex; 237 char CallWaitString[ CWAITSTRBUF_MAX ]; 238 bool Compression; 239 bool ErrorCorrection; 240 bool HardwareFlowControl; 241 char ModemName [ MODEM_NAME_MAX ]; 242 } SerialSettingsType; 243 244 //........................................................................... 245 // This is a "node", used for the lists of available games & players. The 246 // 'Game' structure is used for games; the 'Player' structure for players. 247 //........................................................................... 248 typedef struct NodeNameTag { 249 char Name[MPLAYER_NAME_MAX]; // player or game name 250 IPXAddressClass Address; 251 #if(TEN) 252 int TenAddress; 253 #endif 254 #if(MPATH) 255 int MPathAddress; 256 #endif 257 union { 258 struct { 259 unsigned char IsOpen; // is the game open? 260 unsigned long LastTime; // last time we heard from this guy 261 } Game; 262 struct { 263 HousesType House; // "ActLike" House of this player 264 PlayerColorType Color; // Color of this player 265 HousesType ID; // Actual House of this player 266 int ProcessTime; // Length of time to process players main loop 267 } Player; 268 struct { 269 unsigned long LastTime; // last time we heard from this guy 270 unsigned char LastChance; // we're about to remove him from the list 271 PlayerColorType Color; // chat player's color 272 } Chat; 273 }; 274 } NodeNameType; 275 276 277 //........................................................................... 278 // Packet sent over the serial Global Channel 279 //........................................................................... 280 typedef struct { 281 SerialCommandType Command; // One of the enum's defined above 282 char Name[MPLAYER_NAME_MAX]; // Player or Game Name 283 unsigned char ID; // unique ID of sender of message 284 union { 285 struct { 286 HousesType House; // player's House 287 PlayerColorType Color; // player's color or SIGNOFF ID 288 unsigned long MinVersion; // min version this game supports 289 unsigned long MaxVersion; // max version this game supports 290 char Scenario[DESCRIP_MAX]; // Scenario name 291 unsigned int Credits; // player's credits 292 unsigned int IsBases : 1; // 1 = bases are allowed 293 unsigned int IsTiberium : 1; // 1 = tiberium is allowed 294 unsigned int IsGoodies : 1; // 1 = goodies are allowed 295 unsigned int IsGhosties : 1; // 1 = ghosts are allowed 296 unsigned int OfficialScenario : 1; // Is this scenario an official Westwood one? 297 int CheatCheck; // Unique ID of "rules.ini" file. 298 unsigned char BuildLevel; // buildable level 299 unsigned char UnitCount; // max # units 300 unsigned char AIPlayers; // # of AI players allowed 301 int Seed; // random number seed 302 SpecialClass Special; // command-line options 303 unsigned int GameSpeed; // Game Speed 304 unsigned long ResponseTime; // packet response time 305 unsigned int FileLength; // Length of scenario file to expect from host. 306 #ifdef WOLAPI_INTEGRATION 307 char ShortFileName[13]; // Name of scenario file to expect from host 308 #else 309 char ShortFileName[12]; // Name of scenario file to expect from host 310 #endif 311 unsigned char FileDigest[32]; // Digest of scenario file to expect from host 312 // ajw - This is not necessarily null-terminated. 313 } ScenarioInfo; 314 struct { 315 char Message[MAX_MESSAGE_LENGTH]; // inter-player message 316 PlayerColorType Color; // player's color or SIGNOFF ID 317 } Message; 318 struct { 319 PlayerColorType Color; // player's color or SIGNOFF ID 320 } Chat; 321 }; 322 } SerialPacketType; 323 324 //........................................................................... 325 // Other packet sent over the serial global channel (for file transfers) 326 //........................................................................... 327 #define MAX_SEND_FILE_PACKET_SIZE MAX_SERIAL_PACKET_SIZE - 64 328 typedef struct { 329 SerialCommandType Command; // Enum defined above. Should be a file transfer enum. 330 unsigned short BlockNumber; // Index position of this file chunk in the file 331 unsigned short BlockLength; // Length of data in the RawData buffer 332 unsigned char RawData [MAX_SEND_FILE_PACKET_SIZE]; 333 } RemoteFileTransferType; 334 335 336 //........................................................................... 337 // Packet sent over the network Global Channel 338 //........................................................................... 339 typedef struct GlobalPacketType { 340 NetCommandType Command; // One of the enum's defined above 341 char Name[MPLAYER_NAME_MAX]; // Player or Game Name 342 union { 343 struct { 344 unsigned int IsOpen : 1; // 1 = game is open for joining 345 } GameInfo; 346 struct { 347 HousesType House; // player's House 348 PlayerColorType Color; // player's color 349 unsigned long NameCRC; // CRC of player's game's name 350 unsigned long MinVersion; // game's min supported version 351 unsigned long MaxVersion; // game's max supported version 352 int CheatCheck; // Unique ID of "rules.ini" file. 353 } PlayerInfo; 354 struct { 355 char Scenario[DESCRIP_MAX]; // Scenario Name 356 unsigned int Credits; // player's credits 357 unsigned int IsBases : 1; // 1 = bases are allowed 358 unsigned int IsTiberium : 1; // 1 = tiberium is allowed 359 unsigned int IsGoodies : 1; // 1 = goodies are allowed 360 unsigned int IsGhosties : 1; // 1 = ghosts are allowed 361 unsigned int OfficialScenario :1;// Is this scenario an official Westwood one? 362 unsigned char BuildLevel; // buildable level 363 unsigned char UnitCount; // max # units 364 unsigned char AIPlayers; // # of AI players allowed 365 int Seed; // random number seed 366 SpecialClass Special; // command-line options 367 unsigned int GameSpeed; // Game Speed 368 unsigned long Version; // version # common to all players 369 unsigned int FileLength; // Length of scenario file to expect from host. 370 #ifdef WOLAPI_INTEGRATION 371 char ShortFileName[13]; // Name of scenario file to expect from host 372 #else 373 char ShortFileName[12]; // Name of scenario file to expect from host 374 #endif 375 unsigned char FileDigest[32]; // Digest of scenario file to expect from host 376 // ajw - This is not necessarily null-terminated. 377 } ScenarioInfo; 378 struct { 379 char Buf[MAX_MESSAGE_LENGTH]; // inter-user message 380 PlayerColorType Color; // color of sender of message 381 unsigned long NameCRC; // CRC of sender's Game Name 382 } Message; 383 struct { 384 int OneWay; // one-way response time 385 } ResponseTime; 386 struct { 387 int Why; // why were we rejected from the game? 388 } Reject; 389 struct { 390 unsigned long ID; // unique ID for this chat node 391 PlayerColorType Color; // my color 392 } Chat; 393 }; 394 } GlobalPacketType; 395 396 397 //........................................................................... 398 // For finding sync bugs; filled in by the engine when certain conditions 399 // are met; the pointers allow examination of objects in the debugger. 400 //........................................................................... 401 typedef struct { 402 union { 403 AircraftClass *Aircraft; 404 AnimClass *Anim; 405 BuildingClass *Building; 406 BulletClass *Bullet; 407 InfantryClass *Infantry; 408 UnitClass *Unit; 409 void *All; 410 } Ptr; 411 } TrapObjectType; 412 413 /* 414 ** This is the identifier for a multiplayer mission. This can be used to 415 ** identify the filename of the mission as well as display the mission in a 416 ** mission selection list. 417 */ 418 class MultiMission 419 { 420 public: 421 MultiMission(char const * filename = NULL, char const * description = NULL, char const *digest = NULL, bool official = true, bool expansion = false); 422 423 void Set_Description(char const * description); 424 void Set_Filename(char const * filename); 425 void Set_Digest(char const * digest); 426 void Set_Official(bool official); 427 void Set_Expansion(bool expansion); 428 void Draw_It(int index, int x, int y, int width, int height, bool selected, TextPrintType flags) const; 429 char const * Description(void) const {return(ScenarioDescription);} 430 char const * Get_Filename(void) const {return(Filename);} 431 char const * Get_Digest(void) const {return(Digest);} 432 bool Get_Official(void) { return (IsOfficial); } 433 bool Get_Expansion(void) { return (IsExpansion); } // Implied "IsCounterstrike". No longer used. -ajw 434 435 private: 436 char ScenarioDescription[DESCRIP_MAX]; 437 char Filename[_MAX_FNAME+_MAX_EXT]; 438 char Digest[32]; 439 bool IsOfficial; 440 bool IsExpansion; 441 }; 442 443 444 typedef struct { 445 int ScenarioIndex; //Used on host machine only as index into scenario list 446 int Bases; 447 int Credits; 448 int Tiberium; 449 int Goodies; 450 int Ghosts; 451 int UnitCount; 452 int AIPlayers; // # of AI players allowed to be built 453 char ScenarioDescription [DESCRIP_MAX]; //Used on client machines only 454 } GameOptionsType; 455 456 //--------------------------------------------------------------------------- 457 // Class Definition 458 //--------------------------------------------------------------------------- 459 class SessionClass 460 { 461 //------------------------------------------------------------------------ 462 // Public interface 463 //------------------------------------------------------------------------ 464 public: 465 //..................................................................... 466 // Constructor/Destructor 467 //..................................................................... 468 SessionClass(void); 469 ~SessionClass(void); 470 471 //..................................................................... 472 // Initialization 473 //..................................................................... 474 void One_Time(void); 475 void Init(void); 476 477 //..................................................................... 478 // Reads/writes to the INI file 479 //..................................................................... 480 void Read_MultiPlayer_Settings (void); 481 void Write_MultiPlayer_Settings (void); 482 void Read_Scenario_Descriptions (void); 483 void Free_Scenario_Descriptions(void); 484 485 //..................................................................... 486 // Utility functions 487 //..................................................................... 488 int Create_Connections(void); 489 bool Am_I_Master(void); 490 unsigned long Compute_Unique_ID(void); 491 492 #if(TEN) 493 int Create_TEN_Connections(void); 494 #endif // TEN 495 496 #if(MPATH) 497 int Create_MPATH_Connections(void); 498 #endif // MPATH 499 500 //..................................................................... 501 // File I/O 502 //..................................................................... 503 int Save(Pipe & file) const; 504 int Load(Straw & file); 505 int Save(CCFileClass & file); 506 int Load(CCFileClass & file); 507 508 //..................................................................... 509 // Debugging / Sync Bugs 510 //..................................................................... 511 void Trap_Object(void); 512 513 //--------------------------------------------------------------------- 514 // Public Data 515 //--------------------------------------------------------------------- 516 //..................................................................... 517 // The type of session being played 518 //..................................................................... 519 GameType Type; 520 521 //..................................................................... 522 // The current communications protocol 523 //..................................................................... 524 CommProtocolType CommProtocol; 525 526 //..................................................................... 527 // Game options 528 //..................................................................... 529 GameOptionsType Options; 530 531 //..................................................................... 532 // Unique workstation ID, for detecting my own packets 533 //..................................................................... 534 unsigned long UniqueID; 535 536 //..................................................................... 537 // Player's local options 538 //..................................................................... 539 char Handle[MPLAYER_NAME_MAX]; // player name 540 PlayerColorType PrefColor; // preferred color index 541 PlayerColorType ColorIdx; // actual color index 542 HousesType House; // GDI / NOD 543 int ObiWan; // 1 = player can see all 544 int Solo; // 1 = player can play alone 545 546 //..................................................................... 547 // Max allowable # of players & actual # of (human) players 548 //..................................................................... 549 int MaxPlayers; 550 int NumPlayers; 551 552 //..................................................................... 553 // Frame-sync'ing timing variables 554 // 'MaxAhead' is the number of frames ahead of this one to execute 555 // a given packet. It's set by the RESPONSE_TIME event. 556 // 'FrameSendRate' is the # frames between data packets 557 //..................................................................... 558 unsigned long MaxAhead; 559 unsigned long FrameSendRate; 560 561 int DesiredFrameRate; 562 563 int ProcessTimer; 564 int ProcessTicks; 565 int ProcessFrames; 566 567 //..................................................................... 568 // This flag is set when we've loaded a multiplayer game. 569 //..................................................................... 570 int LoadGame; 571 572 //..................................................................... 573 // This flag is set when the modem game saves the game due to a lost 574 // connection. 575 //..................................................................... 576 int EmergencySave; 577 578 //..................................................................... 579 // List of scenarios & their file numbers 580 //..................................................................... 581 DynamicVectorClass<MultiMission *> Scenarios; 582 // DynamicVectorClass <char *> Scenarios; 583 // DynamicVectorClass <int> Filenum; 584 585 char ScenarioFileName[_MAX_FNAME+_MAX_EXT+1]; //File name of scenario to load 586 587 char ScenarioDigest [32]; //Digest of scenario to load 588 unsigned int ScenarioFileLength; 589 bool ScenarioIsOfficial; 590 591 char ScenarioRequests[20]; //Which players requested scenario files 592 int RequestCount; 593 IPXAddressClass HostAddress; 594 595 //..................................................................... 596 // This is the multiplayer messaging system 597 //..................................................................... 598 MessageListClass Messages; 599 IPXAddressClass MessageAddress; 600 char LastMessage[MAX_MESSAGE_LENGTH]; 601 unsigned WWChat : 1; // 1 = go into special WW Chat mode 602 603 //..................................................................... 604 // This is the multiplayer scorekeeping system 605 //..................................................................... 606 MPlayerScoreType Score[MAX_MULTI_NAMES]; 607 int GamesPlayed; // # games played this run 608 int NumScores; // # active entries in MPlayerScore 609 int Winner; // index of winner of last game 610 int CurGame; // index of current game being played 611 612 //..................................................................... 613 // Static arrays 614 //..................................................................... 615 static char Descriptions[100][40]; 616 static int CountMin[2]; 617 static int CountMax[2]; 618 static char * GlobalPacketNames[]; 619 static char * SerialPacketNames[]; 620 621 //..................................................................... 622 // For Recording & Playing back a file 623 //..................................................................... 624 CCFileClass RecordFile; 625 unsigned Record : 1; 626 unsigned Play : 1; 627 unsigned Attract : 1; 628 629 //..................................................................... 630 // IPX-specific variables 631 //..................................................................... 632 int IsBridge; // 1 = we're crossing a bridge 633 IPXAddressClass BridgeNet; // address of bridge 634 bool NetStealth; // makes us invisible 635 bool NetProtect; // keeps others from messaging us 636 bool NetOpen; // 1 = game is open for joining 637 char GameName[MPLAYER_NAME_MAX]; // game's name 638 GlobalPacketType GPacket; // global packet 639 int GPacketlen; // global packet length 640 IPXAddressClass GAddress; // address of sender 641 unsigned short GProductID; // product ID of sender 642 char MetaPacket[MAX_IPX_PACKET_SIZE]; // packet building buffer 643 int MetaSize; // size of MetaPacket 644 DynamicVectorClass <NodeNameType *> Games; // list of games 645 DynamicVectorClass <NodeNameType *> Players; // list of players 646 DynamicVectorClass <NodeNameType *> Chat; // list of chat nodes 647 648 //..................................................................... 649 // Modem-specific variables 650 //..................................................................... 651 unsigned ModemService : 1; // 1 = service modem in Call_Back 652 int CurPhoneIdx; // phone listing index 653 SerialSettingsType SerialDefaults; // default serial settings 654 ModemGameType ModemType; // caller or answerer? 655 656 DynamicVectorClass<PhoneEntryClass *> PhoneBook; 657 DynamicVectorClass <char *> InitStrings; 658 static char * DialMethodCheck[ DIAL_METHODS ]; 659 static char * CallWaitStrings[ CALL_WAIT_STRINGS_NUM ]; 660 661 //..................................................................... 662 // For finding Sync Bugs 663 //..................................................................... 664 long TrapFrame; // frame # to start trapping 'TrapObject' 665 RTTIType TrapObjType; // type of object to trap 666 TrapObjectType TrapObject; // ptr to object to trap (watch) 667 COORDINATE TrapCoord; // coord of object, 0 = ignore 668 TARGET TrapTarget; // Target # of object, 0 = ignore 669 CellClass * TrapCell; // Ptr to cell to trap (watch) 670 int TrapCheckHeap; // true = check the heap as of TrapFrame 671 long TrapPrintCRC; // Frame # to print CRC state file 672 673 #if(TEN) 674 // 675 // TEN-specific variables 676 // 677 char *TenPacket; 678 int TenSize; 679 int TenMessageAddress; 680 int TenAddress; 681 int TenPlayerID; 682 char OptionsFile[256]; 683 int AllowSolo; 684 int NetResponseTime; 685 #endif // TEN 686 687 #if(MPATH) 688 // 689 // MPATH-specific variables 690 // 691 char *MPathPacket; 692 int MPathSize; 693 int MPathMessageAddress; 694 int MPathAddress; 695 char OptionsFile[256]; 696 int AllowSolo; 697 int NetResponseTime; 698 #endif // MPATH 699 }; 700 701 #endif // SESSION_H 702 703 /*************************** end of session.h ******************************/