1 /* 2 * data.c 3 */ 4 #include "config.h" 5 #include "copyright.h" 6 7 #include <stdio.h> 8 #include "Wlib.h" 9 #include "defs.h" 10 #include "struct.h" 11 #include "data.h" 12 13 struct player *players; 14 struct player *me = NULL; 15 struct torp *torps; 16 struct plasmatorp *plasmatorps; 17 struct status *status; 18 struct ship *myship; 19 struct stats *mystats; 20 struct planet *planets; 21 struct phaser *phasers; 22 struct message *messages; 23 struct mctl *mctl; 24 struct context *context; 25 struct memory universe; 26 27 int ghoststart = 0; /* is this a ghostbust * 28 29 * 30 * * restart? */ 31 int ghost_pno = 0; /* is this a ghostbust * 32 33 * 34 * * restart? */ 35 int keepInfo = 15; /* how many updates to keep infowins 6/1/93 LAB */ 36 int showPlanetOwner = 0; 37 38 int phaserShrink = 0; 39 int theirPhaserShrink = 0; 40 int shrinkPhaserOnMiss = 0; 41 42 int newDashboard = 3; /* use new graphic * 43 44 * 45 * * dashboard, 6/2/93 LAB */ 46 int old_db = 3; /* should be same as * 47 48 * 49 * * newDashboard */ 50 int detCircle = 0; /* Show det circle on tactical */ 51 int fastQuit = 0; 52 int gen_distress = 0; /* generic distress/macro * 53 54 * 55 * * system support */ 56 int niftyNewMessages = 1; 57 int oldalert = PFGREEN; 58 int remap[16] = 59 {0, 1, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0}; 60 int messpend = 0; 61 62 #ifdef XTRA_MESSAGE_UI 63 int messageHUD = 0; /* Show message being typed 64 65 * 66 * * on the local display * 67 * */ 68 int messHoldThresh = 0; /* Threshold value for 69 70 * 71 * * putting a message on 72 * hold * (squared) */ 73 int messMouseDelta = 0; /* To keep track of mouse 74 75 * 76 * * movement delta * 77 * */ 78 #endif 79 int lastcount = 0; 80 int mdisplayed = 0; 81 int udcounter = 0; 82 int showTractorPressor = 1; 83 int showLock = 3; 84 int showPhaser = 2; 85 int autoKey = 0; 86 int extraBorder = 1; 87 88 /* udp options */ 89 int tryUdp = 1; 90 int tryUdp1 = 1; 91 struct plupdate pl_update[MAXPLANETS]; 92 char buttonmap[W_BUTTON_RANGE] = 93 {'\0', '\0', '\0', '\0', '\0', '\0'}; 94 int lastm = 0; 95 int delay = 0; /* delay for decaring war */ 96 int rdelay = 0; /* delay for refitting */ 97 int namemode = 1; 98 int quittime = 60; 99 int showStats = 0; 100 int warnShields = 0; 101 int ROMVLVS = 0; 102 int warncount = 0; 103 int warntimer = -1; 104 int infomapped = 0; 105 int mustexit = 0; 106 int messtime = 5; 107 int keeppeace = 0; 108 109 #ifdef GATEWAY 110 unsigned LONG netaddr = 0; /* for blessing */ 111 112 #endif 113 114 int msgBeep = 1; /* ATM - msg beep */ 115 116 int logmess = 0; 117 int continuetractor = 1; 118 int tcounter = 2; 119 int showlocal = 2; 120 int showgalactic = 2; 121 int pixMissing = 0; 122 int pixFlags = 0; 123 char *title = NULL; 124 char *shipnos = "0123456789abcdefghijklmnopqrstuvwxyz"; 125 126 #ifndef RSA 127 /* Um, not that I could find... SAC 1 Aug 1996 */ 128 /* Search for it in the rsa_box*.c files ... 007 15 Aug 1996 */ 129 int sock = -1; /* randomized into RSA code 130 131 * 132 * * 08/24/95 [007] */ 133 #endif 134 int xtrekPort = -1; 135 int queuePos = -1; 136 int pickOk = -1; 137 int lastRank = -1; 138 int promoted = 0; 139 140 #ifdef ROTATERACE 141 int rotate = 0; 142 int rotate_deg = 0; 143 144 #endif 145 146 int loginAccept = -1; 147 unsigned localflags = 0; 148 int tournMask = 15; 149 int nextSocket = 0; /* socket to use when we get 150 151 * 152 * * * ghostbusted... */ 153 char *serverName = NULL; 154 155 /* if there's an rc file, defaultsFile gets set by initDefaults; 156 * if there isn't one, we want to know */ 157 char defaultsFile[80] = ""; 158 159 char *myname = NULL; 160 int loggedIn = 0; 161 int reinitPlanets = 0; 162 int timerDelay = 200000; /* micro secs between * 163 164 * 165 * * updates */ 166 int redrawDelay = 0; /* 1/10 secs beetween * 167 168 * 169 * * redraws */ 170 int reportKills = 1; /* report kill messages (in 171 172 * 173 * * * review window)? */ 174 int phaserWindow = 0; /* What window to show 175 176 * 177 * * phaser msgs in */ 178 179 #ifdef PHASER_STATS 180 int phaserShowStats = 0; /* How to show phaser stats */ 181 int phaserStatTry = 0; /* Try/attemps to phaser */ 182 int phaserStatHit = 0; /* Number of hits */ 183 184 #endif 185 int censorMessages = 0; 186 187 #ifdef RECORDGAME 188 FILE *recordFile = NULL; /* recorder: slurp packets * 189 190 * 191 * 192 * * here */ 193 FILE *recordIndexFile = NULL; 194 FILE *recordContextFile = NULL; 195 196 int playback = 0; 197 198 #endif 199 200 FILE *logFile = NULL; /* log messages to this file 201 202 * 203 * 204 */ 205 int scanplayer = 0; /* who to scan */ 206 int showTractor = 1; /* show visible tractor * 207 208 * 209 * * beams */ 210 int commMode = 0; /* UDP: 0=TCP only, 1=UDP * 211 212 * 213 * * updates */ 214 int commModeReq = 0; /* UDP: req for comm * 215 216 * 217 * * protocol change */ 218 int commStatus = 0; /* UDP: used when switching 219 220 * 221 * * * protocols */ 222 int commSwitchTimeout = 0; /* UDP: don't wait forever */ 223 int udpTotal = 1; /* UDP: total #of packets * 224 225 * 226 * * received */ 227 int udpDropped = 0; /* UDP: count of packets * 228 229 * 230 * * dropped */ 231 int udpRecentDropped = 0; /* UDP: #of packets dropped 232 233 * 234 * * * recently */ 235 int udpSock = -1; /* UDP: the socket */ 236 int udpDebug = 0; /* UDP: debugging info * 237 238 * 239 * * on/off */ 240 int udpClientSend = 1; /* UDP: send our packets * 241 242 * 243 * * using UDP? */ 244 int udpClientRecv = 1; /* UDP: receive with simple 245 246 * 247 * * * UDP */ 248 int udpSequenceChk = 1; /* UDP: check sequence * 249 250 * 251 * * numbers */ 252 int weaponUpdate = 0; /* Have any weapon packets * 253 254 * 255 * 256 * * been received recently */ 257 258 #ifdef GATEWAY 259 int gw_serv_port, gw_port, gw_local_port; /* UDP */ 260 char *gw_mach = NULL; /* UDP */ 261 262 #endif 263 264 /* for router-based firewalls, we need to tunnel through at a specific port */ 265 int baseLocalPort = 0; /* UDP */ 266 267 int debug = 0; 268 269 int messageon = 0; 270 271 #ifdef RSA 272 char testdata[16]; 273 int RSA_Client = 1; 274 275 #endif 276 277 int SBhours = 0; 278 279 #ifdef SHORT_PACKETS 280 int why_dead = 0; 281 int tryShort = 1; /* for .xtrekrc option */ 282 int tryShort1 = 1; 283 int recv_short = 0; 284 int recv_mesg = 1; 285 int recv_kmesg = 1; 286 int recv_threshold = 0; 287 char recv_threshold_s[8] = 288 {'0', '\0'}; 289 int recv_warn = 1; 290 291 #endif 292 293 294 int netstat = 0; 295 int netstatfreq = 5; 296 W_Window netstatWin, lMeter; 297 int client_ups = 50; /* client requested updates per second */ 298 int server_ups = 50; /* server responded updates per second */ 299 int server_fps = 50; /* server configured frames per second */ 300 301 #ifdef META 302 char *metaserver = "metaserver.netrek.org"; 303 int metaport = 3521; 304 #endif 305 306 307 #ifdef NBT 308 struct macro_list macro[MAX_MACRO]; /* NBT 2/26/93 */ 309 int MacroMode = 0; 310 int macrocnt = 0; 311 312 #endif 313 314 extern double Sin[], Cos[]; 315 316 W_Icon stipple, clockpic, icon; 317 318 W_Color borderColor, backColor, textColor, myColor, warningColor, shipCol[5], 319 rColor, yColor, gColor, unColor, foreColor; 320 321 W_Icon expview[EX_FRAMES]; 322 W_Icon sbexpview[SBEXPVIEWS]; 323 W_Icon cloud[NUMDETFRAMES]; 324 W_Icon plasmacloud[NUMDETFRAMES]; 325 W_Icon etorp, mtorp; 326 W_Icon eplasmatorp, mplasmatorp; 327 328 #ifdef VSHIELD_BITMAPS 329 W_Icon shield[SHIELD_FRAMES], cloakicon; 330 int VShieldBitmaps = 1; 331 332 #else 333 W_Icon shield, cloakicon; 334 335 #endif 336 337 W_Icon tractbits, pressbits; /* ATM - visible tractor */ 338 W_Icon fed_bitmaps[NUM_TYPES][VIEWS], kli_bitmaps[NUM_TYPES][VIEWS], rom_bitmaps[NUM_TYPES][VIEWS], 339 ori_bitmaps[NUM_TYPES][VIEWS], ind_bitmaps[NUM_TYPES][VIEWS], ROMVLVS_bitmap[VIEWS]; 340 W_Icon bplanets[7]; 341 W_Icon mbplanets[7]; 342 W_Icon bplanets2[8]; 343 W_Icon mbplanets2[8]; 344 W_Icon bplanets3[NUM_PLANET_BITMAPS2]; /* isae: Added this */ 345 W_Icon mbplanets3[NUM_PLANET_BITMAPS2]; /* isae: Added this */ 346 W_Icon noinfoplanet; 347 348 /* jn - SMARTMACRO */ 349 350 #ifdef NEWMACRO 351 int MacroNum = 0; 352 353 #endif /* NEWMACRO */ 354 char lastMessage[80]; 355 char *classes[] = 356 {"SC", "DD", "CA", "BB", "AS", "SB", "GA", "AT"}; 357 char teamlet[] = 358 {'I', 'F', 'R', 'X', 'K', 'X', 'X', 'X', 'O', 'X', 'X', 'X', 359 'X', 'X', 'X', 'A'}; 360 char *teamshort[16] = 361 {"IND", "FED", "ROM", "X", "KLI", "X", "X", "X", "ORI", 362 "X", "X", "X", "X", "X", "X", "ALL"}; 363 char pseudo[PSEUDOSIZE]; 364 char defpasswd[PSEUDOSIZE]; 365 char login[PSEUDOSIZE]; 366 367 struct ship shipvals[NUM_TYPES]; 368 369 /* 10 Aug 96 - Added curt (short) names -SAC */ 370 struct rank default_ranks[DEFAULT_NUMRANKS] = 371 { 372 {0.0, 0.0, 0.0, "Ensign", "Esgn"}, 373 {2.0, 1.0, 0.0, "Lieutenant", "Lt "}, 374 {4.0, 2.0, 0.0, "Lt. Cmdr.", "LtCm"}, 375 {8.0, 3.0, 0.0, "Commander", "Cder",}, 376 {15.0, 4.0, 0.0, "Captain", "Capt"}, 377 {20.0, 5.0, 0.0, "Flt. Capt.", "FltC"}, 378 {25.0, 6.0, 0.0, "Commodore", "Cdor"}, 379 {30.0, 7.0, 0.0, "Rear Adm.", "RAdm"}, 380 {40.0, 8.0, 0.0, "Admiral", "Admr"}}; 381 struct rank *ranks = NULL; 382 int nranks = 0; 383 384 W_Window messagew, w, mapw, statwin, baseWin = 0, infow, iconWin, tstatw, 385 war, warnw, helpWin, teamWin[4], qwin, messwa, messwt, messwi, 386 messwk, playerw, planetw, rankw, optionWin = 0, reviewWin; 387 W_Window scanw, udpWin, phaserwin; 388 389 #ifdef SHORT_PACKETS 390 W_Window spWin = NULL; 391 392 #endif 393 394 #ifdef NBT 395 W_Window macroWin = NULL; 396 397 #endif 398 399 int ping = 0; /* to ping or not to ping */ 400 LONG packets_sent = 0; /* # all packets sent to * 401 402 * 403 * * server */ 404 LONG packets_received = 0; /* # all packets received */ 405 W_Window pStats = NULL; 406 407 char deathmessage[80]; 408 char outmessage[85]; /* 80 chars made sun4's core 409 410 * 411 * * * dump and I'm too lazy 412 * to * * calculate the 413 * exact * * number required 414 * here */ 415 char *xdisplay_name = NULL; 416 417 int UseNewDistress = 0; 418 int UseNewMacro = 1; 419 int UseSmartMacro = 1; 420 int rejectMacro = 0; 421 int maskrecip = 0; 422 423 unsigned char singleMacro[MAX_MACRO] = ""; 424 425 int enemyPhasers = 1; 426 427 char cloakChars[3] = "??"; 428 429 int showIND = 0; 430 int newPlist = 0; 431 432 /* tried to automate this as much as possible... the entries are * the 433 * character, string identifier, and the default macro for * each distress 434 * type. */ 435 436 /* the index into distmacro array should correspond with the correct 437 * dist_type */ 438 439 #define NUM_DIST 27 440 441 442 struct dmacro_list dist_prefered[NUM_DIST]; 443 444 /* the index into distmacro array should correspond with the correct 445 * dist_type */ 446 /* the character specification is ignored now, kept here anyway for reference */ 447 struct dmacro_list dist_defaults[] = 448 { 449 {'X', "no zero", "this should never get looked at"}, 450 /* ^t */ 451 {'\xd4', "taking", " %T%c->%O (%S) Carrying %a to %l%?%n>-1%{ @ %n%}\0"}, 452 /* ^o */ 453 {'\xcf', "ogg", " %T%c->%O Help Ogg %p at %l\0"}, 454 /* ^b */ 455 {'\xc2', "bomb", " %T%c->%O %?%n>4%{bomb %l @ %n%!bomb %l%}\0"}, 456 /* ^c */ 457 {'\xc3', "space_control", " %T%c->%O Help Control at %L\0"}, 458 /* ^1 */ 459 {'\x91', "save_planet", " %T%c->%O Emergency at %L!!!!\0"}, 460 /* ^2 */ 461 {'\x92', "base_ogg", " %T%c->%O Sync with --]> %g <[-- OGG ogg OGG base!!\0"}, 462 /* ^3 */ 463 {'\x93', "help1", " %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies.\0"}, 464 /* ^4 */ 465 {'\x94', "help2", " %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies.\0"}, 466 /* ^e */ 467 {'\xc5', "escorting", " %T%c->%O ESCORTING %g (%d%%D %s%%S %f%%F)\0"}, 468 /* ^p */ 469 {'\xd0', "ogging", " %T%c->%O Ogging %h\0"}, 470 /* ^m */ 471 {'\xcd', "bombing", " %T%c->%O Bombing %l @ %n\0"}, 472 /* ^l */ 473 {'\xcc', "controlling", " %T%c->%O Controlling at %l\0"}, 474 /* ^5 */ 475 {'\x95', "asw", " %T%c->%O Anti-bombing %p near %b.\0"}, 476 /* ^6 */ 477 {'\x96', "asbomb", " %T%c->%O DON'T BOMB %l. Let me bomb it (%S)\0"}, 478 /* ^7 */ 479 {'\x97', "doing1", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%% dam, %s%% shd, %f%% fuel)\0"}, 480 /* ^8 */ 481 {'\x98', "doing2", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%% dam, %s%% shd, %f%% fuel)\0"}, 482 /* ^f */ 483 {'\xc6', "free_beer", " %T%c->%O %p is free beer\0"}, 484 /* ^n */ 485 {'\xce', "no_gas", " %T%c->%O %p @ %l has no gas\0"}, 486 /* ^h */ 487 {'\xc8', "crippled", " %T%c->%O %p @ %l crippled\0"}, 488 /* ^9 */ 489 {'\x99', "pickup", " %T%c->%O %p++ @ %l\0"}, 490 /* ^0 */ 491 {'\x90', "pop", " %T%c->%O %l%?%n>-1%{ @ %n%}!\0"}, 492 /* F */ 493 {'F', "carrying", " %T%c->%O %?%S=SB%{Your Starbase is c%!C%}arrying %?%a>0%{%a%!NO%} arm%?%a=1%{y%!ies%}.\0"}, 494 /* ^@ */ 495 {'\xa0', "other1", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F)\0"}, 496 /* ^# */ 497 {'\x83', "other2", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F)\0"}, 498 /* E */ 499 {'E', "help", " %T%c->%O Help(%S)! %s%% shd, %d%% dmg, %f%% fuel,%?%S=SB%{ %w%% wtmp,%!%}%E%{ ETEMP!%}%W%{ WTEMP!%} %a armies!\0"}, 500 {'\0', '\0', '\0'}, 501 }; 502 503 struct dmacro_list *distmacro = dist_defaults; 504 505 int sizedist = sizeof(dist_defaults); 506 507 #ifdef BEEPLITE 508 char *distlite[NUM_DIST] = 509 { 510 NULL, 511 "/c/l/0/|%T%c Taking %L|", 512 "/|Ogg %p|", 513 "/|Bomb %L|", 514 "/|Control %L|", 515 "/|Save %L|", 516 NULL, NULL, NULL, 517 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 518 NULL, NULL, NULL, NULL, NULL, NULL, NULL 519 }; 520 521 int DefLite = 1; 522 int UseLite = 1; 523 524 int emph_planet_seq_n[MAXPLANETS] = 525 {0,}; 526 int emph_player_seq_n[MAXPLAYER] = 527 {0,}; 528 W_Icon emph_planet_seq[10]; 529 W_Icon emph_player_seq[10]; 530 W_Icon emph_player_seql[10]; 531 int beep_lite_cycle_time_player = 10; 532 int beep_lite_cycle_time_planet = 10; 533 int liteflag = 0; 534 char F_beeplite_flags = LITE_PLAYERS_MAP | 535 LITE_PLAYERS_LOCAL | 536 LITE_SELF | 537 LITE_PLANETS | 538 LITE_SOUNDS | 539 LITE_TTS; 540 541 int tts_len = 0; 542 int tts_max_len = 40; 543 int tts_width = 0; 544 int tts_timer = 0; 545 int tts_time = 25; 546 int tts_pos = TWINSIDE / 2 - 16; /* as found in redraw.c * 547 548 * 549 * * originally */ 550 char lastIn[100]; 551 552 #endif /* BEEPLITE */ 553 554 #ifdef RCM /* Receiver configurable * * 555 * Server messages */ 556 struct dmacro_list rcm_msg[] = 557 { 558 {'0', "none", "Unknown RCM message"}, 559 {'1', "kill", "GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%}) was kill %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%W%!%}"}, 560 {'2', "planet", "GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%} killed by %l (%z) %?%w>0%{%W%!%}"}, 561 {'3', "bomb", "%N->%Z We are being attacked by %i (%T%c) who is %d%% damaged."}, 562 {'4', "destroy", "%N->%Z %N destroyed by %i (%T%c)"}, 563 {'5', "take", "%N->%O %N taken by %i (%T%c)"}, 564 {'6', "ghostbust", "GOD->ALL %i (%S) (%T%c) was kill %k for the GhostBusters"}, 565 {'\0', '\0', '\0'}, 566 }; 567 568 #endif /* RCM */ 569 570 int highlightFriendlyPhasers = 0; 571 572 #ifdef IGNORE_SIGNALS_SEGV_BUS 573 /* KRP */ 574 /* Handle (hopefully) non-fatal segmentation and bus faults. */ 575 int ignore_signals = 0; 576 577 #endif 578 579 #ifdef MOTION_MOUSE 580 /* KRP */ 581 int motion_mouse = 0; 582 int user_motion_thresh = 16; 583 int motion_mouse_enablable = 1; 584 int motion_mouse_steering = 0; 585 586 #endif 587 588 #ifdef SHIFTED_MOUSE 589 /* KRP */ 590 int extended_mouse = 0; 591 592 #endif 593 594 int ignoreCaps = 1; /* Default is to ignore the 595 596 * 597 * * * Capslock key SRS */ 598 599 #ifdef MOUSE_AS_SHIFT 600 /* KRP */ 601 int mouse_as_shift = 0; 602 int b1_as_shift = 0; 603 int b2_as_shift = 0; 604 int b3_as_shift = 0; 605 606 #endif 607 608 #ifdef TNG_FED_BITMAPS 609 int use_tng_fed_bitmaps = 0; 610 W_Icon tng_fed_bitmaps[NUM_TYPES][VIEWS]; 611 612 #endif 613 614 #ifdef VARY_HULL 615 W_Icon hull[8]; 616 int vary_hull = 0; 617 618 #endif 619 620 #ifdef XTREKRC_HELP 621 W_Window defWin = NULL; 622 623 #endif 624 625 #ifdef CONTROL_KEY 626 int use_control_key = 1; 627 628 #endif 629 630 #ifdef DOC_WIN 631 W_Window docwin = NULL, xtrekrcwin = NULL; 632 int maxdoclines = 0, maxxtrekrclines = 0; 633 634 #endif 635 636 W_Icon bplanets4[8]; 637 W_Icon mbplanets4[8]; 638 639 #ifdef REFRESH_INTERVAL 640 int refresh_interval = 0; 641 642 #endif 643 644 int max_fd = 3; 645 646 #ifdef TOOLS 647 W_Window toolsWin = NULL; 648 int shelltools = 1; 649 struct key_list macroKeys[MAX_KEY]; 650 unsigned char keys[MAX_KEY] = ""; 651 char *wwwlink = "netscape -remote \"openURL(%s)\""; 652 char *upgradeURL = "http://cow.netrek.org/current/index.html#%s"; 653 char *releaseURL = "http://cow.netrek.org/%s/README.html#pl%i"; 654 char *bugURL = "http://sourceforge.net/bugs/?group_id=968"; 655 /* 656 char *bugURL = "http://bugzilla.us.netrek.org/cow?version=%s&pl=%i&arch=%s"; 657 */ 658 #endif 659 660 #ifdef SOUND 661 int sound_init = 1; 662 int sound_toggle = 0; 663 char *sounddir = NULL; 664 W_Window soundWin = NULL; 665 666 #endif 667 668 #ifdef HOCKEY_LINES 669 int hockey_s_lines = 0; 670 struct s_line s_lines[NUM_HOCKEY_LINES + 1]; 671 int normal_s_lines = 0; 672 673 #endif 674 675 #ifdef MULTILINE_MACROS 676 int multiline_enabled = 0; 677 678 #endif 679 680 #ifdef FEATURE_PACKETS 681 int F_feature_packets = 0; 682 683 #endif 684 685 int F_cloak_maxwarp = 0; 686 int F_self_8flags = 1; 687 int F_self_8flags2 = 0; 688 int F_ship_cap = 0; 689 int F_sp_generic_32 = 1; 690 char A_sp_generic_32 = 0; 691 int F_agri_pix = 1; 692 693 #ifdef WARP_DEAD 694 int F_dead_warp = 0; 695 696 #endif 697 698 int F_many_self = 0; 699 700 #ifdef UDP_PORTSWAP 701 int portSwap = 1; 702 #endif 703 704 int F_show_all_tractors = 1; 705 int fastGuest = 0; 706 int identityBlind = 0; 707 int versionHide = 0; 708 int F_sp_rank = 0; 709 int F_sp_ltd = 0; 710 int F_tips = 1; 711 char *program = NULL; 712 int small_screen = 0; 713