Files
@ r25814:efd9cb732234
Branch filter:
Location: cpp/openttd-patchpack/source/src/settings_type.h - annotation
r25814:efd9cb732234
42.1 KiB
text/x-c
Change: groundwork to allow ServerAddress to use invite codes
Normally TCPConnecter will do a DNS resolving of the connection_string
and connect to it. But for SERVER_ADDRESS_INVITE_CODE this is different:
the Game Coordinator does the "resolving".
This means we need to allow TCPConnecter to not setup a connection
and allow it to be told when a connection has been setup by an external
(to TCPConnecter) part of the code. We do this by telling the (active)
socket for the connection.
This means the rest of the code doesn't need to know the TCPConnecter
is not doing a simple resolve+connect. The rest of the code only
cares the connection is established; not how it was established.
Normally TCPConnecter will do a DNS resolving of the connection_string
and connect to it. But for SERVER_ADDRESS_INVITE_CODE this is different:
the Game Coordinator does the "resolving".
This means we need to allow TCPConnecter to not setup a connection
and allow it to be told when a connection has been setup by an external
(to TCPConnecter) part of the code. We do this by telling the (active)
socket for the connection.
This means the rest of the code doesn't need to know the TCPConnecter
is not doing a simple resolve+connect. The rest of the code only
cares the connection is established; not how it was established.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r24430:e39e393df7ba r8213:466402e95092 r9126:35955a7b9d9e r9420:7c6f91f6791c r10696:8dfe83e30d01 r20338:9b08dd08e21e r20338:9b08dd08e21e r18460:1ec843d3a5ae r16949:23f78f8218cd r8208:69bb74cd3d21 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r24985:8b9851fa97c7 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r17250:826c29ab7dc1 r9358:e56a864fbbb0 r9358:e56a864fbbb0 r25578:e8ef2567d59d r25578:e8ef2567d59d r25578:e8ef2567d59d r9359:a0f63bc5d864 r9359:a0f63bc5d864 r17251:1a6731d06266 r9359:a0f63bc5d864 r9359:a0f63bc5d864 r9359:a0f63bc5d864 r9359:a0f63bc5d864 r9359:a0f63bc5d864 r25636:7c2fc0b1c9aa r25636:7c2fc0b1c9aa r9359:a0f63bc5d864 r9359:a0f63bc5d864 r9359:a0f63bc5d864 r19837:b08e70a8cf98 r19837:b08e70a8cf98 r19837:b08e70a8cf98 r9359:a0f63bc5d864 r8268:4e9851bbf247 r8268:4e9851bbf247 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r22832:5d956df430b6 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r16762:1d4bc6bc195d r9354:358e967da2ca r10577:f3bde9f89c2b r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r11652:5c73940aeb94 r19659:46eaf933bde9 r9354:358e967da2ca r21677:f163b67c7199 r9354:358e967da2ca r14483:61a6c8735f8f r22832:5d956df430b6 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r23023:7b8669afd1db r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r16453:a6fa65e29fdb r9354:358e967da2ca r10610:8e0fac091bf3 r23660:fd38a6a589de r23660:fd38a6a589de r25043:14409275cde9 r9358:e56a864fbbb0 r13374:230eb75422dd r9354:358e967da2ca r9354:358e967da2ca r22920:d5db459268de r10535:b3ce6f2e96f8 r9354:358e967da2ca r25484:c5af4712cb7f r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r13750:4428487b0600 r22614:cd524a5b5533 r9354:358e967da2ca r9354:358e967da2ca r11085:c87a330fb4c2 r9354:358e967da2ca r10570:e200b86ce378 r9354:358e967da2ca r9354:358e967da2ca r19226:c1d25b89a8a7 r9354:358e967da2ca r9466:9e4391a4f949 r9785:165707b7be50 r9793:aca90197bc99 r9793:aca90197bc99 r10565:370655f37f41 r10565:370655f37f41 r10565:370655f37f41 r10565:370655f37f41 r11021:fa98a5be2553 r16911:c617f5e9cdc5 r17978:c07585e51a28 r17988:0007c249e812 r18640:cd857e155af2 r19830:115afe4d0f91 r23121:71ff08c9923f r24014:d9cf4cd9869d r24589:4f3e15cc70dd r24836:1b90bc77ac1d r24970:1ff44d19fa4a r9906:d66b7fd4ccb1 r9906:d66b7fd4ccb1 r9906:d66b7fd4ccb1 r20352:7690e1625eeb r20352:7690e1625eeb r20352:7690e1625eeb r20352:7690e1625eeb r21988:24cc96a34d30 r9902:a15fd890143f r16770:65c139bec452 r12984:b9c53ed05d55 r14501:2d9a7f4bac26 r12984:b9c53ed05d55 r16390:6661be1e628d r14935:1c89e8b20a82 r16390:6661be1e628d r19717:5e647f4e3df1 r15589:fd456a62bb1c r17635:2e67e206a89e r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r16390:6661be1e628d r9466:9e4391a4f949 r9466:9e4391a4f949 r19890:8a1009b78524 r19890:8a1009b78524 r19890:8a1009b78524 r19891:7fd9bf0868c4 r19891:7fd9bf0868c4 r23838:bfeaabaa7b1d r19891:7fd9bf0868c4 r19891:7fd9bf0868c4 r19891:7fd9bf0868c4 r19891:7fd9bf0868c4 r19890:8a1009b78524 r19890:8a1009b78524 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r17438:d5ae9e98ac04 r9466:9e4391a4f949 r9466:9e4391a4f949 r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r9354:358e967da2ca r8208:69bb74cd3d21 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r19888:a6490abb0294 r9420:7c6f91f6791c r9420:7c6f91f6791c r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25463:a9b079004e01 r25461:f4423b696b95 r25461:f4423b696b95 r25461:f4423b696b95 r25803:2bb6ece6b23e r25464:b2a279799858 r25461:f4423b696b95 r25462:cf7a0a10bcaa r25463:a9b079004e01 r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25465:00b2c6cd44ad r25462:cf7a0a10bcaa r25465:00b2c6cd44ad r9420:7c6f91f6791c r9420:7c6f91f6791c r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r24002:6eb7dd997787 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r25076:d074a1f15942 r25076:d074a1f15942 r25077:ff78c3801da7 r25081:abb147cb8bdd r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9358:e56a864fbbb0 r9358:e56a864fbbb0 r10855:5a3c2f38f98e r11340:d21bd0c025b2 r13989:72d505878586 r25082:dba738c5114f r16126:3b43532e6039 r17948:23f0b72f97f3 r17948:23f0b72f97f3 r17948:23f0b72f97f3 r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r25079:09d645764ffe r9354:358e967da2ca r9354:358e967da2ca r17210:893afe086e22 r21737:06ce4c4b795d r17210:893afe086e22 r19291:d199fcaeac08 r9354:358e967da2ca r9354:358e967da2ca r11247:c15ef8b37f5e r9354:358e967da2ca r15961:9492ed63ba2b r10855:5a3c2f38f98e r13973:b91e25840bdc r16684:92e7f7518072 r16982:4a4e85b95d1e r16982:4a4e85b95d1e r16982:4a4e85b95d1e r16982:4a4e85b95d1e r16982:4a4e85b95d1e r19231:55e444acd766 r19231:55e444acd766 r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r18533:c272004d6257 r18533:c272004d6257 r18533:c272004d6257 r18533:c272004d6257 r19834:0a601872b900 r18533:c272004d6257 r23730:3b11f535de42 r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r9354:358e967da2ca r8208:69bb74cd3d21 r8208:69bb74cd3d21 r13935:e0b7841f69a5 r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9805:68ad53ef9e78 r9805:68ad53ef9e78 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r13865:208a75ffd2fd r13865:208a75ffd2fd r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r13935:e0b7841f69a5 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r13865:208a75ffd2fd r13865:208a75ffd2fd r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9799:6ed239f36eea r9801:4b09c4d26340 r9799:6ed239f36eea r9800:4be0f198622a r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r23417:4615b1310164 r23417:4615b1310164 r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9070:e059c65164f3 r17213:9e1a5315b952 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9810:a537c0857d3f r9810:a537c0857d3f r9810:a537c0857d3f r9810:a537c0857d3f r9354:358e967da2ca r9354:358e967da2ca r8208:69bb74cd3d21 r8208:69bb74cd3d21 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r19944:25a78576fb5e r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r17211:a78e3d82def6 r15700:e8be2cdaa0b2 r10901:d21ccd8648fa r14747:a465914ccbff r14117:ce1ade01b83f r14748:2a6d539b6173 r9354:358e967da2ca r9354:358e967da2ca r10207:a1fc2f2a33db r10207:a1fc2f2a33db r10207:a1fc2f2a33db r10207:a1fc2f2a33db r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9358:e56a864fbbb0 r14375:9a0d7f45d6b9 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r24430:e39e393df7ba r9354:358e967da2ca r23868:c27f77461772 r14145:5a1d747ea3e9 r9354:358e967da2ca r9354:358e967da2ca r18449:13cef7666d9a r17224:20ea9e6622ee r10207:a1fc2f2a33db r19944:25a78576fb5e r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r23664:6060dcf415e4 r23403:d1046b8440da r11000:d03bad32156f r23663:3430a8f404c0 r9354:358e967da2ca r9354:358e967da2ca r15395:81bd05aa8971 r18560:ff3a65f20dab r9354:358e967da2ca r9354:358e967da2ca r20338:9b08dd08e21e r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r23682:d65b8fe9f89d r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r20338:9b08dd08e21e r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r23420:9c4e5ff5cf11 r9354:358e967da2ca r10626:59619471b98d r12190:b1cc850530e0 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r12027:83216fa52f8f r11908:0875f47fab11 r11908:0875f47fab11 r11908:0875f47fab11 r11908:0875f47fab11 r11908:0875f47fab11 r11908:0875f47fab11 r12027:83216fa52f8f r11908:0875f47fab11 r11908:0875f47fab11 r9413:fcf267325763 r9413:fcf267325763 r9358:e56a864fbbb0 r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r18533:c272004d6257 r10696:8dfe83e30d01 r18748:5e4b96072e2a r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r9354:358e967da2ca r20338:9b08dd08e21e r9354:358e967da2ca r9466:9e4391a4f949 r9354:358e967da2ca r9354:358e967da2ca r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9420:7c6f91f6791c r11908:0875f47fab11 r19890:8a1009b78524 r17438:d5ae9e98ac04 r19888:a6490abb0294 r9413:fcf267325763 r8208:69bb74cd3d21 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r9413:fcf267325763 r8208:69bb74cd3d21 r17825:d7517e40e058 r17825:d7517e40e058 r17825:d7517e40e058 r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r16949:23f78f8218cd r8208:69bb74cd3d21 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file settings_type.h Types related to global configuration settings. */
#ifndef SETTINGS_TYPE_H
#define SETTINGS_TYPE_H
#include "date_type.h"
#include "economy_type.h"
#include "town_type.h"
#include "transport_type.h"
#include "network/core/config.h"
#include "company_type.h"
#include "cargotype.h"
#include "linkgraph/linkgraph_type.h"
#include "zoom_type.h"
#include "openttd.h"
/* Used to validate sizes of "max" value in settings. */
const size_t MAX_SLE_UINT8 = UINT8_MAX;
const size_t MAX_SLE_UINT16 = UINT16_MAX;
const size_t MAX_SLE_UINT32 = UINT32_MAX;
const size_t MAX_SLE_UINT = UINT_MAX;
const size_t MAX_SLE_INT8 = INT8_MAX;
const size_t MAX_SLE_INT16 = INT16_MAX;
const size_t MAX_SLE_INT32 = INT32_MAX;
const size_t MAX_SLE_INT = INT_MAX;
/** Settings profiles and highscore tables. */
enum SettingsProfile {
SP_BEGIN = 0,
SP_EASY = SP_BEGIN, ///< Easy difficulty.
SP_MEDIUM, ///< Medium difficulty.
SP_HARD, ///< Hard difficulty.
SP_END, ///< End of setting profiles.
SP_CUSTOM = SP_END, ///< No profile, special "custom" highscore.
SP_SAVED_HIGHSCORE_END, ///< End of saved highscore tables.
SP_MULTIPLAYER = SP_SAVED_HIGHSCORE_END, ///< Special "multiplayer" highscore. Not saved, always specific to the current game.
SP_HIGHSCORE_END, ///< End of highscore tables.
};
/** Available industry map generation densities. */
enum IndustryDensity {
ID_FUND_ONLY, ///< The game does not build industries.
ID_MINIMAL, ///< Start with just the industries that must be present.
ID_VERY_LOW, ///< Very few industries at game start.
ID_LOW, ///< Few industries at game start.
ID_NORMAL, ///< Normal amount of industries at game start.
ID_HIGH, ///< Many industries at game start.
ID_END, ///< Number of industry density settings.
};
/** Settings related to the difficulty of the game */
struct DifficultySettings {
byte competitor_start_time; ///< Unused value, used to load old savegames.
byte competitor_intelligence; ///< Unused value, used to load old savegames.
byte max_no_competitors; ///< the number of competitors (AIs)
byte number_towns; ///< the amount of towns
byte industry_density; ///< The industry density. @see IndustryDensity
uint32 max_loan; ///< the maximum initial loan
byte initial_interest; ///< amount of interest (to pay over the loan)
byte vehicle_costs; ///< amount of money spent on vehicle running cost
byte competitor_speed; ///< the speed at which the AI builds
byte vehicle_breakdowns; ///< likelihood of vehicles breaking down
byte subsidy_multiplier; ///< payment multiplier for subsidized deliveries
uint16 subsidy_duration; ///< duration of subsidies
byte construction_cost; ///< how expensive is building
byte terrain_type; ///< the mountainousness of the landscape
byte quantity_sea_lakes; ///< the amount of seas/lakes
bool economy; ///< how volatile is the economy
bool line_reverse_mode; ///< reversing at stations or not
bool disasters; ///< are disasters enabled
byte town_council_tolerance; ///< minimum required town ratings to be allowed to demolish stuff
};
/** Settings relating to viewport/smallmap scrolling. */
enum ViewportScrollMode {
VSM_VIEWPORT_RMB_FIXED, ///< Viewport moves with mouse movement on holding right mouse button, cursor position is fixed.
VSM_MAP_RMB_FIXED, ///< Map moves with mouse movement on holding right mouse button, cursor position is fixed.
VSM_MAP_RMB, ///< Map moves with mouse movement on holding right mouse button, cursor moves.
VSM_MAP_LMB, ///< Map moves with mouse movement on holding left mouse button, cursor moves.
VSM_END, ///< Number of scroll mode settings.
};
/** Settings related to the GUI and other stuff that is not saved in the savegame. */
struct GUISettings {
bool sg_full_load_any; ///< new full load calculation, any cargo must be full read from pre v93 savegames
bool lost_vehicle_warn; ///< if a vehicle can't find its destination, show a warning
uint8 order_review_system; ///< perform order reviews on vehicles
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning
bool show_finances; ///< show finances at end of year
bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
bool new_nonstop; ///< ttdpatch compatible nonstop handling
uint8 stop_location; ///< what is the default stop location of trains?
uint8 auto_scrolling; ///< scroll when moving mouse to the edge (see #ViewportAutoscrolling)
byte errmsg_duration; ///< duration of error message
uint16 hover_delay_ms; ///< time required to activate a hover event, in milliseconds
bool link_terraform_toolbar; ///< display terraform toolbar when displaying rail, road, water and airport toolbars
uint8 smallmap_land_colour; ///< colour used for land and heightmap at the smallmap
uint8 scroll_mode; ///< viewport scroll mode
bool smooth_scroll; ///< smooth scroll viewports
bool measure_tooltip; ///< show a permanent tooltip when dragging tools
byte liveries; ///< options for displaying company liveries, 0=none, 1=self, 2=all
bool prefer_teamchat; ///< choose the chat message target with \<ENTER\>, true=all clients, false=your team
uint8 advanced_vehicle_list; ///< use the "advanced" vehicle list
uint8 loading_indicators; ///< show loading indicators
uint8 default_rail_type; ///< the default rail type for the rail GUI
uint8 toolbar_pos; ///< position of toolbars, 0=left, 1=center, 2=right
uint8 statusbar_pos; ///< position of statusbar, 0=left, 1=center, 2=right
uint8 window_snap_radius; ///< windows snap at each other if closer than this
uint8 window_soft_limit; ///< soft limit of maximum number of non-stickied non-vital windows (0 = no limit)
ZoomLevel zoom_min; ///< minimum zoom out level
ZoomLevel zoom_max; ///< maximum zoom out level
ZoomLevel sprite_zoom_min; ///< maximum zoom level at which higher-resolution alternative sprites will be used (if available) instead of scaling a lower resolution sprite
byte autosave; ///< how often should we do autosaves?
bool threaded_saves; ///< should we do threaded saves?
bool keep_all_autosave; ///< name the autosave in a different way
bool autosave_on_exit; ///< save an autosave when you quit the game, but do not ask "Do you really want to quit?"
bool autosave_on_network_disconnect; ///< save an autosave when you get disconnected from a network game with an error?
uint8 date_format_in_default_names; ///< should the default savegame/screenshot name use long dates (31th Dec 2008), short dates (31-12-2008) or ISO dates (2008-12-31)
byte max_num_autosaves; ///< controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1)
bool population_in_label; ///< show the population of a town in its label?
uint8 right_mouse_btn_emulation; ///< should we emulate right mouse clicking?
uint8 scrollwheel_scrolling; ///< scrolling using the scroll wheel?
uint8 scrollwheel_multiplier; ///< how much 'wheel' per incoming event from the OS?
bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables
bool right_mouse_wnd_close; ///< close window with right click
bool pause_on_newgame; ///< whether to start new games paused or not
bool enable_signal_gui; ///< show the signal GUI when the signal button is pressed
Year coloured_news_year; ///< when does newspaper become coloured?
bool timetable_in_ticks; ///< whether to show the timetable in ticks rather than days
bool quick_goto; ///< Allow quick access to 'goto button' in vehicle orders window
bool auto_euro; ///< automatically switch to euro in 2002
byte drag_signals_density; ///< many signals density
bool drag_signals_fixed_distance; ///< keep fixed distance between signals when dragging
Year semaphore_build_before; ///< build semaphore signals automatically before this year
byte news_message_timeout; ///< how much longer than the news message "age" should we keep the message in the history
bool show_track_reservation; ///< highlight reserved tracks.
uint8 default_signal_type; ///< the signal type to build by default.
uint8 cycle_signal_types; ///< what signal types to cycle with the build signal tool.
byte station_numtracks; ///< the number of platforms to default on for rail stations
byte station_platlength; ///< the platform length, in tiles, for rail stations
bool station_dragdrop; ///< whether drag and drop is enabled for stations
bool station_show_coverage; ///< whether to highlight coverage area
bool persistent_buildingtools; ///< keep the building tools active after usage
bool expenses_layout; ///< layout of expenses window
uint32 last_newgrf_count; ///< the numbers of NewGRFs we found during the last scan
byte missing_strings_threshold; ///< the number of missing strings before showing the warning
uint8 graph_line_thickness; ///< the thickness of the lines in the various graph guis
uint8 osk_activation; ///< Mouse gesture to trigger the OSK.
byte starting_colour; ///< default color scheme for the company to start a new game with
bool show_newgrf_name; ///< Show the name of the NewGRF in the build vehicle window
bool auto_remove_signals; ///< automatically remove signals when in the way during rail construction
uint16 refresh_rate; ///< How often we refresh the screen (time between draw-ticks).
uint16 fast_forward_speed_limit; ///< Game speed to use when fast-forward is enabled.
uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity.
uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed.
uint8 station_gui_group_order; ///< the order of grouping cargo entries in the station gui
uint8 station_gui_sort_by; ///< sort cargo entries in the station gui by station name or amount
uint8 station_gui_sort_order; ///< the sort order of entries in the station gui - ascending or descending
uint16 network_chat_box_width_pct; ///< width of the chat box in percent
uint8 network_chat_box_height; ///< height of the chat box in lines
uint16 network_chat_timeout; ///< timeout of chat messages in seconds
uint8 developer; ///< print non-fatal warnings in console (>= 1), copy debug output to console (== 2)
bool show_date_in_logs; ///< whether to show dates in console logs
bool newgrf_developer_tools; ///< activate NewGRF developer tools and allow modifying NewGRFs in an existing game
bool ai_developer_tools; ///< activate AI developer tools
bool scenario_developer; ///< activate scenario developer: allow modifying NewGRFs in an existing game
uint8 settings_restriction_mode; ///< selected restriction mode in adv. settings GUI. @see RestrictionMode
bool newgrf_show_old_versions; ///< whether to show old versions in the NewGRF list
uint8 newgrf_default_palette; ///< default palette to use for NewGRFs without action 14 palette information
/**
* Returns true when the user has sufficient privileges to edit newgrfs on a running game
* @return whether the user has sufficient privileges to edit newgrfs in an existing game
*/
bool UserIsAllowedToChangeNewGRFs() const
{
return this->scenario_developer || this->newgrf_developer_tools;
}
};
/** Settings related to sound effects. */
struct SoundSettings {
bool news_ticker; ///< Play a ticker sound when a news item is published.
bool news_full; ///< Play sound effects associated to certain news types.
bool new_year; ///< Play sound on new year, summarising the performance during the last year.
bool confirm; ///< Play sound effect on successful constructions or other actions.
bool click_beep; ///< Beep on a random selection of buttons.
bool disaster; ///< Play disaster and accident sounds.
bool vehicle; ///< Play vehicle sound effects.
bool ambient; ///< Play ambient, industry and town sounds.
};
/** Settings related to music. */
struct MusicSettings {
byte playlist; ///< The playlist (number) to play
byte music_vol; ///< The requested music volume
byte effect_vol; ///< The requested effects volume
byte custom_1[33]; ///< The order of the first custom playlist
byte custom_2[33]; ///< The order of the second custom playlist
bool playing; ///< Whether music is playing
bool shuffle; ///< Whether to shuffle the music
};
/** Settings related to currency/unit systems. */
struct LocaleSettings {
byte currency; ///< currency we currently use
byte units_velocity; ///< unit system for velocity
byte units_power; ///< unit system for power
byte units_weight; ///< unit system for weight
byte units_volume; ///< unit system for volume
byte units_force; ///< unit system for force
byte units_height; ///< unit system for height
std::string digit_group_separator; ///< thousand separator for non-currencies
std::string digit_group_separator_currency; ///< thousand separator for currencies
std::string digit_decimal_separator; ///< decimal separator
};
/** Settings related to news */
struct NewsSettings {
uint8 arrival_player; ///< NewsDisplay of vehicles arriving at new stations of current player
uint8 arrival_other; ///< NewsDisplay of vehicles arriving at new stations of other players
uint8 accident; ///< NewsDisplay of accidents that occur
uint8 company_info; ///< NewsDisplay of general company information
uint8 open; ///< NewsDisplay on new industry constructions
uint8 close; ///< NewsDisplay about closing industries
uint8 economy; ///< NewsDisplay on economical changes
uint8 production_player; ///< NewsDisplay of production changes of industries affecting current player
uint8 production_other; ///< NewsDisplay of production changes of industries affecting competitors
uint8 production_nobody; ///< NewsDisplay of production changes of industries affecting no one
uint8 advice; ///< NewsDisplay on advice affecting the player's vehicles
uint8 new_vehicles; ///< NewsDisplay of new vehicles becoming available
uint8 acceptance; ///< NewsDisplay on changes affecting the acceptance of cargo at stations
uint8 subsidies; ///< NewsDisplay of changes on subsidies
uint8 general; ///< NewsDisplay of other topics
};
/** All settings related to the network. */
struct NetworkSettings {
uint16 sync_freq; ///< how often do we check whether we are still in-sync
uint8 frame_freq; ///< how often do we send commands to the clients
uint16 commands_per_frame; ///< how many commands may be sent each frame_freq frames?
uint16 max_commands_in_queue; ///< how many commands may there be in the incoming queue before dropping the connection?
uint16 bytes_per_frame; ///< how many bytes may, over a long period, be received per frame?
uint16 bytes_per_frame_burst; ///< how many bytes may, over a short period, be received?
uint16 max_init_time; ///< maximum amount of time, in game ticks, a client may take to initiate joining
uint16 max_join_time; ///< maximum amount of time, in game ticks, a client may take to sync up during joining
uint16 max_download_time; ///< maximum amount of time, in game ticks, a client may take to download the map
uint16 max_password_time; ///< maximum amount of time, in game ticks, a client may take to enter the password
uint16 max_lag_time; ///< maximum amount of time, in game ticks, a client may be lagging behind the server
bool pause_on_join; ///< pause the game when people join
uint16 server_port; ///< port the server listens on
uint16 server_admin_port; ///< port the server listens on for the admin network
bool server_admin_chat; ///< allow private chat for the server to be distributed to the admin network
std::string server_name; ///< name of the server
std::string server_password; ///< password for joining this server
std::string rcon_password; ///< password for rconsole (server side)
std::string admin_password; ///< password for the admin network
bool server_advertise; ///< Advertise the server to the game coordinator.
std::string client_name; ///< name of the player (as client)
std::string default_company_pass; ///< default password for new companies in encrypted form
std::string connect_to_ip; ///< default for the "Add server" query
std::string network_id; ///< network ID for servers
bool autoclean_companies; ///< automatically remove companies that are not in use
uint8 autoclean_unprotected; ///< remove passwordless companies after this many months
uint8 autoclean_protected; ///< remove the password from passworded companies after this many months
uint8 autoclean_novehicles; ///< remove companies with no vehicles after this many months
uint8 max_companies; ///< maximum amount of companies
uint8 max_clients; ///< maximum amount of clients
uint8 max_spectators; ///< maximum amount of spectators
Year restart_game_year; ///< year the server restarts
uint8 min_active_clients; ///< minimum amount of active clients to unpause the game
bool reload_cfg; ///< reload the config file before restarting
std::string last_joined; ///< Last joined server
bool no_http_content_downloads; ///< do not do content downloads over HTTP
};
/** Settings related to the creation of games. */
struct GameCreationSettings {
uint32 generation_seed; ///< noise seed for world generation
Year starting_year; ///< starting date
Year ending_year; ///< scoring end date
uint8 map_x; ///< X size of map
uint8 map_y; ///< Y size of map
byte land_generator; ///< the landscape generator
byte oil_refinery_limit; ///< distance oil refineries allowed from map edge
byte snow_line_height; ///< the configured snow line height (deduced from "snow_coverage")
byte snow_coverage; ///< the amount of snow coverage on the map
byte desert_coverage; ///< the amount of desert coverage on the map
byte heightmap_height; ///< highest mountain for heightmap (towards what it scales)
byte tgen_smoothness; ///< how rough is the terrain from 0-3
byte tree_placer; ///< the tree placer algorithm
byte heightmap_rotation; ///< rotation director for the heightmap
byte se_flat_world_height; ///< land height a flat world gets in SE
byte town_name; ///< the town name generator used for town names
byte landscape; ///< the landscape we're currently in
byte water_borders; ///< bitset of the borders that are water
uint16 custom_town_number; ///< manually entered number of towns
byte variety; ///< variety level applied to TGP
byte custom_terrain_type; ///< manually entered height for TGP to aim for
byte custom_sea_level; ///< manually entered percentage of water in the map
byte min_river_length; ///< the minimum river length
byte river_route_random; ///< the amount of randomicity for the route finding
byte amount_of_rivers; ///< the amount of rivers
};
/** Settings related to construction in-game */
struct ConstructionSettings {
uint8 map_height_limit; ///< the maximum allowed heightlevel
bool build_on_slopes; ///< allow building on slopes
bool autoslope; ///< allow terraforming under things
uint16 max_bridge_length; ///< maximum length of bridges
byte max_bridge_height; ///< maximum height of bridges
uint16 max_tunnel_length; ///< maximum length of tunnels
byte train_signal_side; ///< show signals on left / driving / right side
bool extra_dynamite; ///< extra dynamite
bool road_stop_on_town_road; ///< allow building of drive-through road stops on town owned roads
bool road_stop_on_competitor_road; ///< allow building of drive-through road stops on roads owned by competitors
uint8 raw_industry_construction; ///< type of (raw) industry construction (none, "normal", prospecting)
uint8 industry_platform; ///< the amount of flat land around an industry
bool freeform_edges; ///< allow terraforming the tiles at the map edges
uint8 extra_tree_placement; ///< (dis)allow building extra trees in-game
uint8 command_pause_level; ///< level/amount of commands that can't be executed while paused
uint32 terraform_per_64k_frames; ///< how many tile heights may, over a long period, be terraformed per 65536 frames?
uint16 terraform_frame_burst; ///< how many tile heights may, over a short period, be terraformed?
uint32 clear_per_64k_frames; ///< how many tiles may, over a long period, be cleared per 65536 frames?
uint16 clear_frame_burst; ///< how many tiles may, over a short period, be cleared?
uint32 tree_per_64k_frames; ///< how many trees may, over a long period, be planted per 65536 frames?
uint16 tree_frame_burst; ///< how many trees may, over a short period, be planted?
};
/** Settings related to the AI. */
struct AISettings {
bool ai_in_multiplayer; ///< so we allow AIs in multiplayer
bool ai_disable_veh_train; ///< disable types for AI
bool ai_disable_veh_roadveh; ///< disable types for AI
bool ai_disable_veh_aircraft; ///< disable types for AI
bool ai_disable_veh_ship; ///< disable types for AI
};
/** Settings related to scripts. */
struct ScriptSettings {
uint8 settings_profile; ///< difficulty profile to set initial settings of scripts, esp. random AIs
uint32 script_max_opcode_till_suspend; ///< max opcode calls till scripts will suspend
uint32 script_max_memory_megabytes; ///< limit on memory a single script instance may have allocated
};
/** Settings related to the new pathfinder. */
struct NPFSettings {
/**
* The maximum amount of search nodes a single NPF run should take. This
* limit should make sure performance stays at acceptable levels at the cost
* of not being perfect anymore.
*/
uint32 npf_max_search_nodes;
uint32 maximum_go_to_depot_penalty; ///< What is the maximum penalty that may be endured for going to a depot
uint32 npf_rail_firstred_penalty; ///< the penalty for when the first signal is red (and it is not an exit or combo signal)
uint32 npf_rail_firstred_exit_penalty; ///< the penalty for when the first signal is red (and it is an exit or combo signal)
uint32 npf_rail_lastred_penalty; ///< the penalty for when the last signal is red
uint32 npf_rail_station_penalty; ///< the penalty for station tiles
uint32 npf_rail_slope_penalty; ///< the penalty for sloping upwards
uint32 npf_rail_curve_penalty; ///< the penalty for curves
uint32 npf_rail_depot_reverse_penalty; ///< the penalty for reversing in depots
uint32 npf_rail_pbs_cross_penalty; ///< the penalty for crossing a reserved rail track
uint32 npf_rail_pbs_signal_back_penalty; ///< the penalty for passing a pbs signal from the backside
uint32 npf_buoy_penalty; ///< the penalty for going over (through) a buoy
uint32 npf_water_curve_penalty; ///< the penalty for curves
uint32 npf_road_curve_penalty; ///< the penalty for curves
uint32 npf_crossing_penalty; ///< the penalty for level crossings
uint32 npf_road_drive_through_penalty; ///< the penalty for going through a drive-through road stop
uint32 npf_road_dt_occupied_penalty; ///< the penalty multiplied by the fill percentage of a drive-through road stop
uint32 npf_road_bay_occupied_penalty; ///< the penalty multiplied by the fill percentage of a road bay
};
/** Settings related to the yet another pathfinder. */
struct YAPFSettings {
bool disable_node_optimization; ///< whether to use exit-dir instead of trackdir in node key
uint32 max_search_nodes; ///< stop path-finding when this number of nodes visited
uint32 maximum_go_to_depot_penalty; ///< What is the maximum penalty that may be endured for going to a depot
bool ship_use_yapf; ///< use YAPF for ships
bool road_use_yapf; ///< use YAPF for road
bool rail_use_yapf; ///< use YAPF for rail
uint32 road_slope_penalty; ///< penalty for up-hill slope
uint32 road_curve_penalty; ///< penalty for curves
uint32 road_crossing_penalty; ///< penalty for level crossing
uint32 road_stop_penalty; ///< penalty for going through a drive-through road stop
uint32 road_stop_occupied_penalty; ///< penalty multiplied by the fill percentage of a drive-through road stop
uint32 road_stop_bay_occupied_penalty; ///< penalty multiplied by the fill percentage of a road bay
bool rail_firstred_twoway_eol; ///< treat first red two-way signal as dead end
uint32 rail_firstred_penalty; ///< penalty for first red signal
uint32 rail_firstred_exit_penalty; ///< penalty for first red exit signal
uint32 rail_lastred_penalty; ///< penalty for last red signal
uint32 rail_lastred_exit_penalty; ///< penalty for last red exit signal
uint32 rail_station_penalty; ///< penalty for non-target station tile
uint32 rail_slope_penalty; ///< penalty for up-hill slope
uint32 rail_curve45_penalty; ///< penalty for curve
uint32 rail_curve90_penalty; ///< penalty for 90-deg curve
uint32 rail_depot_reverse_penalty; ///< penalty for reversing in the depot
uint32 rail_crossing_penalty; ///< penalty for level crossing
uint32 rail_look_ahead_max_signals; ///< max. number of signals taken into consideration in look-ahead load balancer
int32 rail_look_ahead_signal_p0; ///< constant in polynomial penalty function
int32 rail_look_ahead_signal_p1; ///< constant in polynomial penalty function
int32 rail_look_ahead_signal_p2; ///< constant in polynomial penalty function
uint32 rail_pbs_cross_penalty; ///< penalty for crossing a reserved tile
uint32 rail_pbs_station_penalty; ///< penalty for crossing a reserved station tile
uint32 rail_pbs_signal_back_penalty; ///< penalty for passing a pbs signal from the backside
uint32 rail_doubleslip_penalty; ///< penalty for passing a double slip switch
uint32 rail_longer_platform_penalty; ///< penalty for longer station platform than train
uint32 rail_longer_platform_per_tile_penalty; ///< penalty for longer station platform than train (per tile)
uint32 rail_shorter_platform_penalty; ///< penalty for shorter station platform than train
uint32 rail_shorter_platform_per_tile_penalty; ///< penalty for shorter station platform than train (per tile)
uint32 ship_curve45_penalty; ///< penalty for 45-deg curve for ships
uint32 ship_curve90_penalty; ///< penalty for 90-deg curve for ships
};
/** Settings related to all pathfinders. */
struct PathfinderSettings {
uint8 pathfinder_for_trains; ///< the pathfinder to use for trains
uint8 pathfinder_for_roadvehs; ///< the pathfinder to use for roadvehicles
uint8 pathfinder_for_ships; ///< the pathfinder to use for ships
bool new_pathfinding_all; ///< use the newest pathfinding algorithm for all
bool roadveh_queue; ///< buggy road vehicle queueing
bool forbid_90_deg; ///< forbid trains to make 90 deg turns
bool reverse_at_signals; ///< whether to reverse at signals at all
byte wait_oneway_signal; ///< waitingtime in days before a oneway signal
byte wait_twoway_signal; ///< waitingtime in days before a twoway signal
bool reserve_paths; ///< always reserve paths regardless of signal type.
byte wait_for_pbs_path; ///< how long to wait for a path reservation.
byte path_backoff_interval; ///< ticks between checks for a free path.
NPFSettings npf; ///< pathfinder settings for the new pathfinder
YAPFSettings yapf; ///< pathfinder settings for the yet another pathfinder
};
/** Settings related to orders. */
struct OrderSettings {
bool improved_load; ///< improved loading algorithm
bool gradual_loading; ///< load vehicles gradually
bool selectgoods; ///< only send the goods to station if a train has been there
bool no_servicing_if_no_breakdowns; ///< don't send vehicles to depot when breakdowns are disabled
bool serviceathelipad; ///< service helicopters at helipads automatically (no need to send to depot)
};
/** Settings related to vehicles. */
struct VehicleSettings {
uint8 max_train_length; ///< maximum length for trains
uint8 smoke_amount; ///< amount of smoke/sparks locomotives produce
uint8 train_acceleration_model; ///< realistic acceleration for trains
uint8 roadveh_acceleration_model; ///< realistic acceleration for road vehicles
uint8 train_slope_steepness; ///< Steepness of hills for trains when using realistic acceleration
uint8 roadveh_slope_steepness; ///< Steepness of hills for road vehicles when using realistic acceleration
bool wagon_speed_limits; ///< enable wagon speed limits
bool disable_elrails; ///< when true, the elrails are disabled
UnitID max_trains; ///< max trains in game per company
UnitID max_roadveh; ///< max trucks in game per company
UnitID max_aircraft; ///< max planes in game per company
UnitID max_ships; ///< max ships in game per company
uint8 plane_speed; ///< divisor for speed of aircraft
uint8 freight_trains; ///< value to multiply the weight of cargo by
bool dynamic_engines; ///< enable dynamic allocation of engine data
bool never_expire_vehicles; ///< never expire vehicles
byte extend_vehicle_life; ///< extend vehicle life by this many years
byte road_side; ///< the side of the road vehicles drive on
uint8 plane_crashes; ///< number of plane crashes, 0 = none, 1 = reduced, 2 = normal
};
/** Settings related to the economy. */
struct EconomySettings {
bool inflation; ///< disable inflation
bool bribe; ///< enable bribing the local authority
EconomyType type; ///< economy type (original/smooth/frozen)
bool allow_shares; ///< allow the buying/selling of shares
uint8 min_years_for_shares; ///< minimum age of a company for it to trade shares
uint8 feeder_payment_share; ///< percentage of leg payment to virtually pay in feeder systems
byte dist_local_authority; ///< distance for town local authority, default 20
bool exclusive_rights; ///< allow buying exclusive rights
bool fund_buildings; ///< allow funding new buildings
bool fund_roads; ///< allow funding local road reconstruction
bool give_money; ///< allow giving other companies money
bool mod_road_rebuild; ///< roadworks remove unnecessary RoadBits
bool multiple_industry_per_town; ///< allow many industries of the same type per town
uint8 town_growth_rate; ///< town growth rate
uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast
uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns
TownLayout town_layout; ///< select town layout, @see TownLayout
TownCargoGenMode town_cargogen_mode; ///< algorithm for generating cargo from houses, @see TownCargoGenMode
bool allow_town_roads; ///< towns are allowed to build roads (always allowed when generating world / in SE)
TownFounding found_town; ///< town founding.
bool station_noise_level; ///< build new airports when the town noise level is still within accepted limits
uint16 town_noise_population[3]; ///< population to base decision on noise evaluation (@see town_council_tolerance)
bool allow_town_level_crossings; ///< towns are allowed to build level crossings
bool infrastructure_maintenance; ///< enable monthly maintenance fee for owner infrastructure
};
struct LinkGraphSettings {
uint16 recalc_time; ///< time (in days) for recalculating each link graph component.
uint16 recalc_interval; ///< time (in days) between subsequent checks for link graphs to be calculated.
DistributionType distribution_pax; ///< distribution type for passengers
DistributionType distribution_mail; ///< distribution type for mail
DistributionType distribution_armoured; ///< distribution type for armoured cargo class
DistributionType distribution_default; ///< distribution type for all other goods
uint8 accuracy; ///< accuracy when calculating things on the link graph. low accuracy => low running time
uint8 demand_size; ///< influence of supply ("station size") on the demand function
uint8 demand_distance; ///< influence of distance between stations on the demand function
uint8 short_path_saturation; ///< percentage up to which short paths are saturated before saturating most capacious paths
inline DistributionType GetDistributionType(CargoID cargo) const {
if (IsCargoInClass(cargo, CC_PASSENGERS)) return this->distribution_pax;
if (IsCargoInClass(cargo, CC_MAIL)) return this->distribution_mail;
if (IsCargoInClass(cargo, CC_ARMOURED)) return this->distribution_armoured;
return this->distribution_default;
}
};
/** Settings related to stations. */
struct StationSettings {
bool modified_catchment; ///< different-size catchment areas
bool serve_neutral_industries; ///< company stations can serve industries with attached neutral stations
bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations
bool distant_join_stations; ///< allow to join non-adjacent stations
bool never_expire_airports; ///< never expire airports
byte station_spread; ///< amount a station may spread
};
/** Default settings for vehicles. */
struct VehicleDefaultSettings {
bool servint_ispercent; ///< service intervals are in percents
uint16 servint_trains; ///< service interval for trains
uint16 servint_roadveh; ///< service interval for road vehicles
uint16 servint_aircraft; ///< service interval for aircraft
uint16 servint_ships; ///< service interval for ships
};
/** Settings that can be set per company. */
struct CompanySettings {
bool engine_renew; ///< is autorenew enabled
int16 engine_renew_months; ///< months before/after the maximum vehicle age a vehicle should be renewed
uint32 engine_renew_money; ///< minimum amount of money before autorenew is used
bool renew_keep_length; ///< sell some wagons if after autoreplace the train is longer than before
VehicleDefaultSettings vehicle; ///< default settings for vehicles
};
/** All settings together for the game. */
struct GameSettings {
DifficultySettings difficulty; ///< settings related to the difficulty
GameCreationSettings game_creation; ///< settings used during the creation of a game (map)
ConstructionSettings construction; ///< construction of things in-game
AISettings ai; ///< what may the AI do?
ScriptSettings script; ///< settings for scripts
class AIConfig *ai_config[MAX_COMPANIES]; ///< settings per company
class GameConfig *game_config; ///< settings for gamescript
PathfinderSettings pf; ///< settings for all pathfinders
OrderSettings order; ///< settings related to orders
VehicleSettings vehicle; ///< options for vehicles
EconomySettings economy; ///< settings to change the economy
LinkGraphSettings linkgraph; ///< settings for link graph calculations
StationSettings station; ///< settings related to station management
LocaleSettings locale; ///< settings related to used currency/unit system in the current game
};
/** All settings that are only important for the local client. */
struct ClientSettings {
GUISettings gui; ///< settings related to the GUI
NetworkSettings network; ///< settings related to the network
CompanySettings company; ///< default values for per-company settings
SoundSettings sound; ///< sound effect settings
MusicSettings music; ///< settings related to music/sound
NewsSettings news_display; ///< news display settings.
};
/** The current settings for this game. */
extern ClientSettings _settings_client;
/** The current settings for this game. */
extern GameSettings _settings_game;
/** The settings values that are used for new games and/or modified in config file. */
extern GameSettings _settings_newgame;
/** Old vehicle settings, which were game settings before, and are company settings now. (Needed for savegame conversion) */
extern VehicleDefaultSettings _old_vds;
/**
* Get the settings-object applicable for the current situation: the newgame settings
* when we're in the main menu and otherwise the settings of the current game.
*/
static inline GameSettings &GetGameSettings()
{
return (_game_mode == GM_MENU) ? _settings_newgame : _settings_game;
}
#endif /* SETTINGS_TYPE_H */
|