# HG changeset patch # User truelight # Date 1192876948 0 # Node ID f82a4facea8b061fc9c10031af475ac46fd2f2a3 # Parent 2c27f9be3fb9dc28fd3aac7036a61bf47fb14631 (svn r11309) [NoAI] -Sync: with trunk r11145:11308. diff -r 2c27f9be3fb9 -r f82a4facea8b bin/ai/regression/regression.txt --- a/bin/ai/regression/regression.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/bin/ai/regression/regression.txt Sat Oct 20 10:42:28 2007 +0000 @@ -9,9 +9,9 @@ abs( 21): 21 --AIBase-- - Rand(): -1692638405 - Rand(): -1170386787 - Rand(): 190814891 + Rand(): -561136928 + Rand(): 1884901916 + Rand(): -1202945897 RandRange(0): 0 RandRange(0): 0 RandRange(0): 0 @@ -20,13 +20,13 @@ RandRange(1): 0 RandRange(2): 0 RandRange(2): 0 - RandRange(2): 0 + RandRange(2): 1 + RandRange(9): 2 + RandRange(9): 5 RandRange(9): 4 - RandRange(9): 6 - RandRange(9): 2 Chance(1, 2): true Chance(1, 2): true - Chance(1, 2): false + Chance(1, 2): true --List-- IsEmpty(): true @@ -137,144 +137,144 @@ 1098 => 1098 1099 => 1099 Randomize ListDump: - 1 => 581150761 - 2 => 780195416 - 1000 => -1005781929 - 1001 => -304338569 - 1002 => -1743669342 - 1003 => 2052174274 - 1004 => -239846598 - 1005 => -519154508 - 1006 => 1384592592 - 1007 => 92537681 - 1008 => -783011799 - 1009 => 1020927039 - 1010 => -762645416 - 1011 => 1654042603 - 1012 => 210165652 - 1013 => -1851586478 - 1014 => 208319733 - 1015 => -1211393332 - 1016 => 2052272773 - 1017 => -1489194376 - 1018 => -438907823 - 1019 => 130289291 - 1020 => -1283324111 - 1021 => -259554489 - 1022 => 1143992540 - 1023 => -1301766703 - 1024 => 2067670203 - 1025 => 1726364654 - 1026 => 939556491 - 1027 => -1134709978 - 1028 => -110608336 - 1029 => 1339284138 - 1030 => -472993361 - 1031 => 958802835 - 1032 => 761440845 - 1033 => -1469223188 - 1034 => -721599317 - 1035 => 434887418 - 1036 => -820146882 - 1037 => 274760994 - 1038 => -522727528 - 1039 => -669489971 - 1040 => 1377115572 - 1041 => 516401345 - 1042 => 295153940 - 1043 => -1055199725 - 1044 => -1143220467 - 1045 => -686775621 - 1046 => 867901084 - 1047 => 1693214681 - 1048 => -1112224853 - 1049 => 659718584 - 1051 => -1132568097 - 1052 => -1370768491 - 1053 => -1233695197 - 1054 => 824602143 - 1055 => 1213169381 - 1056 => 1616397171 - 1057 => -1494293955 - 1058 => 168525123 - 1059 => 985183216 - 1060 => 163496891 - 1061 => -1920407820 - 1062 => 512739738 - 1063 => 1098365126 - 1064 => 1522198446 - 1065 => 152025258 - 1066 => -1654530986 - 1067 => 1386785618 - 1068 => -49512268 - 1069 => 1214031860 - 1070 => 458782250 - 1071 => -1641082778 - 1072 => -1284412562 - 1073 => 1507095104 - 1074 => -1103314033 - 1075 => -837829736 - 1076 => 1245363646 - 1077 => -1003369287 - 1078 => -729296780 - 1079 => -2042801701 - 1080 => 690945725 - 1081 => 844366079 - 1082 => 1659029417 - 1083 => 585818047 - 1084 => -1199106717 - 1085 => 680742150 - 1086 => 264108503 - 1087 => -301161571 - 1088 => -132905463 - 1089 => 1892881479 - 1090 => -1903322021 - 1091 => 1017533996 - 1092 => -976386914 - 1093 => -90625762 - 1094 => -1290852461 - 1095 => -1953934605 - 1096 => 112304592 - 1097 => 1238896913 - 1098 => 1436365455 - 1099 => 825503137 + 1 => -619704336 + 2 => 1166439751 + 1000 => -914833827 + 1001 => -1215386906 + 1002 => -1069187552 + 1003 => 112127200 + 1004 => 1050904874 + 1005 => -429346856 + 1006 => -608971312 + 1007 => 1169222927 + 1008 => 1369657072 + 1009 => 767111199 + 1010 => 1904874981 + 1011 => 161085759 + 1012 => 271771856 + 1013 => -533081029 + 1014 => -1409657365 + 1015 => 1563875660 + 1016 => 1113935053 + 1017 => 792268145 + 1018 => -70442569 + 1019 => -547592946 + 1020 => -778640532 + 1021 => -1375060615 + 1022 => 318449191 + 1023 => -190171711 + 1024 => 178940318 + 1025 => 442765623 + 1026 => 313145543 + 1027 => -458470184 + 1028 => -1297320844 + 1029 => 2091522683 + 1030 => 529678468 + 1031 => 548268055 + 1032 => -9350756 + 1033 => -1719797748 + 1034 => -1837545138 + 1035 => 794565562 + 1036 => 465317634 + 1037 => -1928623851 + 1038 => -330437837 + 1039 => -956974293 + 1040 => 976574875 + 1041 => -1888843242 + 1042 => -2005628326 + 1043 => -1562648047 + 1044 => -868060600 + 1045 => -403788235 + 1046 => 367414207 + 1047 => 681820797 + 1048 => -1197099260 + 1049 => -650879767 + 1051 => 941556066 + 1052 => -36585116 + 1053 => -988001222 + 1054 => -1407695456 + 1055 => 1569591207 + 1056 => 1434294956 + 1057 => -879654590 + 1058 => 6511542 + 1059 => -270940883 + 1060 => 1646156529 + 1061 => 1457378902 + 1062 => -1703288615 + 1063 => -1530193095 + 1064 => 1852649127 + 1065 => -1071976838 + 1066 => 372901081 + 1067 => 934187143 + 1068 => -516975589 + 1069 => -1086784819 + 1070 => 1484112318 + 1071 => -2061433623 + 1072 => -1787587249 + 1073 => 1528388260 + 1074 => 658189461 + 1075 => 2114811864 + 1076 => 949664695 + 1077 => -1569338881 + 1078 => 880833979 + 1079 => 883721763 + 1080 => 632697644 + 1081 => 1556076896 + 1082 => -1316111879 + 1083 => -1721672483 + 1084 => -1693824167 + 1085 => 1135419548 + 1086 => -1387302877 + 1087 => 1713624705 + 1088 => 492025163 + 1089 => 1559280427 + 1090 => 703894820 + 1091 => -1626847649 + 1092 => 1977038480 + 1093 => -1644526188 + 1094 => -640385428 + 1095 => -726109663 + 1096 => -106206677 + 1097 => 291310901 + 1098 => 647492868 + 1099 => 421056347 KeepTop(10): - 1 => 581150761 - 2 => 780195416 - 1000 => -1005781929 - 1001 => -304338569 - 1002 => -1743669342 - 1003 => 2052174274 - 1004 => -239846598 - 1005 => -519154508 - 1006 => 1384592592 - 1007 => 92537681 + 1 => -619704336 + 2 => 1166439751 + 1000 => -914833827 + 1001 => -1215386906 + 1002 => -1069187552 + 1003 => 112127200 + 1004 => 1050904874 + 1005 => -429346856 + 1006 => -608971312 + 1007 => 1169222927 KeepBottom(8): - 1000 => -1005781929 - 1001 => -304338569 - 1002 => -1743669342 - 1003 => 2052174274 - 1004 => -239846598 - 1005 => -519154508 - 1006 => 1384592592 - 1007 => 92537681 + 1000 => -914833827 + 1001 => -1215386906 + 1002 => -1069187552 + 1003 => 112127200 + 1004 => 1050904874 + 1005 => -429346856 + 1006 => -608971312 + 1007 => 1169222927 RemoveBottom(2): - 1000 => -1005781929 - 1001 => -304338569 - 1002 => -1743669342 - 1003 => 2052174274 - 1004 => -239846598 - 1005 => -519154508 + 1000 => -914833827 + 1001 => -1215386906 + 1002 => -1069187552 + 1003 => 112127200 + 1004 => 1050904874 + 1005 => -429346856 RemoveTop(2): - 1002 => -1743669342 - 1003 => 2052174274 - 1004 => -239846598 - 1005 => -519154508 + 1002 => -1069187552 + 1003 => 112127200 + 1004 => 1050904874 + 1005 => -429346856 RemoveList({1003, 1004}): - 1002 => -1743669342 - 1005 => -519154508 + 1002 => -1069187552 + 1005 => -429346856 KeepList({1003, 1004, 1005}): - 1005 => -519154508 + 1005 => -429346856 IsEmpty(): true --AIAirport-- @@ -332,11 +332,11 @@ GetHangarOfAirport(): 32119 IsHangarTile(): true IsAirportTile(): true - GetBankBalance(): 90052 + GetBankBalance(): 90100 RemoveAirport(): true IsHangarTile(): false IsAirportTile(): false - GetBankBalance(): 89788 + GetBankBalance(): 89836 BuildAirport(): true --AICargo-- @@ -378,7 +378,7 @@ IsFreight(): true GetCargoIncome(0, 0): 0 GetCargoIncome(10, 10): 5 - GetCargoIncome(100, 10): 54 + GetCargoIncome(100, 10): 53 GetCargoIncome(10, 100): 3 Cargo 4 IsValidCargo(): true @@ -410,7 +410,7 @@ IsFreight(): true GetCargoIncome(0, 0): 0 GetCargoIncome(10, 10): 6 - GetCargoIncome(100, 10): 61 + GetCargoIncome(100, 10): 60 GetCargoIncome(10, 100): 4 Cargo 8 IsValidCargo(): true @@ -475,11 +475,11 @@ SetCompanyName(): true SetCompanyName(): false GetCompanyName(): Regression - GetPresidentName(): I. Gribble + GetPresidentName(): I. Campbell SetPresidentName(): true GetPresidentName(): Regression AI GetCompanyValue(): 0 - GetBankBalance(): 84364 + GetBankBalance(): 84436 GetCompanyName(): (null : 0x00000000) GetLoanAmount(): 100000 GetMaxLoanAmount(): 300000 @@ -487,13 +487,13 @@ SetLoanAmount(1): false SetLoanAmount(100): false SetLoanAmount(10000): false - GetBankBalance(): 84364 + GetBankBalance(): 84436 GetLoanAmount(): 100000 SetMinimumLoanAmount(31337): true - GetBankBalance(): 24364 + GetBankBalance(): 24436 GetLoanAmount(): 40000 SetLoanAmount(10000): true - GetBankBalance(): 284364 + GetBankBalance(): 284436 GetLoanAmount(): 300000 --Engine-- @@ -513,7 +513,7 @@ GetCapacity(): 0 GetReliability(): 82 GetMaxSpeed(): 64 - GetPrice(): 8257 + GetPrice(): 8203 GetVehicleType(): 0 Engine 1 IsValidEngine(): false @@ -585,7 +585,7 @@ GetCapacity(): 0 GetReliability(): 79 GetMaxSpeed(): 112 - GetPrice(): 15334 + GetPrice(): 15234 GetVehicleType(): 0 Engine 9 IsValidEngine(): true @@ -594,7 +594,7 @@ GetCapacity(): 0 GetReliability(): 83 GetMaxSpeed(): 128 - GetPrice(): 22412 + GetPrice(): 22265 GetVehicleType(): 0 Engine 10 IsValidEngine(): false @@ -756,7 +756,7 @@ GetCapacity(): 40 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 291359 + GetPrice(): 289453 GetVehicleType(): 0 Engine 28 IsValidEngine(): true @@ -765,7 +765,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 268947 + GetPrice(): 267187 GetVehicleType(): 0 Engine 29 IsValidEngine(): true @@ -774,7 +774,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 207608 + GetPrice(): 206250 GetVehicleType(): 0 Engine 30 IsValidEngine(): true @@ -783,7 +783,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 235918 + GetPrice(): 234375 GetVehicleType(): 0 Engine 31 IsValidEngine(): true @@ -792,7 +792,7 @@ GetCapacity(): 25 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 226482 + GetPrice(): 225000 GetVehicleType(): 0 Engine 32 IsValidEngine(): true @@ -801,7 +801,7 @@ GetCapacity(): 25 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 224122 + GetPrice(): 222656 GetVehicleType(): 0 Engine 33 IsValidEngine(): true @@ -810,7 +810,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 214686 + GetPrice(): 213281 GetVehicleType(): 0 Engine 34 IsValidEngine(): true @@ -819,7 +819,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 213506 + GetPrice(): 212109 GetVehicleType(): 0 Engine 35 IsValidEngine(): true @@ -828,7 +828,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 211147 + GetPrice(): 209765 GetVehicleType(): 0 Engine 36 IsValidEngine(): true @@ -837,7 +837,7 @@ GetCapacity(): 20 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 231200 + GetPrice(): 229687 GetVehicleType(): 0 Engine 37 IsValidEngine(): true @@ -846,7 +846,7 @@ GetCapacity(): 20 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 300796 + GetPrice(): 298828 GetVehicleType(): 0 Engine 38 IsValidEngine(): false @@ -1026,7 +1026,7 @@ GetCapacity(): 45 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 291359 + GetPrice(): 289453 GetVehicleType(): 0 Engine 58 IsValidEngine(): true @@ -1035,7 +1035,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 268947 + GetPrice(): 267187 GetVehicleType(): 0 Engine 59 IsValidEngine(): true @@ -1044,7 +1044,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 207608 + GetPrice(): 206250 GetVehicleType(): 0 Engine 60 IsValidEngine(): true @@ -1053,7 +1053,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 235918 + GetPrice(): 234375 GetVehicleType(): 0 Engine 61 IsValidEngine(): true @@ -1062,7 +1062,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 226482 + GetPrice(): 225000 GetVehicleType(): 0 Engine 62 IsValidEngine(): true @@ -1071,7 +1071,7 @@ GetCapacity(): 30 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 224122 + GetPrice(): 222656 GetVehicleType(): 0 Engine 63 IsValidEngine(): true @@ -1080,7 +1080,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 214686 + GetPrice(): 213281 GetVehicleType(): 0 Engine 64 IsValidEngine(): true @@ -1089,7 +1089,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 213506 + GetPrice(): 212109 GetVehicleType(): 0 Engine 65 IsValidEngine(): true @@ -1098,7 +1098,7 @@ GetCapacity(): 35 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 211147 + GetPrice(): 209765 GetVehicleType(): 0 Engine 66 IsValidEngine(): true @@ -1107,7 +1107,7 @@ GetCapacity(): 25 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 231200 + GetPrice(): 229687 GetVehicleType(): 0 Engine 67 IsValidEngine(): true @@ -1116,7 +1116,7 @@ GetCapacity(): 25 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 300796 + GetPrice(): 298828 GetVehicleType(): 0 Engine 68 IsValidEngine(): false @@ -1314,7 +1314,7 @@ GetCapacity(): 47 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 291359 + GetPrice(): 289453 GetVehicleType(): 0 Engine 90 IsValidEngine(): true @@ -1323,7 +1323,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 268947 + GetPrice(): 267187 GetVehicleType(): 0 Engine 91 IsValidEngine(): true @@ -1332,7 +1332,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 207608 + GetPrice(): 206250 GetVehicleType(): 0 Engine 92 IsValidEngine(): true @@ -1341,7 +1341,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 235918 + GetPrice(): 234375 GetVehicleType(): 0 Engine 93 IsValidEngine(): true @@ -1350,7 +1350,7 @@ GetCapacity(): 32 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 226482 + GetPrice(): 225000 GetVehicleType(): 0 Engine 94 IsValidEngine(): true @@ -1359,7 +1359,7 @@ GetCapacity(): 32 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 224122 + GetPrice(): 222656 GetVehicleType(): 0 Engine 95 IsValidEngine(): true @@ -1368,7 +1368,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 214686 + GetPrice(): 213281 GetVehicleType(): 0 Engine 96 IsValidEngine(): true @@ -1377,7 +1377,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 213506 + GetPrice(): 212109 GetVehicleType(): 0 Engine 97 IsValidEngine(): true @@ -1386,7 +1386,7 @@ GetCapacity(): 37 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 211147 + GetPrice(): 209765 GetVehicleType(): 0 Engine 98 IsValidEngine(): true @@ -1395,7 +1395,7 @@ GetCapacity(): 27 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 231200 + GetPrice(): 229687 GetVehicleType(): 0 Engine 99 IsValidEngine(): true @@ -1404,7 +1404,7 @@ GetCapacity(): 27 GetReliability(): 0 GetMaxSpeed(): 0 - GetPrice(): 300796 + GetPrice(): 298828 GetVehicleType(): 0 Engine 100 IsValidEngine(): false @@ -1557,7 +1557,7 @@ GetCapacity(): 31 GetReliability(): 78 GetMaxSpeed(): 112 - GetPrice(): 4953 + GetPrice(): 4920 GetVehicleType(): 1 Engine 117 IsValidEngine(): false @@ -1620,7 +1620,7 @@ GetCapacity(): 20 GetReliability(): 76 GetMaxSpeed(): 96 - GetPrice(): 4458 + GetPrice(): 4428 GetVehicleType(): 1 Engine 124 IsValidEngine(): false @@ -1647,7 +1647,7 @@ GetCapacity(): 22 GetReliability(): 91 GetMaxSpeed(): 96 - GetPrice(): 4747 + GetPrice(): 4715 GetVehicleType(): 1 Engine 127 IsValidEngine(): false @@ -1701,7 +1701,7 @@ GetCapacity(): 21 GetReliability(): 97 GetMaxSpeed(): 96 - GetPrice(): 4540 + GetPrice(): 4510 GetVehicleType(): 1 Engine 133 IsValidEngine(): false @@ -1728,7 +1728,7 @@ GetCapacity(): 14 GetReliability(): 96 GetMaxSpeed(): 96 - GetPrice(): 4334 + GetPrice(): 4305 GetVehicleType(): 1 Engine 136 IsValidEngine(): false @@ -1755,7 +1755,7 @@ GetCapacity(): 14 GetReliability(): 86 GetMaxSpeed(): 96 - GetPrice(): 4417 + GetPrice(): 4387 GetVehicleType(): 1 Engine 139 IsValidEngine(): false @@ -1782,7 +1782,7 @@ GetCapacity(): 20 GetReliability(): 96 GetMaxSpeed(): 96 - GetPrice(): 4706 + GetPrice(): 4674 GetVehicleType(): 1 Engine 142 IsValidEngine(): false @@ -1809,7 +1809,7 @@ GetCapacity(): 20 GetReliability(): 97 GetMaxSpeed(): 96 - GetPrice(): 4871 + GetPrice(): 4838 GetVehicleType(): 1 Engine 145 IsValidEngine(): false @@ -1836,7 +1836,7 @@ GetCapacity(): 22 GetReliability(): 96 GetMaxSpeed(): 96 - GetPrice(): 4995 + GetPrice(): 4961 GetVehicleType(): 1 Engine 148 IsValidEngine(): false @@ -1863,7 +1863,7 @@ GetCapacity(): 15 GetReliability(): 81 GetMaxSpeed(): 96 - GetPrice(): 4623 + GetPrice(): 4592 GetVehicleType(): 1 Engine 151 IsValidEngine(): false @@ -1890,7 +1890,7 @@ GetCapacity(): 12 GetReliability(): 75 GetMaxSpeed(): 96 - GetPrice(): 5985 + GetPrice(): 5945 GetVehicleType(): 1 Engine 154 IsValidEngine(): false @@ -2349,7 +2349,7 @@ GetCapacity(): 220 GetReliability(): 98 GetMaxSpeed(): 48 - GetPrice(): 30670 + GetPrice(): 30465 GetVehicleType(): 2 Engine 205 IsValidEngine(): false @@ -2367,7 +2367,7 @@ GetCapacity(): 100 GetReliability(): 87 GetMaxSpeed(): 64 - GetPrice(): 18402 + GetPrice(): 18279 GetVehicleType(): 2 Engine 207 IsValidEngine(): false @@ -2412,7 +2412,7 @@ GetCapacity(): 160 GetReliability(): 81 GetMaxSpeed(): 48 - GetPrice(): 24536 + GetPrice(): 24372 GetVehicleType(): 2 Engine 212 IsValidEngine(): false @@ -2448,7 +2448,7 @@ GetCapacity(): 25 GetReliability(): 70 GetMaxSpeed(): 477 - GetPrice(): 28900 + GetPrice(): 28710 GetVehicleType(): 3 Engine 216 IsValidEngine(): true @@ -2457,7 +2457,7 @@ GetCapacity(): 65 GetReliability(): 95 GetMaxSpeed(): 477 - GetPrice(): 30964 + GetPrice(): 30761 GetVehicleType(): 3 Engine 217 IsValidEngine(): false @@ -2484,7 +2484,7 @@ GetCapacity(): 30 GetReliability(): 76 GetMaxSpeed(): 477 - GetPrice(): 30964 + GetPrice(): 30761 GetVehicleType(): 3 Engine 220 IsValidEngine(): false @@ -3180,17 +3180,17 @@ 118 => 0 117 => 0 Price ListDump: - 153 => 5985 - 147 => 4995 - 116 => 4953 - 144 => 4871 - 126 => 4747 - 141 => 4706 - 150 => 4623 - 132 => 4540 - 123 => 4458 - 138 => 4417 - 135 => 4334 + 153 => 5945 + 147 => 4961 + 116 => 4920 + 144 => 4838 + 126 => 4715 + 141 => 4674 + 150 => 4592 + 132 => 4510 + 123 => 4428 + 138 => 4387 + 135 => 4305 203 => 0 202 => 0 201 => 0 @@ -4047,7 +4047,7 @@ IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 284034 + GetBankBalance(): 284108 BuildWaterDepot(): true BuildDock(): true BuildBuoy(): true @@ -4058,7 +4058,7 @@ IsBuoyTile(): true IsLockTile(): true IsCanalTile(): true - GetBankBalance(): 254295 + GetBankBalance(): 254559 RemoveWaterDepot(): true RemoveDock(): true RemoveBuoy(): true @@ -4069,7 +4069,7 @@ IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 231503 + GetBankBalance(): 231914 BuildWaterDepot(): true BuildDock(): true @@ -4483,27 +4483,27 @@ Town 0 IsValidTown(): true GetName(): Planfield - GetPopulation(): 754 + GetPopulation(): 538 GetLocation(): 15508 Town 1 IsValidTown(): true GetName(): Trenningville - GetPopulation(): 226 + GetPopulation(): 236 GetLocation(): 46751 Town 2 IsValidTown(): true GetName(): Tondston - GetPopulation(): 320 + GetPopulation(): 253 GetLocation(): 28365 Town 3 IsValidTown(): true GetName(): Tunford - GetPopulation(): 211 + GetPopulation(): 206 GetLocation(): 41895 Town 4 IsValidTown(): true GetName(): Wrundtown - GetPopulation(): 396 + GetPopulation(): 414 GetLocation(): 41450 Town 5 IsValidTown(): true @@ -4513,22 +4513,22 @@ Town 6 IsValidTown(): true GetName(): Muningville - GetPopulation(): 579 + GetPopulation(): 566 GetLocation(): 38200 Town 7 IsValidTown(): true GetName(): Hutfingford - GetPopulation(): 777 + GetPopulation(): 652 GetLocation(): 59234 Town 8 IsValidTown(): true GetName(): Sadtown - GetPopulation(): 290 + GetPopulation(): 292 GetLocation(): 51267 Town 9 IsValidTown(): true GetName(): Frindinghattan - GetPopulation(): 459 + GetPopulation(): 447 GetLocation(): 5825 Town 10 IsValidTown(): true @@ -4538,12 +4538,12 @@ Town 11 IsValidTown(): true GetName(): Fort Frindston - GetPopulation(): 197 + GetPopulation(): 156 GetLocation(): 14935 Town 12 IsValidTown(): true GetName(): Ginborough - GetPopulation(): 853 + GetPopulation(): 766 GetLocation(): 32740 Town 13 IsValidTown(): true @@ -4553,22 +4553,22 @@ Town 14 IsValidTown(): true GetName(): Prundinghall - GetPopulation(): 336 + GetPopulation(): 316 GetLocation(): 51298 Town 15 IsValidTown(): true GetName(): Benville - GetPopulation(): 776 + GetPopulation(): 699 GetLocation(): 42338 Town 16 IsValidTown(): true GetName(): Kennville - GetPopulation(): 717 + GetPopulation(): 659 GetLocation(): 17345 Town 17 IsValidTown(): true GetName(): Quartfingfield - GetPopulation(): 170 + GetPopulation(): 185 GetLocation(): 24252 Town 18 IsValidTown(): true @@ -4578,7 +4578,7 @@ Town 19 IsValidTown(): true GetName(): Mendingston - GetPopulation(): 226 + GetPopulation(): 221 GetLocation(): 6511 Town 20 IsValidTown(): true @@ -4588,22 +4588,22 @@ Town 21 IsValidTown(): true GetName(): Franinghead - GetPopulation(): 780 + GetPopulation(): 598 GetLocation(): 9634 Town 22 IsValidTown(): true GetName(): Naborough - GetPopulation(): 191 + GetPopulation(): 174 GetLocation(): 51891 Town 23 IsValidTown(): true GetName(): Lardborough - GetPopulation(): 669 + GetPopulation(): 657 GetLocation(): 59622 Town 24 IsValidTown(): true GetName(): Little Fruford - GetPopulation(): 636 + GetPopulation(): 624 GetLocation(): 19596 Town 25 IsValidTown(): true @@ -4613,12 +4613,12 @@ Town 26 IsValidTown(): true GetName(): Bedburg - GetPopulation(): 349 + GetPopulation(): 336 GetLocation(): 39505 Town 27 IsValidTown(): true GetName(): Fudinghattan - GetPopulation(): 412 + GetPopulation(): 382 GetLocation(): 45525 Town 28 IsValidTown(): false @@ -4735,17 +4735,17 @@ KeepAboveValue(500): done Count(): 11 Population ListDump: - 12 => 853 - 21 => 780 - 7 => 777 - 15 => 776 - 0 => 754 - 16 => 717 + 12 => 766 10 => 702 - 23 => 669 - 24 => 636 - 6 => 579 + 15 => 699 + 16 => 659 + 23 => 657 + 7 => 652 + 24 => 624 + 21 => 598 + 6 => 566 25 => 548 + 0 => 538 --Vehicle-- IsValidVehicle(-1): false @@ -4755,13 +4755,13 @@ BuildVehicle(): 0 IsValidVehicle(11): false --Transaction-- - GetCosts(): 5985 + GetCosts(): 5945 Execute(): true IsValidVehicle(11): true CloneVehicle(): 12 --Accounting-- - GetCosts(): 11970 - Should be: 11970 + GetCosts(): 11890 + Should be: 11890 ResetCosts(): (null : 0x00000000) SellVehicle(12): true IsInDepot(): true @@ -4773,8 +4773,8 @@ IsInDepot(): false IsStoppedInDepot(): false --Accounting-- - GetCosts(): -5985 - Should be: -5985 + GetCosts(): -5945 + Should be: -5945 GetName(): Road Vehicle 1 SetName(): true GetName(): MyVehicleName @@ -4783,10 +4783,10 @@ GetLocation(): 33417 GetEngineType(): 153 GetUnitNumber(): 1 - GetAge(): 1 + GetAge(): 0 GetMaxAge(): 5490 - GetAgeLeft(): 5489 - GetProfitThisYear(): -1 + GetAgeLeft(): 5490 + GetProfitThisYear(): 0 GetProfitLastYear(): 0 GetVehicleType(): 1 IsInDepot(): false @@ -4821,18 +4821,18 @@ 13 => 1 11 => 1 Age ListDump: + 15 => 1 + 13 => 1 12 => 1 11 => 1 - 15 => 0 - 13 => 0 MaxAge ListDump: 15 => 10980 13 => 10980 12 => 5490 11 => 5490 AgeLeft ListDump: - 15 => 10980 - 13 => 10980 + 15 => 10979 + 13 => 10979 12 => 5489 11 => 5489 ProfitThisYear ListDump: diff -r 2c27f9be3fb9 -r f82a4facea8b config.lib --- a/config.lib Sat Oct 20 10:14:05 2007 +0000 +++ b/config.lib Sat Oct 20 10:42:28 2007 +0000 @@ -882,6 +882,10 @@ LIBS="$LIBS -pthread" fi + if [ "$os" = "FREEBSD" ]; then + LIBS="$LIBS -lpthread" + fi + if [ "$os" = "OSX" ]; then LDFLAGS="$LDFLAGS -framework Cocoa" if [ "$enable_dedicated" = "0" ]; then diff -r 2c27f9be3fb9 -r f82a4facea8b src/aircraft_cmd.cpp --- a/src/aircraft_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/aircraft_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -488,6 +488,8 @@ if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR; if (!v->IsStoppedInDepot()) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED); + if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE); + SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES); if (flags & DC_EXEC) { @@ -1260,8 +1262,8 @@ SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); r = Random(); CreateEffectVehicleRel(v, - GB(r, 0, 4) + 4, - GB(r, 4, 4) + 4, + GB(r, 0, 4) - 4, + GB(r, 4, 4) - 4, GB(r, 8, 4), EV_EXPLOSION_SMALL); } diff -r 2c27f9be3fb9 -r f82a4facea8b src/clear_cmd.cpp --- a/src/clear_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/clear_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -480,7 +480,7 @@ if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) return CMD_ERROR; - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (flags & DC_EXEC) DoClearSquare(tile); diff -r 2c27f9be3fb9 -r f82a4facea8b src/console_cmds.cpp --- a/src/console_cmds.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/console_cmds.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -593,10 +593,8 @@ DEF_CONSOLE_HOOK(ConHookValidateMaxClientsCount) { - /* XXX - hardcoded, string limiation -- TrueLight - * XXX - also see network.c:NetworkStartup ~1356 */ - if (_network_game_info.clients_max > 10) { - _network_game_info.clients_max = 10; + if (_network_game_info.clients_max > MAX_CLIENTS) { + _network_game_info.clients_max = MAX_CLIENTS; IConsoleError("Maximum clients out of bounds, truncating to limit."); } diff -r 2c27f9be3fb9 -r f82a4facea8b src/disaster_cmd.cpp --- a/src/disaster_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/disaster_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -60,7 +60,7 @@ static void DisasterClearSquare(TileIndex tile) { - if (!EnsureNoVehicle(tile)) return; + if (!EnsureNoVehicleOnGround(tile)) return; switch (GetTileType(tile)) { case MP_RAILWAY: diff -r 2c27f9be3fb9 -r f82a4facea8b src/economy.cpp --- a/src/economy.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/economy.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -1524,7 +1524,7 @@ byte load_amount = EngInfo(v->engine_type)->load_amount; if (_patches.gradual_loading && HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_VEHICLE_LOAD_AMOUNT)) { uint16 cb_load_amount = GetVehicleCallback(CBID_VEHICLE_LOAD_AMOUNT, 0, 0, v->engine_type, v); - if (cb_load_amount != CALLBACK_FAILED) load_amount = cb_load_amount & 0xFF; + if (cb_load_amount != CALLBACK_FAILED && cb_load_amount != 0) load_amount = cb_load_amount & 0xFF; } GoodsEntry *ge = &st->goods[v->cargo_type]; diff -r 2c27f9be3fb9 -r f82a4facea8b src/functions.h --- a/src/functions.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/functions.h Sat Oct 20 10:42:28 2007 +0000 @@ -78,7 +78,7 @@ uint InteractiveRandomRange(uint max); /* texteff.cpp */ -bool AddAnimatedTile(TileIndex tile); +void AddAnimatedTile(TileIndex tile); void DeleteAnimatedTile(TileIndex tile); void AnimateAnimatedTiles(); void InitializeAnimatedTiles(); @@ -132,7 +132,6 @@ bool ScrollMainWindowToTile(TileIndex tile, bool instant = false); bool ScrollMainWindowTo(int x, int y, bool instant = false); -bool EnsureNoVehicle(TileIndex tile); bool EnsureNoVehicleOnGround(TileIndex tile); /** diff -r 2c27f9be3fb9 -r f82a4facea8b src/industry.h --- a/src/industry.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/industry.h Sat Oct 20 10:42:28 2007 +0000 @@ -66,7 +66,7 @@ IACT_USERCREATION, ///< from the Fund/build window }; -enum IndustyBehaviour { +enum IndustryBehaviour { INDUSTRYBEH_NONE = 0, INDUSTRYBEH_PLANT_FIELDS = 1 << 0, ///< periodically plants fileds around itself (temp and artic farms) INDUSTRYBEH_CUT_TREES = 1 << 1, ///< cuts trees and produce first output cargo from them (lumber mill) @@ -90,7 +90,7 @@ }; -DECLARE_ENUM_AS_BIT_SET(IndustyBehaviour); +DECLARE_ENUM_AS_BIT_SET(IndustryBehaviour); struct Industry; DECLARE_OLD_POOL(Industry, Industry, 3, 8000) @@ -171,7 +171,7 @@ uint16 input_cargo_multiplier[3][2]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargos) IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs byte climate_availability; ///< Bitmask, giving landscape enums as bit position - IndustyBehaviour behaviour; ///< How this industry will behave, and how others entities can use it + IndustryBehaviour behaviour; ///< How this industry will behave, and how others entities can use it byte map_colour; ///< colour used for the small map StringID name; ///< Displayed name of the industry StringID new_industry_text; ///< Message appearing when the industry is built diff -r 2c27f9be3fb9 -r f82a4facea8b src/industry_cmd.cpp --- a/src/industry_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/industry_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -1007,7 +1007,7 @@ if ((i->counter & 0xFF) == 0) { if (HASBIT(indsp->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) IndustryProductionCallback(i, 1); - IndustyBehaviour indbehav = indsp->behaviour; + IndustryBehaviour indbehav = indsp->behaviour; i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + i->production_rate[0]); i->produced_cargo_waiting[1] = min(0xffff, i->produced_cargo_waiting[1] + i->production_rate[1]); @@ -1185,6 +1185,7 @@ bool IsSlopeRefused(Slope current, Slope refused) { + if (IsSteepSlope(current)) return true; if (current != SLOPE_FLAT) { if (refused & SLOPE_STEEP) return true; @@ -1220,32 +1221,22 @@ return false; } } else { - if (!EnsureNoVehicle(cur_tile)) return false; + if (!EnsureNoVehicleOnGround(cur_tile)) return false; if (MayHaveBridgeAbove(cur_tile) && IsBridgeAbove(cur_tile)) return false; const IndustryTileSpec *its = GetIndustryTileSpec(gfx); - IndustyBehaviour ind_behav = GetIndustrySpec(type)->behaviour; + IndustryBehaviour ind_behav = GetIndustrySpec(type)->behaviour; + + /* Perform land/water check if not disabled */ + if (!HASBIT(its->slopes_refused, 5) && (IsWaterTile(cur_tile) == !(ind_behav & INDUSTRYBEH_BUILT_ONWATER))) return false; if (HASBIT(its->callback_flags, CBM_INDT_SHAPE_CHECK)) { custom_shape = true; if (!PerformIndustryTileSlopeCheck(tile, cur_tile, its, type, gfx, itspec_index)) return false; } else { - if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) { - /* As soon as the tile is not water, bail out. - * But that does not mean the search is over. You have - * to make sure every tile of the industry will be only water*/ - if (!IsClearWaterTile(cur_tile)) return false; - } else { - Slope tileh; - - if (IsClearWaterTile(cur_tile)) return false; - - tileh = GetTileSlope(cur_tile, NULL); - if (IsSteepSlope(tileh)) return false; - - refused_slope |= IsSlopeRefused(tileh, its->slopes_refused); - } + Slope tileh = GetTileSlope(cur_tile, NULL); + refused_slope |= IsSlopeRefused(tileh, its->slopes_refused); } if (ind_behav & INDUSTRYBEH_ONLY_INTOWN) { @@ -1591,8 +1582,6 @@ */ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) { - int num; - const IndustryTileTable * const *itt; const IndustrySpec *indspec; SET_EXPENSES_TYPE(EXPENSES_OTHER); @@ -1617,11 +1606,15 @@ * is nothing we can really do about that. */ if (Random() <= indspec->prospecting_chance) { for (int i = 0; i < 5000; i++) { - uint tilespec_index = RandomRange(indspec->num_table); - const Industry *ind = CreateNewIndustryHelper(RandomTile(), p1, flags, indspec, tilespec_index); + const Industry *ind = CreateNewIndustryHelper(RandomTile(), p1, flags, indspec, RandomRange(indspec->num_table)); if (ind != NULL) { SetDParam(0, indspec->name); - SetDParam(1, ind->town->index); + if (indspec->new_industry_text > STR_LAST_STRINGID) { + SetDParam(1, STR_TOWN); + SetDParam(2, ind->town->index); + } else { + SetDParam(1, ind->town->index); + } AddNewsItem(indspec->new_industry_text, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0); break; @@ -1630,12 +1623,14 @@ } } } else { - num = indspec->num_table; - itt = indspec->table; + int count = indspec->num_table; + const IndustryTileTable * const *itt = indspec->table; + int num = RandomRange(count); - + _error_message = STR_0239_SITE_UNSUITABLE; do { - if (--num < 0) return_cmd_error(STR_0239_SITE_UNSUITABLE); + if (--count < 0) return CMD_ERROR; + if (--num < 0) num = indspec->num_table - 1; } while (!CheckIfIndustryTilesAreFree(tile, itt[num], num, p1)); if (CreateNewIndustryHelper(tile, p1, flags, indspec, num) == NULL) return CMD_ERROR; @@ -1829,7 +1824,12 @@ } SetDParam(0, ind_spc->name); - SetDParam(1, ind->town->index); + if (ind_spc->new_industry_text > STR_LAST_STRINGID) { + SetDParam(1, STR_TOWN); + SetDParam(2, ind->town->index); + } else { + SetDParam(1, ind->town->index); + } AddNewsItem(ind_spc->new_industry_text, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0); } @@ -1984,7 +1984,13 @@ } if (!suppress_message && str != STR_NULL) { - SetDParam(0, i->index); + if (str > STR_LAST_STRINGID) { + SetDParam(0, STR_TOWN); + SetDParam(1, i->town->index); + SetDParam(2, indspec->name); + } else { + SetDParam(0, i->index); + } AddNewsItem(str, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, closeit ? NT_OPENCLOSE : NT_ECONOMY, 0), i->xy + TileDiffXY(1, 1), 0); diff -r 2c27f9be3fb9 -r f82a4facea8b src/industry_gui.cpp --- a/src/industry_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/industry_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -112,28 +112,23 @@ WP(w, fnd_d).timer_enabled = false; } - /* We'll perform two distinct loops, one for secondary industries, and the other one for - * primary ones. Each loop will fill the _fund_gui structure. */ + /* Fill the _fund_gui structure with industries. + * The tests performed after the enabled allow to load the industries + * In the same way they are inserted by grf (if any) + */ for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) { indsp = GetIndustrySpec(ind); - if (indsp->enabled && (!indsp->IsRawIndustry() || _game_mode == GM_EDITOR)) { + if (indsp->enabled){ + /* Rule is that editor mode loads all industries. + * In game mode, all non raw industries are loaded too + * and raw ones are loaded only when setting allows it */ + if (_game_mode != GM_EDITOR && indsp->IsRawIndustry() && _patches.raw_industry_construction == 0) continue; _fund_gui.index[_fund_gui.count] = ind; _fund_gui.enabled[_fund_gui.count] = (_game_mode == GM_EDITOR) || CheckIfCallBackAllowsAvailability(ind, IACT_USERCREATION); _fund_gui.count++; } } - if (_patches.raw_industry_construction != 0 && _game_mode != GM_EDITOR) { - for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) { - indsp = GetIndustrySpec(ind); - if (indsp->enabled && indsp->IsRawIndustry()) { - _fund_gui.index[_fund_gui.count] = ind; - _fund_gui.enabled[_fund_gui.count] = (_game_mode == GM_EDITOR) || CheckIfCallBackAllowsAvailability(ind, IACT_USERCREATION); - _fund_gui.count++; - } - } - } - /* first indutry type is selected. * I'll be damned if there are none available ;) */ WP(w, fnd_d).index = 0; @@ -178,7 +173,7 @@ const IndustrySpec *indsp = GetIndustrySpec(_fund_gui.index[i + w->vscroll.pos]); /* Draw the name of the industry in white is selected, otherwise, in orange */ - DrawString(20, y + offset, indsp->name, selected ? 12 : 6); + DrawStringTruncated(20, y + offset, indsp->name, selected ? 12 : 6, max_width - 25); GfxFillRect(x, y + 1 + offset, x + 10, y + 7 + offset, selected ? 15 : 0); GfxFillRect(x + 1, y + 2 + offset, x + 9, y + 6 + offset, indsp->map_colour); } @@ -296,6 +291,7 @@ } break; case WE_PLACE_OBJ: { + bool success = true; /* We do not need to protect ourselves against "Random Many Industries" in this mode */ const IndustrySpec *indsp = GetIndustrySpec(WP(w, fnd_d).select); @@ -310,17 +306,20 @@ _current_player = OWNER_NONE; _generating_world = true; _ignore_restrictions = true; - if (!TryBuildIndustry(e->we.place.tile, WP(w, fnd_d).select)) { + success = TryBuildIndustry(e->we.place.tile, WP(w, fnd_d).select); + if (!success) { SetDParam(0, indsp->name); ShowErrorMessage(_error_message, STR_0285_CAN_T_BUILD_HERE, e->we.place.pt.x, e->we.place.pt.y); } _ignore_restrictions = false; _generating_world = false; - } else DoCommandP(e->we.place.tile, WP(w, fnd_d).select, 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)); + } else { + success = DoCommandP(e->we.place.tile, WP(w, fnd_d).select, 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)); + } - /* Whatever the outcome of the actions, just reset the cursor and the system */ - ResetObjectToPlace(); + /* If an industry has been built, just reset the cursor and the system */ + if (success) ResetObjectToPlace(); } break; case WE_TICK: @@ -504,7 +503,7 @@ if (message != STR_NULL && message != STR_UNDEFINED) { y += 10; - PrepareTextRefStackUsage(); + PrepareTextRefStackUsage(6); DrawString(2, y, message, 0); StopTextRefStackUsage(); } diff -r 2c27f9be3fb9 -r f82a4facea8b src/industry_map.h --- a/src/industry_map.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/industry_map.h Sat Oct 20 10:42:28 2007 +0000 @@ -274,7 +274,7 @@ * @param bits the random bits * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline byte GetIndustryRandomBits(TileIndex tile, byte bits) +static inline void SetIndustryRandomBits(TileIndex tile, byte bits) { assert(IsTileType(tile, MP_INDUSTRY)); _me[tile].m7 = bits; diff -r 2c27f9be3fb9 -r f82a4facea8b src/landscape.cpp --- a/src/landscape.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/landscape.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -206,6 +206,32 @@ return _tile_type_procs[GetTileType(tile)]->get_slope_z_proc(tile, x, y); } +/** + * Determine the Z height of the corners of a specific tile edge + * + * @pre z1 and z2 must be initialized (typ. with TileZ). The corner heights just get added. + * + * @param tileh The slope of the tile. + * @param edge The edge of interest. + * @param z1 Gets incremented by the height of the first corner of the edge. (near corner wrt. the camera) + * @param z2 Gets incremented by the height of the second corner of the edge. (far corner wrt. the camera) + */ +void GetSlopeZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2) +{ + static const Slope corners[4][4] = { + /* corner | steep slope + * z1 z2 | z1 z2 */ + {SLOPE_E, SLOPE_N, SLOPE_STEEP_E, SLOPE_STEEP_N}, // DIAGDIR_NE, z1 = E, z2 = N + {SLOPE_S, SLOPE_E, SLOPE_STEEP_S, SLOPE_STEEP_E}, // DIAGDIR_SE, z1 = S, z2 = E + {SLOPE_S, SLOPE_W, SLOPE_STEEP_S, SLOPE_STEEP_W}, // DIAGDIR_SW, z1 = S, z2 = W + {SLOPE_W, SLOPE_N, SLOPE_STEEP_W, SLOPE_STEEP_N}, // DIAGDIR_NW, z1 = W, z2 = N + }; + + if ((tileh & corners[edge][0]) != 0) *z1 += TILE_HEIGHT; // z1 is raised + if ((tileh & corners[edge][1]) != 0) *z2 += TILE_HEIGHT; // z2 is raised + if (tileh == corners[edge][2]) *z1 += TILE_HEIGHT; // z1 is highest corner of a steep slope + if (tileh == corners[edge][3]) *z2 += TILE_HEIGHT; // z2 is highest corner of a steep slope +} static Slope GetFoundationSlope(TileIndex tile, uint* z) { @@ -219,32 +245,34 @@ static bool HasFoundationNW(TileIndex tile, Slope slope_here, uint z_here) { uint z; - Slope slope = GetFoundationSlope(TILE_ADDXY(tile, 0, -1), &z); - return - ( - z_here + (slope_here & SLOPE_N ? TILE_HEIGHT : 0) + (slope_here == SLOPE_STEEP_N ? TILE_HEIGHT : 0) > - z + (slope & SLOPE_E ? TILE_HEIGHT : 0) + (slope == SLOPE_STEEP_E ? TILE_HEIGHT : 0) - ) || ( - z_here + (slope_here & SLOPE_W ? TILE_HEIGHT : 0) + (slope_here == SLOPE_STEEP_W ? TILE_HEIGHT : 0) > - z + (slope & SLOPE_S ? TILE_HEIGHT : 0) + (slope == SLOPE_STEEP_S ? TILE_HEIGHT : 0) - ); + int z_W_here = z_here; + int z_N_here = z_here; + GetSlopeZOnEdge(slope_here, DIAGDIR_NW, &z_W_here, &z_N_here); + + Slope slope = GetFoundationSlope(TILE_ADDXY(tile, 0, -1), &z); + int z_W = z; + int z_N = z; + GetSlopeZOnEdge(slope, DIAGDIR_SE, &z_W, &z_N); + + return (z_N_here > z_N) || (z_W_here > z_W); } static bool HasFoundationNE(TileIndex tile, Slope slope_here, uint z_here) { uint z; - Slope slope = GetFoundationSlope(TILE_ADDXY(tile, -1, 0), &z); - return - ( - z_here + (slope_here & SLOPE_N ? TILE_HEIGHT : 0) + (slope_here == SLOPE_STEEP_N ? TILE_HEIGHT : 0) > - z + (slope & SLOPE_W ? TILE_HEIGHT : 0) + (slope == SLOPE_STEEP_W ? TILE_HEIGHT : 0) - ) || ( - z_here + (slope_here & SLOPE_E ? TILE_HEIGHT : 0) + (slope_here == SLOPE_STEEP_E ? TILE_HEIGHT : 0) > - z + (slope & SLOPE_S ? TILE_HEIGHT : 0) + (slope == SLOPE_STEEP_S ? TILE_HEIGHT : 0) - ); + int z_E_here = z_here; + int z_N_here = z_here; + GetSlopeZOnEdge(slope_here, DIAGDIR_NE, &z_E_here, &z_N_here); + + Slope slope = GetFoundationSlope(TILE_ADDXY(tile, -1, 0), &z); + int z_E = z; + int z_N = z; + GetSlopeZOnEdge(slope, DIAGDIR_SW, &z_E, &z_N); + + return (z_N_here > z_N) || (z_E_here > z_E); } diff -r 2c27f9be3fb9 -r f82a4facea8b src/landscape.h --- a/src/landscape.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/landscape.h Sat Oct 20 10:42:28 2007 +0000 @@ -25,6 +25,7 @@ uint GetPartialZ(int x, int y, Slope corners); uint GetSlopeZ(int x, int y); +void GetSlopeZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2); static inline Point RemapCoords(int x, int y, int z) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/american.txt --- a/src/lang/american.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/american.txt Sat Oct 20 10:42:28 2007 +0000 @@ -860,6 +860,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fund new industry STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...can only be built in rainforest areas STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...can only be built in desert areas @@ -1047,6 +1048,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Road vehicle queueing (with quantum effects): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Pan window when mouse is at the edge: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Allow bribing of the local authority: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Allow buying exclusive transport rights: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Allow sending money to other companies: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Nonuniform stations: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}New global pathfinding (NPF, overrides NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Weight multiplier for freight to simulate heavy trains: {ORANGE}{STRING} @@ -1187,6 +1190,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}1 in {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}None STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Initial city size multiplier: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Remove absurd road-elements during the road construction STR_CONFIG_PATCHES_GUI :{BLACK}Interface STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construction @@ -2017,6 +2021,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Must demolish tunnel first STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Must demolish bridge first STR_5008_CANNOT_START_AND_END_ON :{WHITE}Cannot start and end on same position +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Bridge heads not at the same level +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Bridge is too low for the terrain STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Start and end must be in line STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Site unsuitable for tunnel entrance STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2777,6 +2783,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Can't sell destroyed vehicle... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station. @@ -3380,3 +3388,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect STR_BUILD_NEW_INDUSTRY :{BLACK}Build STR_INDUSTRY_SELECTION_HINT :{BLACK}Choose the appropriate industry from this list + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Advanced +STR_FACE_ADVANCED_TIP :{BLACK}Advanced face selection. +STR_FACE_SIMPLE :{BLACK}Simple +STR_FACE_SIMPLE_TIP :{BLACK}Simple face selection. +STR_FACE_LOAD :{BLACK}Load +STR_FACE_LOAD_TIP :{BLACK}Load favorite face +STR_FACE_LOAD_DONE :{WHITE}Your favorite face has been loaded from the OpenTTD config file. +STR_FACE_FACECODE :{BLACK}Player face no. +STR_FACE_FACECODE_TIP :{BLACK}View and/or set player face number +STR_FACE_FACECODE_CAPTION :{WHITE}View and/or set player face number +STR_FACE_FACECODE_SET :{WHITE}New face number code has been set. +STR_FACE_FACECODE_ERR :{WHITE}Couldn't set player face number - must be numeric between 0 and 4,294,967,295! +STR_FACE_SAVE :{BLACK}Save +STR_FACE_SAVE_TIP :{BLACK}Save favorite face +STR_FACE_SAVE_DONE :{WHITE}This face will be saved as your favorite in the OpenTTD config file. +STR_FACE_EUROPEAN :{BLACK}European +STR_FACE_SELECT_EUROPEAN :{BLACK}Select European faces +STR_FACE_AFRICAN :{BLACK}African +STR_FACE_SELECT_AFRICAN :{BLACK}Select African faces +STR_FACE_YES :Yes +STR_FACE_NO :No +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Enable mustache or earring +STR_FACE_HAIR :Hair: +STR_FACE_HAIR_TIP :{BLACK}Change hair +STR_FACE_EYEBROWS :Eyebrows: +STR_FACE_EYEBROWS_TIP :{BLACK}Change eyebrows +STR_FACE_EYECOLOUR :Eye color: +STR_FACE_EYECOLOUR_TIP :{BLACK}Change eyecolor +STR_FACE_GLASSES :Glasses: +STR_FACE_GLASSES_TIP :{BLACK}Enable glasses +STR_FACE_GLASSES_TIP_2 :{BLACK}Change glasses +STR_FACE_NOSE :Nose: +STR_FACE_NOSE_TIP :{BLACK}Change nose +STR_FACE_LIPS :Lips: +STR_FACE_MOUSTACHE :Mustache: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Change lips or mustache +STR_FACE_CHIN :Chin: +STR_FACE_CHIN_TIP :{BLACK}Change chin +STR_FACE_JACKET :Jacket: +STR_FACE_JACKET_TIP :{BLACK}Change jacket +STR_FACE_COLLAR :Collar: +STR_FACE_COLLAR_TIP :{BLACK}Change collar +STR_FACE_TIE :Tie: +STR_FACE_EARRING :Earring: +STR_FACE_TIE_EARRING_TIP :{BLACK}Change tie or earring +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/brazilian_portuguese.txt --- a/src/lang/brazilian_portuguese.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/brazilian_portuguese.txt Sat Oct 20 10:42:28 2007 +0000 @@ -862,6 +862,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financiar nova indústria STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...só pode ser construído em cidades STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...só pode ser construído em zonas florestais STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...só pode ser construído em áreas desérticas @@ -1049,6 +1050,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Fila de automóveis (com efeitos de quantidade): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Deslocar janela quando o cursor está na borda do mapa: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Permitir o suborno da autoridade local: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Permtir compra de direitos exclusivos de transporte: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Permitir o envio de dinheiro a outras companhias: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Estações não uniformes: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novo busca de caminho global (NPF, sobrepõe NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Multiplicador de peso para trens simulando trens pesados: {ORANGE}{STRING} @@ -1189,6 +1192,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}1 em {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}Nenhum STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Multiplicador do tamanho inicial da cidade: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Remover elementos de estrada absurdos ao construir ruas STR_CONFIG_PATCHES_GUI :{BLACK}Interface STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construção @@ -2021,6 +2025,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Necessário demolir o túnel primeiro STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Necessário demolir a ponte primeiro STR_5008_CANNOT_START_AND_END_ON :{WHITE}Impossível iniciar e terminar no mesmo ponto +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Ponte é muito baixa para o terreno STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim necessitam estar alinhados STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local não é adequado para a entrada do túnel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2781,6 +2787,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Impossível vender veículo destruído... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos só podem aguardar em estações STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Esse veículo não pára nesta estação @@ -3384,3 +3392,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prosperir STR_BUILD_NEW_INDUSTRY :{BLACK}Construir STR_INDUSTRY_SELECTION_HINT :{BLACK}Escolha a indústria apropriada + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avançado +STR_FACE_ADVANCED_TIP :{BLACK}Seleção de face avançada. +STR_FACE_SIMPLE :{BLACK}Simples +STR_FACE_SIMPLE_TIP :{BLACK}Seleção de face simples. +STR_FACE_LOAD :{BLACK}Carregar +STR_FACE_LOAD_TIP :{BLACK}Carregar face favorita +STR_FACE_LOAD_DONE :{WHITE}Sua face favorita foi carregada do arquivo de configuração do OpenTTD. +STR_FACE_FACECODE :{BLACK}Número da face do jogador. +STR_FACE_FACECODE_TIP :{BLACK}Ver e/ou alterar número da face do jogador +STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou alterar número da face do jogador +STR_FACE_FACECODE_SET :{WHITE}Novo código de número da face face foi alterado +STR_FACE_FACECODE_ERR :{WHITE}Não pode alterar o número de face do jogador precisa ser um número entre 0 e 4,294,967,295! +STR_FACE_SAVE :{BLACK}Salvar +STR_FACE_SAVE_TIP :{BLACK}Salvar face favorita +STR_FACE_SAVE_DONE :{WHITE}Esta face irá ser salva como sua face favorita no arquivo de configuração do OpenTTD. +STR_FACE_EUROPEAN :{BLACK}Europeu +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecione faces européias +STR_FACE_AFRICAN :{BLACK}Africano +STR_FACE_SELECT_AFRICAN :{BLACK}Selecione faces africanas +STR_FACE_YES :Sim +STR_FACE_NO :Não +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Ativar bigode ou brinco +STR_FACE_HAIR :Cabelo: +STR_FACE_HAIR_TIP :{BLACK}Alterar cabelo +STR_FACE_EYEBROWS :Sombrancelhas: +STR_FACE_EYEBROWS_TIP :{BLACK}Alterar sombrancelhas +STR_FACE_EYECOLOUR :Cor do olho: +STR_FACE_EYECOLOUR_TIP :{BLACK}Alterar cor do olho +STR_FACE_GLASSES :Óculos: +STR_FACE_GLASSES_TIP :{BLACK}Ativar óculos +STR_FACE_GLASSES_TIP_2 :{BLACK}Alterar óculos +STR_FACE_NOSE :Nariz: +STR_FACE_NOSE_TIP :{BLACK}Alterar nariz +STR_FACE_LIPS :Boca: +STR_FACE_MOUSTACHE :Bigode: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Alterar boca ou bigode +STR_FACE_CHIN :Queixo: +STR_FACE_CHIN_TIP :{BLACK}Alterar queixo +STR_FACE_JACKET :Casaco: +STR_FACE_JACKET_TIP :{BLACK}Alterar casaco +STR_FACE_COLLAR :Colarinho: +STR_FACE_COLLAR_TIP :{BLACK}Alterar colarinho +STR_FACE_TIE :Gravata: +STR_FACE_EARRING :Brinco: +STR_FACE_TIE_EARRING_TIP :{BLACK}Alterar gravata ou brinco +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/bulgarian.txt --- a/src/lang/bulgarian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/bulgarian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -862,6 +862,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Инвестирай в нова индустрия STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...може да бъде построено само в градовете STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...може да бъде построено само около и в джунглите STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...може да бъде построено само около и в пустините @@ -1047,6 +1048,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Опашка на колите (със сумарен ефект): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Преместване на прозореца когато мишката е в края: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Подкупване на местната власт: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Позволи купуване на изклучителни транспортни права: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Позволи изпращане на пари до други компаний: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Нестандартни станции: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Нов глобален навигатор (NPF, отменя NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Теглови множител към товарите за симулация на тежки влакове: {ORANGE}{STRING} @@ -1105,6 +1108,9 @@ STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Изклучен STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollwheel скорост на картата: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Дясно-щракане емулациа: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда-щракане +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Контрол-щракане STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Изключен STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Автоматична пауза стартирайки нова игра: {ORANGE}{STRING} @@ -1390,6 +1396,7 @@ STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} клиент{P "" s} STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клиенти: STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят +STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} компани{P а ий} STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Макс. компании: STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ограничаване на играта до определен брой компании STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} зрител{P "" s} @@ -1626,8 +1633,11 @@ STR_RAILROAD_TRACK_WITH_PRESIGNALS :ЖП линия с пре-сигнали STR_RAILROAD_TRACK_WITH_EXITSIGNALS :ЖП линия с изходни сигнали STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Железопътна линиа с комбинирани знаци +STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Железопътна линиа с нормални и пре-сигнали STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Железопътна линиа с нормални и изходни сигнали STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Железопътна линиа с нормални и комбинирани знаци +STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Железопътна линиа с пре- и изходни сигнали +STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Железопътна линиа с пре- и комбинирани сигнали STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Железопътна линиа с изходни и комбинирани знаци STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Железопътната гара трябва да бъде премахната първо @@ -2008,6 +2018,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Първо разрушете тунела STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Първо трябва да разрушите моста STR_5008_CANNOT_START_AND_END_ON :{WHITE}Не може да започва и да свърша на едно и също място +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Мостни начала не са на същото ниво +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Мостът е ту нисък за теренът STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Началото и краят трябва да са на една линия STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Мястото е неподходящо за вход на тунел STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2629,6 +2641,7 @@ STR_TIMETABLE_TRAVEL_FOR :Патувай за {STRING} STR_TIMETABLE_STAY_FOR :и остани за {STRING} STR_TIMETABLE_DAYS :{COMMA} ден{P "" s} +STR_TIMETABLE_TICKS :{COMMA} щракане{P "" та} STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Отиващ към Влаковото депо на {TOWN} STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Отиващ към Влаковото депо на {TOWN}, {VELOCITY} @@ -2767,6 +2780,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Унищожено превозно средство не може да се продаде... + STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Превозни средства могат да чакат само на гари. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Това превознот средство не спира на тази гара. STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето @@ -2826,6 +2841,8 @@ STR_902E_NAME_ROAD_VEHICLE :{BLACK}Преименувай МПС-то STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Хората празнуват . . .{}Първи автобус пристигна на {STATION}! STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Хората празнуват . . .{}Първи камион пристигна на {STATION}! +STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Гражданите празнуват . . .{}Първиат пътнически трамвай пристига на {STATION}! +STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Гражданите празнуват . . .{}Първиат товарен трамвай пристига на {STATION}! STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Пътно-транспортно Произшествие!{}Шофьор загина на място при екплозия на МПС след сблъсък с влак STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Пътно-транспортно Произшествие!{}{COMMA} загинаха на място при екплозия на МПС след сблъсък с влак STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Не може да обърнеш МПС-то... @@ -3366,3 +3383,50 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Перспектива STR_BUILD_NEW_INDUSTRY :{BLACK}Построи STR_INDUSTRY_SELECTION_HINT :{BLACK}Избери правилната промишленост от следниат списък + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Hапреднат +STR_FACE_ADVANCED_TIP :{BLACK}Напредната лице селекциа. +STR_FACE_SIMPLE :{BLACK}Прост +STR_FACE_SIMPLE_TIP :{BLACK}Проста лице селекциа. +STR_FACE_LOAD :{BLACK}Зареди +STR_FACE_LOAD_TIP :{BLACK}Зареди любимо лице +STR_FACE_LOAD_DONE :{WHITE}Твоето любимо лице е заредено от OpenTTD config файлът. +STR_FACE_FACECODE_TIP :{BLACK}Виж и/или избери номер на лицето на играчът +STR_FACE_FACECODE_CAPTION :{WHITE}Виж и/или избери номер на лицето на играчът +STR_FACE_FACECODE_SET :{WHITE}Нов номер на лицето е избран. +STR_FACE_FACECODE_ERR :{WHITE}Нов номер на лицето неможе да бъде избран - трябва да бъде номер между 0 и 4,294,967,295! +STR_FACE_SAVE :{BLACK}Запази +STR_FACE_SAVE_TIP :{BLACK}Запази любимо лице +STR_FACE_SAVE_DONE :{WHITE}Това лице ще бъде запазено като твоето любимо в OpenTTD config файлът. +STR_FACE_EUROPEAN :{BLACK}Eвропеец +STR_FACE_SELECT_EUROPEAN :{BLACK}Избери Европейски лица +STR_FACE_AFRICAN :{BLACK}Aфриканец +STR_FACE_SELECT_AFRICAN :{BLACK}Избери Африкански лица +STR_FACE_YES :Дa +STR_FACE_NO :He +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Позволи мустак или обица +STR_FACE_HAIR :Kоса: +STR_FACE_HAIR_TIP :{BLACK}Cмени kocaтa +STR_FACE_EYEBROWS :Вежди: +STR_FACE_EYEBROWS_TIP :{BLACK}Смени веждите +STR_FACE_EYECOLOUR :Цвят на очи: +STR_FACE_EYECOLOUR_TIP :{BLACK}Смени цветът на очите +STR_FACE_GLASSES :Oчила: +STR_FACE_GLASSES_TIP :{BLACK}Позволи oчила +STR_FACE_GLASSES_TIP_2 :{BLACK}Cмени очилатa +STR_FACE_NOSE :Hoc: +STR_FACE_NOSE_TIP :{BLACK}Cмени носът +STR_FACE_LIPS :Устни: +STR_FACE_MOUSTACHE :Mустак : +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Cмени устните или mустакът +STR_FACE_CHIN :Брада: +STR_FACE_CHIN_TIP :{BLACK}Cмени брадатa +STR_FACE_JACKET :Cако: +STR_FACE_JACKET_TIP :{BLACK}Cмени cakoтo +STR_FACE_COLLAR :Яка: +STR_FACE_COLLAR_TIP :{BLACK}Cмени якатa +STR_FACE_TIE :Вратовръзкa: +STR_FACE_EARRING :Oбица: +STR_FACE_TIE_EARRING_TIP :{BLACK}Cмени вратовръзкатa или oбицатa +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/catalan.txt --- a/src/lang/catalan.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/catalan.txt Sat Oct 20 10:42:28 2007 +0000 @@ -860,6 +860,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financia una nova indústria STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...només es pot construir en poblacions STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...només es pot construir en àrees de selva tropical STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...només es pot construir en àrees de desert @@ -1047,6 +1048,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Cues d'automòbils (amb efectes quàntics): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Finestra d'avis quan el ratolí és al marc del programa: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Permet subornar a les autoritats locals: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Permet comprar els drets del transport en exclusiva: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Permet enviar diners a altres companyies: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Estacions no uniformes: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nova cerca de rutes global (NPF, anul·la NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Multiplicador de pes per contenidor per simular trens pesats: {ORANGE}{STRING} @@ -1187,6 +1190,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proporció de ciutats que creixeran el doble de ràpid: {ORANGE}1 de cada {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proporció de ciutats que creixeran el doble de ràpid: {ORANGE}Cap STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Multiplicador de mida de ciutat inicial: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Treu els elements de carretera absurds durant la reconstrucció de carretera STR_CONFIG_PATCHES_GUI :{BLACK}Interficie STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construcció @@ -2017,6 +2021,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Primer has d'enderrocar el túnel STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Primer has d'enderrocar el pont STR_5008_CANNOT_START_AND_END_ON :{WHITE}No es pot començar i acabar a la mateixa posició +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Les capçaleres del pont no són al mateix nivell +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}El pont és massa baix pel terreny STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Inici i final han d'estar en línia recta STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Lloc inadequat per l'entrada del túnel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2777,6 +2783,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nou/Nova {STRING} disponible! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}No es pot vendre el vehicle destruït... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossible establir l'horari del vehicle... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Els vehicles només poden esperar a les estacions. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Aquest vehicle no para en aquesta estació. @@ -3380,3 +3388,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospecciona STR_BUILD_NEW_INDUSTRY :{BLACK}Construeix STR_INDUSTRY_SELECTION_HINT :{BLACK}Escolleix el tipus d'indústria adequada d'aquesta llista + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avançat +STR_FACE_ADVANCED_TIP :{BLACK}Selecció de cara avançada. +STR_FACE_SIMPLE :{BLACK}Simple +STR_FACE_SIMPLE_TIP :{BLACK}Selecció de cara simple. +STR_FACE_LOAD :{BLACK}Carrega +STR_FACE_LOAD_TIP :{BLACK}Carrega la cara preferida +STR_FACE_LOAD_DONE :{WHITE}La teva cara preferida ha estat carregada des de l'arxiu de configuració d'OpenTTD. +STR_FACE_FACECODE :{BLACK}Cara jugador nu. +STR_FACE_FACECODE_TIP :{BLACK}Veure i/o assigna la cara del jugador número +STR_FACE_FACECODE_CAPTION :{WHITE}Veure i/o assigna la cara del jugador número +STR_FACE_FACECODE_SET :{WHITE}El número de la nova cara ha estat assignat. +STR_FACE_FACECODE_ERR :{WHITE}No s'ha pogut assignar el número de cara del jugador - ha de ser un nombre entre 0 i 4,294,967,295! +STR_FACE_SAVE :{BLACK}Desa +STR_FACE_SAVE_TIP :{BLACK}Desa la cara preferida +STR_FACE_SAVE_DONE :{WHITE}Aquesta cara serà desada com a preferida a l'arxiu de configuració d'OpenTTD. +STR_FACE_EUROPEAN :{BLACK}Europea +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecciona cares europees +STR_FACE_AFRICAN :{BLACK}Africana +STR_FACE_SELECT_AFRICAN :{BLACK}Selecciona cares africanes +STR_FACE_YES :Si +STR_FACE_NO :No +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Activa el bigoti o les arracades +STR_FACE_HAIR :Cabell: +STR_FACE_HAIR_TIP :{BLACK}Canvia el cabell +STR_FACE_EYEBROWS :Celles +STR_FACE_EYEBROWS_TIP :{BLACK}Canvia les celles +STR_FACE_EYECOLOUR :Color dels ulls: +STR_FACE_EYECOLOUR_TIP :{BLACK}Canvia el color del ulls: +STR_FACE_GLASSES :Ulleres: +STR_FACE_GLASSES_TIP :{BLACK}Activa les ulleres +STR_FACE_GLASSES_TIP_2 :{BLACK}Canvia les ulleres +STR_FACE_NOSE :Nas: +STR_FACE_NOSE_TIP :{BLACK}Canvia el nas +STR_FACE_LIPS :Llavis: +STR_FACE_MOUSTACHE :Bigoti: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Canvia els llavis o el bigoti +STR_FACE_CHIN :Barbeta: +STR_FACE_CHIN_TIP :{BLACK}Canvia la barbeta +STR_FACE_JACKET :Jaqueta: +STR_FACE_JACKET_TIP :{BLACK}Canvia la jaqueta +STR_FACE_COLLAR :Collaret: +STR_FACE_COLLAR_TIP :{BLACK}Canvia el collaret +STR_FACE_TIE :Corbata: +STR_FACE_EARRING :Arracades: +STR_FACE_TIE_EARRING_TIP :{BLACK}Canvia la corbata o les arracades +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/croatian.txt --- a/src/lang/croatian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/croatian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -1049,6 +1049,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Nizanje cestovnih vozila (s kvantnim učincima): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Pomakni prozor kada je miš na rubu: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Dopusti potkupljivanje lokalne samouprave: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Dopusti kupovinu ekskluzivnih prijevoznih prava: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Dopusti slanje novca drugim tvrtkama: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Neujednačene stanice: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novo globalno pronalaženje puteva (NPF, isključuje NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Težinski množitelj za teret za simulaciju teških vlakova: {ORANGE}{STRING} @@ -1189,6 +1191,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Omjer gradova koji će postati metropole: {ORANGE}1 u {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Omjer gradova koji će postati metropole: {ORANGE}Nijedan STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Početni množitelj veličine grada: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Ukloni apsurne cestovne elemente tijekom konstrukcije prometnica STR_CONFIG_PATCHES_GUI :{BLACK}Sučelje STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Izgradnja @@ -2019,6 +2022,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Najprije moraš srušiti tunel STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Najprije moraš srušiti most STR_5008_CANNOT_START_AND_END_ON :{WHITE}Početak i kraj ne mogu biti na istom mjestu +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Glave mosta nisu na istoj razini +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Most je prenizak za teren STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Početak i kraj moraju biti u ravnini STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Neprikladan teren za ulaz u tunel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2779,6 +2784,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Ne mogu prodati uništeno vozilo... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nije moguće rasporediti vozilo... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozila mogu čekati samo na stanicama. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ovo vozilo se ne zaustavlja na ovoj stanici. diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/czech.txt --- a/src/lang/czech.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/czech.txt Sat Oct 20 10:42:28 2007 +0000 @@ -1105,6 +1105,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Silniční vozidla stojí fronty (s kvantovým efektem): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Posouvat okno, když je kurzor na okraji: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Povolit úplatek místní správě: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Umožnit kupování výhradních přepravních práv: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Umožnit zasílání peněz ostatním společnostem: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Nejednolité stanice: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nový globální algoritmus hledání cesty (NPF, nahradí NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Pro simulaci těžkých vlaků vynásobit hmotnost nákladu: {ORANGE}{STRING}x @@ -1245,6 +1247,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}1 z {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}žádné STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Násobitel původní velikosti města: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Odstraňovat nesmyslné prvky vozovky při výstavbě silnic STR_CONFIG_PATCHES_GUI :{BLACK}Ovládaní STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Výstavba @@ -2841,6 +2844,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G á ý é} {STRING} k dispozici! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Nelze prodat zničené vozidlo... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Tomuto vozidlu nejde nastavit jízdní řád... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozidla mohou čekat jen ve stanicích. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Toto vozidlo v této stanici nestaví. @@ -3334,7 +3339,7 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Snížit výšku ploché země o jednu úroveň STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Zvednout výšku ploché země o jednu úroveň STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Změnit výšku ploché země -STR_FLAT_WORLD_HEIGHT :{BLACK}Výška ploché zeme: +STR_FLAT_WORLD_HEIGHT :{BLACK}Výška ploché země: STR_FLAT_WORLD_HEIGHT_NUM :{NUM} STR_SMALLMAP_CENTER :{BLACK}Vycentrovat malou mapu na tomto místě diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/dutch.txt --- a/src/lang/dutch.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/dutch.txt Sat Oct 20 10:42:28 2007 +0000 @@ -860,6 +860,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Betaal nieuwe industrie STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan alleen in steden gebouwd worden STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan alleen in het regenwoud gebouwd worden STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan alleen in woestijngebieden gebouwd worden @@ -1047,6 +1048,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Rijvorming bij wegvoertuigen (met bijwerkingen): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Verschuif scherm als muis aan de rand is: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Omkopen van de gemeente toestaan: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Kopen van exclusieve transportrechten toestaan: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Geld geven aan andere bedrijven toestaan: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Vrij gevormde stations: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nieuwe globale routeplanner (NPF, voorkeur over NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Gewichtsverhouding voor vracht om zware treinen te simuleren: {ORANGE}{STRING} @@ -1187,6 +1190,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Verhouding van steden die twee keer zo snel groeien: {ORANGE}1 in {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Verhouding van steden die twee keer zo snel groeien: {ORANGE}Niet STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Stad groei indicator: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Verwijder rare weg-elementen tijdens het herbouwen van de weg STR_CONFIG_PATCHES_GUI :{BLACK}Interface STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Constructie @@ -2017,6 +2021,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Tunnel moet eerst afgebroken worden STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Brug moet eerst afgebroken worden STR_5008_CANNOT_START_AND_END_ON :{WHITE}Kan niet beginnen en eindigen op dezelfde plaats +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Begin van bruggen niet op hetzelfde niveau +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Brug is de laag voor dit terrein STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Begin en einde moeten op een lijn staan STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Locatie ongeschikt voor ingang tunnel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2777,6 +2783,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nieuw {STRING} nu beschikbaar! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Kan verwoest voertuig niet verkopen... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan geen dienstregeling opzetten voor dit voertuig... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Voertuigen kunnen alleen wachten op stations. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dit voertuig stopt niet op dit station @@ -3380,3 +3388,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Onderzoek STR_BUILD_NEW_INDUSTRY :{BLACK}Bouw STR_INDUSTRY_SELECTION_HINT :{BLACK}Kies de aangewezen industrie van de lijst + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Geavanceerd +STR_FACE_ADVANCED_TIP :{BLACK}Geavanceerde gezichtskeuze +STR_FACE_SIMPLE :{BLACK}Eenvoudig +STR_FACE_SIMPLE_TIP :{BLACK}Eenvoudige gezichtskeuze. +STR_FACE_LOAD :{BLACK}Laden +STR_FACE_LOAD_TIP :{BLACK}Laad favoriet gezicht +STR_FACE_LOAD_DONE :{WHITE}Je favoriete gezicfht op geladen van het OpenTTD configuratie bestand. +STR_FACE_FACECODE :{BLACK}Speler gezichtsnummer. +STR_FACE_FACECODE_TIP :{BLACK}Bekijk en/of bewaar spelers gezichtsnummer +STR_FACE_FACECODE_CAPTION :{WHITE}Bekijken en/of bewaar gezichtnummer +STR_FACE_FACECODE_SET :{WHITE}Nieuw gezicht nummercode is opgeslagen. +STR_FACE_FACECODE_ERR :{WHITE}Kon gezichtsnummer niet bewaren - het moet een nummer zijn tussen 0 en 4.294.967.295! +STR_FACE_SAVE :{BLACK}Opslaan +STR_FACE_SAVE_TIP :{BLACK}Sla favoriet gezicht op +STR_FACE_SAVE_DONE :{WHITE}Dit gezicht wordt zal worden opgeslagen als jouw favoriet in het OpenTTD configuratie bestand. +STR_FACE_EUROPEAN :{BLACK}Europeaan +STR_FACE_SELECT_EUROPEAN :{BLACK}Kies europeaan gezicht +STR_FACE_AFRICAN :{BLACK}Africaan +STR_FACE_SELECT_AFRICAN :{BLACK}Kies africaans gezicht +STR_FACE_YES :Ja +STR_FACE_NO :Nee +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Activeer snor of oorbel +STR_FACE_HAIR :Haar: +STR_FACE_HAIR_TIP :{BLACK}Varander haar +STR_FACE_EYEBROWS :Wenkbrauwen: +STR_FACE_EYEBROWS_TIP :{BLACK}Verander wenkbrauwen +STR_FACE_EYECOLOUR :Kleur ogen +STR_FACE_EYECOLOUR_TIP :{BLACK}Verander kleur ogen +STR_FACE_GLASSES :Bril: +STR_FACE_GLASSES_TIP :{BLACK}Brillen aan +STR_FACE_GLASSES_TIP_2 :{BLACK}Verander bril +STR_FACE_NOSE :Neus: +STR_FACE_NOSE_TIP :{BLACK}Verander neus +STR_FACE_LIPS :Lippen: +STR_FACE_MOUSTACHE :Snor: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Verander lippen of snor +STR_FACE_CHIN :Kin: +STR_FACE_CHIN_TIP :{BLACK}Verander kin +STR_FACE_JACKET :Jas: +STR_FACE_JACKET_TIP :{BLACK}Verander jas +STR_FACE_COLLAR :Kraag: +STR_FACE_COLLAR_TIP :{BLACK}Verander kraag +STR_FACE_TIE :Stropdas: +STR_FACE_EARRING :Oorbel: +STR_FACE_TIE_EARRING_TIP :{BLACK}Verander das of oorbel +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/english.txt --- a/src/lang/english.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/english.txt Sat Oct 20 10:42:28 2007 +0000 @@ -860,6 +860,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fund new industry STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...can only be built in rainforest areas STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...can only be built in desert areas @@ -2782,6 +2783,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Can't sell destroyed vehicle... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station. @@ -3385,3 +3388,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect STR_BUILD_NEW_INDUSTRY :{BLACK}Build STR_INDUSTRY_SELECTION_HINT :{BLACK}Choose the appropriate industry from this list + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Advanced +STR_FACE_ADVANCED_TIP :{BLACK}Advanced face selection. +STR_FACE_SIMPLE :{BLACK}Simple +STR_FACE_SIMPLE_TIP :{BLACK}Simple face selection. +STR_FACE_LOAD :{BLACK}Load +STR_FACE_LOAD_TIP :{BLACK}Load favourite face +STR_FACE_LOAD_DONE :{WHITE}Your favourite face has been loaded from the OpenTTD config file. +STR_FACE_FACECODE :{BLACK}Player face no. +STR_FACE_FACECODE_TIP :{BLACK}View and/or set player face number +STR_FACE_FACECODE_CAPTION :{WHITE}View and/or set player face number +STR_FACE_FACECODE_SET :{WHITE}New face number code has been set. +STR_FACE_FACECODE_ERR :{WHITE}Couldn't set player face number - must be numeric between 0 and 4,294,967,295! +STR_FACE_SAVE :{BLACK}Save +STR_FACE_SAVE_TIP :{BLACK}Save favourite face +STR_FACE_SAVE_DONE :{WHITE}This face will be saved as your favourite in the OpenTTD config file. +STR_FACE_EUROPEAN :{BLACK}European +STR_FACE_SELECT_EUROPEAN :{BLACK}Select european faces +STR_FACE_AFRICAN :{BLACK}African +STR_FACE_SELECT_AFRICAN :{BLACK}Select african faces +STR_FACE_YES :Yes +STR_FACE_NO :No +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Enable moustache or earring +STR_FACE_HAIR :Hair: +STR_FACE_HAIR_TIP :{BLACK}Change hair +STR_FACE_EYEBROWS :Eyebrows: +STR_FACE_EYEBROWS_TIP :{BLACK}Change eyebrows +STR_FACE_EYECOLOUR :Eye colour: +STR_FACE_EYECOLOUR_TIP :{BLACK}Change eyecolour +STR_FACE_GLASSES :Glasses: +STR_FACE_GLASSES_TIP :{BLACK}Enable glasses +STR_FACE_GLASSES_TIP_2 :{BLACK}Change glasses +STR_FACE_NOSE :Nose: +STR_FACE_NOSE_TIP :{BLACK}Change nose +STR_FACE_LIPS :Lips: +STR_FACE_MOUSTACHE :Moustache: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Change lips or moustache +STR_FACE_CHIN :Chin: +STR_FACE_CHIN_TIP :{BLACK}Change chin +STR_FACE_JACKET :Jacket: +STR_FACE_JACKET_TIP :{BLACK}Change jacket +STR_FACE_COLLAR :Collar: +STR_FACE_COLLAR_TIP :{BLACK}Change collar +STR_FACE_TIE :Tie: +STR_FACE_EARRING :Earring: +STR_FACE_TIE_EARRING_TIP :{BLACK}Change tie or earring +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/estonian.txt --- a/src/lang/estonian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/estonian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -252,7 +252,7 @@ STR_00AE :{WHITE}{DATE_SHORT} STR_00AF :{WHITE}{DATE_LONG} STR_00B0_MAP :{WHITE}Kaart - {STRING} -STR_00B1_GAME_OPTIONS :{WHITE}Mängu seaded +STR_00B1_GAME_OPTIONS :{WHITE}Mängu valikud STR_00B2_MESSAGE :{YELLOW}Sõnum STR_00B3_MESSAGE_FROM :{YELLOW}{STRING} teatab STR_POPUP_CAUTION_CAPTION :{WHITE}Ettevaatust! @@ -407,7 +407,7 @@ STR_2048 :2048 STR_MAPSIZE :{BLACK}Kaardi suurus: STR_BY :{BLACK}* -STR_0148_GAME_OPTIONS :{BLACK}Mängu seaded +STR_0148_GAME_OPTIONS :{BLACK}Mängu valikud STR_0150_SOMEONE :keegi{SKIP}{SKIP} STR_0151_MAP_OF_WORLD :Maailmakaart @@ -551,7 +551,7 @@ STR_0184_BUILD_AIRPORTS :{BLACK}Ehita lennuvälju STR_0185_PLANT_TREES_PLACE_SIGNS :{BLACK}Puude istutamine, siltide paigaldamine jne. STR_0186_LAND_BLOCK_INFORMATION :{BLACK}Maa-ala andmed -STR_0187_OPTIONS :{BLACK}Seaded +STR_0187_OPTIONS :{BLACK}Valikud STR_0188 :{BLACK}{SMALLUPARROW} STR_0189 :{BLACK}{SMALLDOWNARROW} STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Hooldusperioodi ei saa muuta... @@ -685,8 +685,8 @@ STR_0200_LAST_MESSAGE_NEWS_REPORT :Viimane teade STR_0201_MESSAGE_SETTINGS :Teadete seadistused STR_MESSAGE_HISTORY_MENU :Teadete ajalugu -STR_0203_SHOW_LAST_MESSAGE_NEWS :{BLACK}Näita viimast teadet, kuva teadete seaded -STR_0204_MESSAGE_OPTIONS :{WHITE}Teadete seaded +STR_0203_SHOW_LAST_MESSAGE_NEWS :{BLACK}Näita viimast teadet, kuva teadete valikud +STR_0204_MESSAGE_OPTIONS :{WHITE}Teadete valikud STR_0205_MESSAGE_TYPES :{BLACK}Teate tüüp: STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Mängija jaama saabus esimene veovahend STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Konkurendi jaama saabus esimene veovahend @@ -873,10 +873,10 @@ STR_CHECKMARK :{CHECKMARK} ############ range for menu starts -STR_02C3_GAME_OPTIONS :Mängu seaded -STR_02C5_DIFFICULTY_SETTINGS :Raskusastme seaded -STR_02C7_CONFIG_PATCHES :Paranduste seaded -STR_NEWGRF_SETTINGS :Newgrf seaded +STR_02C3_GAME_OPTIONS :Mängu valikud +STR_02C5_DIFFICULTY_SETTINGS :Raskusastme seadistused +STR_02C7_CONFIG_PATCHES :Seadista paikasid +STR_NEWGRF_SETTINGS :NewGRF seadistused STR_TRANSPARENCY_OPTIONS :Läbipaistvuse valikud STR_GAMEOPTMENU_0A : STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Näidatavad linnanimed @@ -940,8 +940,8 @@ STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Loo oma mängukaart STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Vali üksikmäng STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Vali 2-8 mängijaga mitmikmäng -STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Näita mängu seadeid -STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Vaata raskusastmete seadeid +STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Kuva mängu valikuid +STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Kuva raskusastmete valikuid STR_0303_START_A_NEW_GAME_USING :{BLACK}Alusta omatehtud stsenaariumit kasutades uut mängu STR_0304_QUIT :{BLACK}Välju STR_0305_QUIT_OPENTTD :{BLACK}Välju 'OpenTTD'st @@ -1033,18 +1033,18 @@ STR_OPTIONS_LANG :{BLACK}Keel STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} -STR_OPTIONS_LANG_TIP :{BLACK}Mängus kasutatava keele valik +STR_OPTIONS_LANG_TIP :{BLACK}Vali kasutajaliideses kasutatav keel STR_OPTIONS_FULLSCREEN :{BLACK}Täisekraan -STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Märgistades selle kasti, toimub mäng täisekraanis +STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Märgi see kast, et OpenTTD täisekraanirežiimis mängida -STR_OPTIONS_RES :{BLACK}Kuvari eraldusvõime +STR_OPTIONS_RES :{BLACK}Ekraanilahutus STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} -STR_OPTIONS_RES_TIP :{BLACK}Kuvari eraldusvõime valimine +STR_OPTIONS_RES_TIP :{BLACK}Ekraanilahutuse valimine -STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Ekraanitõmmise formaat +STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Ekraanipildi vorming STR_OPTIONS_SCREENSHOT_FORMAT_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} -STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Valik, millises formaadis salvestatakse ekraanitõmmis +STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Vali kasutatav ekraanipildi vorming STR_AUTOSAVE_1_MONTH :Iga kuu STR_AUTOSAVE_FAILED :{WHITE}Isesalvestus ebaõnnestus @@ -1112,9 +1112,9 @@ STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Õhusõiduki iseuuendamine ebaõnnestus{COMMA} (rahapiirang) STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Rong {COMMA} on peale asendust liiga pikk -STR_CONFIG_PATCHES :{BLACK}Paranduste seaded -STR_CONFIG_PATCHES_TIP :{BLACK}Paranduste seadistamine -STR_CONFIG_PATCHES_CAPTION :{WHITE}Paranduste seaded +STR_CONFIG_PATCHES :{BLACK}Seadista paikasid +STR_CONFIG_PATCHES_TIP :{BLACK}Seadista paikasid +STR_CONFIG_PATCHES_CAPTION :{WHITE}Seadista paikasid STR_CONFIG_PATCHES_OFF :Väljas STR_CONFIG_PATCHES_ON :Sees @@ -1147,6 +1147,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Mootorsõidukite järjekorrad (koos mahueffektidega): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Keri vaadet, kui hiir on viidud ekraani serva: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Luba kohalikule omavalitsusele altkäemaksu maksmine: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Luba eksklusiivseid veoõiguseid osta: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Luba teistele ettevõtetele raha saata: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Luba suvalise kujuga jaamad: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Uus trassi otsimise algoritm(NPF asendab NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Raskete rongide simuleerimiseks kasutatav raskuse korrutaja: {ORANGE}{STRING} @@ -1188,7 +1190,7 @@ STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE :Päevapidi STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Kõrguse level kui kõrgele lapik kaart läheb: {ORANGE}{STRING} -STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Suurim jaama ala: {ORANGE}{STRING} {RED}Hoiatus: kõrged seaded aeglustavad mängu +STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Suurim jaama ala: {ORANGE}{STRING} {RED}Hoiatus: kõrged seadistused aeglustavad mängu STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Hoolda maandumisplatsidel ise helikoptereid: {ORANGE}{STRING} STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Liida maastikuriba raudtee/tee/vee/lennujaamade tööriistaribaga: {ORANGE}{STRING} STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Kui kerid hiirega, liiguta vaade vastassuunda: {ORANGE}{STRING} @@ -1287,6 +1289,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Topeltkiirusel kasvavaid linnu: {ORANGE}1 iga {STRING} linna kohta STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Topeltkiirusel kasvavaid linnu: {ORANGE}puudub STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Algne linna suuruse kordaja: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Eemalda teedeehituse ajal esinevad tarbetud elemendid STR_CONFIG_PATCHES_GUI :{BLACK}Välimus STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Ehitamine @@ -3144,9 +3147,9 @@ STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Selle ettevõtte kogulaen STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Kokku punkte võimalikest punktidest -STR_NEWGRF_SETTINGS_BUTTON :{BLACK}NewGRF seaded +STR_NEWGRF_SETTINGS_BUTTON :{BLACK}NewGRF seadistused STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Uue graafika sätted -STR_NEWGRF_APPLY_CHANGES :{BLACK}Kinnita sätted +STR_NEWGRF_APPLY_CHANGES :{BLACK}Rakenda muudatused STR_NEWGRF_SET_PARAMETERS :{BLACK}Vali parameetrid STR_NEWGRF_TIP :{BLACK}Nimekiri kõikidest uue graafika sätted mida oled installeerinud. Vajuta komplektile et vahetada sätteid STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Sa ei ole installeerinud ühtegi uue graafika komplekti! Vaata õpetust et vaadata juhendit uue graafika installeerimisek diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/french.txt --- a/src/lang/french.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/french.txt Sat Oct 20 10:42:28 2007 +0000 @@ -861,6 +861,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financer une nouvelle industrie STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...peut seulement être construit en ville STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...peut seulement être construit en forêt tropicale STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...peut seulement être construit dans les endroits désertiques @@ -1048,6 +1049,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Mise en file Véhicules Routiers (+ effets quantiques): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Défiler la vue horizontalement avec le pointeur: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Permettre la corruption de la municipalité: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Autoriser l'achat des droits de transports exclusifs: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Autoriser l'envoi d'argent aux autres compagnies: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Gares non uniformes: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nouvelle recherche de chemin global (NPF, écrase NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Multiplier le poid pour les trains fret (simule des trains lourds): {ORANGE}{STRING} @@ -1188,6 +1191,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proportion des villes qui deviendront des métropoles: {ORANGE}1 sur {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proportion des villes qui deviendront des métropoles: {ORANGE}Aucune STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Multiplicateur de taille de ville initial: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Retirer les éléments absurdes pendant la reconstruction des routes STR_CONFIG_PATCHES_GUI :{BLACK}Interface STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construction @@ -2018,6 +2022,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Vous devez d'abord démolir le tunnel STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Vous devez d'abord démolir le pont STR_5008_CANNOT_START_AND_END_ON :{WHITE}Impossible de commencer et de terminer au même endroit +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Les extrémités du pont ne sont pas au même niveau +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Le pont est trop bas pour le terrain STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Le début et la fin doivent être alignés STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Le site pour l'entrée du tunnel ne convient pas STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2778,6 +2784,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nouv{G eau el elle} {STRING} disponible! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Impossible de vendre le véhicule détruit... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossible d'affecter un horaire au véhicule... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Les véhicules ne peuvent attendre qu'aux stations. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ce véhicule ne s'arrête pas à cette station. @@ -3381,3 +3389,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospecter STR_BUILD_NEW_INDUSTRY :{BLACK}Construire STR_INDUSTRY_SELECTION_HINT :{BLACK}Choisissez l'industrie appropriée dans cette liste + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avancé +STR_FACE_ADVANCED_TIP :{BLACK}Sélection avancée du visage. +STR_FACE_SIMPLE :{BLACK}Simple +STR_FACE_SIMPLE_TIP :{BLACK}Sélection simple du visage. +STR_FACE_LOAD :{BLACK}Charger +STR_FACE_LOAD_TIP :{BLACK}Charger visage favori +STR_FACE_LOAD_DONE :{WHITE}Votre visage favori a été chargé depuis le fichier de configuration d'OpenTTD. +STR_FACE_FACECODE :{BLACK}No. de visage +STR_FACE_FACECODE_TIP :{BLACK}Voir et/ou définir le numéro de visage +STR_FACE_FACECODE_CAPTION :{WHITE}Voir et/ou définir le numéro de visage +STR_FACE_FACECODE_SET :{WHITE}Le nouveau numéro de visage a été défini. +STR_FACE_FACECODE_ERR :{WHITE}Impossibe de définir le numéro de visage - doit être un nombre entre 0 et 4.294.967.295! +STR_FACE_SAVE :{BLACK}Enregistrer +STR_FACE_SAVE_TIP :{BLACK}Enregistrer visage favori +STR_FACE_SAVE_DONE :{WHITE}Ce visage sera enregistré comme favori dans le fichier de configuration d'OpenTTD. +STR_FACE_EUROPEAN :{BLACK}Européen +STR_FACE_SELECT_EUROPEAN :{BLACK}Choisir les visages européens +STR_FACE_AFRICAN :{BLACK}Africain +STR_FACE_SELECT_AFRICAN :{BLACK}Choisir les visages africains +STR_FACE_YES :Oui +STR_FACE_NO :Non +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Activer la moustache ou la boucle d'oreille +STR_FACE_HAIR :Cheveux: +STR_FACE_HAIR_TIP :{BLACK}Modifier les cheveux +STR_FACE_EYEBROWS :Yeux: +STR_FACE_EYEBROWS_TIP :{BLACK}Modifier les yeux +STR_FACE_EYECOLOUR :Couleur des yeux: +STR_FACE_EYECOLOUR_TIP :{BLACK}Modifier la couleur des yeux +STR_FACE_GLASSES :Lunettes: +STR_FACE_GLASSES_TIP :{BLACK}Activer les lunettes +STR_FACE_GLASSES_TIP_2 :{BLACK}Modifier les lunettes +STR_FACE_NOSE :Nez: +STR_FACE_NOSE_TIP :{BLACK}Modifier le nez +STR_FACE_LIPS :Lèvres: +STR_FACE_MOUSTACHE :Moustache: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Modifier les lèvres ou la moustache +STR_FACE_CHIN :Menton: +STR_FACE_CHIN_TIP :{BLACK}Modifier le menton +STR_FACE_JACKET :Veste: +STR_FACE_JACKET_TIP :{BLACK}Modifier la veste +STR_FACE_COLLAR :Col: +STR_FACE_COLLAR_TIP :{BLACK}Modifier le col +STR_FACE_TIE :Cravate: +STR_FACE_EARRING :Boucle d'oreille: +STR_FACE_TIE_EARRING_TIP :{BLACK}Modifier la cravate ou la boucle d'oreille +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/hungarian.txt --- a/src/lang/hungarian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/hungarian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -926,6 +926,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Új gazdasági épület STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...csak városban építhető STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...csak esőerdőben építhető STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...csak sivatagban építhető @@ -1113,6 +1114,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Közúti járművek sorbanállása (quantum effektektus): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Ablakmozgatás, ha az egér a képernyő szélén van: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Önkormányzatok lefizethetősége: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Lehessen exkluzív szállítási jogot venni: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Lehessen más vállalatoknak pénzt küldeni: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Különböző vágánytípusok engedélyezése egy állomáson: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Új útvonalkereső (NPF, felülbírálja az NTP-t): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Tömegszorzó tehervonatoknak (szimulációs célból): {ORANGE}{STRING} @@ -1253,6 +1256,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Dupla gyorsan növekvő városok aránya: {ORANGE}{STRING} városból 1 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Dupla gyorsan növekvő városok aránya: {ORANGE}Nincsennek STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Kezdeti városméret-szorzó: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Abszurd útrészletek útépítés közbeni eltávolítása STR_CONFIG_PATCHES_GUI :{BLACK}Megjelenítés STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Építkezés @@ -2120,6 +2124,7 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Előbb le kell rombolnod az alagutat STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Előbb le kell rombolnod a hidat STR_5008_CANNOT_START_AND_END_ON :{WHITE}Nem kezdődhet és végződhet ugyanott +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}A híd túl alacsony a terepre STR_500A_START_AND_END_MUST_BE_IN :{WHITE}A kezdetének és a végének egy vonalban kell lennie STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Nem alkalmas a hely alagút bejáratának STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2880,6 +2885,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Új {STRING} elérhető! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}A megsemmisült jármű nem eladható... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}A jármű nem időzíthető STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}A járművek csak az állomáson várakozhatnak STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ez a jármű nem áll meg ezen az állomáson @@ -3483,3 +3490,33 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Támogat STR_BUILD_NEW_INDUSTRY :{BLACK}Épít STR_INDUSTRY_SELECTION_HINT :{BLACK}Válaszd ki a megfelelő ipartípust a listából + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Fejlett +STR_FACE_ADVANCED_TIP :{BLACK}Fejlett arcválasztó. +STR_FACE_SIMPLE :{BLACK}Egyszerű +STR_FACE_SIMPLE_TIP :{BLACK}Egyszerű arcválasztó. +STR_FACE_LOAD :{BLACK}Betölt +STR_FACE_LOAD_TIP :{BLACK}Kedvenc arcd betöltése +STR_FACE_LOAD_DONE :{WHITE}A kedvenc arcod az OpenTTD konfig-fájlból be lett töltve. +STR_FACE_FACECODE :{BLACK}Játékos arc szám +STR_FACE_SAVE :{BLACK}Mentés +STR_FACE_SAVE_TIP :{BLACK}Kedvenc arc elmentése +STR_FACE_SAVE_DONE :{WHITE}Ez az arc mint a kedvenc arcod fog az OpenTTD konfig-fájlba elmentődni. +STR_FACE_EUROPEAN :{BLACK}Európai +STR_FACE_AFRICAN :{BLACK}Afrikai +STR_FACE_YES :Igen +STR_FACE_NO :Nem +STR_FACE_HAIR :Haj: +STR_FACE_HAIR_TIP :{BLACK}Haj váltása +STR_FACE_GLASSES :Szemüveg: +STR_FACE_GLASSES_TIP :{BLACK}Szemüveg engedélyezése +STR_FACE_GLASSES_TIP_2 :{BLACK}Szemüveg váltása +STR_FACE_NOSE :Orr: +STR_FACE_NOSE_TIP :{BLACK}Orr váltása +STR_FACE_LIPS :Ajkak: +STR_FACE_MOUSTACHE :Bajusz: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Ajkak vagy bajusz váltása +STR_FACE_CHIN :Ál: +STR_FACE_CHIN_TIP :{BLACK}Ál váltása +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/italian.txt --- a/src/lang/italian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/italian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -862,6 +862,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Finanzia nuova industria STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...può essere costruita solo in città STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...può essere costruita solo nella foresta pluviale STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...può essere costruita solo in aree desertiche @@ -1049,6 +1050,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Accodamento automezzi fuori da una stazione occupata: {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Scorri la visuale quando il mouse è su un bordo: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Consenti la corruzione dell'autorità locale: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Consenti l'acquisto dell'esclusiva sui trasporti: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Consenti l'invio di denaro ad altre compagnie: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Stazioni non uniformi: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nuovo pathfinding globale (NPF, sovrascrive NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Moltiplicatore di peso per simulare treni merci pesanti: {ORANGE}{STRING} @@ -1189,6 +1192,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Città che diventeranno metropoli: {ORANGE}1 su {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Città che diventeranno metropoli: {ORANGE}Nessuna STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Moltiplicatore iniziale dimensioni metropoli: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Rimuovi segmenti isolati con la ricostruzione delle strade cittadine STR_CONFIG_PATCHES_GUI :{BLACK}Interfaccia STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Costruzione @@ -2019,6 +2023,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Bisogna demolire il tunnel prima STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Bisogna demolire il ponte prima STR_5008_CANNOT_START_AND_END_ON :{WHITE}Impossibile partire e finire nello stesso punto +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Le estremità del ponte non sono allo stesso livello +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Il ponte è troppo basso per il terreno STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Inizio e fine devono essere allineati STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Sito inadatto per l'entrata del tunnel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2779,6 +2785,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuov{G o a} {STRING} disponibile! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Impossibile vendere un veicolo distrutto... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossibile dare un orario al veicolo... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}I veicoli possono attendere solo alle stazioni. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Il veicolo non ferma a questa stazione. @@ -3259,9 +3267,9 @@ STR_WORLD_GENERATION :{BLACK}Generazione mondo STR_TREE_GENERATION :{BLACK}Generazione alberi STR_UNMOVABLE_GENERATION :{BLACK}Generazione oggetti inamovibili -STR_CLEARING_TILES :{BLACK}Generazione di aree brulle e rocciose +STR_CLEARING_TILES :{BLACK}Generazione aree brulle e rocciose STR_SETTINGUP_GAME :{BLACK}Impostazione partita -STR_PREPARING_TILELOOP :{BLACK}Ciclo generazione riquadri del terreno +STR_PREPARING_TILELOOP :{BLACK}Generazione riquadri del terreno STR_PREPARING_GAME :{BLACK}Preparazione della partita STR_DIFFICULTY_TO_CUSTOM :{WHITE}Questa azione ha cambiato il livello di difficolta in 'Personalizzata' STR_SE_FLAT_WORLD :{WHITE}Pianeggiante @@ -3382,3 +3390,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Esegui prospezione STR_BUILD_NEW_INDUSTRY :{BLACK}Costruisci STR_INDUSTRY_SELECTION_HINT :{BLACK}Selezionare l'industria appropriata dalla lista + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avanzata +STR_FACE_ADVANCED_TIP :{BLACK}Selezione avanzata della faccia +STR_FACE_SIMPLE :{BLACK}Semplice +STR_FACE_SIMPLE_TIP :{BLACK}Selezione semplice della faccia +STR_FACE_LOAD :{BLACK}Carica +STR_FACE_LOAD_TIP :{BLACK}Carica la faccia preferita +STR_FACE_LOAD_DONE :{WHITE}La faccia preferita è stata caricata dal file di configurazione di OpenTTD +STR_FACE_FACECODE :{BLACK}Numero faccia +STR_FACE_FACECODE_TIP :{BLACK}Visualizza e/o imposta il numero della faccia del giocatore +STR_FACE_FACECODE_CAPTION :{WHITE}Visualizza e/o imposta il numero della faccia +STR_FACE_FACECODE_SET :{WHITE}Nuovo codice numerico faccia impostato +STR_FACE_FACECODE_ERR :{WHITE}Impossibile impostare il numero della faccia - deve essere un numero fra 0 e 4.294.967.295! +STR_FACE_SAVE :{BLACK}Salva +STR_FACE_SAVE_TIP :{BLACK}Salva come faccia preferita +STR_FACE_SAVE_DONE :{WHITE}La faccia corrente è stata salvata come preferita nel file di configurazione di OpenTTD +STR_FACE_EUROPEAN :{BLACK}Europea +STR_FACE_SELECT_EUROPEAN :{BLACK}Seleziona le facce europee +STR_FACE_AFRICAN :{BLACK}Africana +STR_FACE_SELECT_AFRICAN :{BLACK}Seleziona le facce africane +STR_FACE_YES :Sì +STR_FACE_NO :No +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Abilita i baffi o l'orecchino +STR_FACE_HAIR :Capelli: +STR_FACE_HAIR_TIP :{BLACK}Cambia i capelli +STR_FACE_EYEBROWS :Sopracciglia: +STR_FACE_EYEBROWS_TIP :{BLACK}Cambia le sopracciglia +STR_FACE_EYECOLOUR :Colore occhi: +STR_FACE_EYECOLOUR_TIP :{BLACK}Cambia il colore degli occhi +STR_FACE_GLASSES :Occhiali: +STR_FACE_GLASSES_TIP :{BLACK}Abilita gli occhiali +STR_FACE_GLASSES_TIP_2 :{BLACK}Cambia gli occhiali +STR_FACE_NOSE :Naso: +STR_FACE_NOSE_TIP :{BLACK}Cambia il naso +STR_FACE_LIPS :Labbra: +STR_FACE_MOUSTACHE :Baffi: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Cambia le labbra o i baffi +STR_FACE_CHIN :Mento: +STR_FACE_CHIN_TIP :{BLACK}Cambia il mento +STR_FACE_JACKET :Giacca: +STR_FACE_JACKET_TIP :{BLACK}Cambia la giacca +STR_FACE_COLLAR :Colletto: +STR_FACE_COLLAR_TIP :{BLACK}Cambia il colletto +STR_FACE_TIE :Cravatta: +STR_FACE_EARRING :Orecchino: +STR_FACE_TIE_EARRING_TIP :{BLACK}Cambia la cravatta o l'orecchino +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/norwegian_bokmal.txt --- a/src/lang/norwegian_bokmal.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/norwegian_bokmal.txt Sat Oct 20 10:42:28 2007 +0000 @@ -2,6 +2,7 @@ ##ownname Norsk, bokmål ##isocode nb_NO ##plural 0 +##gender masculinum neutrium femininum # @@ -860,6 +861,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Finansier ny industri STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan kun bygges i byer STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan kun bygges i regnskogområder STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan kun bygges i ørkenområder @@ -926,7 +928,7 @@ STR_CURR_SIT :Slovensk tolar (SIT) STR_CURR_SEK :Svensk krone (SEK) STR_CURR_YTL :Tyrkiske lire (YTL) -STR_CURR_SKK :Slovakisk Koruna (SKK) +STR_CURR_SKK :Slovakisk koruna (SKK) STR_CURR_BRR :Brasiliansk Real (BRL) STR_CURR_CUSTOM :Egendefinert... @@ -1020,12 +1022,13 @@ STR_CONFIG_PATCHES_ON :På STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Vis kjøretøyets hastighet på statuslinja: {ORANGE}{STRING} STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Tillat bygging på skråninger og i vannkanten: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Tillat landskapsendring under bygninger, spor, etc.: {ORANGE}{STRING} STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Mer realistisk størrelse på oppfangingsområder: {ORANGE}{STRING} STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Tillat riving av industri, mer vei, etc: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Tillat bygging av veldig lange tog : {ORANGE}{STRING} STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Realistisk akslerasjon for tog: {ORANGE}{STRING} -STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Forby tog og skip mot å gjøre 90-graders svinger: {ORANGE}{STRING} {LTBLUE} (trenger NGR) -STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Slå sammen stasjoner som blir bygget på siden av hverandre: {ORANGE}{STRING} +STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Forby tog og skip å gjøre 90-graders svinger: {ORANGE}{STRING} {LTBLUE} (trenger NGR) +STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Slå sammen stasjoner som bygges ved siden av hverandre: {ORANGE}{STRING} STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Forlat stasjonen når én type varevogn er full, hvis 'full last' er på: {ORANGE}{STRING} STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Bruk forbedret lastingsalgoritme: {ORANGE}{STRING} STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Last kjøretøy gradvis: {ORANGE}{STRING} @@ -1033,6 +1036,10 @@ STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Lever varer til en stasjon bare når varen trengs: {ORANGE}{STRING} STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Tillat bygging av veldig lange broer: {ORANGE}{STRING} STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Tillat 'gå til jernbanestall'-ordre: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Konstruksjonsmetode for manuell primærindustri: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ingen +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :som andre næringer +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospekterer STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Tillat flere like industrier i samme by: {ORANGE}{STRING} STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Industrier av samme type kan bygges nær hverandre: {ORANGE}{STRING} STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Vis alltid lang dato på statuslinjen: {ORANGE}{STRING} @@ -1042,7 +1049,9 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Kjøretøykø (med kvantumseffekter): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Flytt på bildet hvis pilen er nær ytterkantene av skjermen: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Tillat bestikkelser av bystyret: {ORANGE}{STRING} -STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Ikke-ensartede stasjoner: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Tillat kjøp av eksklusive transportrettigheter: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Tillat pengeoverføring til andre firmaer: {ORANGE}{STRING} +STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Uensartede stasjoner: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Ny global rutesøking (NGR, overstyrer NTK): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Vektmultiplikator for frakt til å simulere tunge tog: {ORANGE}{STRING} STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Tillat gjennomkjøring av stoppesteder på veier som er eid av byene: {ORANGE}{STRING} @@ -1061,16 +1070,16 @@ STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Autoforny når kjøretøy er {ORANGE}{STRING}{LTBLUE} måneder før/etter maks alder STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Autoforny minimum penger trengst for fornying: {ORANGE}{STRING} STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Varighet til feilmelding: {ORANGE}{STRING} -STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Vis byers befolkning i tittel: {ORANGE}{STRING} +STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Vis byers folketall i tittel: {ORANGE}{STRING} STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Usynlige trær (med gjennomsiktige bygninger): {ORANGE}{STRING} STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Landskapsgenerator: {ORANGE}{STRING} STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Orginal STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis -STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maksimum avstand fra kartkant for oljerafinerier {ORANGE}{STRING} +STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maks. avstand fra kartkant for oljeraffinerier: {ORANGE}{STRING} STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Snøhøyde: {ORANGE}{STRING} STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Ulendthet på terreng (kun TerraGenesis): {ORANGE}{STRING} -STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Veldig levnt +STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Veldig jevnt STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH :Jevnt STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Ulendt STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Veldig ulendt @@ -1084,10 +1093,11 @@ STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Høyden et flatt scenariokart får: {ORANGE}{STRING} STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maks stasjonspedning: {ORANGE}{STRING} {RED}Advarsel: Høy instilling gir tregere spill -STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Utfør vedlikehold på helikopter automatisk på helikopterlandingsteder: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automatisk vedlikehold ved helikopterlandingsteder: {ORANGE}{STRING} STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Koble landskapsverktøylinja til tog-/vei-/vann- og flyplassverktøylinjene: {ORANGE}{STRING} STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Ved rulling med musen, flytt synsvinkelen i den motsatte retning: {ORANGE}{STRING} -STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Vis et målings-verktøytips når forskjellige "build-tools" brukes: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Myk scrolling i ekstravindu: {ORANGE}{STRING} +STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Vis målingsverktøy ved bruk av byggingsverktøy: {ORANGE}{STRING} STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Vis firmaovertakelser: {ORANGE}{STRING} STR_CONFIG_PATCHES_LIVERIES_NONE :Ingen STR_CONFIG_PATCHES_LIVERIES_OWN :Eget firma @@ -1098,9 +1108,33 @@ STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Rull kartet STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Av STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rullehjulets hastighet på kartet: {ORANGE}{STRING} + +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Høyreklikkemulasjon: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando-klikk +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl-klikk +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Av + STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pause automatisk ved start av nytt spill: {ORANGE}{STRING} STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Bruk den avanserte kjøretøyslisten: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Av +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eget firma +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle firmaer +STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Bruk lastindikatorer: {ORANGE}{STRING} +STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Av +STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eget firma +STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alle firmaer +STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Slå på tidstabeller for kjøretøyer: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Vis tidstabell i antall tikk heller enn i dager: {ORANGE}{STRING} +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard jernbanetype: {ORANGE}{STRING} +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Vanlig jernbane +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrisk jernbane +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Énskinnebane +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Først tilgjengelig +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Sist tilgjengelig +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Mest brukt +STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Vis byggingsverktøy når det ikke er noen tilgjengelige kjøretøy: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maks antall tog per spiller: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maks antall kjøretøy per spiller: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Maks antall fly per spiller: {ORANGE}{STRING} @@ -1111,8 +1145,8 @@ STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}Hindre datamaskinen i å bygge fly: {ORANGE}{STRING} STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}Hindre datamaskinen i å bygge skip: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Aktiver ny AI (alfa): {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER :{LTBLUE}Tillat AI-spillere i flerspillermodus (eksperimentelt): {ORANGE}{STRING} +STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Aktiver ny kunstig intelligens (alfa): {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER :{LTBLUE}Tillat ny kunstig intelligens i flerspillermodus (eksperimentelt): {ORANGE}{STRING} STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Standard vedlikeholdsintervall for tog: {ORANGE}{STRING} dager STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Standard vedlikeholdsintervall for tog: {ORANGE}deaktivert @@ -1130,15 +1164,17 @@ STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Start spillet i år: {ORANGE}{STRING} STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Spillet slutter {ORANGE}{STRING} STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Jevn økonomi (flere mindre endringer) -STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Tillat kjøping av aksjer i andre selskaper -STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Ved opptrekking plasser signal hver: {ORANGE}{STRING} rute(r) +STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Tillat aksjekjøp i andre selskaper +STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Ved dra-og-slipp, plasser signal på hver {ORANGE}{STRING}. rute STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Bygg signalsystem med mast automatisk før: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Byutlegget «ingen flere veier» er ikke gyldig i scenariobyggeren STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Velg byvei-layout: {ORANGE}{STRING} STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :ingen flere veier STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :default STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :bedre veier STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2x2 rutenett +STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3x3-rutenett STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Plassering av hovedverktøylinje: {ORANGE}{STRING} STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Venstre @@ -1155,6 +1191,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Andel tettsteder som kommer til å bli byer: {ORANGE}1 av {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Andel tettsted som kommer til å bli byer: {ORANGE}Ingen STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Innledende bystørrelse multiplikator: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Fjern absurde veielementer under veikonstruksjon STR_CONFIG_PATCHES_GUI :{BLACK}Grensesnitt STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Konstruksjon @@ -1243,6 +1280,7 @@ STR_BUOY_IS_IN_USE :{WHITE}...bøye er i bruk! +STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne del av stasjonen... STR_CANT_CONVERT_RAIL :{WHITE}Kan ikke konvertere jernbanetype her... @@ -1293,7 +1331,7 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Velg hvilken last lokomotivet skal ta STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Bygg om lokomotivet til å frakte den valgte varetypen STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Kan ikke bygge om lokomotiv... -STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Vedlikeholdsintervaller er i prosent: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Vedlikeholdsintervaller i prosent: {ORANGE}{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Endre produksjon TEMP_AI_IN_PROGRESS :{WHITE}Velkommen til denne nye AI, under konstruksjon. Du kan vente deg problemer. Når du finner ett problem, lag ett skjermbilde av det og post det i forumet. Mor deg! @@ -1353,18 +1391,23 @@ STR_NETWORK_PASSWORD_TIP :{BLACK}Beskytt ditt spill med et passord hvis du ikke vil at hvem som helst skal bli med på det STR_NETWORK_SELECT_MAP :{BLACK}Velg et kart: STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvilket kart vil du spille? -STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antall tillatte klienter -STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Velg maksimalt antall klienter. Alle plassene trenger ikke bli tatt. +STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING} STR_NETWORK_LAN :LAN STR_NETWORK_INTERNET :Internett STR_NETWORK_LAN_INTERNET :LAN / Internett STR_NETWORK_INTERNET_ADVERTISE :Internett (annonser) +STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" er} +STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antall tillatte klienter +STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Velg maksimalt antall klienter. Alle plassene trenger ikke bli tatt. +STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} firma{P "" er} STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. antall firmaer: STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begrens tjeneren til et bestemt antall firmaer +STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} tilskuer{P "" e} STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks antall tilskuere STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begrens tjeneren til et bestemt antall tilskuere STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk snakket på tjeneren: STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spillere skal kunne vite hvilket språk man snakker på denne tjeneren. +STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} STR_NETWORK_START_GAME :{BLACK}Start spill STR_NETWORK_START_GAME_TIP :{BLACK}Start et nytt nettverksspill fra en tilfeldig bane, eller scenario STR_NETWORK_LOAD_GAME :{BLACK}Last spill @@ -1375,12 +1418,20 @@ STR_NETWORK_LANG_ENGLISH :Engelsk STR_NETWORK_LANG_GERMAN :Tysk STR_NETWORK_LANG_FRENCH :Fransk +STR_NETWORK_LANG_BRAZILIAN :Brasiliansk +STR_NETWORK_LANG_BULGARIAN :Bulgarsk +STR_NETWORK_LANG_CHINESE :Kinesisk +STR_NETWORK_LANG_CZECH :Tsjekkisk +STR_NETWORK_LANG_DANISH :Dansk +STR_NETWORK_LANG_DUTCH :Nederlandsk +STR_NETWORK_LANG_ESPERANTO :Esperanto STR_NETWORK_LANG_FINNISH :Finsk STR_NETWORK_LANG_HUNGARIAN :Ungarsk STR_NETWORK_LANG_ICELANDIC :Islandsk STR_NETWORK_LANG_ITALIAN :Italiensk STR_NETWORK_LANG_JAPANESE :Japanesisk STR_NETWORK_LANG_KOREAN :Koreansk +STR_NETWORK_LANG_LITHUANIAN :Litauisk STR_NETWORK_LANG_NORWEGIAN :Norsk STR_NETWORK_LANG_POLISH :Polsk STR_NETWORK_LANG_PORTUGUESE :Portugisisk @@ -1584,9 +1635,13 @@ STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med normale signaler STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbanespor med for-signaler STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbanespor med forlat-signaler +STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombosignaler STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Togbane med normale og pre-signaler STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Togbane med normale og utgangs-signaler +STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbanespor med normale og kombosignaler STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Togbane med pre- og utgangs-signaler +STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med pre- og kombosignaler +STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med utgangs- og kombosignaler STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Må fjerne togbanestasjon først @@ -1595,22 +1650,39 @@ STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Må fjerne vei først STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Veiarbeid i gang STR_1802_ROAD_CONSTRUCTION :{WHITE}Bygg vei +STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Trikkekonstruksjon STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Velg brotype +STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... enveiskjørte veier kan ikke ha kryss STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan ikke bygge vei her +STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan ikke bygge trikkespor her... STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan ikke fjerne vei herfra... +STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan ikke fjerne trikkespor herfra... STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Retning for garasje +STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Trikkestallretning STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kan ikke bygge garasje her... -STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kan ikke bygge busstatsjon... +STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Kan ikke bygge trikkestall her... +STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kan ikke bygge busstasjon... STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan ikke bygge lasteterminal... +STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan ikke bygge trikkestasjon for passasjerer... +STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan ikke bygge trikkestasjon for frakt... STR_180A_ROAD_CONSTRUCTION :Bygg vei +STR_180A_TRAMWAY_CONSTRUCTION :Trikkesporkonstruksjon STR_180B_BUILD_ROAD_SECTION :{BLACK}Bygg vei +STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Bygg trikkestasjon STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg garasje (trengs for bygging og vedlikehold av kjøretøy) +STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg trikkevognstall (for kjøp og vedlikehold av kjøretøy) STR_180D_BUILD_BUS_STATION :{BLACK}Bygg bussstasjon STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Bygg lasteterminal +STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg trikkestasjon for passasjerer +STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Bygg trikkestasjon for frakt STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Bygg bro +STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Bygg bro for trikkespor STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Bygg tunnel +STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Bygg tunnel for trikkespor STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Velg mellom bygging/fjerning for veibygging +STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Velg mellom bygging/fjerning for trikkesporkonstruksjon STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Velg garasjens retning +STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Velg trikkestallens retning STR_1814_ROAD :Vei STR_1815_ROAD_WITH_STREETLIGHTS :Vei med gatelykter STR_1816_TREE_LINED_ROAD :Aveny @@ -1618,6 +1690,8 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Jernbaneovergang STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan ikke fjerne busstasjonen... STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan ikke fjerne godsstasjonen... +STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestasjon for passasjerer... +STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan ikke fjerne trikkestasjon for frakt... ##id 0x2000 STR_2000_TOWNS :{WHITE}Byer @@ -1660,16 +1734,16 @@ STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: STR_2024 :{YELLOW}{COMPANY} {COMPANYNUM}: {ORANGE}{STRING} STR_2025_SUBSIDIES :{WHITE}Subsidier -STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tilbudte subsidier: +STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subsidietilbud: STR_2027_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING} STR_2028_BY :{YELLOW} (innen {DATE_SHORT}) STR_202A_NONE :{ORANGE}Ingen -STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}Tjenester som allerede er subsidiert: +STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}Tjenester som allerede subsidieres: STR_202C_FROM_TO :{ORANGE}{STRING} fra {STATION} til {STATION}{YELLOW} ({COMPANY} STR_202D_UNTIL :{YELLOW}, inntil {DATE_SHORT}) -STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Tilbud om subsidie har gått ut:{}{}{STRING} fra {STRING} til {STRING} vil ikke lenger være subsidiert. -STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Subsidie trukket tilbake:{}{}Transport av {STRING} fra {STATION} til {STATION} er ikke lenger subsidiert. -STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Subsidie-tilbud:{}{}Første transport av {STRING} fra {STRING} til {STRING} vil være subsidiert i et år av bystyret! +STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Subsidietilbud har gått ut:{}{}{STRING} fra {STRING} til {STRING} subsidieres ikke lenger. +STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Subsidie trukket tilbake:{}{}Frakt av {STRING} fra {STATION} til {STATION} subsidieres ikke lenger. +STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Subsidietilbud:{}{}Første frakt av {STRING} fra {STRING} til {STRING} vil subsidieres i et år av bystyret! STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsidie gitt til {COMPANY}!{}{}Transport av {STRING} fra {STATION} til {STATION} vil gi 50% mer inntekt i løpet av ett år! STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsidie gitt til {COMPANY}!{}{}Transport av {STRING} fra {STATION} til {STATION} vil gi dobbelt så mye inntekt i løpet av et år! STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsidie gitt til {COMPANY}!{}{}Transport av {STRING} fra {STATION} til {STATION} vil gi tippelt så mye inntekt i løpet av et år! @@ -1782,8 +1856,12 @@ STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} godtar nå {STRING} og {STRING} STR_3042_BUS_STATION_ORIENTATION :{WHITE}Retning på bussterminal STR_3043_TRUCK_STATION_ORIENT :{WHITE}Retning på lasteterminal +STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Retning for passasjertrikk +STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Retning for frakttrikk STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Må rive bussterminal først STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Må rive lasteterminal først +STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Må fjerne trikkestasjon for passasjerer først +STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Må fjerne trikkestasjon for frakt først STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stasjoner STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES} STR_304A_NONE :{YELLOW}- Ingen - @@ -1795,6 +1873,8 @@ STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Velg hvor lang stasjonen skal være STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Velg retning på bussterminal STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Velg retning på lasteterminal +STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Velg retning på trikkestasjon for passasjerer +STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Velg retning på trikkestasjon for frakt STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Sentrer bildet på stasjonen STR_3054_SHOW_STATION_RATINGS :{BLACK}Vis stasjonsvurdering STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Endre navnet til stasjonen @@ -1816,7 +1896,7 @@ STR_3069_BUOY :Bøye STR_306A_BUOY_IN_THE_WAY :{WHITE}...bøyen er i veien STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...stasjonen er spredd for mye -STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...ikke-ensartede stasjoner deaktivert +STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...uensartede stasjoner deaktivert STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Hold nede CTRL for å velge mer en en ting STR_UNDEFINED :(udefinert streng) @@ -1832,6 +1912,7 @@ STR_3805_COAST_OR_RIVERBANK :Kyst eller elvebredd STR_3806_SHIP_DEPOT :Skipsdepot STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Kan ikke bygge på vann +STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Må fjerne kanal først ##id 0x4000 STR_4000_SAVE_GAME :{WHITE}Lagre spill @@ -1844,6 +1925,9 @@ STR_4007_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes{}{STRING} STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil STR_4009_GAME_LOAD_FAILED :{WHITE}Feil ved fremhenting av spill{}{STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt lagret spill - {STRING} +STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er lagret i en nyere versjon STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Kan ikke lese filen STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Kan ikke skrive til filen STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste over disker, mapper og lagrede spill @@ -1902,6 +1986,13 @@ STR_4829_REQUIRES :{BLACK}Trenger: {YELLOW}{STRING}, {STRING}, {STRING} ############ range for requires ends +############ range for produces starts +STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Gods som venter på behandling: +STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO}{BLACK} +STR_4827_PRODUCES :{BLACK}Produserer: {YELLOW}{STRING} +STR_4828_PRODUCES :{BLACK}Produserer: {YELLOW}{STRING}, {STRING} +############ range for produces ends + STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Produksjon forrige måned: STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} ({COMMA} % transportert) STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Sentrer bildet på industriområdet @@ -1910,9 +2001,9 @@ STR_482F_COST :{BLACK}Koster: {YELLOW}{CURRENCY} STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kan ikke bygge denne typen industri her... STR_4831_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...skog kan bare plantes over snøgrensen -STR_4832_ANNOUNCES_IMMINENT_CLOSURE :{BLACK}{BIGFONT}{INDUSTRY} offentliggjør umiddelbar nedleggelse! -STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}Leveringsproblemer forårsaker {INDUSTRY} til å offentliggjøre umiddelbar nedleggelse! -STR_4834_LACK_OF_NEARBY_TREES_CAUSES :{BLACK}{BIGFONT}Mangel på trær i nærheten får {INDUSTRY} til å offentliggjøre umiddelbar nedleggelse! +STR_4832_ANNOUNCES_IMMINENT_CLOSURE :{BLACK}{BIGFONT}{INDUSTRY} legger ned! +STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}{INDUSTRY} legger ned etter leveringsproblemer +STR_4834_LACK_OF_NEARBY_TREES_CAUSES :{BLACK}{BIGFONT}{INDUSTRY} legger ned grunnet tremangel STR_4835_INCREASES_PRODUCTION :{BLACK}{BIGFONT}{INDUSTRY} øker produksjonen! STR_4836_NEW_COAL_SEAM_FOUND_AT :{BLACK}{BIGFONT}Ny kullåre funnet i {INDUSTRY}!{}En dobling i produksjonen er ventet! STR_4837_NEW_OIL_RESERVES_FOUND :{BLACK}{BIGFONT}Nye oljereserver funnet i {INDUSTRY}!{}En dobling i produksjonen er ventet! @@ -1921,7 +2012,7 @@ STR_483A_INSECT_INFESTATION_CAUSES :{BLACK}{BIGFONT}Insektinvasjon på {INDUSTRY}!{}Produksjonen synker med 50 % STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...kan kun plasseres i nærheten av kartkanten STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}Produksjonen av {STRING} ved {INDUSTRY} øker med {COMMA} %! -STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}Produksjonen av {STRING} ved {INDUSTRY} synker med {COMMA} %! +STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}{STRING}produksjon ved {INDUSTRY} synker med {COMMA} %! ##id 0x5000 STR_5000_TRAIN_IN_TUNNEL :{WHITE}Tog i tunnelen @@ -1931,6 +2022,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Må rive tunnel først STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Må rive bro først STR_5008_CANNOT_START_AND_END_ON :{WHITE}Kan ikke starte og slutte på samme felt +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Broender er ikke på samme nivå +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Broen er for lav for terrenget STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Start og slutt må være på linje STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Feltet er upassende for tunnelinngang STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2245,6 +2338,8 @@ STR_LIVERY_HELICOPTER :Helikopter STR_LIVERY_SMALL_PLANE :Lite fly STR_LIVERY_LARGE_PLANE :Stort fly +STR_LIVERY_PASSENGER_TRAM :Passasjertrikk +STR_LIVERY_FREIGHT_TRAM :Frakttrikk STR_LIVERY_GENERAL_TIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TIP :{BLACK}Vis togfargetemaer @@ -2546,7 +2641,11 @@ STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Vedlikehold (uten å stoppe) ved {TOWN} togstall STR_TIMETABLE_GO_TO :{STRING} {STRING} +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reise (uten tidstabell) +STR_TIMETABLE_TRAVEL_FOR :Reise for {STRING} +STR_TIMETABLE_STAY_FOR :og bli værende i {STRING} STR_TIMETABLE_DAYS :{COMMA} dag{P "" s} +STR_TIMETABLE_TICKS :{COMMA} tikk STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Er på vei til {TOWN} togstall STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Er på vei til {TOWN} togstall, {VELOCITY} @@ -2590,6 +2689,7 @@ STR_REFIT_TIP :{BLACK}Velg varetypen det skal endres til. CTRL-klikk for å omgjøre. STR_REFIT_ORDER :(Bygg om til {STRING}) STR_TIMETABLE_VIEW :{BLACK}Tidstabell +STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Bytt til tidstabellvisning STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordre) STR_882A_END_OF_ORDERS :{SETX 10}- - Slutt på ordre - - STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING} @@ -2640,11 +2740,16 @@ STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Vis kapasiteten til vognene STR_8852_SHOW_TOTAL_CARGO :{BLACK}Vis en total kapasitet på togene oppdelt etter godstype STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Ordreliste - trykk på en ordre for å velge den +STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Hopp over den nåværende ordren og begynn på neste. CTRL + klikk hopper fram til valgte ordre STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Slett den valgte ordren STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Gjør den valgte ordren om til en STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Sett inn en ordre før den valgte ordren, eller i slutten av listen. STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fyll alltid kjøretøyet ved valgte stasjon STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Tøm alltid kjøretøyet ved valgte stasjon +STR_TIMETABLE_TOOLTIP :{BLACK}Tidstabell - klikk en ordre for å merke den. +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Endre varigheten for valgte ordre +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Fjern varigheten for valgte ordre +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nullstill senhetstelleren slik at kjøretøyet ankommer i tide STR_SERVICE_HINT :{BLACK}Hopp over ordren med mindre vedlikehold trengs. STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Koster: {CURRENCY} Vekt: {WEIGHT_S}{}Fart: {VELOCITY} Kraft: {POWER}{}Driftkostnader: {CURRENCY}/år{}Kapasitet: {CARGO} STR_885C_BROKEN_DOWN :{RED}Havarert @@ -2666,6 +2771,8 @@ STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Kan ikke gi tog/vogn nytt navn... STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Få den merkede ordren til å tvinge kjøretøyet til å dumpe lasten STR_886F_TRANSFER :{BLACK}Overfør +STR_CLEAR_TIME :{BLACK}Nullstill tid +STR_RESET_LATENESS :{BLACK}Nullstill senhetsteller STR_TRAIN_STOPPING :{RED}Stopper STR_TRAIN_STOPPING_VEL :{RED}Stopper, {VELOCITY} @@ -2677,13 +2784,19 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} Nå tilgjengelig! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Kan ikke selge ødelagt kjøretøy... + +STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan ikke gi kjøretøy tidstabell... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kjøretøy kan bare vente på stasjoner. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette kjøretøyet stopper ikke på denne stasjonen. STR_TIMETABLE_CHANGE_TIME :{BLACK}Skift Tid STR_TIMETABLE_STATUS_ON_TIME :Dette kjøretøyet går på tid STR_TIMETABLE_STATUS_LATE :Dette kjøretøyet er {STRING} for sent ute STR_TIMETABLE_STATUS_EARLY :Dette kjøretøyet er {STRING} for tidlig ute +STR_TIMETABLE_TOTAL_TIME :Det vil ta {STRING} å fullføre tidstabellen +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Det vil ta minst {STRING} å fullføre denne tidstabellen (tidstabell ikke fullstendig) STR_TIMETABLE_AUTOFILL :{BLACK}Fyll automatisk +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll tidstabellen automatisk med verdiene fra forrige tur ##id 0x9000 STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Kjøretøy i veien @@ -2734,6 +2847,8 @@ STR_902E_NAME_ROAD_VEHICLE :{BLACK}Navngi kjøretøy STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Innbyggerne jubler . . .{}Første buss ankommer {STATION}! STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Innbyggerne jubler . . .{}Første lastebil ankommer {STATION}! +STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Borgerne jubler . . .{}Første passasjertrikk ankommer {STATION}! +STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Borgerne jubler . . .{}Første frakttrikk ankommer {STATION}! STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Kollisjon!{}Sjåfør dør etter kollisjon med tog STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Kollisjon!{}{COMMA} dør etter kollisjon med tog STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Kan ikke snu... @@ -2983,11 +3098,11 @@ STR_NEWGRF_NOT_FOUND :{RED}Ingen passende fil funnet STR_NEWGRF_DISABLED :{RED}Deaktivert -STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Matchende fil ikke funnet(kompatibel GRF lastet) +STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Tilsvarende fil ikke funnet (kompatibel GRF lastet) -STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatible GRF(er) lastet for manglene filer -STR_NEWGRF_DISABLED_WARNING :{WHITE}Manglende GRF fil(er) har blitt avslått -STR_NEWGRF_NOT_FOUND_WARNING :{WHITE}Mangler GRF fil(er) for å kunne laste spill +STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatibel GRF lastet for manglende filer +STR_NEWGRF_DISABLED_WARNING :{WHITE}Manglende GRF-fil(er) har blitt slått av +STR_NEWGRF_NOT_FOUND_WARNING :{WHITE}Mangler GRF-fil(er) nødvendige for å laste spillet STR_CURRENCY_WINDOW :{WHITE}Vanlig valuta STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Valutakurs: {ORANGE}{CURRENCY} = £ {COMMA} @@ -3020,6 +3135,7 @@ ### depot strings STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Du er nå i ferd med å selge alle kjøretøyene i depoet. Er du sikker på at du vil dette? +STR_DEPOT_WRONG_DEPOT_TYPE :Gal stalltype STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Selg alle tog i depodet STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Selg alle kjøretøy i garasjen @@ -3136,6 +3252,8 @@ STR_START_DATE_QUERY_CAPT :{WHITE}Endre startår STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Skalaadvarsel STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Å endre kildemapstørrelsen for mye er ikke anbefalt. Fortsette generering? +STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Byutleggsadvarsel +STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Byutlegget «ingen flere veier» anbefales ikke. Fortsette generering? STR_SNOW_LINE_HEIGHT_NUM :{NUM} STR_HEIGHTMAP_NAME :{BLACK}Høydekartnavn: STR_HEIGHTMAP_SIZE :{BLACK}Størrelse: {ORANGE}{NUM} x {NUM} @@ -3208,6 +3326,7 @@ STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Skru på gjennomsiktighet for stasjoner, depoter, lokalstasjoner og skinner STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Skru på gjennomsiktighet for broer STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Skru på gjennomsiktighet for fyrtårn og antenner +STR_TRANSPARENT_LOADING_DESC :{BLACK}Velg gjennomsiktighet for lastingsindikatorer STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW} STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW} @@ -3223,26 +3342,33 @@ STR_GROUP_ALL_ROADS :Alle kjøretøyer STR_GROUP_ALL_SHIPS :Alle båter STR_GROUP_ALL_AIRCRAFTS :Alle flyfartøy +STR_GROUP_DEFAULT_TRAINS :Ugrupperte tog +STR_GROUP_DEFAULT_ROADS :Ugrupperte biler +STR_GROUP_DEFAULT_SHIPS :Ugrupperte skip +STR_GROUP_DEFAULT_AIRCRAFTS :Ugrupperte fly STR_GROUP_TINY_NUM :{TINYFONT}{COMMA} STR_GROUP_ADD_SHARED_VEHICLE :Legg til delte kjøretøy STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kjøretøy -STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Tog{P "" s} -STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Kjøretøy{P "" s} -STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Skip{P "" s} +STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} tog +STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} kjøretøy +STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} skip STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Luftfartøy STR_GROUP_RENAME_CAPTION :{BLACK}Gi nytt navn på gruppen -STR_GROUP_REPLACE_CAPTION :{WHITE}Skift kjøretøyer i "{GROUP}" +STR_GROUP_REPLACE_CAPTION :{WHITE}Skift ut kjøretøyer i "{GROUP}" STR_GROUP_CAN_T_CREATE :{WHITE}Kan ikke opprette gruppe... STR_GROUP_CAN_T_DELETE :{WHITE}Kan ikke slette denne gruppen... STR_GROUP_CAN_T_RENAME :{WHITE}Kan ikke gi nytt navn på denne gruppen... STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan ikke fjerne alle kjøretøy fra denne gruppen... STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan ikke legge til kjøretøy i denne grupppen... +STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan ikke legge til delte kjøretøyer i gruppa... +STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Grupper - Klikk en gruppe for å se alle kjøretøy i gruppa +STR_GROUP_CREATE_TIP :{BLACK}Klikk for å opprette en gruppe STR_GROUP_DELETE_TIP :{BLACK}Fjern den valgte gruppen STR_GROUP_RENAME_TIP :{BLACK}Gi nytt navn på den valgte gruppen - +STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klikk for å beskytte denne gruppa fra global autoerstatting STR_COMPANY_NAME :{COMPANY} STR_ENGINE_NAME :{ENGINE} @@ -3251,4 +3377,63 @@ STR_SIGN_NAME :{SIGN} STR_VEHICLE_NAME :{VEHICLE} +STR_NAME_MUST_BE_UNIQUE :{WHITE}Navn må være unikt + +#### Improved sign GUI +STR_NEXT_SIGN_TOOLTIP :{BLACK}Gå til neste signal +STR_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gå til forrige signal + ######## + +STR_FUND_NEW_INDUSTRY :{BLACK}Fond +STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospekt +STR_BUILD_NEW_INDUSTRY :{BLACK}Bygg +STR_INDUSTRY_SELECTION_HINT :{BLACK}Velg passende industri fra listen + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avansert +STR_FACE_ADVANCED_TIP :{BLACK}Avansert ansiktsvalg +STR_FACE_SIMPLE :{BLACK}Enkelt +STR_FACE_SIMPLE_TIP :{BLACK}Enkelt ansiktsvalg. +STR_FACE_LOAD :{BLACK}Last +STR_FACE_LOAD_TIP :{BLACK}Last favorittansikt +STR_FACE_LOAD_DONE :{WHITE}Ditt favorittansikt har blitt lastet fra OpenTTDs konfigurasjonsfil. +STR_FACE_FACECODE :{BLACK}Ansiktsnummer +STR_FACE_FACECODE_TIP :{BLACK}Vis og/eller endre ansiktsnummer +STR_FACE_FACECODE_CAPTION :{WHITE}Vis og/eller endre ansiktsnummer +STR_FACE_FACECODE_SET :{WHITE}Ny ansiktsnummerkode har blitt fastsatt. +STR_FACE_FACECODE_ERR :{WHITE}Kunne ikke endre ansiktsnummer - må være numerisk mellom 0 og 4 294 967 295! +STR_FACE_SAVE :{BLACK}Lagre +STR_FACE_SAVE_TIP :{BLACK}Lagre favorittansikt +STR_FACE_SAVE_DONE :{WHITE}Dette ansiktet vil bli lagret som din favoritt i OpenTTDs konfigurasjonsfil. +STR_FACE_EUROPEAN :{BLACK}Europeisk +STR_FACE_SELECT_EUROPEAN :{BLACK}Velg europeiske ansikter +STR_FACE_AFRICAN :{BLACK}Afrikansk +STR_FACE_SELECT_AFRICAN :{BLACK}Velg afrikanske ansikter +STR_FACE_YES :Ja +STR_FACE_NO :Nei +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Slå på bart eller ørering +STR_FACE_HAIR :Hår: +STR_FACE_HAIR_TIP :{BLACK}Endre hår +STR_FACE_EYEBROWS :Øyenbryn: +STR_FACE_EYEBROWS_TIP :{BLACK}Endre øyenbryn +STR_FACE_EYECOLOUR :Øyefarge: +STR_FACE_EYECOLOUR_TIP :{BLACK}Endre øyefarge +STR_FACE_GLASSES :Briller: +STR_FACE_GLASSES_TIP :{BLACK}Slå på briller +STR_FACE_GLASSES_TIP_2 :{BLACK}Endre briller +STR_FACE_NOSE :Nese: +STR_FACE_NOSE_TIP :{BLACK}Endre nese +STR_FACE_LIPS :Lepper: +STR_FACE_MOUSTACHE :Bart: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Endre lepper eller bart +STR_FACE_CHIN :Hake: +STR_FACE_CHIN_TIP :{BLACK}Endre hake +STR_FACE_JACKET :Jakke: +STR_FACE_JACKET_TIP :{BLACK}Endre jakke +STR_FACE_COLLAR :Krage: +STR_FACE_COLLAR_TIP :{BLACK}Endre krage +STR_FACE_TIE :Slips: +STR_FACE_EARRING :Ørering: +STR_FACE_TIE_EARRING_TIP :{BLACK}Endre slips eller ørering +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/portuguese.txt --- a/src/lang/portuguese.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/portuguese.txt Sat Oct 20 10:42:28 2007 +0000 @@ -1103,8 +1103,15 @@ STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Percorrer mapa STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Desligado STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocidade do scrollwheel no mapa: {ORANGE}{STRING} + +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Clique para comando +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Clique para controlo +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Desligado + STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pausa automática ao iniciar um novo jogo: {ORANGE}{STRING} STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Usar a lista avançada de veículos: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Desligado +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Sua companhia STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING} STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Activar plano de horários para veículos: {ORANGE}{STRING} STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Mostrar horário em tics em vez dias: {ORANGE}{STRING} @@ -2759,6 +2766,7 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {ENGINE} + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos apenas podem esperar em estações. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não pára nesta estação. @@ -3362,3 +3370,6 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospectar STR_BUILD_NEW_INDUSTRY :{BLACK}Construir STR_INDUSTRY_SELECTION_HINT :{BLACK}Escolha a indústria apropriada desta lista + +############ Face formatting +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/russian.txt --- a/src/lang/russian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/russian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -862,6 +862,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Создать новое предприятие STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...можно строить только в городах STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...можно строить только в тропиках STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...можно строить только в пустыне @@ -1022,6 +1023,7 @@ STR_CONFIG_PATCHES_ON :да STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Показывать скорость в панели статуса транспорта: {ORANGE}{STRING} STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Разрешить строительство на склонах и на берегу: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Разрешить терраформ. под зданиями, дорогами и т.д.. (автоспуски): {ORANGE}{STRING} STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Зона покрытия зависит от типа станции: {ORANGE}{STRING} STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Разрешить снос (почти) всех городских объектов: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Разрешить очень длинные поезда: {ORANGE}{STRING} @@ -1048,6 +1050,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Автотранспорт строится в очередь у станции: {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Смещать обзор, когда курсор находится у края экрана: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Разрешить подкупать муниципальную власть: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Разрешить покупать эксклюзивные трансп. права: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Разрешить передачу денег другим компаниям: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Станции могут быть произвольной формы: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Алгоритм навигации NPF (замена оригинального): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Множитель увеличения веса груза для товарных поездов: {ORANGE}{STRING} @@ -1188,6 +1192,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Соотношение городов, которые растут вдвое быстрее: {ORANGE}1 из {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Соотношение городов, которые растут вдвое быстрее: {ORANGE}Выкл. STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Изначальный множитель размера города: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Удалять абсурдные элементы дорог во время строительства STR_CONFIG_PATCHES_GUI :{BLACK}Интерфейс STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Строительство @@ -2018,6 +2023,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Сначала удалите туннель STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Сначала удалите мост STR_5008_CANNOT_START_AND_END_ON :{WHITE}Не может начинаться и заканчиваться в той же точке +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Опоры мостов должны быть на одном уровне +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Слишком низкий мост STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Начало и конец должны быть на одной линии STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Неподходящее место для строительства туннеля STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2789,6 +2796,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Появился новый {STRING}! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Не могу продать разбитый транспорт ... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не могу составить расписание для этого транспорта... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт может только ждать на станции. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Этот транспорт не останавливается на этой станции. @@ -3392,3 +3401,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Разведать STR_BUILD_NEW_INDUSTRY :{BLACK}Построить STR_INDUSTRY_SELECTION_HINT :{BLACK}Выберите тип производства из списка + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Расш. +STR_FACE_ADVANCED_TIP :{BLACK}Расширенный выбор лиц. +STR_FACE_SIMPLE :{BLACK}Простые +STR_FACE_SIMPLE_TIP :{BLACK}Выбор простых лиц. +STR_FACE_LOAD :{BLACK}Загруз. +STR_FACE_LOAD_TIP :{BLACK}Загрузить любимое лицо +STR_FACE_LOAD_DONE :{WHITE}Ваше любимое лицо будет загружено из конфиг-файла. +STR_FACE_FACECODE :{BLACK}Лицо игрока. +STR_FACE_FACECODE_TIP :{BLACK}Посмотреть и/или установить номер лица +STR_FACE_FACECODE_CAPTION :{WHITE}Посмотреть и/или установить номер лица +STR_FACE_FACECODE_SET :{WHITE}Цифровой код нового лица будет установлен +STR_FACE_FACECODE_ERR :{WHITE}Не могу установить номер лица - значение должно быть целым и лежать в диапазоне от 0 до 4,294,967,295! +STR_FACE_SAVE :{BLACK}Сохр. +STR_FACE_SAVE_TIP :{BLACK}Сохр. любимое лицо +STR_FACE_SAVE_DONE :{WHITE}Это лицо будет сохранено как ваше любимое в конфиг-файле. +STR_FACE_EUROPEAN :{BLACK}Европеоидное +STR_FACE_SELECT_EUROPEAN :{BLACK}Выбор европеоидного типа лица +STR_FACE_AFRICAN :{BLACK}Африканское +STR_FACE_SELECT_AFRICAN :{BLACK}Выбор африканского типа лица +STR_FACE_YES :Да +STR_FACE_NO :Нет +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Включить усы или серьги +STR_FACE_HAIR :Волосы: +STR_FACE_HAIR_TIP :{BLACK}Изменить волосы +STR_FACE_EYEBROWS :Брови +STR_FACE_EYEBROWS_TIP :{BLACK}Изменить брови +STR_FACE_EYECOLOUR :Цвет глаз: +STR_FACE_EYECOLOUR_TIP :{BLACK}Изменить цвет глаз +STR_FACE_GLASSES :Очки: +STR_FACE_GLASSES_TIP :{BLACK}Добавить очки +STR_FACE_GLASSES_TIP_2 :{BLACK}Изменить очки +STR_FACE_NOSE :Нос: +STR_FACE_NOSE_TIP :{BLACK}Изменить нос +STR_FACE_LIPS :Губы +STR_FACE_MOUSTACHE :Усы +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Изменить губы или усы +STR_FACE_CHIN :Подбородок: +STR_FACE_CHIN_TIP :{BLACK}Изменить подбородок +STR_FACE_JACKET :Жакет: +STR_FACE_JACKET_TIP :{BLACK}Изменить жакет +STR_FACE_COLLAR :Воротник: +STR_FACE_COLLAR_TIP :{BLACK}Изменить воротник +STR_FACE_TIE :Галстук: +STR_FACE_EARRING :Серьга: +STR_FACE_TIE_EARRING_TIP :{BLACK}Изменить галстук или серьгу +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/slovak.txt --- a/src/lang/slovak.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/slovak.txt Sat Oct 20 10:42:28 2007 +0000 @@ -924,6 +924,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financovat novy priemysel STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... moze byt postavene len v meste STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... moze byt postavene len v dazdovom pralese STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... moze byt postavene len v pusti @@ -1080,8 +1081,8 @@ STR_CONFIG_PATCHES_TIP :{BLACK}Nastavenia patchov STR_CONFIG_PATCHES_CAPTION :{WHITE}Nastavenia patchov -STR_CONFIG_PATCHES_OFF :Vyp. -STR_CONFIG_PATCHES_ON :Zap. +STR_CONFIG_PATCHES_OFF :nie +STR_CONFIG_PATCHES_ON :áno STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Zobrazit rychlost vozidla v stavovej liste: {ORANGE}{STRING} STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Umoznit vystavbu na svahoch a na pobrezi: {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Povolit úpravy terénu pod budovami, kolajami, ... : {ORANGE}{STRING} @@ -1111,6 +1112,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Radenie cestnych vozidiel (podla mnozstva tovaru): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Posúvat pohlad ked je kurzor myši na okraji okna: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Umoznit podplacanie miestnej spravy: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Povolit zakúpenie exkluzívnych dopravných práv: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Umožnit posielanie penazí ostatným spolocnostiam: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Roznorode stanice: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novy globalny algoritmus hladania cesty (NPF namiesto NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Váhový násobok pre nákladné vlaky: {ORANGE}{STRING} @@ -1251,13 +1254,14 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Pomer miest, ktoré sa budú rozvíjat rýchlejšie: {ORANGE}1 z {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Pomer miest, ktoré sa budú rozvíjat rýchlejšie: {ORANGE}Žiadny STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Násobok pociatocnej velkosti mesta: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Odstránit nezmyselné casti pri rekonštrukcii ciest STR_CONFIG_PATCHES_GUI :{BLACK}Rozhranie -STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Vystavba +STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Výstavba STR_CONFIG_PATCHES_VEHICLES :{BLACK}Vozidlá STR_CONFIG_PATCHES_STATIONS :{BLACK}Stanice STR_CONFIG_PATCHES_ECONOMY :{BLACK}Ekonomika -STR_CONFIG_PATCHES_AI :{BLACK}Protivnici +STR_CONFIG_PATCHES_AI :{BLACK}Konkurenti STR_CONFIG_PATCHES_DISABLED :zakazane STR_CONFIG_PATCHES_INT32 :{NUM} @@ -1708,7 +1712,7 @@ ##id 0x1800 STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Cesta musi byt najskor odstranena STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Prebiehaju cestne prace -STR_1802_ROAD_CONSTRUCTION :{WHITE}Vystavba cesty +STR_1802_ROAD_CONSTRUCTION :{WHITE}Výstavba cesty STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Výstavba elektrickovej trate STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Vyber cestny most STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... na jednosmerných cestách nie sú dovolené križovatky @@ -1724,7 +1728,7 @@ STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nemozno postavit vykladku ... STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nie je možné postavit elektrickovú osobnú stanicu ... STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nie je možné postavit elektrickovú nákladnú stanicu ... -STR_180A_ROAD_CONSTRUCTION :Vystavba cesty +STR_180A_ROAD_CONSTRUCTION :Výstavba cesty STR_180A_TRAMWAY_CONSTRUCTION :Výstavba elektrickovej dráhy STR_180B_BUILD_ROAD_SECTION :{BLACK}Postavit cast cesty STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Postavit cast elektrickovej dráhy @@ -2081,6 +2085,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Tunel musi byt najskor zburany STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Most musi byt najskor zburany STR_5008_CANNOT_START_AND_END_ON :{WHITE}Nemozno zacat a skoncit na tom istom mieste +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Konce mosta nie sú v rovnakej výške +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Most je príliš nízky pre tento terén STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Zaciatok a koniec musi byt v rovine STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}To miesto je nepouzitelne ako vstup do tunela STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2841,6 +2847,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nové {STRING} dostupné! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Nie je možné predat znicené vozidlo ... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Vozidlu nie je možné zadat cestovný poriadok ... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozidlá možu cakat len v staniciach. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Toto vozidlo nezastavuje v tejto stanici. @@ -3025,7 +3033,7 @@ STR_A01A_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO} STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}Lietadlo musi byt zastavene v hangari STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Nie je mozne predat lietadlo ... -STR_A01D_AIRPORT_CONSTRUCTION :Vystavba letiska +STR_A01D_AIRPORT_CONSTRUCTION :Výstavba letiska STR_A01E_BUILD_AIRPORT :{BLACK}Postavit letisko STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Lietadlo - kliknut pre informacie STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Vyrobit nove lietadlo (potrebne letisko z hangarom) @@ -3444,3 +3452,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Vyhladat STR_BUILD_NEW_INDUSTRY :{BLACK}Postavit STR_INDUSTRY_SELECTION_HINT :{BLACK}Vyberte vhodný typ priemyslu zo zoznamu + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Rozšírený +STR_FACE_ADVANCED_TIP :{BLACK}Rozšírený výber tváre. +STR_FACE_SIMPLE :{BLACK}Jednoduchý +STR_FACE_SIMPLE_TIP :{BLACK}Jednoduchý výber tváre. +STR_FACE_LOAD :{BLACK}Nahrat +STR_FACE_LOAD_TIP :{BLACK}Nahrat oblúbenú tvár +STR_FACE_LOAD_DONE :{WHITE}Vaša oblúbená tvár bola nahratá z kofiguracného súboru. +STR_FACE_FACECODE :{BLACK}Kód tváre +STR_FACE_FACECODE_TIP :{BLACK}Zobrazit/nastavit kód tváre +STR_FACE_FACECODE_CAPTION :{WHITE}Zobrazit/nastavit kód tváre +STR_FACE_FACECODE_SET :{WHITE}Nový kód tváre bol nastavený. +STR_FACE_FACECODE_ERR :{WHITE}Nie je možné nastavit kód tváre - povolené je číslo od 0 do 4 294 967 295! +STR_FACE_SAVE :{BLACK}Uložit +STR_FACE_SAVE_TIP :{BLACK}Uložit oblúbenú tvár +STR_FACE_SAVE_DONE :{WHITE}Táto tvár bude uložená ako oblúbená do konfiguracného súboru. +STR_FACE_EUROPEAN :{BLACK}Európan +STR_FACE_SELECT_EUROPEAN :{BLACK}Vybrat európske tváre +STR_FACE_AFRICAN :{BLACK}African +STR_FACE_SELECT_AFRICAN :{BLACK}Vybrat africké tváre +STR_FACE_YES :áno +STR_FACE_NO :nie +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Povolit fúzy alebo náušnicu +STR_FACE_HAIR :Vlasy: +STR_FACE_HAIR_TIP :{BLACK}Zmenit vlasy +STR_FACE_EYEBROWS :Obocie: +STR_FACE_EYEBROWS_TIP :{BLACK}Zmenit obocie +STR_FACE_EYECOLOUR :Farba ocí: +STR_FACE_EYECOLOUR_TIP :{BLACK}Zmenit farbu ocí +STR_FACE_GLASSES :Okuliare: +STR_FACE_GLASSES_TIP :{BLACK}Povolit okuliare +STR_FACE_GLASSES_TIP_2 :{BLACK}Zmenit okuliare +STR_FACE_NOSE :Nos: +STR_FACE_NOSE_TIP :{BLACK}Zmenit nos +STR_FACE_LIPS :Pery: +STR_FACE_MOUSTACHE :Fúzy: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Zmenit pery alebo fúzy +STR_FACE_CHIN :Brada: +STR_FACE_CHIN_TIP :{BLACK}Zmenit bradu +STR_FACE_JACKET :Sako +STR_FACE_JACKET_TIP :{BLACK}Zmenit sako +STR_FACE_COLLAR :Golier: +STR_FACE_COLLAR_TIP :{BLACK}Zmenit golier +STR_FACE_TIE :Kravata: +STR_FACE_EARRING :Náušnica: +STR_FACE_TIE_EARRING_TIP :{BLACK}Zmenit kravatu alebo náušnicu +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/slovenian.txt --- a/src/lang/slovenian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/slovenian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -902,6 +902,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Odpri novo industrijo STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE} ... gradnja mogoča samo v mestih STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE} ... gradnja mogoča samo v območju deževnega gozda STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE} ... gradnja mogoča samo v puščavi @@ -1089,6 +1090,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Cestna vozila v vrsti (s quantum efekti): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Premakni okno, ko je miška na robu: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Dovoli podkupovanje mestnih oblasti: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Dovoli nakup ekskluzivnih prevoznih dovoljenj: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Dovoli pošiljanje denarja drugim podjetjem: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Neenake postaje: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novo skupno iskanje poti (NPF, prevlada NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Koeficient teže tovora za simulacijo težkih vlakov: {ORANGE}{STRING} @@ -1229,6 +1232,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Razmerje mest, ki bodo rastla z dvakratno hitrostjo: {ORANGE}1 v {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Razmerje mest, ki bodo rastla z dvakratno hitrostjo: {ORANGE}Brez STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Začetni faktor rasti mesta: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Odstrani absurdne cestne elemente med gradnjo cest STR_CONFIG_PATCHES_GUI :{BLACK}Vmesnik STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Gradnja @@ -2097,6 +2101,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Najprej moraš porušiti predor STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Najprej moraš porušiti most STR_5008_CANNOT_START_AND_END_ON :{WHITE}Ni mogoče začeti in končati v isti točki +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Priključki mosta niso na enaki višini +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Most je prenizek za teren STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Začetek in konec morata biti na isti višini STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Lokacija neprimerna za vhod v predor STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2857,6 +2863,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo! {STRING} sedaj na razpolago! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Ni mogoča prodaja uničenega vozila... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nemogoče določiti časa vozilu... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozila lahko čakajo le na postajah. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}To vozilo se ne ustavlja na tej postaji. @@ -3460,3 +3468,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Obetajoča STR_BUILD_NEW_INDUSTRY :{BLACK}Zgradi STR_INDUSTRY_SELECTION_HINT :{BLACK}Izberi primerno industrijo iz tega seznama + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Napredno +STR_FACE_ADVANCED_TIP :{BLACK}Napredna izbira obraza. +STR_FACE_SIMPLE :{BLACK}Enostavno +STR_FACE_SIMPLE_TIP :{BLACK}Enostavna izbira obraza. +STR_FACE_LOAD :{BLACK}Naloži +STR_FACE_LOAD_TIP :{BLACK}Naloži piljubljen obraz +STR_FACE_LOAD_DONE :{WHITE}Tvoj priljubljen obraz je bil naložen iz OpenTTD konfiguracije. +STR_FACE_FACECODE :{BLACK}Obraz igralca št. +STR_FACE_FACECODE_TIP :{BLACK}Prikaži in/ali nastavi številko obraza igralca +STR_FACE_FACECODE_CAPTION :{WHITE}Prikaži in/ali nastavi številko obraza igralca +STR_FACE_FACECODE_SET :{WHITE}Nova koda številke obraza je nastavljena. +STR_FACE_FACECODE_ERR :{WHITE}Nemogoča nastavitev številke obraza igralca - izbor mogoč med 0 in 4,294,967,295! +STR_FACE_SAVE :{BLACK}Shrani +STR_FACE_SAVE_TIP :{BLACK}Shrani priljubljen obraz +STR_FACE_SAVE_DONE :{WHITE}Ta obraz bo shranjen kot tvoj priljubljen v konfiguracijo OpenTTD. +STR_FACE_EUROPEAN :{BLACK}Evropski +STR_FACE_SELECT_EUROPEAN :{BLACK}Izbor evropskih obrazov +STR_FACE_AFRICAN :{BLACK}Afriški +STR_FACE_SELECT_AFRICAN :{BLACK}Izbor afriških obrazov +STR_FACE_YES :Da +STR_FACE_NO :Ne +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Vklop brk ali uhanov +STR_FACE_HAIR :Lasje: +STR_FACE_HAIR_TIP :{BLACK}Spremeni lase +STR_FACE_EYEBROWS :Obrvi: +STR_FACE_EYEBROWS_TIP :{BLACK}Spremeni obrvi +STR_FACE_EYECOLOUR :Barva oči: +STR_FACE_EYECOLOUR_TIP :{BLACK}Spremeni barvo oči +STR_FACE_GLASSES :Očala: +STR_FACE_GLASSES_TIP :{BLACK}Vklopi očala +STR_FACE_GLASSES_TIP_2 :{BLACK}Spremeni očala +STR_FACE_NOSE :Nos: +STR_FACE_NOSE_TIP :{BLACK}Spremeni nos +STR_FACE_LIPS :Ustnice: +STR_FACE_MOUSTACHE :Brke: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Spremeni ustnice ali brke +STR_FACE_CHIN :Brada: +STR_FACE_CHIN_TIP :{BLACK}Spremeni brado +STR_FACE_JACKET :Jakna: +STR_FACE_JACKET_TIP :{BLACK}Spremeni jakno +STR_FACE_COLLAR :Ovratnik: +STR_FACE_COLLAR_TIP :{BLACK}Spremeni ovratnik +STR_FACE_TIE :Kravata: +STR_FACE_EARRING :Uhani: +STR_FACE_TIE_EARRING_TIP :{BLACK}Spremeni kravato ali uhane +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/spanish.txt --- a/src/lang/spanish.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/spanish.txt Sat Oct 20 10:42:28 2007 +0000 @@ -861,6 +861,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fundar nueva industria STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...sólo se puede construir en poblaciones STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...sólo se puede construir en áreas de selva STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...sólo se puede construir en áreas desérticas @@ -1048,6 +1049,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Cola de vehículos de carretera (con efecto cuantificador): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Desplazar ventana mediante el cursor en los bordes: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Permitir sobornos a la autoridad local: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Permitir comprar derechos de transporte exclusivos: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Permitir enviar dinero a otras empresas: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Estaciones no uniformes: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nuevo sistema de busq. de rutas global (NPF, anula a NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Carga el multiplicador de peso para simular trenes pesados: {ORANGE}{STRING} @@ -1188,6 +1191,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proporción de ciudades que crecerán el doble de rápido: {ORANGE}1 de {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proporción de ciudades que crecerán el doble de rápido: {ORANGE}Ninguna STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Multiplicador inicial tamaño de ciudad: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Quitar elementos absurdos de la carretera durante su construcción STR_CONFIG_PATCHES_GUI :{BLACK}Interfaz STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construcción @@ -2018,6 +2022,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Primero debe demolerse el túnel STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Primero debe demolerse el puente STR_5008_CANNOT_START_AND_END_ON :{WHITE}No se puede comenzar y acabar en la misma posición +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Las cabeceras del puente no están al mismo nivel +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}El puente es demasiado bajo para el terreno STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Comienzo y final deben estar en línea STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Lugar inapropiado para entrada de túnel STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2778,6 +2784,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuevo {STRING} ahora disponible! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}No se puede vender un vehículo destruido... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se puede ajustar horarios al vehículo... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Los vehículos solo pueden esperar en las estaciones. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo no está parando en esta estación. @@ -3381,3 +3389,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Perspectiva STR_BUILD_NEW_INDUSTRY :{BLACK}Construir STR_INDUSTRY_SELECTION_HINT :{BLACK}Seleccione la industria apropiada de la lista + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avanzado +STR_FACE_ADVANCED_TIP :{BLACK}Selección avanzada de caras. +STR_FACE_SIMPLE :{BLACK}Simple +STR_FACE_SIMPLE_TIP :{BLACK}Selección simple de caras. +STR_FACE_LOAD :{BLACK}Cargar +STR_FACE_LOAD_TIP :{BLACK}Cargar cara favorita +STR_FACE_LOAD_DONE :{WHITE}Tu cara favorita ha sido cargada del fichero de configuración de OpenTTD. +STR_FACE_FACECODE :{BLACK}Cara del jugador no. +STR_FACE_FACECODE_TIP :{BLACK}Ver y/o asignar número de cara del jugador +STR_FACE_FACECODE_CAPTION :{WHITE}Ver y/o asignar número de cara del jugador +STR_FACE_FACECODE_SET :{WHITE}Nuevo código de cara ha sido asignado. +STR_FACE_FACECODE_ERR :{WHITE}No se puede asignar código de cara - debe ser un valor numérico de 0 a 4,294,967,295! +STR_FACE_SAVE :{BLACK}Guardar +STR_FACE_SAVE_TIP :{BLACK}Guardar cara favorita +STR_FACE_SAVE_DONE :{WHITE}Esta cara ha sido guardada como tu favorita en el fichero de configuración. +STR_FACE_EUROPEAN :{BLACK}Europea +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecciona caras europeas +STR_FACE_AFRICAN :{BLACK}Africana +STR_FACE_SELECT_AFRICAN :{BLACK}Selecciona caras africanas +STR_FACE_YES :Si +STR_FACE_NO :No +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Activar bigotes o pendientes +STR_FACE_HAIR :Pelo: +STR_FACE_HAIR_TIP :{BLACK}Cambiar pelo +STR_FACE_EYEBROWS :Cejas: +STR_FACE_EYEBROWS_TIP :{BLACK}Cambiar cejas +STR_FACE_EYECOLOUR :Color ojos: +STR_FACE_EYECOLOUR_TIP :{BLACK}Cambiar color de ojos +STR_FACE_GLASSES :Gafas: +STR_FACE_GLASSES_TIP :{BLACK}Activar gafas +STR_FACE_GLASSES_TIP_2 :{BLACK}Cambiar gafas +STR_FACE_NOSE :Nariz: +STR_FACE_NOSE_TIP :{BLACK}Cambiar nariz +STR_FACE_LIPS :Labios: +STR_FACE_MOUSTACHE :Bigote: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Cambiar labios o bigote +STR_FACE_CHIN :Barbilla: +STR_FACE_CHIN_TIP :{BLACK}Cambiar barbilla +STR_FACE_JACKET :Chaqueta: +STR_FACE_JACKET_TIP :{BLACK}Cambiar chaqueta +STR_FACE_COLLAR :Cuello: +STR_FACE_COLLAR_TIP :{BLACK}Cambiar cuello +STR_FACE_TIE :Corbata: +STR_FACE_EARRING :Pendientes: +STR_FACE_TIE_EARRING_TIP :{BLACK}Cambiar corbata o pendientes +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/swedish.txt --- a/src/lang/swedish.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/swedish.txt Sat Oct 20 10:42:28 2007 +0000 @@ -860,6 +860,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Bekosta ny industri STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan bara byggas i städer STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan bara byggas i regnskog STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan bara byggas i öken @@ -1020,6 +1021,7 @@ STR_CONFIG_PATCHES_ON :På STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Visa fordonshastighet i statusfältet: {ORANGE}{STRING} STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Tillåt byggnation på sluttningar och kuster: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Tillåt terraformning under byggnader, spår, etc. (autoslope): {ORANGE}{STRING} STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Tillåt mer realistiska uppsamlingsområden för stationer: {ORANGE}{STRING} STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Tillåt borttagning av mera stadsägda vägar etc.: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Tillåt väldigt långa tåg: {ORANGE}{STRING} @@ -1046,6 +1048,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Vägfordonsköer (med kvanteffekter): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Scrolla vyn när musen är vid kanten: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Tillåt mutning av de lokala myndigheterna: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Tillåt köp av exklusiva transporträttigheter: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Tillåt skicka pengar till andra företag: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Icke-rektangulära stationer: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Ny globalt sätt att hitta rutt (NPF, åsidosätter NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Godsfaktor för att simulera tunga tåg: {ORANGE}{STRING} @@ -1186,6 +1190,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Andel av städerna som kommer växa dubbelt så fort: {ORANGE}1 av {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Andel av städerna som kommer växa dubbelt så fort: {ORANGE}Inga STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Initial stadsstorleks multiplikator: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Ta bort absurda väg-element under vägkonstruktion STR_CONFIG_PATCHES_GUI :{BLACK}Gränssnitt STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Konstruktion @@ -2016,6 +2021,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Måste riva tunnel först STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Måste riva bro först STR_5008_CANNOT_START_AND_END_ON :{WHITE}Kan inte börja och sluta på samma plats +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Broändar ej på samma höjd +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Bro är för låg för terrängen STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Start- och slutpunkt måste ligga i linje STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Platsen passar inte för tunnelentré STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2772,10 +2779,12 @@ STR_TRAIN_NO_POWER :{RED}Ingen Kraft STR_TRAIN_START_NO_CATENARY :Detta spår saknar kedjekurva, så tåget kan inte starta -STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nya {STRING} är nu tillgänglig! +STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ny {STRING} tillgänglig! STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nya {STRING} är nu tillgänglig - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Kan inte sälja förstört fordon... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan inte lägga till fordonet i en tidtabell... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Fordon kan enbart vänta vid stationer. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Detta fordon stannar inte vid denna station. @@ -2783,10 +2792,10 @@ STR_TIMETABLE_STATUS_ON_TIME :Detta fordon ligger efter i tidtabellen STR_TIMETABLE_STATUS_LATE :Detta fordon är för tillfället {STRING} sen STR_TIMETABLE_STATUS_EARLY :Detta fordon är för tillfället {STRING} tidig -STR_TIMETABLE_TOTAL_TIME :Denna tidtabell kommer ta {STRING} att slutföra +STR_TIMETABLE_TOTAL_TIME :Den här tidtabellen kommer ta {STRING} att slutföra STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Denna tidtabell kommer att ta åtminstonde {STRING} att slutföra (allt är inte inlagt i en tidtabell) -STR_TIMETABLE_AUTOFILL :{BLACK}Automatisk ifyllning -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll tidtabellen automatiskt med värdet från den första resan +STR_TIMETABLE_AUTOFILL :{BLACK}Autofyll +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll tidtabellen automatiskt med värdena från första resan ##id 0x9000 STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vägfordon i vägen @@ -3304,7 +3313,7 @@ ######## -STR_FEEDER_CARGO_VALUE :{BLACK}Överföringingskredit: {LTBLUE}{CURRENCY} +STR_FEEDER_CARGO_VALUE :{BLACK} Överför kredit: {LTBLUE}{CURRENCY} STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD :{WHITE}...detta är en stadsägd väg STR_DRIVE_THROUGH_ERROR_DIRECTION :{WHITE}...vägen pekar i fel riktning @@ -3350,15 +3359,15 @@ STR_GROUP_CAN_T_CREATE :{WHITE}Kan inte skapa grupp... STR_GROUP_CAN_T_DELETE :{WHITE}Kan inte ta bort denna grupp... STR_GROUP_CAN_T_RENAME :{WHITE}Kan inte döpa om grupp... -STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan inte ta bort alla fordon från denna grupp... -STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan inte lägga till fordonet till denna grupp... -STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan inte lägga till delade fordon till grupp... +STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan inte ta bort alla fordon i denna grupp... +STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan inte lägga till fordon i denna grupp... +STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan inte lägga till delade fordon i denna grupp... -STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Grupper - Klicka på en grupp för att lista alla fordon i denna grupp +STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Gripper - Klicka på en grupp för att lista alla fordon i gruppen STR_GROUP_CREATE_TIP :{BLACK}Klicka för att skapa en grupp -STR_GROUP_DELETE_TIP :{BLACK}Ta bort den valda gruppen -STR_GROUP_RENAME_TIP :{BLACK}Döp om den valda gruppen -STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klicka för att skydda denna grupp från globalt autoutbyte +STR_GROUP_DELETE_TIP :{BLACK}Ta bort vald grupp +STR_GROUP_RENAME_TIP :{BLACK}Byt namn på vald grupp +STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klicka för att skydda denna grupp mot allmän autoreplace STR_COMPANY_NAME :{COMPANY} STR_ENGINE_NAME :{ENGINE} @@ -3379,3 +3388,51 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospektera STR_BUILD_NEW_INDUSTRY :{BLACK}Bygga STR_INDUSTRY_SELECTION_HINT :{BLACK}Välj lämplig industri från denna lista + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Avancerad +STR_FACE_ADVANCED_TIP :{BLACK}Avancerat ansiktsval. +STR_FACE_SIMPLE :{BLACK}Enkelt +STR_FACE_SIMPLE_TIP :{BLACK}Enkelt ansiktsval. +STR_FACE_LOAD :{BLACK}Ladda +STR_FACE_LOAD_TIP :{BLACK}Ladda favoritansikte +STR_FACE_LOAD_DONE :{WHITE}Ditt favoritansikte har laddats från OpenTTDs konfigurationsfil. +STR_FACE_FACECODE :{BLACK}Spelaransikte nummer. +STR_FACE_FACECODE_TIP :{BLACK}Visa och/eller välj ansiktsnummer +STR_FACE_FACECODE_CAPTION :{WHITE}Visa och/eller välj ansiktsnummer +STR_FACE_FACECODE_SET :{WHITE}Nytt kod för ansiktsnumret har valts +STR_FACE_FACECODE_ERR :{WHITE}Kunde inte ange ansiktsnumret. Det måste vara en siffra mellan 0 och 4,294,967,295! +STR_FACE_SAVE :{BLACK}Spara +STR_FACE_SAVE_TIP :{BLACK}Spara favoritansikte +STR_FACE_SAVE_DONE :{WHITE}Det här ansiktet kommer att sparas som ditt favoritansikte i OpenTTDs konfigurationsfil. +STR_FACE_EUROPEAN :{BLACK}Europeisk +STR_FACE_SELECT_EUROPEAN :{BLACK}Välj europeiska ansikten +STR_FACE_AFRICAN :{BLACK}Afrikanska +STR_FACE_SELECT_AFRICAN :{BLACK}Välj afrikanska ansikten +STR_FACE_YES :Ja +STR_FACE_NO :Nej +STR_FACE_MOUSTACHE_EARRING_TIP :{BLACK}Aktivera mustasch eller örhänge +STR_FACE_HAIR :Hår: +STR_FACE_HAIR_TIP :{BLACK}Ändra hår +STR_FACE_EYEBROWS :Ögonbryn: +STR_FACE_EYEBROWS_TIP :{BLACK}Ändra ögonbryn +STR_FACE_EYECOLOUR :Ögonfärg: +STR_FACE_EYECOLOUR_TIP :{BLACK}Ändra ögonfärg +STR_FACE_GLASSES :Glasögon: +STR_FACE_GLASSES_TIP :{BLACK}Aktivera glasögon +STR_FACE_GLASSES_TIP_2 :{BLACK}Ändra glasögon +STR_FACE_NOSE :Näsa: +STR_FACE_NOSE_TIP :{BLACK}Ändra näsa +STR_FACE_LIPS :Läppar: +STR_FACE_MOUSTACHE :Mustasch: +STR_FACE_LIPS_MOUSTACHE_TIP :{BLACK}Ändra läppar eller mustasch +STR_FACE_CHIN :Haka: +STR_FACE_CHIN_TIP :{BLACK}Ändra haka +STR_FACE_JACKET :Jacka: +STR_FACE_JACKET_TIP :{BLACK}Ändra jacka +STR_FACE_COLLAR :Krage: +STR_FACE_COLLAR_TIP :{BLACK}Ändra krage +STR_FACE_TIE :Slips: +STR_FACE_EARRING :Örhänge: +STR_FACE_TIE_EARRING_TIP :{BLACK}Ändra slips eller örhänge +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/turkish.txt --- a/src/lang/turkish.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/turkish.txt Sat Oct 20 10:42:28 2007 +0000 @@ -1046,6 +1046,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Karayolu taşıtları kuyruğa girsin (içiçe geçerek): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Fare kenardayken pencere etkin: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Belediye rüşveti izinli: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Şehrin ulaşım haklarını satın alma izinli: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Diğer şirketlere para gönderme izinli: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Özel istasyonlar: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Yeni evrensel yol bulma (NPF, NTP üzerinde): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Ağır yük trenleri için ağırlık çarpanı: {ORANGE}{STRING} @@ -1111,6 +1113,7 @@ STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Yeni bir oyun başlatırken zamanı duraklat: {ORANGE}{STRING} STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gelişmiş araç listesini kullan: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Kapalı STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Kendi şirketim STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Tüm şirketler STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Araç yükleme bilgisini göster: {ORANGE}{STRING} @@ -1118,6 +1121,8 @@ STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Kendi şirketim STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Tüm şirketler STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Araç zaman çizelgesi açık: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zaman tablosunda gün yerine işlemci zamanı kullan: {ORANGE}{STRING} +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Öntanımlı ray türü (yeni oyundan/oyun yüklemeden sonra): {ORANGE}{STRING} STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normal Ray STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrikli Ray STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monoray @@ -1183,6 +1188,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Kasabaların şehir olması için gerekli nüfus: {ORANGE}1 in {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Şehir olacak kasabaların oranı: {ORANGE}Hiçbiri STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Birincil şehir büyüklüğü çarpanı: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Yol yapımı sırasında gerçekçi olmayan yerleri kaldır STR_CONFIG_PATCHES_GUI :{BLACK}Arayüz STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}İnşaat @@ -1415,6 +1421,7 @@ STR_NETWORK_LANG_CZECH :Çekce STR_NETWORK_LANG_DANISH :Danimarkaca STR_NETWORK_LANG_DUTCH :Hollandaca +STR_NETWORK_LANG_ESPERANTO :Esperanto STR_NETWORK_LANG_FINNISH :Fince STR_NETWORK_LANG_HUNGARIAN :Bulgarca STR_NETWORK_LANG_ICELANDIC :İzlandaca @@ -2012,6 +2019,7 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Önce tünel yıkılmalı STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Önce köprü yıkılmalı STR_5008_CANNOT_START_AND_END_ON :{WHITE}Aynı noktada başlayıp bitemez +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Köprü bu arazi için çok alçakta STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Başlangıç ve bitiş aynı çizgi üzerinde olmalı STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Yer tünel girişi için uygun değil STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2735,6 +2743,8 @@ STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Seçili talimatı yaparken tren dolana kadar beklesin STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Seçili talimatı yaparken tren mutlaka yükünü boşaltsın STR_TIMETABLE_TOOLTIP :{BLACK}Zaman çizelgesi - işaretlemek için bir talimata tıklayın. +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Seçili talimatın harcaması gereken süreyi değiştir +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Seçili talimatın harcaması gereken süreyi sil STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Geç kalma sayacını sıfırla, böylece araç zamanında gitmiş sayılacak STR_SERVICE_HINT :{BLACK}Bakım gerekmiyorsa bunu atla STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Fiyat: {CURRENCY} Ağırlık: {WEIGHT_S}{}Hız: {VELOCITY} Güç: {POWER}{}Bakım: {CURRENCY}/sene{}Kapasite: {CARGO} @@ -2770,6 +2780,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} artık kullanılabilir! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Hurda araçlar satılamaz... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Aracın zaman çizelgesi oluşturulamıyor... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Araçlar sadece istasyonlarda bekleyebilir. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Araç bu istasyonda durmuyor. diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/ukrainian.txt --- a/src/lang/ukrainian.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/ukrainian.txt Sat Oct 20 10:42:28 2007 +0000 @@ -986,6 +986,7 @@ STR_0314_FUND_NEW_INDUSTRY :{WHITE}Нова промисловість STR_JUST_STRING :{STRING} +STR_JUST_INT :{NUM} STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...можна будувати лише у містах STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...можна будувати лише у джунглях STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...можна будувати лише у пустелі @@ -1173,6 +1174,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Ставати транспорту в чергу: {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Прокручувати вікно, коли курсор з краю: {ORANGE}{STRING} STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Дозволити підкупляти місцеву владу: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Дозволити купувати ексклюзивні права на перевезення: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Дозволити передавати гроші іншим компаніям: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Неоднорідні станції: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Новий глобальний пошук шляху(NPF, замість NTP): {ORANGE}{STRING} STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Множник ваги для імітації важких потягів: {ORANGE}{STRING} @@ -1311,6 +1314,7 @@ STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Кількість міст, які будуть рости вдвічі швидше: {ORANGE}1 з {STRING} STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Кількість міст, які будуть рости вдвічі швидше: {ORANGE}нема STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Початковий коефіцієнт розміру міст: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Прибрати безглузді елементи доріг під час будівництва доріг STR_CONFIG_PATCHES_GUI :{BLACK}Вигляд STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Споруди @@ -2178,6 +2182,8 @@ STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Спочатку зруйнуйте тунель STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Спочатку зруйнуйте міст STR_5008_CANNOT_START_AND_END_ON :{WHITE}Початок та кінець не можуть бути в одному місці +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Кінці мостів на різних рівнях +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Міст дуже низький для цього місця STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Початок та кінець мають бути на одній лінії STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Невідповідне місце для початку тунеля STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} @@ -2541,7 +2547,7 @@ STR_8021_GRAIN_HOPPER :Вагон для зерна STR_8022_WOOD_TRUCK :Вагон для деревини STR_8023_IRON_ORE_HOPPER :Вагон для залізної руди -STR_8024_STEEL_TRUCK :Вагон лля сталі +STR_8024_STEEL_TRUCK :Платформа для сталі STR_8025_ARMORED_VAN :Броньований вагон STR_8026_FOOD_VAN :Вагон для продуктів STR_8027_PAPER_TRUCK :Вагон для паперу @@ -2866,16 +2872,16 @@ STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Неможливо перемістити транспорт... STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}задній потяг зажди слідує follow its front counterpart!!! STR_8838_N_A :немає{SKIP} -STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Неможливо продати поїзд... +STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Не можна продати поїзд... STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Неможливо знайти маршрут до місцевого депо -STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Неможливо зупинити поїзд... +STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Не можна зупинити/стартувати поїзд... STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA} днів{BLACK} Останній техогляд: {LTBLUE}{DATE_LONG} STR_SERVICING_INTERVAL_PERCENT :{BLACK}Інтервал техогляду: {LTBLUE}{COMMA}%{BLACK} Останній техогляд: {LTBLUE}{DATE_LONG} -STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK} Поїзди - клікніть на поїзді для детальної інформаціїї +STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Поїзди - клікніть на поїзді для детальної інформаціїї STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Будувати поїзд (потрібне залізничне депо) STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Поїзди - клікніть на поїзді для інформації, перетягніть для додавання/вилучення -STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Будувати новий потяг -STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Перетягніть потяг сюди, щоб продати його +STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Будувати новий поїзд +STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Перетягніть поїзд сюди, щоб продати його STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Показати депо в центрі головного екрану STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Список поїздів - клікніть на поїзді для інформації STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Будувати вибраний поїзд @@ -2938,6 +2944,8 @@ STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE} STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Став доступним новий {STRING}! - {ENGINE} +STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Не можна продати знищений транспорт... + STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не можна встановити розклад для транспорту... STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт може чекати тільки на станціях. STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Цей транспорт не зупиняється на цій станції. @@ -2985,9 +2993,9 @@ STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Розвернути авто STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Показати авто детально STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Авто - натисніть на авто для інформації -STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Будувати нове авто -STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Перетягніть авто сюди, щоб продати -STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Показати авто депо в центрі екрану +STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Будувати новий автомобіль +STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Перетягніть автомобіль сюди, щоб продати +STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Показати автомобільне депо в центрі екрану STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Список авто - натисніть на авто для інформації STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Будувати вибране авто STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Ціна: {CURRENCY}{}Швидкість: {VELOCITY}{}Транспортні витрати: {CURRENCY}/рік{}Місткість: {CARGO} @@ -3027,9 +3035,9 @@ STR_9805_SHIPS :{WHITE}{COMPANY} - {COMMA} кораб{P ель лі лів} STR_9808_NEW_SHIPS :{WHITE}Нові кораблі STR_9809_BUILD_SHIP :{BLACK}Будувати корабель -STR_CLONE_SHIP :{BLACK}Клонувати корабель +STR_CLONE_SHIP :{BLACK}Клонувати STR_CLONE_SHIP_INFO :{BLACK}Будувати копію корабля. Утримуйте CTRL для спільного завдання -STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Будувати копію корабля. Натисніть на цю кнопку і потім на корабель в депо або ззовні. Утримуйте CTRL для спільного завдання +STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Будувати копію корабля. Натисніть на цю кнопку, і потім на корабель в депо або ззовні. Утримуйте CTRL для спільного завдання STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}Корабль має бути в депо STR_980C_CAN_T_SELL_SHIP :{WHITE}Неможливо продати корабель... STR_980D_CAN_T_BUILD_SHIP :{WHITE}Неможливо будувати корабель... @@ -3294,10 +3302,10 @@ STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP :{BLACK}Продати всі кораблі з депо STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP :{BLACK}Продати всі літаки з ангару -STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Отримати список всих поїздів, що заходять до ангарів -STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Отримати список всих авто, що заходять до ангарів -STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Отримати список всих кораблів, що заходять до ангарів -STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Отримати список всих літаків, що заходять до ангарів +STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Отримати список усіх поїздів, що заходять до цього депо +STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Отримати список усіх автомобілів, що заходять до цього депо +STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Отримати список усіх кораблів, що заходять до цього депо +STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Отримати список усіх літаків, що заходять до ангарів у цьому аеропорті STR_DEPOT_AUTOREPLACE_TRAIN_TIP :{BLACK}Оновити всі поїзди в депо STR_DEPOT_AUTOREPLACE_ROADVEH_TIP :{BLACK}Оновити всі автомобілі в депо @@ -3336,15 +3344,15 @@ STR_MASS_STOP_DEPOT_TRAIN_TIP :{BLACK}Натисніть для зупинки всіх поїздів, що в депо STR_MASS_STOP_DEPOT_ROADVEH_TIP :{BLACK}Натисніть для зупинки всіх авто, що в депо STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Натисніть для зупинки всіх кораблів, що в депо -STR_MASS_STOP_HANGAR_TIP :{BLACK}Натисніть для зупинки всіх літаків, що в депо +STR_MASS_STOP_HANGAR_TIP :{BLACK}Натисніть для зупинки всіх літаків, що в ангарі STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Натисніть для виїзду поїздів з депо -STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Натисніть для виїзду всіх авто з депо +STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Натисніть для виїзду всіх автомобілів з депо STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Натисніть для виїзду всіх кораблів з депо -STR_MASS_START_HANGAR_TIP :{BLACK}Натисніть для вильоту всіх літаків з депо +STR_MASS_START_HANGAR_TIP :{BLACK}Натисніть для вильоту всіх літаків з ангару -STR_MASS_STOP_LIST_TIP :{BLACK}Натисніть для зупинки всіх авто зі списку -STR_MASS_START_LIST_TIP :{BLACK}Натисніть для виїзду всіх авто зі списку +STR_MASS_STOP_LIST_TIP :{BLACK}Натисніть для зупинки всіх авто, що у списку +STR_MASS_START_LIST_TIP :{BLACK}Натисніть для виїзду всього транспорту, що у списку STR_SHORT_DATE :{WHITE}{DATE_TINY} STR_SIGN_LIST_CAPTION :{WHITE}Список позначень - {COMMA} Позначен{P ня ня ь} @@ -3491,12 +3499,12 @@ STR_GROUP_NAME_FORMAT :Група {COMMA} STR_GROUP_TINY_NAME :{TINYFONT}{GROUP} STR_GROUP_ALL_TRAINS :Усі поїзди -STR_GROUP_ALL_ROADS :Усі авто +STR_GROUP_ALL_ROADS :Усі автомобілі STR_GROUP_ALL_SHIPS :Усі кораблі STR_GROUP_ALL_AIRCRAFTS :Усі літаки STR_GROUP_DEFAULT_TRAINS :Незгруповані поїзди STR_GROUP_DEFAULT_ROADS :Незгруповані автомобілі -STR_GROUP_DEFAULT_SHIPS :Незгруповані човни +STR_GROUP_DEFAULT_SHIPS :Незгруповані кораблі STR_GROUP_DEFAULT_AIRCRAFTS :Незгруповані літаки STR_GROUP_TINY_NUM :{TINYFONT}{COMMA} STR_GROUP_ADD_SHARED_VEHICLE :Добавити спільний транспорт @@ -3541,3 +3549,14 @@ STR_PROSPECT_NEW_INDUSTRY :{BLACK}Огляд STR_BUILD_NEW_INDUSTRY :{BLACK}Будувати STR_INDUSTRY_SELECTION_HINT :{BLACK}Виберіть необхідне виробництво + +############ Face formatting +STR_FACE_ADVANCED :{BLACK}Детальний +STR_FACE_ADVANCED_TIP :{BLACK}Детальний вибір обличчя +STR_FACE_SIMPLE :{BLACK}Простий +STR_FACE_SIMPLE_TIP :{BLACK}Простий вибір обличчя +STR_FACE_LOAD :{BLACK}Завантажити +STR_FACE_LOAD_TIP :{BLACK}Завантажити обране обличчя +STR_FACE_LOAD_DONE :{WHITE}Обране обличчя було завантажене з файлу конфігурації OpenTTD. +STR_FACE_FACECODE :{BLACK}Обличчя № +######## diff -r 2c27f9be3fb9 -r f82a4facea8b src/lang/unfinished/afrikaans.txt --- a/src/lang/unfinished/afrikaans.txt Sat Oct 20 10:14:05 2007 +0000 +++ b/src/lang/unfinished/afrikaans.txt Sat Oct 20 10:42:28 2007 +0000 @@ -7,26 +7,26 @@ ##id 0x0000 STR_NULL : -STR_0001_OFF_EDGE_OF_MAP :{WHITE}Oor kant van kaart -STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te naby aan kant van kaart +STR_0001_OFF_EDGE_OF_MAP :{WHITE}Af rand van werfkaart +STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te naby aan rand van werfkaart STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nie genoeg kontant nie - vereis {CURRENCY} STR_0004 :{WHITE}{CURRENCY} STR_EMPTY : -STR_0007_FLAT_LAND_REQUIRED :{WHITE}Vereis platte land -STR_0008_WAITING :{BLACK}Wagtend: {WHITE}{STRING} +STR_0007_FLAT_LAND_REQUIRED :{WHITE}Plat daal vereis +STR_0008_WAITING :{BLACK}Wag: {WHITE}{STRING} STR_0009 :{WHITE}{CARGO} -STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (op pad van +STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (en-roete van STR_000B :{YELLOW}{STATION}) STR_000C_ACCEPTS :{BLACK}Aanvaar: {WHITE} STR_000D_ACCEPTS :{BLACK}Aanvaar: {GOLD} STR_000E : STR_000F_PASSENGERS :Passasiers -STR_0010_COAL :Steenkool +STR_0010_COAL :Kool STR_0011_MAIL :Pos STR_0012_OIL :Olie STR_0013_LIVESTOCK :Lewende Hawe STR_0014_GOODS :Goedere -STR_0015_GRAIN :Graan +STR_0015_GRAIN :Korrel STR_0016_WOOD :Hout STR_0017_IRON_ORE :Yster Erts STR_0018_STEEL :Staal @@ -53,12 +53,12 @@ STR_002D_FIZZY_DRINKS :Koeldranke STR_002E : STR_002F_PASSENGER :Passasier -STR_0030_COAL :Steenkool +STR_0030_COAL :Kool STR_0031_MAIL :Pos STR_0032_OIL :Olie STR_0033_LIVESTOCK :Lewende Hawe STR_0034_GOODS :Goedere -STR_0035_GRAIN :Graan +STR_0035_GRAIN :Korrel STR_0036_WOOD :Hout STR_0037_IRON_ORE :Yster Erts STR_0038_STEEL :Staal @@ -151,8 +151,8 @@ STR_ABBREV_ALL :{TINYFONT}ALLE STR_00AE :{WHITE}{DATE_SHORT} STR_00AF :{WHITE}{DATE_LONG} -STR_00B0_MAP :{WHITE}Kaart - {STRING} -STR_00B1_GAME_OPTIONS :{WHITE}Spel Opsies +STR_00B0_MAP :{WHITE}Werfkaart - {STRING} +STR_00B1_GAME_OPTIONS :{WHITE}Speletjie Opsies STR_00B2_MESSAGE :{YELLOW}Boodskap STR_00B3_MESSAGE_FROM :{YELLOW}Boodskap van {STRING} STR_POPUP_CAUTION_CAPTION :{WHITE}Waarskuwing! @@ -165,10 +165,10 @@ STR_00C5 :{BLACK}{CROSS} STR_00C6 :{SILVER}{CROSS} -STR_00C7_QUIT :{WHITE}Verlaat +STR_00C7_QUIT :{WHITE}Laat vaar STR_00C8_YES :{BLACK}Ja STR_00C9_NO :{BLACK}Nee -STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Is jy seker jy wil die spel verlaat en terug gaan na {STRING}? +STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Is jy seker u wil hierdie speletjie verlaat en keer terug na {STRING}? STR_00CB_1 :{BLACK}1 STR_00CC_2 :{BLACK}2 STR_00CD_3 :{BLACK}3 @@ -191,20 +191,20 @@ STR_00DE_BROWN :Bruin STR_00DF_GREY :Grys STR_00E0_WHITE :Wit -STR_00E1_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Te veel voertuie in spel +STR_00E1_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Te veel voertuie in speletjie STR_00E2 :{BLACK}{COMMA} STR_00E3 :{RED}{COMMA} -STR_00E4_LOCATION :{BLACK}Plek -STR_00E5_CONTOURS :Hoogtelyne +STR_00E4_LOCATION :{BLACK}Lokasie +STR_00E5_CONTOURS :Kantoere STR_00E6_VEHICLES :Voertuie -STR_00E7_INDUSTRIES :Nywerheide +STR_00E7_INDUSTRIES :Nywerhede STR_00E8_ROUTES :Roete STR_00E9_VEGETATION :Plantegroei STR_00EA_OWNERS :Eienaars STR_00EB_ROADS :{BLACK}{TINYFONT}Paaie STR_00EC_RAILROADS :{BLACK}{TINYFONT}Spoorwege STR_00ED_STATIONS_AIRPORTS_DOCKS :{BLACK}{TINYFONT}Stasies/Lughawes/Werfe -STR_00EE_BUILDINGS_INDUSTRIES :{BLACK}{TINYFONT}Geboue/Nywerheide +STR_00EE_BUILDINGS_INDUSTRIES :{BLACK}{TINYFONT}Geboue/Nywerhede STR_00EF_VEHICLES :{BLACK}{TINYFONT}Voertuie STR_00F0_100M :{BLACK}{TINYFONT}100m STR_00F1_200M :{BLACK}{TINYFONT}200m @@ -224,46 +224,46 @@ STR_00FF_FARM :{BLACK}{TINYFONT}Boerdery STR_0100_FACTORY :{BLACK}{TINYFONT}Fabriek STR_0101_PRINTING_WORKS :{BLACK}{TINYFONT}Drukwerke -STR_0102_OIL_WELLS :{BLACK}{TINYFONT}Olie Bron +STR_0102_OIL_WELLS :{BLACK}{TINYFONT}Olie Spruite STR_0103_IRON_ORE_MINE :{BLACK}{TINYFONT}Yster Erts Myn -STR_0104_STEEL_MILL :{BLACK}{TINYFONT}Staalmeul +STR_0104_STEEL_MILL :{BLACK}{TINYFONT}Staal Meule STR_0105_BANK :{BLACK}{TINYFONT}Bank -STR_0106_PAPER_MILL :{BLACK}{TINYFONT}Papiermeul +STR_0106_PAPER_MILL :{BLACK}{TINYFONT}Papier Meule STR_0107_GOLD_MINE :{BLACK}{TINYFONT}Goud Myn STR_0108_FOOD_PROCESSING_PLANT :{BLACK}{TINYFONT}Kos Verwerkings Fabriek STR_0109_DIAMOND_MINE :{BLACK}{TINYFONT}Diamant Myn STR_010A_COPPER_ORE_MINE :{BLACK}{TINYFONT}Koper Erts Myn STR_010B_FRUIT_PLANTATION :{BLACK}{TINYFONT}Vrugte Plantasie STR_010C_RUBBER_PLANTATION :{BLACK}{TINYFONT}Gomlastiek Plantasie -STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Water Lewering +STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Water Verskaf STR_010E_WATER_TOWER :{BLACK}{TINYFONT}Water Toring -STR_010F_LUMBER_MILL :{BLACK}{TINYFONT}Timmerhout Meul +STR_010F_LUMBER_MILL :{BLACK}{TINYFONT}Timmerhout Meule STR_0110_COTTON_CANDY_FOREST :{BLACK}{TINYFONT}Spookasem Woud STR_0111_CANDY_FACTORY :{BLACK}{TINYFONT}Lekker Fabriek STR_0112_BATTERY_FARM :{BLACK}{TINYFONT}Battery Plaas -STR_0113_COLA_WELLS :{BLACK}{TINYFONT}Cola Bron +STR_0113_COLA_WELLS :{BLACK}{TINYFONT}Cola Spruite STR_0114_TOY_SHOP :{BLACK}{TINYFONT}Speelgoed Winkel STR_0115_TOY_FACTORY :{BLACK}{TINYFONT}Speelgoed Fabriek STR_0116_PLASTIC_FOUNTAINS :{BLACK}{TINYFONT}Plastiek Fonteine STR_0117_FIZZY_DRINK_FACTORY :{BLACK}{TINYFONT}Koeldrank Fabriek -STR_0118_BUBBLE_GENERATOR :{BLACK}{TINYFONT}Borrel Ontwikkelaar +STR_0118_BUBBLE_GENERATOR :{BLACK}{TINYFONT}Borrel Genereerder STR_0119_TOFFEE_QUARRY :{BLACK}{TINYFONT}Tameletjie Prooi STR_011A_SUGAR_MINE :{BLACK}{TINYFONT}Suiker Myn STR_011B_RAILROAD_STATION :{BLACK}{TINYFONT}Spoorweg Stasie -STR_011C_TRUCK_LOADING_BAY :{BLACK}{TINYFONT}Vraagmotor Laai Area +STR_011C_TRUCK_LOADING_BAY :{BLACK}{TINYFONT}Vragmotor Laai Area STR_011D_BUS_STATION :{BLACK}{TINYFONT}Bus Stasie STR_011E_AIRPORT_HELIPORT :{BLACK}{TINYFONT}Lughawe/Helihawe STR_011F_DOCK :{BLACK}{TINYFONT}Hawe -STR_0120_ROUGH_LAND :{BLACK}{TINYFONT}Ru Land -STR_0121_GRASS_LAND :{BLACK}{TINYFONT}Gras Land -STR_0122_BARE_LAND :{BLACK}{TINYFONT}Kaal Land +STR_0120_ROUGH_LAND :{BLACK}{TINYFONT}Rof Daal +STR_0121_GRASS_LAND :{BLACK}{TINYFONT}Gras Daal +STR_0122_BARE_LAND :{BLACK}{TINYFONT}Hou Daal STR_0123_FIELDS :{BLACK}{TINYFONT}Velde STR_0124_TREES :{BLACK}{TINYFONT}Boome STR_0125_ROCKS :{BLACK}{TINYFONT}Rotse STR_0126_WATER :{BLACK}{TINYFONT}Water STR_0127_NO_OWNER :{BLACK}{TINYFONT}Geen Eienaar -STR_0128_TOWNS :{BLACK}{TINYFONT}Stede -STR_0129_INDUSTRIES :{BLACK}{TINYFONT}Nywerheide +STR_0128_TOWNS :{BLACK}{TINYFONT}Dorpe +STR_0129_INDUSTRIES :{BLACK}{TINYFONT}Nywerhede STR_012A_DESERT :{BLACK}{TINYFONT}Woestyn STR_012B_SNOW :{BLACK}{TINYFONT}Sneeu STR_012C_MESSAGE :{WHITE}Boodskap @@ -271,8 +271,8 @@ STR_012E_CANCEL :{BLACK}Kanselleer STR_012F_OK :{BLACK}OK STR_0130_RENAME :{BLACK}Hernoem -STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Te veel naame bepaal -STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Verkieste naam reeds in gebruik +STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Te veel name gestipuleer +STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Gekies naam alreeds in gebruik STR_0133_WINDOWS :Windows STR_0134_UNIX :Unix @@ -282,7 +282,7 @@ STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 -STR_013B_OWNED_BY :{WHITE}...besit by {STRING} +STR_013B_OWNED_BY :{WHITE}...besit deur {STRING} STR_013C_CARGO :{BLACK}Vrag STR_013D_INFORMATION :{BLACK}Inligting STR_013E_CAPACITIES :{BLACK}Kapasiteite @@ -292,8 +292,8 @@ STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Totaale vrag kapasitiet van die trein: STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO}) STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM}) -STR_0140_NEW_GAME :{BLACK}Nuwe Spel -STR_0141_LOAD_GAME :{BLACK}Laai Spel +STR_0140_NEW_GAME :{BLACK}Nuwe Speletjie +STR_0141_LOAD_GAME :{BLACK}Laai Speletjie STR_SINGLE_PLAYER :{BLACK}Enkel speeler STR_MULTIPLAYER :{BLACK}Veelspeler STR_SCENARIO_EDITOR :{BLACK}Draaiboek Redakteur @@ -304,13 +304,13 @@ STR_512 :512 STR_1024 :1024 STR_2048 :2048 -STR_MAPSIZE :{BLACK}Kaart groote: +STR_MAPSIZE :{BLACK}Werfkaart groote: STR_BY :{BLACK}* -STR_0148_GAME_OPTIONS :{BLACK}Spel Opsies +STR_0148_GAME_OPTIONS :{BLACK}Speletjie Opsies STR_0150_SOMEONE :iemand{SKIP}{SKIP} -STR_0151_MAP_OF_WORLD :Kaart van die wêreld -STR_0152_TOWN_DIRECTORY :Stad index +STR_0151_MAP_OF_WORLD :Werfkaart van wêreld +STR_0152_TOWN_DIRECTORY :Dorp gids STR_0153_SUBSIDIES :Subsidiëe STR_UNITS_IMPERIAL :Imperiaal @@ -346,23 +346,23 @@ STR_UNITS_FORCE_SI :{COMMA} kN ############ range for menu starts -STR_0154_OPERATING_PROFIT_GRAPH :Opereer profyt grafiek -STR_0155_INCOME_GRAPH :Inkoms grafiek -STR_0156_DELIVERED_CARGO_GRAPH :Afgelewerde vrag grafiek -STR_0157_PERFORMANCE_HISTORY_GRAPH :Prestasie geskiedenis grafiek +STR_0154_OPERATING_PROFIT_GRAPH :Bediening profyt grafiek +STR_0155_INCOME_GRAPH :Inkomste grafiek +STR_0156_DELIVERED_CARGO_GRAPH :Gelewer cargo grafiek +STR_0157_PERFORMANCE_HISTORY_GRAPH :Werkverrigting geskiedenis grafiek STR_0158_COMPANY_VALUE_GRAPH :Maatskappy waarde grafiek -STR_0159_CARGO_PAYMENT_RATES :Vrag betaaling grade -STR_015A_COMPANY_LEAGUE_TABLE :Maatskappy verbond tafel +STR_0159_CARGO_PAYMENT_RATES :Vrag vergoeding koerse +STR_015A_COMPANY_LEAGUE_TABLE :Maatskappy verbond tabel STR_PERFORMANCE_DETAIL_MENU :Omstandig prestasie gradering ############ range for menu ends STR_015B_OPENTTD :{WHITE}Omtrent OpenTTD -STR_015C_SAVE_GAME :Bewaar spel -STR_015D_LOAD_GAME :Laai spel -STR_015E_QUIT_GAME :Verlaat Spel -STR_015F_QUIT :Uitgang -STR_ABANDON_GAME_QUERY :{YELLOW}Is jy seker jy wil die spel verlaat? -STR_0161_QUIT_GAME :{WHITE}Verlaat Spel +STR_015C_SAVE_GAME :Spaar Speletjie +STR_015D_LOAD_GAME :Laai speletjie +STR_015E_QUIT_GAME :Verlaat Speletjie +STR_015F_QUIT :Gaan uit +STR_ABANDON_GAME_QUERY :{YELLOW}Is jy seker jy wil die speletjie verlaat? +STR_0161_QUIT_GAME :{WHITE}Verlaat Speletjie STR_SORT_ORDER_TIP :{BLACK}Selekteer sorteer orde (afklimende/klimende) STR_SORT_CRITERIA_TIP :{BLACK}Selekteer sorteer maatstaf STR_SORT_BY :{BLACK}Sorteer by @@ -391,13 +391,14 @@ STR_ENGINE_SORT_POWER :Krag STR_ENGINE_SORT_INTRO_DATE :Inleiding Datum STR_ENGINE_SORT_RUNNING_COST :Loopkoste +STR_ENGINE_SORT_POWER_VS_RUNNING_COST :Krag/Loopkoste STR_ENGINE_SORT_CARGO_CAPACITY :Vrag Kapasiteit STR_NO_WAITING_CARGO :{BLACK}Geen vrag van enige tipe is op wag STR_AVAILABLE_TRAINS :{BLACK}Beskikbaar Treine STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Beskikbaar Voertuie STR_AVAILABLE_SHIPS :{BLACK}Beskikbaar Skepe STR_AVAILABLE_AIRCRAFT :{BLACK}Beskikbaar Vliegtuie -STR_AVAILABLE_ENGINES_TIP :{BLACK}Wys 'n lys van beskikbaare enjin tipes vir die voertiug tipe. +STR_AVAILABLE_ENGINES_TIP :{BLACK}Toon 'n lys van beskikbaare enjin tipes vir die voertiug tipe. STR_MANAGE_LIST :{BLACK}Bestuur lys STR_MANAGE_LIST_TIP :{BLACK}Stuur instruksies na alle voertuie in die lys STR_REPLACE_VEHICLES :Vervang voertuie @@ -425,11 +426,11 @@ STR_016E :{TINYFONT}{STRING}{} {STRING} STR_016F :{TINYFONT}{STRING}{} {STRING}{}{NUM} STR_0170 :{TINYFONT}{STRING}- -STR_0171_PAUSE_GAME :{BLACK}Pouseer spel -STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Bewaar spel. verlaat spel, uitgang +STR_0171_PAUSE_GAME :{BLACK}Pouse speletjie +STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Spaar speletjie, verlaat speletjie, laat vaar STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Vertoon lys van maatskappy se stasies -STR_0174_DISPLAY_MAP :{BLACK}Vertoon kaart -STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Vertoon kaart, stad index +STR_0174_DISPLAY_MAP :{BLACK}Vertoon werfkaart +STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Vertoon werfkaart, dorp gids STR_0176_DISPLAY_TOWN_DIRECTORY :{BLACK}Vertoon stad index STR_0177_DISPLAY_COMPANY_FINANCES :{BLACK}Vertoon maatskappy finasi�e inligting STR_0178_DISPLAY_COMPANY_GENERAL :{BLACK}Vertoon generale maatskappy inligting @@ -440,51 +441,51 @@ STR_017D_DISPLAY_LIST_OF_COMPANY :{BLACK}Vertoon lys van maatskappy se skepe STR_017E_DISPLAY_LIST_OF_COMPANY :{BLACK}Vertoon lys van maatskappy se vliegtuie STR_017F_ZOOM_THE_VIEW_IN :{BLACK}Vergroot die skerm -STR_0180_ZOOM_THE_VIEW_OUT :{BLACK}Verklein die skerm +STR_0180_ZOOM_THE_VIEW_OUT :{BLACK}Vergroot die siening uit STR_0181_BUILD_RAILROAD_TRACK :{BLACK}Bou spoorweg spoor STR_0182_BUILD_ROADS :{BLACK}Bou Paaie STR_0183_BUILD_SHIP_DOCKS :{BLACK}Bou skip hawe STR_0184_BUILD_AIRPORTS :{BLACK}Bou lughawe STR_0185_PLANT_TREES_PLACE_SIGNS :{BLACK}Plant boome, plaas tekens ens. -STR_0186_LAND_BLOCK_INFORMATION :{BLACK}Land area inligting +STR_0186_LAND_BLOCK_INFORMATION :{BLACK}Daal area informasie STR_0187_OPTIONS :{BLACK}Opsies STR_0188 :{BLACK}{SMALLUPARROW} STR_0189 :{BLACK}{SMALLDOWNARROW} -STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}kan nie versiening tussentyd verander nie... +STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}kan nie diens tussentyd verander nie... STR_018B_CLOSE_WINDOW :{BLACK}Maak venster toe STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Venster titel - sleep die om venster te beweeg STR_STICKY_BUTTON :{BLACK}Bemerk die venste as ontoemaakbaar by die"Sluit Alle Vensters" sleutel STR_RESIZE_BUTTON :{BLACK}Kliek en sleep om venster te vergroot STR_SAVELOAD_HOME_BUTTON :{BLACK}Kliek hier om na die huidige bewaar/laai leer te spring -STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Breek gebou af ens. op 'n landblokkie -STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Verlaag 'n hoek van land -STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog 'n hoek van land +STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Vernietig geboue ens. op 'n vierkant van daal +STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Laer 'n hoek van daal +STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog 'n hoek van daal STR_0190_SCROLL_BAR_SCROLLS_LIST :{BLACK}Rol baan - rol die lys op/af STR_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Rol baan - rol die lys op/af -STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Vertoon land hoogtelyne op kaart -STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Vertoon voertuie op kaart -STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Vertoon nywerheide op kaart -STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Vertoon vervoer roete op kaart -STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Vertoon plantegroei op kaart -STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Vertoon land eienaars op kaart -STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Skakel stad naame aan/af op kaart +STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Toon daal kontoere op werfkaart +STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Vertoon voertuie op werfkaart +STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Vertoon nywerhede op werfkaart +STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Vertoon vervoer roete op werfkaart +STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Vertoon plantegroei op werfkaart +STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Toon daal eienaars op werfkaart +STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Tokkel dorp name on/off op werfkaart STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Profyt die jaar: {CURRENCY} (verlede jaar: {CURRENCY}) ############ range for service numbers starts -STR_AGE :{COMMA} jaar{P "" e} ({COMMA}) -STR_AGE_RED :{RED}{COMMA} jaar{P "" e} ({COMMA}) +STR_AGE :{COMMA} ja{P ar re} ({COMMA}) +STR_AGE_RED :{RED}{COMMA} ja{P ar re} ({COMMA}) ############ range for service numbers ends STR_019C_ROAD_VEHICLE :Pad voertuig STR_019D_AIRCRAFT :Vliegtuig STR_019E_SHIP :Skip STR_019F_TRAIN :Trein -STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} raak nou oud -STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA} is besig om baie oud te word -STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} is besig om baie oud te word en moet dringend vervang word -STR_01A3_LAND_AREA_INFORMATION :{WHITE}Land Area Inligting -STR_01A4_COST_TO_CLEAR_N_A :{BLACK}Prys om te reinig: {LTBLUE}N/A -STR_01A5_COST_TO_CLEAR :{BLACK}Prys om te reinig: {LTBLUE}{CURRENCY} +STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} word ou +STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA} word baie ou +STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} word baie ou en dringend benodig vervang +STR_01A3_LAND_AREA_INFORMATION :{WHITE}Daal area informasie +STR_01A4_COST_TO_CLEAR_N_A :{BLACK}Kos om te reinig: {LTBLUE}N/A +STR_01A5_COST_TO_CLEAR :{BLACK}Kos om te reinig: {LTBLUE}{CURRENCY} STR_01A6_N_A :N/A STR_01A7_OWNER :{BLACK}Eienaar: {LTBLUE}{STRING} STR_01A8_LOCAL_AUTHORITY :{BLACK}Plaaslike raad: {LTBLUE}{STRING} @@ -562,7 +563,7 @@ STR_01EE_TRACK_INDEX :{TINYFONT}{BLACK}Liedjie Index STR_01EF_PROGRAM :{TINYFONT}{BLACK}Musiek Lys - '{STRING}' STR_01F0_CLEAR :{TINYFONT}{BLACK}Reinig -STR_01F1_SAVE :{TINYFONT}{BLACK}Bewaar +STR_01F1_SAVE :{TINYFONT}{BLACK}Spaar STR_01F2_CURRENT_PROGRAM_OF_MUSIC :{BLACK}Huidige musiek keuse STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Kies 'alle liedjies' musiek lys STR_01F4_SELECT_OLD_STYLE_MUSIC :{BLACK}Kies 'ou styl musiek' musiek lys @@ -570,10 +571,10 @@ STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Kies 'Gewoonte 1' (gebruiker-gestel) musiek lys STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Kies 'Gewoonte 2' (gebruiker-gestel) musiek lys STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Reinig huidige musiek keuse (slegs Gewoonte1 of Gewoonte2) -STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Bewaar musiek stellings +STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Spaar musiek stellings STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Kliek op musiek liedjie om by huidige musiek lys in te sit (slegs Gewoonte1 of Gewoonte2) STR_CLICK_ON_TRACK_TO_REMOVE :{BLACK}Kliek op musiek lied om te verwyder van huidige program (Slegs Gewoonte1 of Gewoonte2) -STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Skakel musiek lys skuifel aan/af +STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Tokkel musiek lys skuifel aan/af STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vertoon musiek liedjie keuse venster STR_01FD_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliek op diens om uitsig te senter op nywerheid/stad STR_01FE_DIFFICULTY :{BLACK}Moeilikheid ({STRING}) @@ -584,16 +585,16 @@ STR_0203_SHOW_LAST_MESSAGE_NEWS :{BLACK}Vertoon laaste boodskap/nuus verslag, vertoon boodskap opsies STR_0204_MESSAGE_OPTIONS :{WHITE}Boodskap Opsies STR_0205_MESSAGE_TYPES :{BLACK}Boodskap tipes: -STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Aankoms van eerste voetuig by speler se stasie -STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Aankoms van eerste voertuig by mededinger se stasie +STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Aankoms van eerste voetuig tot speler se stasie +STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Aankoms van eerste voertuig tot mededinger se stasie STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Ongelukke / rampe -STR_0209_COMPANY_INFORMATION :{YELLOW}Maatkappy inligting +STR_0209_COMPANY_INFORMATION :{YELLOW}Maatskappy informasie STR_020A_ECONOMY_CHANGES :{YELLOW}Ekonomie veranderings -STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Raad / inligting op speler se voertuie +STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Raad / informasie op speler se voertuie STR_020C_NEW_VEHICLES :{YELLOW}Nuwe voertuie STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Veranderings na vrag aanvarde STR_020E_SUBSIDIES :{YELLOW}Subsidiee -STR_020F_GENERAL_INFORMATION :{YELLOW}Generale inligting +STR_020F_GENERAL_INFORMATION :{YELLOW}Generale informasie STR_MESSAGES_ALL :{YELLOW}Stel alle boodskap tipes na: Af/Opsomming/Volle STR_MESSAGE_SOUND :{YELLOW}Speel geluid vir opsommige nuus boodskappe STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...te ver van vorige destinasie @@ -613,36 +614,36 @@ STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{PLAYERNAME} van {COMPANY} behaal '{STRING}' stand! STR_021F :{BLUE}{COMMA} STR_0221_OPENTTD :{YELLOW}OpenTTD -STR_0222_SCENARIO_EDITOR :{YELLOW}Draaiboek Redakteur -STR_0223_LAND_GENERATION :{WHITE}Land Ontwikkeling +STR_0222_SCENARIO_EDITOR :{YELLOW}Draaiboek Redigeerder +STR_0223_LAND_GENERATION :{WHITE}Daal Generasie STR_0224 :{BLACK}{UPARROW} STR_0225 :{BLACK}{DOWNARROW} STR_0228_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Vergroot land area om te verlaag/verhoog STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Verminder land area om te verlaag/verhoog -STR_022A_GENERATE_RANDOM_LAND :{BLACK}Ontwikkel lukraak land -STR_022B_RESET_LANDSCAPE :{BLACK}Herstel landerye -STR_022C_RESET_LANDSCAPE :{WHITE}Herstel landerye +STR_022A_GENERATE_RANDOM_LAND :{BLACK}Opwek lukraak daal +STR_022B_RESET_LANDSCAPE :{BLACK}Herstel landskap +STR_022C_RESET_LANDSCAPE :{WHITE}Herstel landskap STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Is jy seker jy wil alle speler-besittend eiendom verwyder? -STR_022E_LANDSCAPE_GENERATION :{BLACK}Landerye ontwikkeling -STR_022F_TOWN_GENERATION :{BLACK}Stad ontwikkeling -STR_0230_INDUSTRY_GENERATION :{BLACK}Nyweheid ontwikkeling -STR_0231_ROAD_CONSTRUCTION :{BLACK}Pad konstruksie -STR_0233_TOWN_GENERATION :{WHITE}Stad Ontwikkeling -STR_0234_NEW_TOWN :{BLACK}Nuwe Stad -STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Bou nuwe stad -STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Stad kan nie hier gebou word nie... -STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...te naby aan kant van kaart -STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...te naby aan 'n ander stad -STR_0239_SITE_UNSUITABLE :{WHITE}...plek ongeskik -STR_023A_TOO_MANY_TOWNS :{WHITE}...te veel stede +STR_022E_LANDSCAPE_GENERATION :{BLACK}Landskap generasie +STR_022F_TOWN_GENERATION :{BLACK}Dorp generasie +STR_0230_INDUSTRY_GENERATION :{BLACK}Nyweheid generasie +STR_0231_ROAD_CONSTRUCTION :{BLACK}Pad samestelling +STR_0233_TOWN_GENERATION :{WHITE}Dorp Generasie +STR_0234_NEW_TOWN :{BLACK}Nuwe Dorp +STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Bou nuwe dorp +STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Dorp kan nie hier gebou word nie... +STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...te naby aan rand van werfkaart +STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...te naby aan 'n ander dorp +STR_0239_SITE_UNSUITABLE :{WHITE}...werf nie geskik nie +STR_023A_TOO_MANY_TOWNS :{WHITE}...te veel dorpe STR_CANNOT_GENERATE_TOWN :{WHITE}Kan nie enige stede bou nie STR_NO_SPACE_FOR_TOWN :{WHITE}...daar is nie meer spasie op die kaart nie -STR_023B_INCREASE_SIZE_OF_TOWN :{BLACK}Vergroot stad -STR_023C_EXPAND :{BLACK}Uitbrei -STR_023D_RANDOM_TOWN :{BLACK}Lukraak Stad -STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION :{BLACK}Bou stad in lukraak plek -STR_023F_INDUSTRY_GENERATION :{WHITE}Nywerheid Ontwikkeling -STR_0240_COAL_MINE :{BLACK}Steenkool Myn +STR_023B_INCREASE_SIZE_OF_TOWN :{BLACK}verhoog grootte van dorp +STR_023C_EXPAND :{BLACK}Sprei uit +STR_023D_RANDOM_TOWN :{BLACK}Lukraak Dorp +STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION :{BLACK}Bou dorp in lukraak lokasie +STR_023F_INDUSTRY_GENERATION :{WHITE}Nywerheid Generasie +STR_0240_COAL_MINE :{BLACK}Kool Myn STR_0241_POWER_STATION :{BLACK}Krag Stasie STR_0242_SAWMILL :{BLACK}Saagmeul STR_0243_FOREST :{BLACK}Woud @@ -658,134 +659,137 @@ STR_024D_FOOD_PROCESSING_PLANT :{BLACK}Kos Verwerking Fabriek STR_024E_PRINTING_WORKS :{BLACK}Drukwerke STR_024F_GOLD_MINE :{BLACK}Goud Myn -STR_0250_LUMBER_MILL :{BLACK}Timmehoutmeul +STR_0250_LUMBER_MILL :{BLACK}Timmehout Meule STR_0251_FRUIT_PLANTATION :{BLACK}Vrugte Plantasie STR_0252_RUBBER_PLANTATION :{BLACK}Gomlastiek Plantasie -STR_0253_WATER_SUPPLY :{BLACK}Water Lewering +STR_0253_WATER_SUPPLY :{BLACK}Water Verskaf STR_0254_WATER_TOWER :{BLACK}Water Toring STR_0255_DIAMOND_MINE :{BLACK}Diamant Myn STR_0256_COPPER_ORE_MINE :{BLACK}Koper Erts Myn STR_0257_COTTON_CANDY_FOREST :{BLACK}Spookasem Woud STR_0258_CANDY_FACTORY :{BLACK}Lekker Fabriek STR_0259_BATTERY_FARM :{BLACK}Battery Boerdery -STR_025A_COLA_WELLS :{BLACK}Cola Bron +STR_025A_COLA_WELLS :{BLACK}Cola Spruite STR_025B_TOY_SHOP :{BLACK}Speelgoed Winkel STR_025C_TOY_FACTORY :{BLACK}Speelgoed Fabriek STR_025D_PLASTIC_FOUNTAINS :{BLACK}Plastiek Fonteine STR_025E_FIZZY_DRINK_FACTORY :{BLACK}Koeldrank Fabriek -STR_025F_BUBBLE_GENERATOR :{BLACK}Borrel Ontwikkelaar +STR_025F_BUBBLE_GENERATOR :{BLACK}Borrel Genereerder STR_0260_TOFFEE_QUARRY :{BLACK}Tameletjie Prooi STR_0261_SUGAR_MINE :{BLACK}Suiker Myn -STR_0262_CONSTRUCT_COAL_MINE :{BLACK}Bou Steenkool Myn +STR_0262_CONSTRUCT_COAL_MINE :{BLACK}Bou Kool Myn STR_0263_CONSTRUCT_POWER_STATION :{BLACK}Bou Krag Stasie -STR_0264_CONSTRUCT_SAWMILL :{BLACK}Bou Saagmeul +STR_0264_CONSTRUCT_SAWMILL :{BLACK}Bou Saagmeule STR_0265_PLANT_FOREST :{BLACK}Beplant Woud STR_0266_CONSTRUCT_OIL_REFINERY :{BLACK}Bou Olie Raffineerdery -STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Bou Olieboor (Kan slegs naby aan kante van kaart gebou word) +STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Bou Olieboor (Kan slegs naby aan kante van werfkaart gebou word) STR_0268_CONSTRUCT_FACTORY :{BLACK}Bou Fabriek -STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Bou Staalmeul +STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Bou Staal Meule STR_026A_CONSTRUCT_FARM :{BLACK}Bou Boerdery STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Bou Yster Erts Myn -STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Bou Olie Bron -STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bou Bank (kan slegs in stede met 'n populasie grooter as 1200 gebou word) -STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Bou Papiermeul +STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Bou Olie Spruite +STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bou Bank (kan slegs in dorpe met 'n populasie grooter as 1200 gebou word) +STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Bou Papier Meule STR_026F_CONSTRUCT_FOOD_PROCESSING :{BLACK}Bou Kos Verwerkings Fabriek STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Bou Drukwerke STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Bou Goud Myn -STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bou Bank (Kan slegs in stede gebou word) -STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Bou Timmerhoutmeul (om reenwoud te reinig en hout te maak) +STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bou Bank (Kan slegs in dorpe gebou word) +STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Bou Timmerhoutmeul (om reenwoud te reinig en Hout te maak) STR_0274_PLANT_FRUIT_PLANTATION :{BLACK}Beplant Vrugte Plantasie STR_0275_PLANT_RUBBER_PLANTATION :{BLACK}Beplant Gomlastiek Plantasie -STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Bou Water Lewering -STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Bou Water Toring (Kan slegs in stede gebou word) +STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Bou Water Verskaf +STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Bou Water Toring (Kan slegs in dorpe gebou word) STR_0278_CONSTRUCT_DIAMOND_MINE :{BLACK}Bou Diamant Myn STR_0279_CONSTRUCT_COPPER_ORE_MINE :{BLACK}Bou Koper Erts Myn STR_027A_PLANT_COTTON_CANDY_FOREST :{BLACK}Beplant Spookasem Woud STR_027B_CONSTRUCT_CANDY_FACTORY :{BLACK}Bou Lekker Fabriek STR_027C_CONSTRUCT_BATTERY_FARM :{BLACK}Bou Battery Boerdery -STR_027D_CONSTRUCT_COLA_WELLS :{BLACK}Bou Cola Bron +STR_027D_CONSTRUCT_COLA_WELLS :{BLACK}Bou Cola Spruite STR_027E_CONSTRUCT_TOY_SHOP :{BLACK}Bou Speelgoed Winkel STR_027F_CONSTRUCT_TOY_FACTORY :{BLACK}Bou Speelgoed Fabriek STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS :{BLACK}Bou Plastiek Fonteine STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY :{BLACK}Bou Koeldrank Fabriek -STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Bou Borrel Ontwikkelaar +STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Bou Borrel Genereerder STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Bou Tameletjie Prooi STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Bou Suiker Myn STR_0285_CAN_T_BUILD_HERE :{WHITE}Kan nie {STRING} hier bou nie... -STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...moet eers stad bou -STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...slegs een toegelaat per stad +STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...moet eers dorp bou +STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...alleen een toegelaat per dorp STR_0288_PLANT_TREES :{BLACK}Boome beplant STR_0289_PLACE_SIGN :{BLACK}Plaas teken STR_028A_RANDOM_TREES :{BLACK}Lukraak Boome -STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Beplant boome lukraake oor laderye -STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plaas rotse op landerye +STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Beplant bome wildweg oor landskap +STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plaas rotse op landskap STR_028D_PLACE_LIGHTHOUSE :{BLACK}Plaas vuurtoring STR_028E_PLACE_TRANSMITTER :{BLACK}Plaas sender STR_028F_DEFINE_DESERT_AREA :{BLACK}Bepaal woestyn area.{}Druk en hou CTRL om te verwyder -STR_0290_DELETE :{BLACK}Uitwis -STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Uitwis hele stad -STR_0292_SAVE_SCENARIO :Bewaar draaiboek +STR_CREATE_LAKE :{BLACK}Bepaal water area.{}Maak 'n kanaal, tensy CTRL is ingehou teen seevlak, dan sal dit vloed vul die omgewings +STR_0290_DELETE :{BLACK}Uitvee +STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Uitvee hierdie dorp heeltemal +STR_0292_SAVE_SCENARIO :Spaar draaiboek STR_0293_LOAD_SCENARIO :Laai draaiboek STR_LOAD_HEIGHTMAP :Laai Hoogtekaart -STR_0294_QUIT_EDITOR :Verlaat redakteur +STR_0294_QUIT_EDITOR :Laat vaar redigeerder STR_0295 : -STR_0296_QUIT :Verlaat -STR_0297_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Bewaar draaiboek, laai draaiboek, verlaat draaiboek redakteur, Verlaat +STR_0296_QUIT :Laat vaar +STR_0297_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}spaar draaiboek, laai draaiboek, verlaat draaiboek redigeerder, laat vaar STR_0298_LOAD_SCENARIO :{WHITE}Laai Draaiboek -STR_0299_SAVE_SCENARIO :{WHITE}Bewaar Draaiboek +STR_0299_SAVE_SCENARIO :{WHITE}Spaar Draaiboek STR_029A_PLAY_SCENARIO :{BLACK}Speel Draaiboek STR_PLAY_HEIGHTMAP :{BLACK}Speel Hoogtekaart STR_PLAY_HEIGHTMAP_HINT :{BLACK}begin 'n nuwe spel, gebruikend 'n hoogtekaart as oStart a new game, using a heightmap as landscape STR_QUIT_SCENARIO_QUERY :{YELLOW}Is jy seker jy wil die draaiboek verlaat? -STR_029C_QUIT_EDITOR :{WHITE}Verlaat Redakteur -STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in stede met 'n populasie van te minste 1200 gebou word +STR_029C_QUIT_EDITOR :{WHITE}Laat vaar redigeerder +STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in dorpe met 'n populasie van te minste 1200 gebou word STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Beweeg die begin datum 1 jaar terug STR_029F_MOVE_THE_STARTING_DATE :{BLACK}Beweeg die begin datum 1 jaar voor -STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...albei einde van brug moet op land wees +STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...albei einde van brug moet op daal wees STR_02A1_SMALL :{BLACK}Klein STR_02A2_MEDIUM :{BLACK}Middel STR_02A3_LARGE :{BLACK}Groot -STR_02A4_SELECT_TOWN_SIZE :{BLACK}Kies stad groote -STR_02A5_TOWN_SIZE :{YELLOW}Stad groote: +STR_SCENARIO_EDITOR_CITY :{BLACK}Stad +STR_02A4_SELECT_TOWN_SIZE :{BLACK}Kies dorp groote +STR_02A5_TOWN_SIZE :{YELLOW}Dorp groote: STR_02B6 :{STRING} - {STRING} -STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS :{BLACK}Wys laaste boodskap of nuus verslag +STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS :{BLACK}Toon laas boodskap of nuus verslag STR_OFF :Af STR_SUMMARY :Opsomming STR_FULL :Vol STR_02BA :{SILVER}- - {COMPANY} - - -STR_02BB_TOWN_DIRECTORY :Stad index -STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Voertuig ontwerp naame +STR_02BB_TOWN_DIRECTORY :Dorp gids +STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Voertuig ontwerp name STR_02BD :{BLACK}{STRING} -STR_02BE_DEFAULT :Gebrekte +STR_02BE_DEFAULT :Verstek STR_02BF_CUSTOM :Gewoonte -STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Bewaar gewoonte naame +STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Spaar gewoonte name STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Voertuig ontwerp name keuse -STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Bewaar doelgeboude voertuig ontwerp naame +STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Spaar pasgemaak voertuig ontwerp name STR_CHECKMARK :{CHECKMARK} ############ range for menu starts -STR_02C3_GAME_OPTIONS :Spel opsies -STR_02C5_DIFFICULTY_SETTINGS :Moeilikheid stellings -STR_02C7_CONFIG_PATCHES :Skep stukke +STR_02C3_GAME_OPTIONS :Speletjie opsies +STR_02C5_DIFFICULTY_SETTINGS :Moeite stellings +STR_02C7_CONFIG_PATCHES :Konfigureer laslappe STR_NEWGRF_SETTINGS :Newgrf stellings +STR_TRANSPARENCY_OPTIONS :Deursigtigheid opsies STR_GAMEOPTMENU_0A : -STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Stad naame vertoon -STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stasie naame vertoon +STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Dorp name vertoon +STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stasie name vertoon STR_02CE_SIGNS_DISPLAYED :{SETX 12}Tekens vertoon STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Wegpunte vertoon STR_02D0_FULL_ANIMATION :{SETX 12}Volle animasie -STR_02D2_FULL_DETAIL :{SETX 12}Volle aanwyse +STR_02D2_FULL_DETAIL :{SETX 12}Vol aanwyse STR_02D4_TRANSPARENT_BUILDINGS :{SETX 12}Deurskynend geboue STR_TRANSPARENT_SIGNS :{SETX 12}Deurskynend stasie tekens ############ range ends here ############ range for menu starts -STR_02D5_LAND_BLOCK_INFO :Land area inligting +STR_02D5_LAND_BLOCK_INFO :Daal area informasie STR_02D6 : STR_CONSOLE_SETTING :Skakel troos -STR_02D7_SCREENSHOT_CTRL_S :Skermskut (Ctrl-S) -STR_02D8_GIANT_SCREENSHOT_CTRL_G :Reuse Skermskut (Ctrl-G) +STR_02D7_SCREENSHOT_CTRL_S :Skermskyf (Ctrl-S) +STR_02D8_GIANT_SCREENSHOT_CTRL_G :Reus Skermskyf (Ctrl-G) STR_02D9_ABOUT_OPENTTD :Rakend 'OpenTTD' ############ range ends here @@ -793,31 +797,31 @@ STR_02DA_ON :{BLACK}An STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Vertoon subsidiee STR_02DD_SUBSIDIES :Subsidiee -STR_02DE_MAP_OF_WORLD :Kaart van wêreld +STR_02DE_MAP_OF_WORLD :Werfkaart van wêreld STR_EXTRA_VIEW_PORT :Ekstra gesigswerf STR_SIGN_LIST :Teken lys -STR_02DF_TOWN_DIRECTORY :Stad indeks +STR_02DF_TOWN_DIRECTORY :Dorp gids STR_TOWN_POPULATION :{BLACK}Wereld populasie: {COMMA} STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Gesigswerf {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Afskryf na gesigswerf -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Afskryf die lokasie van die wereldwerf na die gesigswerf +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopie na gesigswerf +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopie die lokasie van die wereldwerf na die gesigswerf STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Deeg van gesigswerf STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Deeg die lokasie van die gesigspunt na die hoofskerm -STR_02E0_CURRENCY_UNITS :{BLACK}Koers eenheide +STR_02E0_CURRENCY_UNITS :{BLACK}Koers eenhede STR_02E1 :{BLACK}{SKIP}{STRING} -STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Koers eendheide keuse -STR_MEASURING_UNITS :{BLACK}Maatre� eenheide +STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Koers eendhede keuse +STR_MEASURING_UNITS :{BLACK}Meet eenhede STR_02E4 :{BLACK}{SKIP}{SKIP}{STRING} -STR_MEASURING_UNITS_SELECTION :{BLACK}Maatre� eenheide keuse +STR_MEASURING_UNITS_SELECTION :{BLACK}Meet eenhede keuse STR_02E6_ROAD_VEHICLES :{BLACK}Pad voertuie STR_02E7 :{BLACK}{SKIP}{SKIP}{SKIP}{STRING} STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Kies kant van pad waarop voetuie bestuur STR_02E9_DRIVE_ON_LEFT :Bestuur op links STR_02EA_DRIVE_ON_RIGHT :Bestuur op regs -STR_02EB_TOWN_NAMES :{BLACK}Stad naame +STR_02EB_TOWN_NAMES :{BLACK}Dorp name STR_02EC :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} -STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Kies styl van stad naame +STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Kies styl van stad name STR_02F4_AUTOSAVE :{BLACK}Outobewaar STR_02F5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} @@ -829,38 +833,38 @@ STR_02FB_START_A_NEW_GAME :{BLACK}Begin nuwe spel STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Laai 'n bewaarde spel STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Skep 'n doelgeboude spel wêreld/draaiboek -STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Kies enkel-speler spel -STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Kies veelspeler spel met 2-8 spelers -STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Vertoon spel opsies -STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Vertoon moeilikheid opsies -STR_0303_START_A_NEW_GAME_USING :{BLACK}Begin 'n nuwe spel, met 'n doelgemaakte draaiboek -STR_0304_QUIT :{BLACK}Verlaat -STR_0305_QUIT_OPENTTD :{BLACK}Verlaat 'OpenTTD' +STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Kies enkel-speler speletjie +STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Kies multispeler speletjie van 2-8 spelers +STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Vertoon speletjie opsies +STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Vertoon moeite opsies +STR_0303_START_A_NEW_GAME_USING :{BLACK}Begin 'n nuwe speletjie, met 'n pasgemaak draaiboek +STR_0304_QUIT :{BLACK}Laat vaar +STR_0305_QUIT_OPENTTD :{BLACK}Laat vaar 'OpenTTD' STR_0307_OPENTTD :{WHITE}OpenTTD {REV} -STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in stede gebou word -STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Kies 'gematig' landerye styl -STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies 'onder-noordpool' landerye styl -STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies 'onder-tropise' landerye styl -STR_0311_SELECT_TOYLAND_LANDSCAPE :{BLACK}Kies 'speelgoedland' landerye styl -STR_0312_FUND_CONSTRUCTION_OF_NEW :{BLACK}Befonds gebou van nuwe nywerheid +STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in dorpe gebou word +STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Kies 'matig' landskap styl +STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies 'onder-noordpool' landskap styl +STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies 'onder-tropise' landskap styl +STR_0311_SELECT_TOYLAND_LANDSCAPE :{BLACK}Kies 'speelgoedland' landskap styl +STR_0312_FUND_CONSTRUCTION_OF_NEW :{BLACK}Fonds samestelling van nuwe nywerheid ############ range for menu starts -STR_INDUSTRY_DIR :Nywerheid Indeks -STR_0313_FUND_NEW_INDUSTRY :Befonds nuwe nywerheid +STR_INDUSTRY_DIR :Nywerheid Gids +STR_0313_FUND_NEW_INDUSTRY :Fonds nuwe nywerheid ############ range ends here -STR_0314_FUND_NEW_INDUSTRY :{WHITE}Befonds nuwe nywerheid +STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fonds nuwe nywerheid STR_JUST_STRING :{STRING} -STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in stede gebou word +STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in dorpe gebou word STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan slegs in reenwoud areas gebou word STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan slegs in woestyn areas gebou word -STR_0319_PAUSED :{YELLOW}* * POUSEER * * +STR_0319_PAUSED :{YELLOW}* * GEPOOS * * -STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Skermskut suksesvollig bewaar as '{STRING}' -STR_031C_SCREENSHOT_FAILED :{WHITE}Skermskut gedop! +STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Skermskyf suksesvol gespaar as '{STRING}' +STR_031C_SCREENSHOT_FAILED :{WHITE}Skermskyf misluk! -STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Koop land vir toekomende gebruik -STR_032F_AUTOSAVE :{RED}OUTOBEWAAR +STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Koop daal vir toekoms gebruik +STR_032F_AUTOSAVE :{RED}OUTOSPAAR STR_SAVING_GAME :{RED}* * BEWAAR SPEL * * STR_SAVE_STILL_IN_PROGRESS :{WHITE}Bewaar nog in vorder, wag asb tot dit klaar is! STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Straat styl musiek' musiek lys @@ -871,6 +875,11 @@ ############ start of townname region STR_TOWNNAME_ORIGINAL_ENGLISH :Engels (Oorspronkilik) STR_TOWNNAME_FRENCH :Frans +STR_TOWNNAME_GERMAN :Duits +STR_TOWNNAME_ADDITIONAL_ENGLISH :Engels (addisioneel) +STR_TOWNNAME_LATIN_AMERICAN :Latyns-Amerikaans +STR_TOWNNAME_SILLY :Snaaks +STR_TOWNNAME_SWEDISH :Sweeds STR_TOWNNAME_DUTCH :Hollands STR_TOWNNAME_FINNISH :Finnish STR_TOWNNAME_POLISH :Polish @@ -881,6 +890,10 @@ STR_TOWNNAME_ROMANIAN :Romanian STR_TOWNNAME_CZECH :Czech STR_TOWNNAME_SWISS :Swiss +STR_TOWNNAME_DANISH :Deens +STR_TOWNNAME_TURKISH :Turks +STR_TOWNNAME_ITALIAN :Italiaans +STR_TOWNNAME_CATALAN :Catalan ############ end of townname region STR_CURR_GBP :Pounds () @@ -911,19 +924,25 @@ STR_CURR_SKK :Slovak Koruna (SKK) STR_CURR_BRR :Brazilian Real (BRL) -STR_CURR_CUSTOM :Gewoonte... +STR_CURR_CUSTOM :Gebruiklike... STR_OPTIONS_LANG :{BLACK}Taal STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} +STR_OPTIONS_LANG_TIP :{BLACK}Kies die koppelvlak taal om te gebruik STR_OPTIONS_FULLSCREEN :{BLACK}Volskerm +STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Kies die blokkie om OpenTTD in volleskerm te speel +STR_OPTIONS_RES :{BLACK}Skerm resolusie STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} +STR_OPTIONS_RES_TIP :{BLACK}Kies die skerm resolusie om te gebruik +STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Skermskyf formaat STR_OPTIONS_SCREENSHOT_FORMAT_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} +STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Kies die skermskyf formaat om te gebruik STR_AUTOSAVE_1_MONTH :Elke maand -STR_AUTOSAVE_FAILED :{WHITE}Outobewaar gedop +STR_AUTOSAVE_FAILED :{WHITE}Outospaar misluk STR_MONTH_JAN :Januarie STR_MONTH_FEB :Februarie @@ -945,147 +964,203 @@ STR_PASSENGERS :passasiers STR_BAGS :sakke +STR_TONS :tonne STR_LITERS :litres STR_ITEMS :items STR_CRATES :hokke +STR_RES_OTHER :ander STR_NOTHING : STR_CANT_SHARE_ORDER_LIST :{WHITE}Kan nie opdraglys deel nie... -STR_CANT_COPY_ORDER_LIST :{WHITE}Kan nie opdraglys afskryf nie... -STR_END_OF_SHARED_ORDERS :{SETX 10}- - Einde van Verdeelde Opdrae - - +STR_CANT_COPY_ORDER_LIST :{WHITE}Kan nie opdrag lys kopie nie... +STR_END_OF_SHARED_ORDERS :{SETX 10}- - Einde van Gedeel Opdrae - - STR_EURO_INTRODUCE :{BLACK}{BIGFONT}Europees Geldelik Samesmelting!{}{}Die Euro is ingevoer as die enigste koers vir daagliks transaksies in u land! # Start of order review system. # DON'T ADD OR REMOVE LINES HERE STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Vliegtuig {COMMA} het te min opdrae in die opgawe -STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}vliegtuig {COMMA} het 'n nietig opdrag +STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}vliegtuig {COMMA} het 'n leemte opdrag STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Vliegtuig {COMMA} het duplikaat opdrae -STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Vliegtuig {COMMA} hen 'n swak opdrag in sy opdrae +STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Vliegtuig {COMMA} hen 'n ongeldig stasie in sy opdrae # end of order system -STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Outohernuwe gedop op vliegtuig {COMMA} (geldperk) +STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Outohernuwe misluk op vliegtuig {COMMA} (geld perk) +STR_CONFIG_PATCHES :{BLACK}Konfigureer Laslappe +STR_CONFIG_PATCHES_TIP :{BLACK}Konfigureer die laslappe +STR_CONFIG_PATCHES_CAPTION :{WHITE}konfigureer Laslappe STR_CONFIG_PATCHES_OFF :Af STR_CONFIG_PATCHES_ON :Aan STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Wys voertuig spoed in die standbaan: {ORANGE}{STRING} -STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Toelaat opbou op hellings en strande: {ORANGE}{STRING} -STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Toelaat meer werklikheide opvanggebied groote: {ORANGE}{STRING} +STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Laattoe gebou op skuinstes en kusse: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Laattoe terraforming onder geboue, spoore, ens. (autoslope): {ORANGE}{STRING} +STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Laattoe meer realisties grootte opvanggebied: {ORANGE}{STRING} STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Toelaat verwydering van meer stad-besite paaie, bruge, ens: {ORANGE}{STRING} -STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Stel in staat die gebou van baie lang treine: {ORANGE}{STRING} -STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Stel in staat realistiese versnelling vir treine: {ORANGE}{STRING} +STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Ontsper gebou van baie lang treine: {ORANGE}{STRING} +STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Ontsper realistiese versnelling vir treine: {ORANGE}{STRING} STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Verbied triene en skepe om 90 graad draaie te maak: {ORANGE}{STRING} {LTBLUE} (benodig NPF) -STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Verbind trein stasies wat langsaan gebou is: {ORANGE}{STRING} +STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}sluit aan trein stasies gebou naby mekaar: {ORANGE}{STRING} STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Verlaat stasie as enige vrag vol is, as 'volle gelaai': {ORANGE}{STRING} STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Gebruik verebeterde laai algoritme: {ORANGE}{STRING} +STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Laai voertuie geleidelik: {ORANGE}{STRING} STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflasie: {ORANGE}{STRING} STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Aflewer vrag na 'n stasie slegs as daar 'n aanvrag is:: {ORANGE}{STRING} STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Toelaat opbou van baie lank bruge: {ORANGE}{STRING} -STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Toelaat gaan na depot opdrae: {ORANGE}{STRING} -STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Toelaat veelvout soortgelyke nywerheide per stad: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Nywerheide van die selfde tipe kan naby aan mekaar gebou word: {ORANGE}{STRING} -STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Altyd wys lang datum in die standbaan: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Wys seine op die bestuur kant: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Wys finansies venster op die einde van die jaar: {ORANGE}{STRING} -STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch bestaanbaar deurgaande behandeling: {ORANGE}{STRING} +STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Laattoe gaan na depot opdrae: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Manual primêre nywerheid konstruksie metode: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :geen +STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :as ander nywerhede +STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Laattoe vele soortgelyke nywerhede per dorp: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Nywerhede van die selfde tipe kan naby aan mekaar gebou word: {ORANGE}{STRING} +STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Toon altyd lang datum in die standbaan: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Toon seine op die bestuur kant: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Toon finansies venster op die einde van die jaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch versoenbaar deurgaande hantering: {ORANGE}{STRING} STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Pad voertuig toustaan (met kwantum effekte): {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Was skerm as muis by die kant is: {ORANGE}{STRING} -STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Toelaat die omkooping van plaaslike gesag: {ORANGE}{STRING} +STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Laattoe die omkooping van plaaslike raad: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE :{LTBLUE}Laattoe die koop van eksklusief vervoer regte: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY :{LTBLUE}Laattoe die stuur van geld na ander maatskappye: {ORANGE}{STRING} STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Ongelyk stasies: {ORANGE}{STRING} -STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Toelaat gebou van teenstandige stasies: {ORANGE}{STRING} +STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nuwe wêreldwyd padvind (NPF, oorbrug NTP): {ORANGE}{STRING} +STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Gewig vermenivoud vir vrag om swaar treine te simuleer: {ORANGE}{STRING} +STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Laattoe skyf-deur pad stop op dorp besit paaie: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Laattoe gebou van aangrensend stasies: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Klein lughawe is altyd toegelaat: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Altyd laattoe klein lughawenst: {ORANGE}{STRING} STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Waarsku as trein verloor is: {ORANGE}{STRING} STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Bespreek voertuig se opdrae: {ORANGE}{STRING} STR_CONFIG_PATCHES_ORDER_REVIEW_OFF :nee -STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :ja, maar uitsluit gestopde voertuie +STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :ja, maar sluit uit gestop voertuie STR_CONFIG_PATCHES_ORDER_REVIEW_ON :van alle voertuie STR_CONFIG_PATCHES_WARN_INCOME_LESS :{LTBLUE}Waarsku as trein inkomste negatief is: {ORANGE}{STRING} STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}Voertuie verval nooit nie: {ORANGE}{STRING} STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Outohernuwe voertuig as hy oud raak -STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Outohernuwe wanner voertuig is {ORANGE}{STRING}{LTBLUE} maande voor/agter max ouderdom +STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Outohernuwe wanner voertuig is {ORANGE}{STRING}{LTBLUE} maande voor/agter maks ouderdom STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Outohernuwe minimum vereisde geld vir hernuwe: {ORANGE}{STRING} -STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Tydgrens van fout boodskap: {ORANGE}{STRING} -STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Wys stad populasie in stad naam teken: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Duur van fout boodskap: {ORANGE}{STRING} +STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Toon dorp populasie in die dorp naam etiket: {ORANGE}{STRING} STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Onsigbaar boome (met deurskynend geboue): {ORANGE}{STRING} -STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Land ontwikkelaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Land genereerder: {ORANGE}{STRING} STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Oorspronklik STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis -STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Max afstand van kant vir Olie Raffineerderye {ORANGE}{STRING} +STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maks afstand van kant vir Olie Raffineerderye {ORANGE}{STRING} STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Sneeu lyn hoogte: {ORANGE}{STRING} -STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Ruheid van terrein (slegs TerraGenesis) : {ORANGE}{STRING} +STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Grofheif van terrein (slegs TerraGenesis) : {ORANGE}{STRING} STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Baie Glad STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH :Glad -STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Ru -STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Baie Ru +STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Rof +STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Baie Rof STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Boom plaas algoritme: {ORANGE}{STRING} STR_CONFIG_PATCHES_TREE_PLACER_NONE :Geen STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL :Oorspronklik -STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Verbeterde +STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Verbeter STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION :{LTBLUE}Hoogtekaart rotasie: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Die hoogtevlak 'n platte landerye kaart kry: {ORANGE}{STRING} +STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Teller vooruit +STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE :Vooruit +STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Die hoogte vlak 'n plat draaiboek werfkaart word: {ORANGE}{STRING} -STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max stasie omvang: {ORANGE}{STRING} {RED}Waarskuwing: Ho�stelling vertraag spel +STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maks stasie gesprei: {ORANGE}{STRING} {RED}Waarskuwing: hoë stel vertraag speletjie STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Versien helikopters by helihawes outomaties: {ORANGE}{STRING} STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Verbind landereye werktuigbaan na spoor/pad/water/lughawe werktuigbaan: {ORANGE}{STRING} STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Omkeer rol rigting: {ORANGE}{STRING} -STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Wys maatskappy lewerye: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Versag kykpoort rollees: {ORANGE}{STRING} +STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Toon 'n meting wanneer jy verskeie bou-gereedskap gebruik: {ORANGE}{STRING} +STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Toon maatskappy lewerye: {ORANGE}{STRING} STR_CONFIG_PATCHES_LIVERIES_NONE :Geen STR_CONFIG_PATCHES_LIVERIES_OWN :Eie maatskappy STR_CONFIG_PATCHES_LIVERIES_ALL :Alle maatskappye -STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Verkies span gesels met : {ORANGE}{STRING} +STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Verkies span klets met : {ORANGE}{STRING} +STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Af +STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Werfkaart rolwiel spoed: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Regs-kliek emulasie: {ORANGE}{STRING} +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-kliek +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-kliek +STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Af +STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Outomaties pouse wanneer om te begin 'n nuwe speletjie: {ORANGE}{STRING} STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gebruik die voorloopende voertuiglys: {ORANGE}{STRING} STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Af STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eie maatskappy STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle maatskappye +STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Gebruik laai aanwysers: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Ontsper timetabling vir voertuie: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Toon rooster in ticks liewer as dae: {ORANGE}{STRING} +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Verstek spoor tipe (na nuwe spel/spel laai): {ORANGE}{STRING} +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Gewone Spoor +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrifiseerde Spoor +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Eenspoor +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Eers beskikbaar +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Laas beskikbaar +STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Meeste gebruik +STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Toon gebou gereedskap wanneer geen geskik voertuie is beskikbaar : {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max treine per speler: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max pad voertuie per speler: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Max vliegtuie per speler: {ORANGE}{STRING} STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Max skepe per speler: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_BUILDS_TRAINS :{LTBLUE}Vermink treine vir rekenaar: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}Vermink pad voertuie vir rekenaar: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}Vermink vliegtuie vir rekenaar: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}Vermink skepe vir rekenaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_BUILDS_TRAINS :{LTBLUE}Sper treine vir rekenaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}Sper pad voertuie vir rekenaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}Sper vliegtuie vir rekenaar: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}Sper skepe vir rekenaar: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Stel nuwe AI (alpha) in staat: {ORANGE}{STRING} -STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER :{LTBLUE}Toelaat AIe in veelspeeler (proefondervindelik): {ORANGE}{STRING} +STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Ontsper nuwe AI (alpha) in staat: {ORANGE}{STRING} +STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER :{LTBLUE}Laattoe AIe in multispeler (eksperimentele): {ORANGE}{STRING} -STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Gebrekte versien tussentyd vir treine: {ORANGE}{STRING} dae/% -STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Gebrekte versien tussentyd vir treine: {ORANGE}gestrem -STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Gebrekte versien tussentyd vir pad voertuie: {ORANGE}{STRING} dae/% -STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Gebrekte versien tussentyd vir pad voertuie: {ORANGE}gestrem +STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Verstek diens pouse vir treine: {ORANGE}{STRING} dae/% +STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Verstek diens pouse vir treine: {ORANGE}strem +STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Verstek diens pouse vir pad voertuie: {ORANGE}{STRING} dae/% +STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Verstek diens pouse vir pad voertuie: {ORANGE}strem STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Gebrekte versien tussentyd vir vlietuie: {ORANGE}{STRING} dae/% STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Gebrekte versien tussentyd vir vlietuie: {ORANGE}gestrem -STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Gebrekte versien tussentyd vir skepe: {ORANGE}{STRING} dae/% -STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Gebrekte versien tussentyd vir skepe: {ORANGE}gestrem -STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Gestrem versiening wanneer oponthoude is na geen gestel: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Verstek diens pouse vir skepe: {ORANGE}{STRING} dae/% +STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Verstek diens pouse vir skepe: {ORANGE}strem +STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Sper diens wanneer komplikasies is na geen gestel: {ORANGE}{STRING} STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Stel wa spoed limite in staak: {ORANGE}{STRING} STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Gestrem elektriese spoore: {ORANGE}{STRING} STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Gekleurde nuus verskyn in: {ORANGE}{STRING} -STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Begins datum: {ORANGE}{STRING} -STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Eindig spel in: {ORANGE}{STRING} -STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Stel vloeiende ekonomie in staak (meer, kleiner veranderings) -STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Toelaat deele aankoop van ander maatskappye -STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Wanneer sleeping, plaas seine elke: {ORANGE}{STRING} teel(e) +STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Jaar om te begin: {ORANGE}{STRING} +STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Eindig speletjie in: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Ontsper versag ekonomie (meer, kleiner veranderings) +STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Laattoe deele aankoop van ander maatskappye +STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Wanneer sleep, plaas seine elke: {ORANGE}{STRING} teel(e) STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Outomaties bou semaphores voor: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Die dorp uitleg "niks meer paaie" is nie geldig in die draaiboek redigeerder +STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Kies dorp-pad uitleg: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :niks meer paaie +STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :verstek +STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :beter paaie +STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2x2 grid +STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3x3 grid STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Posisie van hoof werktuigbaan: {ORANGE}{STRING} STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Links STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Senter STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Regs STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Venster slag straal: {ORANGE}{STRING} px -STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Venster slag straal: {ORANGE}gestrem +STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Venster slag straal: {ORANGE}strem +STR_CONFIG_PATCHES_TOWN_GROWTH :{LTBLUE}Dorp groei spoed: {ORANGE}{STRING} +STR_CONFIG_PATCHES_TOWN_GROWTH_NONE :Geen +STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW :Stadig +STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL :Normaal +STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :Vinnig +STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :Baie vinnig +STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Gedeelte van dorpe wat sal stede word: {ORANGE}1 in {STRING} +STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Gedeelte van dorpe wat sal stede word: {ORANGE}None +STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Aanvanklike stad grootte multiplier: {ORANGE}{STRING} +STR_CONFIG_MODIFIED_ROAD_REBUILD :{LTBLUE}Verwyder verspot pad-elemente gedurende die pad konstruksie +STR_CONFIG_PATCHES_GUI :{BLACK}koppelvlak STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Konstruksie STR_CONFIG_PATCHES_VEHICLES :{BLACK}Voertuie STR_CONFIG_PATCHES_STATIONS :{BLACK}Stasies @@ -1096,25 +1171,25 @@ STR_CONFIG_PATCHES_INT32 :{NUM} STR_CONFIG_PATCHES_CURRENCY :{CURRENCY} -STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Verander stelling waarde -STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Party of almal van die gebrekte versien tussentyd(e) onder is onbestaanbaar met die verkiesde stelling! 5-90% en 30-800 dae is geldig +STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Verander stel waarde +STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Sommige of almal van die verstek diens pouse(s) onder is onversoenbaar met die gekies stel! 5-90% en 30-800 dae is geldig STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}Gebruik YAPF vir skepe: {ORANGE}{STRING} STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}Gebruik YAPF vir pad voertuie: {ORANGE}{STRING} STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}Gebruik YAPF vir treine: {ORANGE}{STRING} -STR_CHEATS :{WHITE}Bedriege -STR_CHEATS_TIP :{BLACK}Tikblokkies aanwys as jy die bedreig vroe� gebruik het -STR_CHEATS_WARNING :{BLACK}Waarskuwing! Jy gaan omtrent jou genoote mededingers verrai. Hou in gemoed dat so 'n skande sal vir ewig onhout word. +STR_CHEATS :{WHITE}Kullery +STR_CHEATS_TIP :{BLACK}Tikblokkies wys ann as jy die bedreig vroeë gebruik het +STR_CHEATS_WARNING :{BLACK}Waarskuwing! U staan op die punt om jou mededinger te verrai. Hou in gedagte dat so 'n skande sal vir ewigheid onthou word. STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld by {CURRENCY} STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Speel as speler: {ORANGE}{COMMA} -STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (uitwis nywerheide, onbeweegbares): {ORANGE}{STRING} +STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (uitwis nywerhede, onbeweegbares): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tonnels mag vir mekaar kruis: {ORANGE}{STRING} -STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Bou terwyl in pouseer: {ORANGE}{STRING} +STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Bou terwyl in pouse modus: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Straalvliegtuie sal nie (dikwels) op klein lughawe bots nie: {ORANGE} {STRING} STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Skakel klimaat: {ORANGE} {STRING} STR_CHEAT_CHANGE_DATE :{LTBLUE}Verander datum: {ORANGE} {DATE_SHORT} -STR_CHEAT_SETUP_PROD :{LTBLUE}Stel modifikasie van produksie waarde in staak: {ORANGE}{STRING} +STR_CHEAT_SETUP_PROD :{LTBLUE}Ontsper modifisering van produksie waardes: {ORANGE}{STRING} STR_HEADING_FOR_WAYPOINT :{LTBLUE}Op pad na {WAYPOINT} STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Op pad na {WAYPOINT}, {VELOCITY} @@ -1137,13 +1212,13 @@ STR_NO_TOWN_IN_SCENARIO :{WHITE}...daar is geen stad in die draaiboek STR_GENERATE_RANDOM_LANDSCAPE :{WHITE}Is jy seker jy wil 'n lukraake landeryke skep? -STR_MANY_RANDOM_TOWNS :{BLACK}Baie lukraak stede -STR_MANY_RANDOM_INDUSTRIES :Baie luraak nyweheide -STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan nie nywerheide ontwikkel nie... +STR_MANY_RANDOM_TOWNS :{BLACK}Baie lukraak dorpe +STR_MANY_RANDOM_INDUSTRIES :Baie luraak nywehede +STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan nie nywerhede opwek nie... STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Oppe die landargitekteur werktuigbaan om land te verhoog/verlaag, boome beplant, ens. STR_LANDSCAPING_TOOLBAR :{WHITE}Landargitekteur -STR_LEVEL_LAND_TOOLTIP :{BLACK}Vlakte land +STR_LEVEL_LAND_TOOLTIP :{BLACK}Vlakte daal @@ -1157,6 +1232,7 @@ STR_BUOY_IS_IN_USE :{WHITE}...baken is in gebruik! +STR_LANDINFO_COORDS :{BLACK}Koördineer: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan nie deel van stasie verwyder nie... STR_CANT_CONVERT_RAIL :{WHITE}Kan nie spoor tipe hier verdoel nie... @@ -1169,43 +1245,43 @@ STR_FAST_FORWARD :{BLACK}Vinnig vooruit die spel STR_MESSAGE_HISTORY :{WHITE}Boodskap Geskidenis STR_MESSAGE_HISTORY_TIP :{BLACK}'n Lys van al die onlangs nuus boodskappe -STR_MESSAGES_DISABLE_ALL :{BLACK}Gestrem alle -STR_MESSAGES_ENABLE_ALL :{BLACK}Stel alle in staak +STR_MESSAGES_DISABLE_ALL :{BLACK}Sper alle +STR_MESSAGES_ENABLE_ALL :{BLACK}Ontsper alle -STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Bou Steenkool Myn +STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Bou Kool Myn STR_CONSTRUCT_FOREST_TIP :{BLACK}Wout Beplant STR_CONSTRUCT_OIL_RIG_TIP :{BLACK}Bou Olieboor -STR_CONSTRUCT_FARM_TIP :{BLACK}Befonds Plaas +STR_CONSTRUCT_FARM_TIP :{BLACK}Fonds Boerdery STR_CONSTRUCT_COPPER_ORE_MINE_TIP :{BLACK}Bou Koper Erts Myn STR_CONSTRUCT_OIL_WELLS_TIP :{BLACK}Boor vir Olie STR_CONSTRUCT_GOLD_MINE_TIP :{BLACK}Bou Goud Myn STR_CONSTRUCT_DIAMOND_MINE_TIP :{BLACK}Bou Diamant Myn STR_CONSTRUCT_IRON_ORE_MINE_TIP :{BLACK}Bou Yster Erts Myn -STR_CONSTRUCT_FRUIT_PLANTATION_TIP :{BLACK}Befonds Vrugte Plantasie -STR_CONSTRUCT_RUBBER_PLANTATION_TIP :{BLACK}Befonds Gomlastiek Plantasie -STR_CONSTRUCT_WATER_SUPPLY_TIP :{BLACK}Befonds Water Lewering +STR_CONSTRUCT_FRUIT_PLANTATION_TIP :{BLACK}Fonds Vrugte Plantasie +STR_CONSTRUCT_RUBBER_PLANTATION_TIP :{BLACK}Fonds Gomlastiek Plantasie +STR_CONSTRUCT_WATER_SUPPLY_TIP :{BLACK}Fonds Water Verskaf STR_CONSTRUCT_COTTON_CANDY_TIP :{BLACK}Beplant Spookasem Woud -STR_CONSTRUCT_BATTERY_FARM_TIP :{BLACK}Befonds Battery Plaas +STR_CONSTRUCT_BATTERY_FARM_TIP :{BLACK}Befonds Battery Boerdery STR_CONSTRUCT_COLA_WELLS_TIP :{BLACK}Boor vir Cola -STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP :{BLACK}Befonds Plastiek Fonteine -STR_CONSTRUCT_BUBBLE_GENERATOR_TIP :{BLACK}Bou Borrel Ontwikkelaar -STR_CONSTRUCT_TOFFEE_QUARRY_TIP :{BLACK}Befonds Tameletjie Prooi +STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP :{BLACK}Fonds Plastiek Fonteine +STR_CONSTRUCT_BUBBLE_GENERATOR_TIP :{BLACK}Bou Borrel Genereerder +STR_CONSTRUCT_TOFFEE_QUARRY_TIP :{BLACK}Fonds Tameletjie Prooi STR_CONSTRUCT_SUGAR_MINE_TIP :{BLACK}Bou Suiker Myn -STR_INDUSTRYDIR_CAPTION :{WHITE}Nywerheide +STR_INDUSTRYDIR_CAPTION :{WHITE}Nywerhede STR_INDUSTRYDIR_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% uitgevoer) STR_INDUSTRYDIR_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% uitgevoer) STR_INDUSTRYDIR_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_TOO_CLOSE :{WHITE}...te naby aan 'n ander nywerheid -STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Versien tussentye is in persente: {ORANGE}{STRING} +STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Diens pouse is in persente: {ORANGE}{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie ############ network gui strings -STR_NETWORK_MULTIPLAYER :{WHITE}Veelspeler +STR_NETWORK_MULTIPLAYER :{WHITE}Multispeler STR_NETWORK_PLAYER_NAME :{BLACK}Speler naam: STR_NETWORK_ENTER_NAME_TIP :{BLACK}Die is die naam waarmee ander spelers sal jou aanwys @@ -1216,25 +1292,25 @@ STR_NETWORK_START_SERVER_TIP :{BLACK}Begin u eie bediender STR_NETWORK_GAME_NAME :{BLACK}Naam -STR_NETWORK_GAME_NAME_TIP :{BLACK}Naam van die spel +STR_NETWORK_GAME_NAME_TIP :{BLACK}Naam van die speletjie STR_NETWORK_INFO_ICONS_TIP :{BLACK}Taal, bediender verwerking, ens. -STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}kliek 'n naam op die lys om dit te kies +STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Kliek 'n speletjie van die lys om dit te selekteer -STR_NETWORK_FIND_SERVER :{BLACK}Versoek bediender -STR_NETWORK_FIND_SERVER_TIP :{BLACK}Versoek netwerk vir 'n bediender +STR_NETWORK_FIND_SERVER :{BLACK}Versoek verskaffer +STR_NETWORK_FIND_SERVER_TIP :{BLACK}Versoek netwerk vir 'n verskaffer STR_NETWORK_ADD_SERVER :{BLACK}Byvoeg Bediender -STR_NETWORK_ADD_SERVER_TIP :{BLACK}Byvoeg 'n bediender na die lys wat sal altyd nagaan vir lopende spele +STR_NETWORK_ADD_SERVER_TIP :{BLACK}Voeg 'n verskaffer tot die lys wat sal altyd wees gemerk vir loopende speletjies. STR_NETWORK_ENTER_IP :{BLACK}Invoeg die adres van die gasheer STR_NETWORK_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_CLIENTS_CAPTION :{BLACK}Kliente -STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Kliente oplyn / Kliente max{}Maatskappye oplyn / Maatskappye max -STR_NETWORK_GAME_INFO :{SILVER}SPEL INLIGTING +STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Kliente oplyn / Kliente maks{}Maatskappye oplyn / Maatskappye maks +STR_NETWORK_GAME_INFO :{SILVER}SPEL INFORMASIE STR_ORANGE :{ORANGE}{STRING} STR_NETWORK_CLIENTS :{SILVER}Kliente: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_LANGUAGE :{SILVER}Taal: {WHITE}{STRING} STR_NETWORK_TILESET :{SILVER}Blokkiestel: {WHITE}{STRING} -STR_NETWORK_MAP_SIZE :{SILVER}Kaart groote: {WHITE}{COMMA}x{COMMA} +STR_NETWORK_MAP_SIZE :{SILVER}Werfkaart groote: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_VERSION :{SILVER}Bediender hersiening: {WHITE}{STRING} STR_NETWORK_SERVER_ADDRESS :{SILVER}Bediender adres: {WHITE}{STRING} : {NUM} STR_NETWORK_START_DATE :{SILVER}Begin datum: {WHITE}{DATE_SHORT} @@ -1243,6 +1319,7 @@ STR_NETWORK_SERVER_OFFLINE :{SILVER}BEDIENDER AFLYN STR_NETWORK_SERVER_FULL :{SILVER}BEDIENDER VOL STR_NETWORK_VERSION_MISMATCH :{SILVER}HERSIENING ONGELYK +STR_NETWORK_GRF_MISMATCH :{SILVER}NEWGRF MISPAS STR_NETWORK_JOIN_GAME :{BLACK}Verbind spel @@ -1250,39 +1327,67 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}Begin nuwe veelspeler spel STR_NETWORK_NEW_GAME_NAME :{BLACK}Spel naam: -STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Die spel naam sal vertoon word na ander spelers in die veelspeler keuse +STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Die spel naam sal vertoon word na ander spelers in die multispeler keuse STR_NETWORK_SET_PASSWORD :{BLACK}Stel wagwoord STR_NETWORK_PASSWORD_TIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie STR_NETWORK_SELECT_MAP :{BLACK}Kies 'n kaart STR_NETWORK_SELECT_MAP_TIP :{BLACK}Watter kaart wil jy speel? +STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING} STR_NETWORK_LAN :LAN STR_NETWORK_INTERNET :Internet STR_NETWORK_LAN_INTERNET :LAN / Internet STR_NETWORK_INTERNET_ADVERTISE :Internet (adverteer) -STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max kliente: +STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} Klient{P "" e} +STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maks kliente: STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies die maksimum nommer van kielnte. Alle gleufe hoef nie om vol te wees nie -STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max maatskappye: -STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Beperk die bedinder na 'n sekere bedrag van maatskappye -STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max aanskouers: -STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Beperk die bediender na 'n sekere bedrag van aanskouers +STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} Maatskap{P py pye} +STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks maatskappye: +STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Beperk die verskaffer na 'n sekere bedrag van maatskappye +STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks aanskouers: +STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Beperk die verskaffer na 'n sekere bedrag van aanskouers STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Taal gepraat: -STR_NETWORK_LANGUAGE_TIP :{BLACK}Ander spelers sal weet watter taal op die bediender gepraat is +STR_NETWORK_LANGUAGE_TIP :{BLACK}Ander spelers sal weet watter taal op die verskaffer gepraat is STR_NETWORK_START_GAME :{BLACK}Begin Spel STR_NETWORK_START_GAME_TIP :{BLACK}Begin 'n nuwe netwerk spel van 'n lukraak kaart, of draaiboek -STR_NETWORK_LOAD_GAME :{BLACK}Laai Spel -STR_NETWORK_LOAD_GAME_TIP :{BLACK}Vervolg 'n vroe� bewaarde veelspeler spel (wees seker om te verbind as die korrekte speler) +STR_NETWORK_LOAD_GAME :{BLACK}Laai Speletjie +STR_NETWORK_LOAD_GAME_TIP :{BLACK}Hervat 'n vroeër gespaar multispeler speletjie (wees seker om te konnekteer as die korrekte speler) ############ Leave those lines in this order!! STR_NETWORK_LANG_ANY :Enige STR_NETWORK_LANG_ENGLISH :Engels STR_NETWORK_LANG_GERMAN :Duits STR_NETWORK_LANG_FRENCH :Frans +STR_NETWORK_LANG_BRAZILIAN :Brazilian +STR_NETWORK_LANG_BULGARIAN :Bulgarian +STR_NETWORK_LANG_CHINESE :Chinese +STR_NETWORK_LANG_CZECH :Czech +STR_NETWORK_LANG_DANISH :Danish +STR_NETWORK_LANG_DUTCH :Dutch +STR_NETWORK_LANG_ESPERANTO :Esperanto +STR_NETWORK_LANG_FINNISH :Finnish +STR_NETWORK_LANG_HUNGARIAN :Hungarian +STR_NETWORK_LANG_ICELANDIC :Icelandic +STR_NETWORK_LANG_ITALIAN :Italian +STR_NETWORK_LANG_JAPANESE :Japanese +STR_NETWORK_LANG_KOREAN :Korean +STR_NETWORK_LANG_LITHUANIAN :Lithuanian +STR_NETWORK_LANG_NORWEGIAN :Norwegian +STR_NETWORK_LANG_POLISH :Polish +STR_NETWORK_LANG_PORTUGUESE :Portuguese +STR_NETWORK_LANG_ROMANIAN :Romanian +STR_NETWORK_LANG_RUSSIAN :Russian +STR_NETWORK_LANG_SLOVAK :Slovak +STR_NETWORK_LANG_SLOVENIAN :Slovenian +STR_NETWORK_LANG_SPANISH :Spanish +STR_NETWORK_LANG_SWEDISH :Swedish +STR_NETWORK_LANG_TURKISH :Turkish +STR_NETWORK_LANG_UKRAINIAN :Ukrainian ############ End of leave-in-this-order -STR_NETWORK_GAME_LOBBY :{WHITE}Veelspeler spel tuiste +STR_NETWORK_GAME_LOBBY :{WHITE}Multispeler spel tuiste STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Voorberei om te verbind: {ORANGE}{STRING} -STR_NETWORK_COMPANY_LIST_TIP :{BLACK}'n Lys van alle maatskappye huiding in die spel. Of kan jy een verbind of as daar 'n vry maatskappy gleuf is 'n nuwe ene begin +STR_NETWORK_COMPANY_LIST_TIP :{BLACK}'n Lys van alle ondernemings tans in hierdie speletjie. U kan een van beide sluit aan een of begin 'n nuwe een indien daar is 'n vry maatskappy gleuf STR_NETWORK_NEW_COMPANY :{BLACK}Nuwe Maatskappy STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Skep 'n nuwe maatskappy STR_NETWORK_SPECTATE_GAME :{BLACK}Aanskou spel @@ -1292,7 +1397,7 @@ STR_NETWORK_REFRESH :{BLACK}Vervris bediender STR_NETWORK_REFRESH_TIP :{BLACK}Vervris die bediender inligting -STR_NETWORK_COMPANY_INFO :{SILVER}MAATSKAPPY INLIGTING +STR_NETWORK_COMPANY_INFO :{SILVER}MAATSKAPPY INFORMASIE STR_NETWORK_COMPANY_NAME :{SILVER}Maatskappy naam: {WHITE}{STRING} STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inwyding: {WHITE}{NUM} @@ -1305,18 +1410,18 @@ STR_NETWORK_STATIONS :{SILVER}Stasies: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP} STR_NETWORK_PLAYERS :{SILVER}Spelers: {WHITE}{STRING} -STR_NETWORK_CONNECTING :{WHITE}Aansluit... +STR_NETWORK_CONNECTING :{WHITE}Besig om the konnek... ############ Leave those lines in this order!! -STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Aansluit.. +STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Konnek... STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Gemagtiging... STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Opwagting... -STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Kaart aflaai.. +STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Werfkaart aflaai.. STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Verwerk Data... STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registreer... -STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Haal spel inligting... -STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Haal maatskappy inligting... +STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Haal speletjie informasie... +STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Haal maatskappy informasie... ############ End of leave-in-this-order STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} Klient{P "" e} voor jou STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} kbytes afgelaai dusver @@ -1324,26 +1429,27 @@ STR_NETWORK_DISCONNECT :{BLACK}Loskoppel STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Invoeg die bedrag van geld jy wil gee -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Bediender is beskerm. Invoeg wagwoord +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaffer is beskerm. Invoeg wagwoord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Invoeg wagwoord STR_NETWORK_CLIENT_LIST :{WHITE}Klient Lys STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Geen netwerk ontwerp gevind of voldoen sonder ENABLE_NETWORK STR_NETWORK_ERR_NOSERVER :{WHITE} Kan nie enige netwerk spele vind nie -STR_NETWORK_ERR_NOCONNECTION :{WHITE} Die bedinder het nie die versoek geantwoord nie +STR_NETWORK_ERR_NOCONNECTION :{WHITE} Die verskaffer het nie die versoek geantwoord nie +STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Kan nie konnekteer te danke aan newgrf mispas nie STR_NETWORK_ERR_DESYNC :{WHITE} Netwerk-Spel sinchroniseering gedop STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Netwerk-Spel verbinding verloor -STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Kan nie bewaarespel laai nie -STR_NETWORK_ERR_SERVER_START :{WHITE} Bediender kan nie aangesit word nie +STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Kan nie spaarspel laai nie +STR_NETWORK_ERR_SERVER_START :{WHITE} Verskaffer kan nie aangesit word nie STR_NETWORK_ERR_CLIENT_START :{WHITE} Kan nie verbinding kry nie STR_NETWORK_ERR_TIMEOUT :{WHITE} Verbinding #{NUM} het betyds uitgeloop STR_NETWORK_ERR_SERVER_ERROR :{WHITE} A protokol-fout was gemaak en die verbinding was verlore -STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Die hersiening van die klient is nie gelyk aan die bediender se hersiening nie +STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Die hersiening van die klient is nie gelyk aan die verskaffer se hersiening nie STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Verkeerde wagwoord -STR_NETWORK_ERR_SERVER_FULL :{WHITE} Die bediender is vol -STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Jy is van die bediender verban +STR_NETWORK_ERR_SERVER_FULL :{WHITE} Die verskaffer is vol +STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Jy is van die verskaffer verban STR_NETWORK_ERR_KICKED :{WHITE} Jy is van die spel geskop -STR_NETWORK_ERR_CHEATER :{WHITE} Bedreiging is nie op die bediender toegelaat +STR_NETWORK_ERR_CHEATER :{WHITE} Bedrieg is nie toegelaat op hierdie verskaffer STR_NETWORK_ERR_LEFT :het die spel verlaat ############ Leave those lines in this order!! @@ -1352,27 +1458,28 @@ STR_NETWORK_ERR_CLIENT_SAVEGAME :kan nie kaart laai nie STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :verbinding verloor STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :protokol fout +STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH :NewGRF mispas STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :nie gemagtig nie STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :vreemde pakket aanvaar STR_NETWORK_ERR_CLIENT_WRONG_REVISION :verkeerde hersiening STR_NETWORK_ERR_CLIENT_NAME_IN_USE :naam reeds in gebruik STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :verkeerde wagwoord STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :verkeerde speler-id in DoCommand -STR_NETWORK_ERR_CLIENT_KICKED :geskop by bediender -STR_NETWORK_ERR_CLIENT_CHEATER :was op die proef stel om 'n bereig te gebruik -STR_NETWORK_ERR_CLIENT_SERVER_FULL :bediender vol +STR_NETWORK_ERR_CLIENT_KICKED :geskop by verskaffer +STR_NETWORK_ERR_CLIENT_CHEATER :het probeer om 'n bedreig te gebruik +STR_NETWORK_ERR_CLIENT_SERVER_FULL :verskaffer vol ############ End of leave-in-this-order -STR_NETWORK_CLIENT_JOINED :het die spel verbind +STR_NETWORK_CLIENT_JOINED :het die speletjie verbind STR_NETWORK_GIVE_MONEY :het vir u maatskappy geld gegee ({CURRENCY}) STR_NETWORK_GAVE_MONEY_AWAY :u het vir {STRING} geld ({CURRENCY}) gegee STR_NETWORK_CHAT_COMPANY_CAPTION :[Span] : -STR_NETWORK_CHAT_COMPANY :[Span] {STRING}: +STR_NETWORK_CHAT_COMPANY :[Span] {STRING}: {GRAY}{STRING} STR_NETWORK_CHAT_TO_COMPANY :[Span] Na {STRING}: STR_NETWORK_CHAT_CLIENT_CAPTION :[Privaat] : -STR_NETWORK_CHAT_CLIENT :[Privaat] {STRING}: +STR_NETWORK_CHAT_CLIENT :[Privaat] {STRING}: {GRAY}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Privaat] Na {STRING}: STR_NETWORK_CHAT_ALL_CAPTION :[All] : -STR_NETWORK_CHAT_ALL :[All] {STRING}: +STR_NETWORK_CHAT_ALL :[All] {STRING}: {GRAY}{STRING} STR_NETWORK_NAME_CHANGE :het hy/sy naam verander na STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Die bediender het die sessie toegemaak STR_NETWORK_SERVER_REBOOT :{WHITE} Die bediender is besig om te weerbegin...{}Wag asb... @@ -1393,15 +1500,15 @@ ############ end network gui strings -STR_CONFIG_PATCHES_MAP_X :{LTBLUE}X-groote van kaart: {ORANGE}{STRING} -STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}Y-groote van kaart: {ORANGE}{STRING} +STR_CONFIG_PATCHES_MAP_X :{LTBLUE}X-groote van werfkaart: {ORANGE}{STRING} +STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}Y-groote van werfkaart: {ORANGE}{STRING} ##### PNG-MAP-Loader -STR_BMPMAP_ERROR :{WHITE}Kan nie landerye van BMP laai nie... -STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...kan nie prent tipe verdoel nie. +STR_BMPMAP_ERROR :{WHITE}Kan nie landskap van BMP laai nie... +STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...kan nie beeld tipe verdoel nie. ##id 0x0800 STR_0800_COST :{TINYFONT}{RED}Koste: {CURRENCY} @@ -1410,25 +1517,25 @@ STR_0803_INCOME :{GREEN}Inkome: {CURRENCY} STR_FEEDER_TINY :{TINYFONT}{YELLOW}Oorplaas: {CURRENCY} STR_FEEDER :{YELLOW}Oorplaas: {CURRENCY} -STR_0805_ESTIMATED_COST :{WHITE}Geraamde Koste: {CURRENCY} -STR_0807_ESTIMATED_INCOME :{WHITE}Geraamde Inkome: {CURRENCY} -STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Kan nie land verhoog hier nie... -STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Kan nie land verlaag hier nie... +STR_0805_ESTIMATED_COST :{WHITE}Beraamde Koste: {CURRENCY} +STR_0807_ESTIMATED_INCOME :{WHITE}Beraamde Inkome: {CURRENCY} +STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}kan nie daal hier verhoog nie... +STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Kan nie daal hier verlaag nie... STR_080A_ROCKS :Rotse -STR_080B_ROUGH_LAND :Ru land -STR_080C_BARE_LAND :Kaal land +STR_080B_ROUGH_LAND :Rof daal +STR_080C_BARE_LAND :hou daal STR_080D_GRASS :Gras STR_080E_FIELDS :Velde STR_080F_SNOW_COVERED_LAND :Sneeu-bedekte land STR_0810_DESERT :Woestyn ##id 0x1000 -STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land skuins in verkeerde rigting -STR_1001_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmoontlike spoor kombinasie +STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Daal skuins in verkeerde rigting +STR_1001_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmoontlik spoor kombinasie STR_1002_EXCAVATION_WOULD_DAMAGE :{WHITE}Uitgrawing sal tonnel beskadig STR_1003_ALREADY_AT_SEA_LEVEL :{WHITE}Reeds op seevlak STR_1004_TOO_HIGH :{WHITE}Te hoog -STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen paslik spoorweg spoor +STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen geskik spoorweg spoor STR_1007_ALREADY_BUILT :{WHITE}...reeds gebou STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet eers spoorweg spoor verwyder STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Spoorweg Kostruksie @@ -1441,28 +1548,29 @@ STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan nie spoorweg spoor hier bou nie... STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan nie spoorweg spoor van hier af verwyder nie... STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan nie seine van hier verwyder nie... -STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Trein Depot Ori�tering +STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Trein Depot Orientasie STR_1015_RAILROAD_CONSTRUCTION :Spoorweg konstruksie STR_1016_MONORAIL_CONSTRUCTION :Eenspoor konstruksie STR_1017_MAGLEV_CONSTRUCTION :MagLev konstruksie STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Bou spoorweg spoor -STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bou trein depot (vir gebou en diens van treine) +STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bou trein depot (vir die bou en diens van treine) STR_101A_BUILD_RAILROAD_STATION :{BLACK}Bou spoorweg stasie STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Bou spoorweg seine STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Bou spoorweg brug STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Bou spoorweg tonnel -STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Skakel bou/verwyder vir spoorweg spoor en seine -STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Brug keuse - kliek op jou verkiesde brug om dit te bou -STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Kies spoorweg depot ori�tering +STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Tokkel bou/verwyder vir spoorweg spoor en seine +STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Brug keuse - kliek op jou verkies brug om dit te bou +STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Kies spoorweg depot orientasie STR_1021_RAILROAD_TRACK :Spoorweg spoor STR_1023_RAILROAD_TRAIN_DEPOT :Spoorweg trein depot -STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...area is besit by 'n ander maatskappy +STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...area is besit deur 'n ander maatskappy ##id 0x1800 STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet pad eers verwyder STR_1802_ROAD_CONSTRUCTION :{WHITE}Pad Konstruksie +STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Tremweg Konstruksie STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Kies Pad Brug STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan nie pad hier bou nie... STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan nie pad van hier verwyder nie... @@ -1470,13 +1578,14 @@ STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kan nie pad voertuig depot hier bou nie... STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Kan nie trem voertuig depot hier bou nie... STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kan nie bus stasie hier bou nie... -STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan nie vraagmotor stasie bou nie... -STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan nie vrag trem stasie hier bou nie... +STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan nie vragmotor stasie bou nie... +STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan nie passasier trem stasie bou nie... +STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan nie vrag trem stasie bou nie... STR_180A_ROAD_CONSTRUCTION :Pad konstruksie STR_180A_TRAMWAY_CONSTRUCTION :Tremweg konstruksie STR_180B_BUILD_ROAD_SECTION :{BLACK}Bou pad afdeling STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Bou tremweg gedeelte -STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bou pad voertuig depot (vir bou en versiening van voertuie) +STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bou pad voertuig depot (vir bou en diens van voertuie) STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bou trem voertuig depot (vir bou en diens van voertuie) STR_180D_BUILD_BUS_STATION :{BLACK}Bou bus stasie STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Bou vraagmotor laai area @@ -1486,35 +1595,35 @@ STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Bou tremweg brug STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Bou pad tonnel STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Bou tremweg tonnel -STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Skakel bou/verwyder vir pad bou -STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Skakel bou/verwyder vir tremweg konstruksie -STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Kies pad voertuig depot ori�tering -STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Kies trem voertuig depot ori�tering +STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Tokkel bou/verwyder vir pad bou +STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Tokkel bou/verwyder vir tremweg konstruksie +STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Kies pad voertuig depot orientasie +STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Kies trem voertuig depot orientasie STR_1814_ROAD :Pad STR_1815_ROAD_WITH_STREETLIGHTS :Pad met straatligte STR_1816_TREE_LINED_ROAD :Boom-belynde pad STR_1817_ROAD_VEHICLE_DEPOT :Pad voertuig depot -STR_1818_ROAD_RAIL_LEVEL_CROSSING :Pad/spoor gelyk oorgang +STR_1818_ROAD_RAIL_LEVEL_CROSSING :Pad/spoor vlak kruising STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan nie bus stasie verwyder nie... -STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan nie vraagmotor stasie verwyder stasie... +STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan nie vragmotor stasie verwyder stasie... STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan nie passasier stasie verwyder nie... STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan nie vrag stasie verwyder nie... ##id 0x2000 -STR_2000_TOWNS :{WHITE}Stede +STR_2000_TOWNS :{WHITE}Dorpe STR_2002 :{TINYFONT}{BLACK}{SIGN} STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebou moet eers afgebreek word STR_2005 :{WHITE}{TOWN} STR_2006_POPULATION :{BLACK}Populasie: {ORANGE}{COMMA}{BLACK} Huise: {ORANGE}{COMMA} -STR_2007_RENAME_TOWN :Hernoem Stad -STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kan nie stad hernoem nie... +STR_2007_RENAME_TOWN :Hernoem Dorp +STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kan nie dorp hernoem nie... STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} plaaslike raad weier om dit te toelaat -STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Stad naame - kliek naam om skerm op stad te senter -STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Senter skerm op stad -STR_200C_CHANGE_TOWN_NAME :{BLACK}Verander stad naam +STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Dorp naam - kliek naam om skerm op stad te senter +STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Senter skerm op dorp lokasie +STR_200C_CHANGE_TOWN_NAME :{BLACK}Verander dorp naam STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passasiers verlede maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Pos verlede maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} -STR_200F_TALL_OFFICE_BLOCK :Lank kantoor blok +STR_200F_TALL_OFFICE_BLOCK :hoog kantoor blok STR_2010_OFFICE_BLOCK :Kantoor blok STR_2011_SMALL_BLOCK_OF_FLATS :Klein blok van woonstelle STR_2012_CHURCH :Kerk @@ -1532,7 +1641,7 @@ STR_201E_STADIUM :Stadion STR_201F_OLD_HOUSES :Ou huise STR_2020_LOCAL_AUTHORITY :{BLACK}Plaaslike raad -STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Wys inlingting oor plaaslike raad +STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Wys informasie oor plaaslike raad STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} plaaslike raad STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Vervoer maatskappy graderings: STR_2024 :{YELLOW}{COMPANY} {COMPANYNUM}: {ORANGE}{STRING} @@ -1551,11 +1660,11 @@ STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Diens subsidie toeken aan {COMPANY}!{}{}{STRING} diens van {STATION} tot {STATION} sal nou dubbel pryse vir die volgende jaar betaal! STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Diens subsidie toeken aan {COMPANY}!{}{}{STRING} diens van {STATION} tot {STATION} sal nou driemaal pryse vir die volgende jaar betaal! STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Diens subsidie toeken aan {COMPANY}!{}{}{STRING} diens van {STATION} tot {STATION} sal nou viervoud pryse vir die volgende jaar betaal! -STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} plaaslike raad weier om nog 'n lughawe in die stad gebou te laat word +STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} plaaslike raad weier om nog ‘n lighawe te bou in hierdie stad STR_2036_COTTAGES :Kothuise STR_2037_HOUSES :Huise STR_2038_FLATS :Woonstelle -STR_2039_TALL_OFFICE_BLOCK :Lank kantoor blok +STR_2039_TALL_OFFICE_BLOCK :Hoog kantoor blok STR_203A_SHOPS_AND_OFFICES :Winkels en kantoore STR_203B_SHOPS_AND_OFFICES :Winkels en kantoore STR_203C_THEATER :Teatre @@ -1565,8 +1674,8 @@ STR_2040_CINEMA :Kinema STR_2041_SHOPPING_MALL :Inkoopies winkelplein STR_2042_DO_IT :{BLACK}Doen dit -STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Lys van dinge te doen by die stad - kliek op item vir meer besonderheide -STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Voeg die beklemtoonde aksie in die lys bo uit +STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Lys van dinge om te doen by hierdie dorp - kliek op item vir meer besonderhede +STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Voeg die verlig aksie in die lys bo uit STR_2045_ACTIONS_AVAILABLE :{BLACK}Aksies beskikbaar: STR_2046_SMALL_ADVERTISING_CAMPAIGN :Klein adverteer kampeer STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Medium adverteer kampeer @@ -1575,14 +1684,14 @@ STR_204A_BUILD_STATUE_OF_COMPANY :Bou standbeeld van maatskappy eienaar STR_204B_FUND_NEW_BUILDINGS :Befonds nuwe geboue STR_204C_BUY_EXCLUSIVE_TRANSPORT :Koop eksklusief vervoer regte -STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Inlei 'n klein plaaslike adverteer kampeer, om meer passasiers en vrag na jou vervoer dienste te aantrek.{} Prys: {CURRENCY} -STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Inlei 'n medium plaaslike adverteer kampeer, om meer passasiers en vrag na jou vervoer dienste te aantrek.{} Prys: {CURRENCY} -STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Inlei 'n groot plaaslike adverteer kampeer, om meer passasiers en vrag na jou vervoer dienste te aantrek.{} Prys: {CURRENCY} -STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Befonds die heropbou van die stedelike pad netwerk. Veroorsaak aanmerklike ontwrigging na pad verkeer vir omtrent 6 maande.{} Prys: {CURRENCY} +STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Inwy 'n klein plaaslik advertering veldtog, om te lok meer passasiers en cargo tot jou vervoer dienste.{} Prys: {CURRENCY} +STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Inwy 'n medium plaaslik advertering veldtog, om te lok meer passasiers en cargo tot jou vervoer dienste.{} Prys: {CURRENCY} +STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Inwy 'n groot plaaslik advertering veldtog, om te lok meer passasiers en cargo tot jou vervoer dienste.{} Prys: {CURRENCY} +STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Fonds die herkonstruksie van die stedelik pad netwerk. Veroorsaak aansienlike skeuring to pad verkeer vir op tot 6 maande.{} Prys: {CURRENCY} STR_2051_BUILD_A_STATUE_IN_HONOR :{WHITE}{STRING}{}{YELLOW} Bou 'n standbeeld in eer van u maatskappy.{} Prys: {CURRENCY} -STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Befonds die bou van nuwe kommersieel geboue in die stad.{} Prys: {CURRENCY} -STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Koop 1 jaar se ekslusief vervoer regte in stad. Stad raad sal passasiers en vrag slegs toelaat om jou maatskappy se stasies te gebruik.{} Prys: {CURRENCY} -STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}Verkeer warboel in {TOWN}!{}{}Pad heropbou program befonds by {COMPANY} bring 6 maande van narigheid na motoriste! +STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Fonds die bou van nuwe kommersieel geboue in die stad.{} Prys: {CURRENCY} +STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Koop 1 jare eksklusief vervoer regte in dorp. Dorp raad sal alleen laattoe passasiers en cargo om jou maatskappy se stasies te gebruik.{} Prys: {CURRENCY} +STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}Verkeer warboel in {TOWN}!{}{}Pad heropbou program befonds deur {COMPANY} bring 6 maande van ellende na motoriste! STR_2056 :{TINYFONT}{WHITE}{TOWN} STR_2057 :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_2058_UNDER_CONSTRUCTION :{STRING} (onder opbou) @@ -1606,8 +1715,8 @@ STR_2808_TOO_MANY_SIGNS :{WHITE}...te veel tekens STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan nie teken hier plaas nie... STR_280A_SIGN :Teken -STR_280B_EDIT_SIGN_TEXT :{WHITE}Verander teken teks -STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Teken naam kan nie verander word nie... +STR_280B_EDIT_SIGN_TEXT :{WHITE}Redigeer teken teks +STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kan nie teken naam verander nie... STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Kies boom tipe om te beplant STR_280E_TREES :Boome STR_280F_RAINFOREST :Reenwoud @@ -1616,7 +1725,7 @@ ##id 0x3000 STR_3000_RAIL_STATION_SELECTION :{WHITE}Spoor Stasie Keuse STR_3001_AIRPORT_SELECTION :{WHITE}Lughawe Keuse -STR_3002_ORIENTATION :{BLACK}Ori�tering +STR_3002_ORIENTATION :{BLACK}Orientasie STR_3003_NUMBER_OF_TRACKS :{BLACK}Nommer van spoore STR_3004_PLATFORM_LENGTH :{BLACK}Verhoog lengte STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Te naby aan 'n ander spoorweg stasie @@ -1624,7 +1733,7 @@ STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel stasies/laai areas in die stad STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel stasies/laai areas STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushalte -STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Te veel vraagmotor stasies +STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Te veel vragmotor stasies STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Te naby aan 'n ander stasie/laai area STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES} STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Moet eers spoorweg stasie afbreek @@ -1653,12 +1762,12 @@ STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} aanvaar nie meer {STRING} of {STRING} nie STR_3040_NOW_ACCEPTS :{WHITE}{STATION} aanvaar nou {STRING} STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} aanvaar nou {STRING} en {STRING} -STR_3042_BUS_STATION_ORIENTATION :{WHITE}Bus Stasie Ori�tering -STR_3043_TRUCK_STATION_ORIENT :{WHITE}Vraagmotor Stasie Ori�tering -STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Passasier Trem Ori�tering -STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Vrag Trem Ori�tering +STR_3042_BUS_STATION_ORIENTATION :{WHITE}Bus Stasie Orientasie +STR_3043_TRUCK_STATION_ORIENT :{WHITE}Vraagmotor Stasie Orientasie +STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Passasier Trem Orientasie +STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Vrag Trem Orientasie STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Moet eers bus stasie afbreek -STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Moet eers vraagmotor stasie afbreek +STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Moet eers vragmotor stasie afbreek STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Moet eers passasier trem stasie afbreek STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Moet eers vrag trem stasie afbreek STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stasie{P "" s} @@ -1667,13 +1776,13 @@ STR_304B_SITE_UNSUITABLE :{WHITE}...plek ongeskik STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te naby aan 'n ander werf STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Moet eers werf afbreek -STR_304E_SELECT_RAILROAD_STATION :{BLACK}Kies spoorweg stasie ori�tering +STR_304E_SELECT_RAILROAD_STATION :{BLACK}Kies spoorweg stasie orientasie STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Kies nommer van verhoogte vir spoorweg stasie STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Kies lengte van spoorweg stasie -STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Kies bus stasie ori�tering -STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Kies vraagmotor laai area ori�tering -STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Kies passasier trem stasie ori�tering -STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Kies vrag trem stasie ori�tering +STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Kies bus stasie orientasie +STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Kies vragmotor laai area orientasie +STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Kies passasier trem stasie orientasie +STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Kies vrag trem stasie orientasie STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Senter skerm op stasie STR_3054_SHOW_STATION_RATINGS :{BLACK}Wys stasie graderings STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Verander naam van stasie @@ -1684,53 +1793,58 @@ STR_305E_RAILROAD_STATION :Spoorweg stasie STR_305F_AIRCRAFT_HANGAR :Vliegtuig hangar STR_3060_AIRPORT :Lughawe -STR_3061_TRUCK_LOADING_AREA :Vraagmotor laai area +STR_3061_TRUCK_LOADING_AREA :Vragmotor laai area STR_3062_BUS_STATION :Bus stasie STR_3063_SHIP_DOCK :Skip werf -STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Beklemtoon dekkingsarea van die voorgestelde bouterrein -STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Moenie die dekkingsarea van die voorgestelde bouterrein beklemtoon nie -STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Dekkingsarea beklemtoon +STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Verlig dekking area van die voorgestelde bouterrein +STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Moenie die dekking area van die voorgestelde bouterrein verlig nie +STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Dekking area verlig STR_3068_DOCK :{WHITE}Werf STR_3069_BUOY :Baken STR_306A_BUOY_IN_THE_WAY :{WHITE}...baken in die pad STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...Stasie te ver van mekaar af -STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...ongelyk stasies is gestrem +STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...ongelyk stasies is versper ##id 0x3800 -STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Skip Depot Ori�tering +STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Skip Depot Orientasie STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...moet op water gebou word STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Skip depot kan nie hier gebou word nie... -STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Kies skip depot ori�tering +STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Kies skip depot orientasie STR_3804_WATER :Water -STR_3805_COAST_OR_RIVERBANK :Strand of oewer +STR_3805_COAST_OR_RIVERBANK :Kus of oewer STR_3806_SHIP_DEPOT :Skip depot STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Kan nie op water bou nie ##id 0x4000 -STR_4000_SAVE_GAME :{WHITE}Bewar Spel -STR_4001_LOAD_GAME :{WHITE}Laai Spel -STR_4002_SAVE :{BLACK}Bewaar -STR_4003_DELETE :{BLACK}Uitwis +STR_4000_SAVE_GAME :{WHITE}Spaar Speletjie +STR_4001_LOAD_GAME :{WHITE}Laai Speletjie +STR_4002_SAVE :{BLACK}Spaar +STR_4003_DELETE :{BLACK}Uitvee STR_4004 :{COMPANY}, {DATE_LONG} STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} vry STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan nie skyf lees nie -STR_4007_GAME_SAVE_FAILED :{WHITE}Spel Bewaar Gedop{}{STRING} -STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan nie l�r uitwis nie -STR_4009_GAME_LOAD_FAILED :{WHITE}Spel Laai Gedop{}{STRING} -STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lys van skywe, voublaaie en spel-bewaar l�rs -STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Huidige naam vir bewaarde-spel -STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Uitwis die verkieste bewaarde-spel -STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Bewaar die huidige spel, met die verkieste naame -STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Kies Nuwe Spel Tipe -STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Kies draaiboek (groen), voor-gestelde spel (blou), of lukraak nuwe spel -STR_4010_GENERATE_RANDOM_NEW_GAME :Onwikkel lukraak nuwe spel +STR_4007_GAME_SAVE_FAILED :{WHITE}Speletjie Spaar Misluk{}{STRING} +STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Onbekwaam om lêer te uitvee +STR_4009_GAME_LOAD_FAILED :{WHITE}Speletjie Laai Misluk{}{STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Gebreek spaarspeletjie - {STRING} +STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spaarspeletjie is gemaak met nuwer uitgawe +STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Lêer nie leesbare +STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Lêer nie skryfbaar +STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lys van skywe, gidse en spaar-speletjie lêers +STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Huidige naam vir spaar-speletjie +STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Vee uit die huidige verkieste spaar-speletjie +STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Spaar die huidige speletjie, met die verkieste naame +STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Kies Nuwe Speletjie Tipe +STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Kies draaiboek (groen), vooraf-stel speletjie (blou), of lukraak nuwe speletjie +STR_4010_GENERATE_RANDOM_NEW_GAME :Opwek lukraak nuwe speletjie STR_4011_LOAD_HEIGHTMAP :{WHITE}Laai Hoogtekaart ##id 0x4800 STR_4800_IN_THE_WAY :{WHITE}{STRING} in die pad STR_4801 :{WHITE}{INDUSTRY} -STR_4802_COAL_MINE :Steenkool Myn +STR_4802_COAL_MINE :Kool Myn STR_4803_POWER_STATION :Krag Stasie STR_4804_SAWMILL :Saagmeul STR_4805_FOREST :Woud @@ -1738,7 +1852,7 @@ STR_4807_OIL_RIG :Olieboor STR_4808_FACTORY :Fabriek STR_4809_PRINTING_WORKS :Drukwerke -STR_480A_STEEL_MILL :Staalmeul +STR_480A_STEEL_MILL :Staal Meule STR_480B_FARM :Boerdery STR_480C_COPPER_ORE_MINE :Koper Erts Myn STR_480D_OIL_WELLS :Olie Bron @@ -1751,20 +1865,20 @@ STR_4814_IRON_ORE_MINE :Yster Erts Myn STR_4815_FRUIT_PLANTATION :Vrugte Plantasie STR_4816_RUBBER_PLANTATION :Gomlastiek Plantasie -STR_4817_WATER_SUPPLY :Water Lewering +STR_4817_WATER_SUPPLY :Water Verskaf STR_4818_WATER_TOWER :Water Toring STR_4819_FACTORY :Fabriek STR_481A_FARM :Boerdery -STR_481B_LUMBER_MILL :Timmerhoutmeul +STR_481B_LUMBER_MILL :Timmerhout Meule STR_481C_COTTON_CANDY_FOREST :Spookasem Woud STR_481D_CANDY_FACTORY :Lekker Fabriek STR_481E_BATTERY_FARM :Battery Boerdery -STR_481F_COLA_WELLS :Cola Bron +STR_481F_COLA_WELLS :Cola Spruite STR_4820_TOY_SHOP :Speelgoed Winkel STR_4821_TOY_FACTORY :Speelgoed Fabriek STR_4822_PLASTIC_FOUNTAINS :Plastiek Fonteine STR_4823_FIZZY_DRINK_FACTORY :Koeldrank Fabriek -STR_4824_BUBBLE_GENERATOR :Borrel Ontwikkelaar +STR_4824_BUBBLE_GENERATOR :Borrel Genereerder STR_4825_TOFFEE_QUARRY :Tamletjie Prooi STR_4826_SUGAR_MINE :Suiker Myn @@ -1775,6 +1889,8 @@ ############ range for requires ends ############ range for produces starts +STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Vrag wag om geprosesseer te wees: +STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO}{BLACK} STR_4827_PRODUCES :{BLACK}Produseer: {YELLOW}{STRING} STR_4828_PRODUCES :{BLACK}Produseer: {YELLOW}{STRING}, {STRING} ############ range for produces ends @@ -1791,12 +1907,12 @@ STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}Lewering probleme veroorsaak {INDUSTRY} om dreigend sluting te aankondig! STR_4834_LACK_OF_NEARBY_TREES_CAUSES :{BLACK}{BIGFONT}Gemis van naby boome veroorsaak {INDUSTRY} om dreigend sluiting te aankondig! STR_4835_INCREASES_PRODUCTION :{BLACK}{BIGFONT}{INDUSTRY} vermeerder produksie! -STR_4836_NEW_COAL_SEAM_FOUND_AT :{BLACK}{BIGFONT}Nuwe steenkool laag gevind by {INDUSTRY}!{}Produksie is verwag om te verdubbel! +STR_4836_NEW_COAL_SEAM_FOUND_AT :{BLACK}{BIGFONT}Nuwe kool laag gevind by {INDUSTRY}!{}Produksie is verwag om te verdubbel! STR_4837_NEW_OIL_RESERVES_FOUND :{BLACK}{BIGFONT}Nuwe olie reserwes gevind by {INDUSTRY}!{}Produksie is verwag om te verdubbel! STR_4838_IMPROVED_FARMING_METHODS :{BLACK}{BIGFONT}Verbeterde boerdery metodes by {INDUSTRY} sal produksie verdubbel! STR_4839_PRODUCTION_DOWN_BY_50 :{BLACK}{BIGFONT}{INDUSTRY} produksie verminder 50% STR_483A_INSECT_INFESTATION_CAUSES :{BLACK}{BIGFONT}Insek vervuiling oorsaak verwoesting by {INDUSTRY}!{}Produksie verminder 50% -STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...kan net naby aan kant van kaart geplaas word +STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...kan net naby aan kant van werfkaart geplaas word STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}{STRING} produksie by {INDUSTRY} vermeerder {COMMA}%! STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}{STRING} produksie by {INDUSTRY} verminder {COMMA}%! @@ -1804,17 +1920,19 @@ STR_5000_TRAIN_IN_TUNNEL :{WHITE}Trein in tonnel STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Pad voetuig in tonnel STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Ander tonnel in die pad -STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Kan nie land vir ander einde van tonnel te uitgrawe nie +STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Kan nie daal vir ander einde van tonnel te uitgrawe nie STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Moet eers tonnel afbreek STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Moet eers brug afbreek STR_5008_CANNOT_START_AND_END_ON :{WHITE}Kan nie in die selfde plek begin en eindig nie +STR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Brug hoofde is nie op die selfde vlak nie +STR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Brug is te laag vie die daal STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Begin en einde moet in lyn wees STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Plek ongeskik vir tonnel ingang STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY} -STR_500E_SUSPENSION_STEEL :Staking, Staal -STR_500F_GIRDER_STEEL :Staaf, Staal +STR_500E_SUSPENSION_STEEL :Suspensie, Staal +STR_500F_GIRDER_STEEL :Balk, Staal STR_5010_CANTILEVER_STEEL :Vrydraer, Staal -STR_5011_SUSPENSION_CONCRETE :Staking, Beton +STR_5011_SUSPENSION_CONCRETE :Suspensie, Beton STR_5012_WOODEN :Houterig STR_5013_CONCRETE :Beton STR_5014_TUBULAR_STEEL : Buis, Staal @@ -1823,16 +1941,16 @@ STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tonnel kan nie daar gebou word nie... STR_5017_RAILROAD_TUNNEL :Spoorweg tonnel STR_5018_ROAD_TUNNEL :Pad tonnel -STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE :Staal staking spoor brug -STR_501C_STEEL_GIRDER_RAIL_BRIDGE :Staal staaf spoor brug +STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE :Staal stuspensie spoor brug +STR_501C_STEEL_GIRDER_RAIL_BRIDGE :Staal balk spoor brug STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE :Staal vrydraer spoor brug -STR_501E_REINFORCED_CONCRETE_SUSPENSION :Gewapende beton staking spoor brug +STR_501E_REINFORCED_CONCRETE_SUSPENSION :Versterk beton suspensie spoor brug STR_501F_WOODEN_RAIL_BRIDGE :Houterig spoor brug STR_5020_CONCRETE_RAIL_BRIDGE :Beton spoor brug -STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE :Staal staking pad brug -STR_5022_STEEL_GIRDER_ROAD_BRIDGE :Staal staaf pad brug +STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE :Staal suspensie pad brug +STR_5022_STEEL_GIRDER_ROAD_BRIDGE :Staal balk pad brug STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE :Staal vrydraer pad brug -STR_5024_REINFORCED_CONCRETE_SUSPENSION :Gewapende beton staking pad brug +STR_5024_REINFORCED_CONCRETE_SUSPENSION :Versterk beton suspensie pad brug STR_5025_WOODEN_ROAD_BRIDGE :Houterig pad brug STR_5026_CONCRETE_ROAD_BRIDGE :Beton pad brug STR_5027_TUBULAR_RAIL_BRIDGE :Buis spoor brug @@ -1842,8 +1960,8 @@ STR_5800_OBJECT_IN_THE_WAY :{WHITE}Voorwerp in die pad STR_5801_TRANSMITTER :Sender STR_5802_LIGHTHOUSE :Vuurtoring -STR_5803_COMPANY_HEADQUARTERS :Maatskappy Hoofkwartiers -STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...maatskappy hoofkwartiers in die pad +STR_5803_COMPANY_HEADQUARTERS :Maatskappy Hoofkwartier +STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...maatskappy hoofkwartier in die weg STR_5805_COMPANY_OWNED_LAND :Maatskappy-besitte land STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Die land area kan nie aangekoop word nie... STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...jy besit dit alreeds! @@ -1885,7 +2003,7 @@ ############ end of savegame specific region! ##id 0x6800 -STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeilikheid Vlak +STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeite Vlak STR_OPTIONS_SAVE_CHANGES :{BLACK}Bewaar ############ range for difficulty levels starts @@ -1898,17 +2016,17 @@ ############ range for difficulty settings starts STR_6805_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maksimum no. mededingers: {ORANGE}{COMMA} STR_6806_COMPETITOR_START_TIME :{LTBLUE}Mededinger begin tyd: {ORANGE}{STRING} -STR_6807_NO_OF_TOWNS :{LTBLUE}No. van stede: {ORANGE}{STRING} -STR_6808_NO_OF_INDUSTRIES :{LTBLUE}No. van nywerheide: {ORANGE}{STRING} +STR_6807_NO_OF_TOWNS :{LTBLUE}No. van dorpe: {ORANGE}{STRING} +STR_6808_NO_OF_INDUSTRIES :{LTBLUE}No. van nywerhede: {ORANGE}{STRING} STR_6809_MAXIMUM_INITIAL_LOAN_000 :{LTBLUE}Maksimum inisieele lening: {ORANGE}{CURRENCY} STR_680A_INITIAL_INTEREST_RATE :{LTBLUE}Inisieele rente koers: {ORANGE}{COMMA}% STR_680B_VEHICLE_RUNNING_COSTS :{LTBLUE}Voertuig loopkoste: {ORANGE}{STRING} STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR :{LTBLUE}Konstruksie spoed van mededinge: {ORANGE}{STRING} STR_680D_INTELLIGENCE_OF_COMPETITORS :{LTBLUE}Intelligensie van mededinge: {ORANGE}{STRING} -STR_680E_VEHICLE_BREAKDOWNS :{LTBLUE}Voertuig oponthoude: {ORANGE}{STRING} +STR_680E_VEHICLE_BREAKDOWNS :{LTBLUE}Voertuig komplikasies: {ORANGE}{STRING} STR_680F_SUBSIDY_MULTIPLIER :{LTBLUE}Subsidie vermenigvuld: {ORANGE}{STRING} STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}koste van konstruksie: {ORANGE}{STRING} -STR_6811_TERRAIN_TYPE :{LTBLUE}Landerye tipe: {ORANGE}{STRING} +STR_6811_TERRAIN_TYPE :{LTBLUE}Landskap tipe: {ORANGE}{STRING} STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Hoeveelheid see/panne: {ORANGE}{STRING} STR_6813_ECONOMY :{LTBLUE}Ekonomie: {ORANGE}{STRING} STR_6814_TRAIN_REVERSING :{LTBLUE}Trein omkeer: {ORANGE}{STRING} @@ -1994,10 +2112,10 @@ STR_7022_INCOME_GRAPH :{WHITE}Inkome Grafiek STR_CURRCOMPACT :{CURRCOMPACT} STR_7024 :{COMMA} -STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Bewerking Profyt Grafiek +STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Bediening Profyt Grafiek STR_7026_BANK_BALANCE :{WHITE}Bank Balans STR_7027_LOAN :{WHITE}Lening -STR_MAX_LOAN :{WHITE}Max Lening: {BLACK}{CURRENCY} +STR_MAX_LOAN :{WHITE}Maks Lening: {BLACK}{CURRENCY} STR_7028 :{BLACK}{CURRENCY} STR_7029_BORROW :{BLACK}Leen {SKIP}{SKIP}{CURRENCY} STR_702A_REPAY :{BLACK}Terugbetaal {SKIP}{SKIP}{CURRENCY} @@ -2030,10 +2148,10 @@ STR_7048_ACCEPT_NEW_FACE_SELECTION :{BLACK}Aanvar nuwe gesig keuse STR_7049_SELECT_MALE_FACES :{BLACK}Kies manlik gesige STR_704A_SELECT_FEMALE_FACES :{BLACK}Kies vroulik gesige -STR_704B_GENERATE_RANDOM_NEW_FACE :{BLACK}Ontwikkel lukrake nuwe gesig +STR_704B_GENERATE_RANDOM_NEW_FACE :{BLACK}Opwek lukrake nuwe gesig STR_704C_KEY :{BLACK}Sleutel STR_704D_SHOW_KEY_TO_GRAPHS :{BLACK}Wys sleutel na grafieke -STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}Sleutel na maatskappy grafieke +STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}Sleutel vir maatskappy grafieke STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY :{BLACK}Kliek hier om maatskappy se intrede op grafiek aan/af te skakel STR_7050_UNITS_OF_CARGO_DELIVERED :{WHITE}Eenheide van vrag afgelewer STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Maatskappy prestasie graderings (maksimum gradering=1000) @@ -2076,8 +2194,8 @@ STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Wagwoord-beskerm jou maatskappy om onmagtig gebruikers te belet van verbinding STR_SET_COMPANY_PASSWORD :Stel maatskappy wagwoord STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}W�eld Insinking!{}{}Finansieel eksperte vrees ergste as ekonomie inmekaar sak! -STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Insinking Oor!{}{}Oplewing in sake gee vertroue na nywerheide as ekonomie versterk! -STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Skakel groot/klein venster groote +STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Insinking Oor!{}{}Oplewing in sake gee vertroue na nywerhede as ekonomie versterk! +STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Tokkel groot/klein venster groote STR_7076_COMPANY_VALUE :{GOLD}Maatskappy waarde: {WHITE}{CURRENCY} STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Koop 25% aandeel in maatskappy STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Verkoop 25% aandeel in maatskappy @@ -2103,18 +2221,20 @@ STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Passasier Rytuig (Elektries) STR_LIVERY_FREIGHT_WAGON :Vraag Wa STR_LIVERY_BUS :Bus -STR_LIVERY_TRUCK :Vraagmotor +STR_LIVERY_TRUCK :Vragmotor STR_LIVERY_PASSENGER_SHIP :Passasier Veer STR_LIVERY_FREIGHT_SHIP :Vraag Skip STR_LIVERY_HELICOPTER :Helikopter STR_LIVERY_SMALL_PLANE :Klein Vliegtuig STR_LIVERY_LARGE_PLANE :Groot Vliegtuig +STR_LIVERY_PASSENGER_TRAM :Passasier Trem +STR_LIVERY_FREIGHT_TRAM :Vrag Trem -STR_LIVERY_GENERAL_TIP :{BLACK}Wys generaal kleur skemas +STR_LIVERY_GENERAL_TIP :{BLACK}Toon generaal kleur skemas STR_LIVERY_TRAIN_TIP :{BLACK}Wys trein kleur skemas -STR_LIVERY_ROADVEH_TIP :{BLACK}Wys pad voertuig kleur skemas -STR_LIVERY_SHIP_TIP :{BLACK}Wys skip kleur skemas -STR_LIVERY_AIRCRAFT_TIP :{BLACK}Wys vliegtuig kleurskemas +STR_LIVERY_ROADVEH_TIP :{BLACK}Toon pad voertuig kleur skemas +STR_LIVERY_SHIP_TIP :{BLACK}Toon skip kleur skemas +STR_LIVERY_AIRCRAFT_TIP :{BLACK}Toon vliegtuig kleurskemas STR_LIVERY_PRIMARY_TIP :{BLACK}Kies die premere kleur vir die verkieste skema STR_LIVERY_SECONDARY_TIP :{BLACK}Kies die sekondere kleur vir die verkieste skema STR_LIVERY_PANEL_TIP :{BLACK}Kies 'n kleur skema te verander, of veelvoud skemas met CTRL+kliek. Kliek op die boks te skakel gebruik van skema @@ -2149,7 +2269,7 @@ STR_801A_ASIASTAR_ELECTRIC :'AsiaStar' (Elektries) STR_801B_PASSENGER_CAR :Passasier Rytuig STR_801C_MAIL_VAN :Pos Wa -STR_801D_COAL_CAR :Steenkool Wa +STR_801D_COAL_CAR :Kool Wa STR_801E_OIL_TANKER :Olie Tenkwa STR_801F_LIVESTOCK_VAN :Lewende Hawe Wa STR_8020_GOODS_VAN :Goedere Wa @@ -2179,7 +2299,7 @@ STR_8038_WIZZOWOW_Z99 :Wizzowow Z99 STR_8039_PASSENGER_CAR :Passasier Rytuig STR_803A_MAIL_VAN :Pos Wa -STR_803B_COAL_CAR :Steenkool Trok +STR_803B_COAL_CAR :Kool Trok STR_803C_OIL_TANKER :Olie Tenkwa STR_803D_LIVESTOCK_VAN :Lewende Hawe Wa STR_803E_GOODS_VAN :Goedere Wa @@ -2211,7 +2331,7 @@ STR_8058_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_8059_PASSENGER_CAR :Passasier Rytuig STR_805A_MAIL_VAN :Pos Wa -STR_805B_COAL_CAR :Steenkool Trok +STR_805B_COAL_CAR :Kool Trok STR_805C_OIL_TANKER :Olie Tenkwa STR_805D_LIVESTOCK_VAN :Lewende Hawe Wa STR_805E_GOODS_VAN :Goedere Wa @@ -2243,9 +2363,9 @@ STR_8078_PLODDYPHUT_MKI_BUS :Ploddyphut MkI Bus STR_8079_PLODDYPHUT_MKII_BUS :Ploddyphut MkII Bus STR_807A_PLODDYPHUT_MKIII_BUS :Ploddyphut MkIII Bus -STR_807B_BALOGH_COAL_TRUCK :Balogh Steenkool Trok -STR_807C_UHL_COAL_TRUCK :Uhl Steenkool Trok -STR_807D_DW_COAL_TRUCK :DW Steenkool Trok +STR_807B_BALOGH_COAL_TRUCK :Balogh Kool Trok +STR_807C_UHL_COAL_TRUCK :Uhl Kool Trok +STR_807D_DW_COAL_TRUCK :DW Kool Trok STR_807E_MPS_MAIL_TRUCK :MPS Pos Trok STR_807F_REYNARD_MAIL_TRUCK :Reynard Pos Trok STR_8080_PERRY_MAIL_TRUCK :Perry Pos Trok @@ -2377,7 +2497,7 @@ STR_80FE_GURU_X2_HELICOPTER :Guru X2 Helikopter STR_80FF_POWERNAUT_HELICOPTER :Powernaut Helikopter STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Boodskap van voertuig fabrikant -STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Ons het juis 'n nuwe {STRING} ontwerp - sal jy in 'n jaar se eksklusief gebruik van die voertuig belang stel, dus kan ons sien hoe hy uitvoer voor dit algemeen beskikbaar is? +STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Ons het sopas ‘n nuwe {STRING} ontwerp, sal jy belangstel om hierdie voertuig eksklusief vir ‘n jaar te gebruik. Hierdie word gedoen om te kyk hoe die voertuig doen voordat hy wereld wyd in produksie gesit word? STR_8102_RAILROAD_LOCOMOTIVE :spoorweg lokomotief STR_8103_ROAD_VEHICLE :pad voertuig STR_8104_AIRCRAFT :vliegtuig @@ -2389,7 +2509,7 @@ STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Trein Depot STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste trein arriveer by {STATION}! STR_8802_DETAILS :{WHITE}{VEHICLE} (Aanwyse) -STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trein in die pad +STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trein in die weg STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING} STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING} STR_8806_GO_TO :Gaan na {STATION} @@ -2399,11 +2519,11 @@ STR_880A_GO_TO_LOAD :Gaan na {STATION} (Laai) STR_880B_GO_TO_TRANSFER_LOAD :Gaan na {STATION} (Oordrag en wag vir volle lading) STR_880C_GO_NON_STOP_TO :Gaan deurgaande na {STATION} -STR_880D_GO_TO_NON_STOP_TRANSFER :Gaan deurgaande na {STATION} (Oordrag en vat vrag) +STR_880D_GO_TO_NON_STOP_TRANSFER :Gaan deurgaande na {STATION} (Oordra en neem vrag) STR_880E_GO_NON_STOP_TO_UNLOAD :Gaan deurgaande na {STATION} (Aflaai) -STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Gaan deurgaande na {STATION} (Oordrag en verlaat leeg) +STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Gaan deurgaande na {STATION} (Oordra en verlaat leë) STR_8810_GO_NON_STOP_TO_LOAD :Gaan deurgaande na {STATION} (Laai) -STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Gaan deurgaande na {STATION} (Oordrag en wag vir volle lading) +STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Gaan deurgaande na {STATION} (Oordra en wag vir volle lading) STR_GO_TO_TRAIN_DEPOT :Gaan na {TOWN} Trein Depot STR_SERVICE_AT_TRAIN_DEPOT :Diens by {TOWN} Trein Depot STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Gaan deurgaande na {TOWN} Trein Depot @@ -2415,10 +2535,10 @@ STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Diens by {TOWN} Trein Depot STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL :{LTBLUE}Diens by {TOWN} Trein Depot, {VELOCITY} -STR_INVALID_ORDER :{RED} (Swak Opdrag) +STR_INVALID_ORDER :{RED} (Ongeldig Opdrag) STR_UNKNOWN_DESTINATION :onbekende destinasie -STR_8812_EMPTY :{LTBLUE}Leeg +STR_8812_EMPTY :{LTBLUE}Leë STR_8813_FROM :{LTBLUE}{CARGO} vanaf {STATION} STR_FROM_MULT :{LTBLUE}{CARGO} van {STATION} (x{NUM}) STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Trein {COMMA} wag in depot @@ -2436,14 +2556,14 @@ STR_881F_BUILD_VEHICLE :{BLACK}Bou Voertuig STR_CLONE_ROAD_VEHICLE :{BLACK}Kloon Voertuig -STR_CLONE_ROAD_VEHICLE_INFO :{BLACK}Dit sal 'n afskrywing van die pad voertuig bou. Control-kliek sal die opdrae deel -STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dit sal 'n afskrywing van 'n pad voertuig bou. Kliek die knoppie en dan op 'n pad voertuig binne of buite die depot. Control-kliek sal die opdrae deel +STR_CLONE_ROAD_VEHICLE_INFO :{BLACK}Dit sal 'n kopie van die pad voertuig bou. Control-kliek sal die opdrae deel +STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dit sal 'n kopie van 'n pad voertuig bou. Kliek die knoppie en dan op 'n pad voertuig binne of buite die depot. Control-kliek sal die opdrae deel STR_CLONE_TRAIN :{BLACK}Kloon Trein -STR_CLONE_TRAIN_INFO :{BLACK}Dit sa 'n afskrywing van die trein bou insluitend alle trokke. Control-kliek sal die opdrae deel -STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dit sal 'n afskrywing van 'n trein bou insluitend alle trokke. Kliek die knoppie en dan op 'n trein binne of buite die depot. Control-kliek sal die opdrae deel +STR_CLONE_TRAIN_INFO :{BLACK}Dit sa 'n kopie van die trein bou insluitend alle trokke. Control-kliek sal die opdrae deel +STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dit sal 'n kopie van 'n trein bou insluitend alle trokke. Kliek die knoppie en dan op 'n trein binne of buite die depot. Control-kliek sal die opdrae deel STR_8820_RENAME :{BLACK}Hernoem STR_8823_SKIP :{BLACK}Sprong -STR_8824_DELETE :{BLACK}Uitwis +STR_8824_DELETE :{BLACK}Uit vee STR_8825_NON_STOP :{BLACK}Deurgaande STR_8826_GO_TO :{BLACK}Gaan Na STR_8827_FULL_LOAD :{BLACK}Volle Lading @@ -2465,57 +2585,57 @@ STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Geen spasie vir nog opdrae STR_8832_TOO_MANY_ORDERS :{WHITE}Te veel opdrae STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kan nie nuwe opdrag invoeg nie... -STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan nie die opdrag verwyder nie... +STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan nie die opdrag uitvee nie... STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Die opdrag kan nie verander word nie... STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Kan nie opdrag beweeg nie... STR_CAN_T_SKIP_ORDER :{WHITE}Kan nie huidige opdrag sprong nie... STR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan nie verkieste opdrag sprong nie... -STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Voertuig kan nie beweeg nie... +STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Kan nie voertuig beweeg nie... STR_8838_N_A :N/A{SKIP} STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Kan nie spoorweg voertuig verkoop nie... STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan nie roete na plaaslike depot vind nie STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Trein kan nie stop/aanvang word nie... STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Diens tussentyd: {LTBLUE}{COMMA}dae{BLACK} Laaste diens: {LTBLUE}{DATE_LONG} STR_SERVICING_INTERVAL_PERCENT :{BLACK}Versiens tussentyd: {LTBLUE}{COMMA}%{BLACK} Laaste versiening: {LTBLUE}{DATE_LONG} -STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treine - kliek op trein vir inligting +STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treine - kliek op trein vir informasie STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Bou nuwe treine (vereis trein depot) STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treine - kliek op trein vir info., sleep voertuig om te bysit/verwyder van trein STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Bou nuwe trein voertuig STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Sleep trein voertuig hier om dit te verkoop STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Senter skerm op trein depot STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Trein voertuig keuse lys - kliek op voertuig vir inligting -STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Bou die beklemtoonde trein voertuig +STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Bou die verlig trein voertuig STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Hernoem trein voertuig tipe -STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Huidige trein aksie - kliek hier om trein te stop/aanvang trein -STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Wys trein se opdrae +STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Huidige trein aksie - kliek hier om trein te stop/aanskakel +STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Toon trein se opdrae STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Senter skerm op trein STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Stuur trein na depot. CTRL+kliek sal net diens -STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Dwing trein om voort te gaan sonder om vir seine te wag +STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Forseer trein om voort te gaan sonder om vir sien die uit te klaar STR_884B_REVERSE_DIRECTION_OF_TRAIN :{BLACK}Omkeer rigting van trein -STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Wys trein se aanwyse +STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Toon trein besonderhede STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Vergroot diens tussentyd STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Verminder diens tussentyd -STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Wys aanwyse van vrag gedra -STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Wys aanwyse van trein voertuie -STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Wys kapasiteite van elke voertuig -STR_8852_SHOW_TOTAL_CARGO :{BLACK}Wys totaale kapasitiet van trein, verdeel by vrag tipe -STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Opdraglys - kliek op 'n opdrag om dit te beklemtoon. CTRL + kliek senter op stasie +STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Toon besonderhede van vrag gedra +STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Toon besonderhede van trein voertuie +STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Toon kapasiteite van elke voertuig +STR_8852_SHOW_TOTAL_CARGO :{BLACK}Toon totaale kapasitiet van trein, verdeel by vrag tipe +STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Opdraglys - kliek op 'n opdrag om dit te verlig. CTRL + kliek senter op stasie STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Sprong die huidige opdraag, en begin die volgende. CTRL + kliek sprong na verkieste opdrag -STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Uitwis die beklemtoonde opdrag -STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag deurgaande -STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Invoeg 'n nuwe opdrag voor die beklemtoonde opdrag, of byvoeg na einde van lys -STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag dwing die voertuig om vir 'n volle lading te wag -STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag dwing die voertuig te aflaai +STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Vee uit die verlig opdrag +STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die verlig opdrag deurgaande +STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Invoeg 'n nuwe opdrag voor die verlig opdrag, of byvoeg na einde van lys +STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die verlig opdrag forseer die voertuig om vir 'n volle laai te wag +STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die verlig opdrag forseer die voertuig te aflaai STR_SERVICE_HINT :{BLACK}Sprong die opdraag tensy 'n versiening nodig is STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Koste: {CURRENCY} Gewig: {WEIGHT_S}{}Spoed: {VELOCITY} Krag: {POWER}{}Loopkoste: {CURRENCY}/jr{}Kapasitiet: {CARGO} -STR_885C_BROKEN_DOWN :{RED}Oponthoud +STR_885C_BROKEN_DOWN :{RED}Komplikasies STR_885D_AGE_RUNNING_COST_YR :{BLACK}Ouderdom: {LTBLUE}{STRING}{BLACK} Loopkoste: {LTBLUE}{CURRENCY}/Jr STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewig: {LTBLUE}{WEIGHT_S} {BLACK}Krag: {LTBLUE}{POWER}{BLACK} Max. spoed: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Gewig: {LTBLUE}{WEIGHT_S} {BLACK}Krag: {LTBLUE}{POWER}{BLACK} Max. spoed: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY} (verlede jaar: {CURRENCY}) -STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Deeglikheid: {LTBLUE}{COMMA}% {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA} +STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Betroubaarheid: {LTBLUE}{COMMA}% {BLACK}Komplikasies na laaste diens: {LTBLUE}{COMMA} STR_8861_STOPPED :{RED}Gestop -STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan nie trein dwing om sein te vermy op gevaar... +STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan nie trein forseer om sein te vermy op gevaar... STR_8863_CRASHED :{RED}Botsing! STR_8865_NAME_TRAIN :{WHITE}Benaam trein @@ -2525,8 +2645,8 @@ STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Kan nie rigting van trein omkeer nie... STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Hernoem trein voertuig tipe STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Trein voertuig tipe kan nie hernoem word nie... -STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag dwing die voertuig om sy vrag te stort -STR_886F_TRANSFER :{BLACK}Oordrag +STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die verlig opdrag forseer die voertuig om sy vrag te stort +STR_886F_TRANSFER :{BLACK}Oordra STR_CLEAR_TIME :{BLACK}Reinig Tyd STR_TRAIN_STOPPING :{RED}Ophou @@ -2535,11 +2655,12 @@ STR_TRAIN_NO_POWER :{RED}Geen Krag -STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan nie voertuig tydtafel nie... + +STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan nie rooster voertuig nie... ##id 0x9000 STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Pad voertuig in die pad -STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} Pad voertuig{P "" s} +STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} Pad voert{P uig uie} STR_9002 :{WHITE}{VEHICLE} STR_9003_ROAD_VEHICLE_DEPOT :{WHITE}{TOWN} Pad Voertuig Depot STR_9004_NEW_VEHICLES :{BLACK}Nuwe Voertuie @@ -2550,12 +2671,12 @@ STR_900D_AGE_RUNNING_COST_YR :{BLACK}Ouderdom: {LTBLUE}{STRING}{BLACK} Loopkoste: {LTBLUE}{CURRENCY}/Jr STR_900E_MAX_SPEED :{BLACK}Max. spoed: {LTBLUE}{VELOCITY} STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY} (verlede jaar: {CURRENCY}) -STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Deeglikheid: {LTBLUE}{COMMA}% {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA} +STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Betroubaarheid: {LTBLUE}{COMMA}% {BLACK}Komplikasies na laaste diens: {LTBLUE}{COMMA} STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY} STR_9012_CAPACITY :{BLACK}Kapasitiet: {LTBLUE}{CARGO} STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...moet gestop binne 'n pad voertuig depot wees STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan nie pad voertuig verkoop nie -STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Kani nie pad voertuig stop/aanvang nie... +STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Kani nie pad voertuig stop/aanskakel nie... STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Pad voertuig {COMMA} wag in depot STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Op pad na {TOWN} Pad Depot STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Op pad na {TOWN} Pad Depot, {VELOCITY} @@ -2565,18 +2686,18 @@ STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan nie plaaslike depot vind nie STR_901A_ROAD_VEHICLES_CLICK_ON :{BLACK}Pad voertuie - kliek op voertuig vir inligting STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}Bou nuwe pad voertuie (vereis pad voertuig depot) -STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Huidige voertuig aksie - kliek hier om voertuig to stop/aanvang -STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Wys voertuig se opdrae +STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Huidige voertuig aksie - kliek hier om voertuig to stop/aanskakel +STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Toon voertuig se opdrae STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Senter skerm op voertuig STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Stuur voertuig na depot. CTRL+kliek sal net diens -STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Dwing voertuig om te draai om +STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Forseer voertuig om te draai om STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Wys pad voertuig aanwyse STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Voertuie - kliek op voertuig vir inligting STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Bou nuwe pad voertuig STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Sleep pad voertuig hier om dit te verkoop STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Senter skerm op pad voertuig depot STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Pad voertuig keuse lys - kliek op voertuig vir inligting -STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bou die beklemtoonde pad voertuig +STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bou die verlig pad voertuig STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Koste: {CURRENCY}{}Spoed: {VELOCITY}{}Loopkoste: {CURRENCY}/jr{}Kapasitiet: {CARGO} STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapasiteit: {LTBLUE} STR_BARE_CARGO :{CARGO} @@ -2590,7 +2711,7 @@ STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste vrag trein arriveer by {STATION}! STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Pad Voertuig Botsing!{}Bestuurder sterf in vuurbol na botsing met trein STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Pad voertuig Botsing!{}{COMMA} sterf in vuurbol na botsing met trein -STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Kan nie voertuig dwing om te omdraai nie +STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Kan nie voertuig forseer om te omdraai nie... STR_ONLY_TURN_SINGLE_UNIT :{WHITE}Kan nie voertuie van veel deele draai nie STR_9034_RENAME :{BLACK}Hernoem STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Hernoem pad voertuig tipe @@ -2613,8 +2734,8 @@ STR_9808_NEW_SHIPS :{WHITE}Nuwe Skepe STR_9809_BUILD_SHIP :{BLACK}Bou Skip STR_CLONE_SHIP :{BLACK}Kloon Skip -STR_CLONE_SHIP_INFO :{BLACK}Dit sal 'n afskrywing van die skip bou. Control-kliek sal die opdrae deel -STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Dit sal 'n afskrywing van 'n skip bou. Kliek die knoppie en dan op 'n skip binne of buite die depot. Control-kliek sal die opdrae deel +STR_CLONE_SHIP_INFO :{BLACK}Dit sal 'n kopie van die skip bou. Control-kliek sal die opdrae deel +STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Dit sal 'n kopie van 'n skip bou. Kliek die knoppie en dan op 'n skip binne of buite die depot. Control-kliek sal die opdrae deel STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}Skip moet in 'n depot gestop wees STR_980C_CAN_T_SELL_SHIP :{WHITE}Skip kan nie verkoop word nie... STR_980D_CAN_T_BUILD_SHIP :{WHITE}Kan nie skip bou nie... @@ -2624,10 +2745,10 @@ STR_9812_AGE_RUNNING_COST_YR :{BLACK}Ouderdom: {LTBLUE}{STRING}{BLACK} Loopkoste: {LTBLUE}{CURRENCY}/Jr STR_9813_MAX_SPEED :{BLACK}Max. spoed: {LTBLUE}{VELOCITY} STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY} (verlede jaar: {CURRENCY}) -STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Deeglikheid: {LTBLUE}{COMMA}% {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA} +STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Betroubaarheid: {LTBLUE}{COMMA}% {BLACK}Komplikasies na laaste diens: {LTBLUE}{COMMA} STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY} STR_9817_CAPACITY :{BLACK}Kapasitiet: {LTBLUE}{CARGO} -STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan nie skip stop/aanvang nie +STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan nie skip stop/aanskakel nie STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan nie skip na depot stuur nie... STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan nie plaaslike depot vind nie STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Op pad na {TOWN} Skip Depot @@ -2641,11 +2762,11 @@ STR_9820_BUILD_NEW_SHIP :{BLACK}Bou nuwe skip STR_9821_DRAG_SHIP_TO_HERE_TO_SELL :{BLACK}Sleep skip hier om dit te verkoop STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Senter skerm op skip depot -STR_9823_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Skepe - kliek op skip vir inligting +STR_9823_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Skepe - kliek op skip vir informasie STR_9824_BUILD_NEW_SHIPS_REQUIRES :{BLACK}Bou nuwe skepe (vereis skip depot) STR_9825_SHIP_SELECTION_LIST_CLICK :{BLACK}Skip keuse lys - kliek op skip vir inligting -STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Bou die beklemtoonde skip -STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Huidige skip aksie - kliek hier om skip te stop/aanvang +STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Bou die verlig skip +STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Huidige skip aksie - kliek hier om skip te stop/aanskakel STR_9828_SHOW_SHIP_S_ORDERS :{BLACK}Wys skip se opdrae STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Senter skerm op skip STR_982A_SEND_SHIP_TO_DEPOT :{BLACK}Stuur skip na depot @@ -2666,13 +2787,13 @@ STR_983B_REFIT :{WHITE}{VEHICLE} (Herstel) STR_983C_REFIT_SHIP :{BLACK}Herstel skip STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Kies vrag tipe vir skip te ontvoer -STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Herstel skip om die beklemtoonde vrag tipe te ontvoer +STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Herstel skip om die verlig vrag tipe te ontvoer STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Kies vrag tipe vir skip te ontvoer: STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nuwe kapasiteit: {GOLD}{CARGO}{}{BLACK}Herstelkoste: {GOLD}{CURRENCY} STR_9841_CAN_T_REFIT_SHIP :{WHITE}Skip kan nie herstel word nie... STR_9842_REFITTABLE :(herstelbaar) STR_GO_TO_SHIP_DEPOT :Gaan na {TOWN} Skip Depot -SERVICE_AT_SHIP_DEPOT :Versiening by {TOWN} Skip Depot +SERVICE_AT_SHIP_DEPOT :Diens by {TOWN} Skip Depot ##id 0xA000 STR_A000_AIRPORTS :{WHITE}Lughawe @@ -2680,8 +2801,8 @@ STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Vliegtuig Hangar STR_A003_NEW_AIRCRAFT :{BLACK}Nuwe Vliegtuig STR_CLONE_AIRCRAFT :{BLACK}Kloon Vliegtuig -STR_CLONE_AIRCRAFT_INFO :{BLACK}Dit sal 'n afskrywing van die vliegtuig bou. Control-kliek sal die opdrae deel -STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dit sal 'n afskrywing van 'n vliegtuig bou. Kliek die knoppie en dan op 'n vliegtuig binne of buite die hangar. Control-kliek sal die opdrae deel +STR_CLONE_AIRCRAFT_INFO :{BLACK}Dit sal 'n kopie van die vliegtuig bou. Control-kliek sal die opdrae deel +STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dit sal 'n kopie van 'n vliegtuig bou. Kliek die knoppie en dan op 'n vliegtuig binne of buite die hangar. Control-kliek sal die opdrae deel STR_A005_NEW_AIRCRAFT :{WHITE}Nuwe Vliegtuig STR_A006_BUILD_AIRCRAFT :{BLACK}Bou Vliegtuig STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Kan nie vliegtuig bou nie... @@ -2692,7 +2813,7 @@ STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Ouderdom: {LTBLUE}{STRING}{BLACK} Loopkoste: {LTBLUE}{CURRENCY}/Jr STR_A00E_MAX_SPEED :{BLACK}Max. spoed: {LTBLUE}{VELOCITY} STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY} (verlede jaar: {CURRENCY}) -STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Deeglikheid: {LTBLUE}{COMMA}% {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA} +STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Betroubaarheid: {LTBLUE}{COMMA}% {BLACK}Komplikasies na laaste diens: {LTBLUE}{COMMA} STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY} STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan nie vlietuig na hangar stuur nie... STR_HEADING_FOR_HANGAR :{ORANGE}Op pad na {STATION} Hangar @@ -2701,7 +2822,7 @@ STR_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Diens by {STATION} Hangar, {VELOCITY} STR_A014_AIRCRAFT_IS_WAITING_IN :{WHITE}Vliegtuig {COMMA} wag in die vliegtuig hangar STR_A015_AIRCRAFT_IN_THE_WAY :{WHITE}Vliegtuig in die pad -STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Kan nie vliegtuig stop/aanvang nie... +STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Kan nie vliegtuig stop/aanskakel nie... STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Vliegtuig is opvlug STR_A019_CAPACITY :{BLACK}Kapasiteit: {LTBLUE}{CARGO}, {CARGO} STR_A01A_CAPACITY :{BLACK}Kapasiteit: {LTBLUE}{CARGO} @@ -2709,19 +2830,19 @@ STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Vliegtuig kan nie verkoop word nie... STR_A01D_AIRPORT_CONSTRUCTION :Lughawe konstruksie STR_A01E_BUILD_AIRPORT :{BLACK}Bou lughawe -STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Vliegtuie - kliek op vliegtuig vir inligting +STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Vliegtuie - kliek op vliegtuig vir informasie STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Bou nuwe vliegtuig (vereis lughawe met hangar) -STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Vliegtuie - kliek op vliegtuig vir inligting +STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Vliegtuie - kliek op vliegtuig vir informasie STR_A022_BUILD_NEW_AIRCRAFT :{BLACK}Bou nuwe vliegtuig STR_A023_DRAG_AIRCRAFT_TO_HERE_TO :{BLACK}Sleep vliegtuig hier om dit te verkoop STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Senter skerm op hangar STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Vliegtuig keuse lys - kliek op vliegtuig vir inligting -STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Bou die beklemtoonde vliegtuig -STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Huidige vliegtuig aksie - kliek hier on vliegtuig te stop/aanvang -STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Wys vliegtuig se opdrae +STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Bou die verlig vliegtuig +STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Huidige vliegtuig aksie - kliek hier on vliegtuig te stop/aanskakel +STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Toon vliegtuig se opdrae STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Senter skerm op vliegtuig STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Stuur vliegtuig na hangar. CTRL+kliek sal net diens -STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Wys vliegtuig aanwyse +STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Toon vliegtuig aanwyse STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Koste: {CURRENCY} Max. Spoed: {VELOCITY}{}Kapasiteit: {COMMA} passasiers, {COMMA} sakke van pos{}Loopkoste: {CURRENCY}/Jr STR_A030_NAME_AIRCRAFT :{WHITE}Benaam vliegtuig @@ -2738,22 +2859,22 @@ STR_A03C_REFIT :{WHITE}{VEHICLE} (Herstel) STR_A03D_REFIT_AIRCRAFT :{BLACK}Herstel vliegtuig STR_A03E_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Kies vrag tipe vir vliegtuig om te ontvoer -STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Herstel vliegtuig om beklemtoonde vrag tipe te ontvoer +STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Herstel vliegtuig om verlig vrag tipe te ontvoer STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Kies vrag tipe om te ontvoer: STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nuwe kapasiteit: {GOLD}{STRING}{}{BLACK}Herstelkoste: {GOLD}{CURRENCY} STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Vliegtuig kan nie herstel word nie... STR_GO_TO_AIRPORT_HANGAR :Gaan na {STATION} Hangar -SERVICE_AT_AIRPORT_HANGAR :Versiening by {STATION} Hangar +SERVICE_AT_AIRPORT_HANGAR :Diens by {STATION} Hangar ##id 0xB000 STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin ramp by {STATION}! STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Pad voertuig vernietig in 'VVV' botsing! STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Olie raffineerdery ontploffing naby {TOWN}! -STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabriek vernietig in verdage omstandighede naby {TOWN}! +STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}fabriek vernietig in agterdogtig omstandighede naby {TOWN}! STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'VVV' beland naby {TOWN}! -STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Steenkool myn bedaaring los spoor van vernietiging naby {TOWN}! -STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Vloede!{}Te minste {COMMA} verlore, vermoede dood agter beduidend vloeding! +STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Kool myn bedaaring los spoor van vernietiging naby {TOWN}! +STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Oorstroom!{}Te minste {COMMA} vermis, aangeneem dood na beduidende oorstroom! STR_BRIBE_FAILED :{WHITE}Jou omkooping onderneeming is deur STR_BRIBE_FAILED_2 :{WHITE}'n streek navorser uitgevind @@ -2795,14 +2916,14 @@ STR_CURRENCY_WINDOW :{WHITE}Gewoonte koers -STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Wisselkoers: {ORANGE}{CURRENCY} = {COMMA} +STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Wissel koers: {ORANGE}{CURRENCY} = £ {COMMA} STR_CURRENCY_SEPARATOR :{LTBLUE}Afskeier STR_CURRENCY_PREFIX :{LTBLUE}Vervoegsel: STR_CURRENCY_SUFFIX :{LTBLUE}Agtervoegsel: STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Verwissel na Euro: {ORANGE}{NUM} STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Verwissel na Euro: {ORANGE}nooit STR_CURRENCY_PREVIEW :{LTBLUE}Voorskou: {ORANGE}{CURRENCY} -STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Verander gewoonte koers stelling +STR_CURRENCY_CHANGE_PARAMETER :{BLACK}verander gebruiklike koers parameter STR_BUS :{BLACK}{BUS} STR_LORRY :{BLACK}{LORRY} @@ -2812,7 +2933,8 @@ ### depot strings -STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Is jy seker jy wil al die voertuie in die depot nou verkoop? +STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}U staan op die punt om al die voertuie in die depot te verkoop. Is jy seker? +STR_DEPOT_WRONG_DEPOT_TYPE :Verkeerde depot tipe STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Verkoop allep treine in die depot STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Verkoop alle pad voertuie in die depot @@ -2841,13 +2963,13 @@ STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Kliek om alle skepe in die depot te stop STR_MASS_STOP_HANGAR_TIP :{BLACK}Kliek om alle vlietuie in die hangar te stop -STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Kliek om alle treine in die depot te laat ry -STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Kliek om alle pad voertuie in die depot te laayt ry -STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Kliek om alle skepe in die depot te laat ry -STR_MASS_START_HANGAR_TIP :{BLACK}Kliek om alle vliegtuie in die hangar te laat ry +STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Kliek om alle treine in die depot te aanskakel +STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Kliek om alle pad voertuie in die depot te aanskakel +STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Kliek om alle skepe in die depot te aanskakel +STR_MASS_START_HANGAR_TIP :{BLACK}Kliek om alle vliegtuie in die hangar te aanskakel STR_MASS_STOP_LIST_TIP :{BLACK}Kliek om alle voertuie in die lys te stop -STR_MASS_START_LIST_TIP :{BLACK}Kliek om aller voertuie in die lys te laat ry +STR_MASS_START_LIST_TIP :{BLACK}Kliek om aller voertuie in die lys te aanskakel @@ -2863,31 +2985,31 @@ ########### String for New Landscape Generator -STR_GENERATE :{WHITE}Ontwikkel -STR_LAND_GENERATOR :{BLACK}Land ontwikkelaar: +STR_GENERATE :{WHITE}Opwek +STR_LAND_GENERATOR :{BLACK}Daal genereerder: STR_HEIGHTMAP_ROTATION :{BLACK}Hoogtekaart rotasie: STR_DATE :{BLACK}Date: STR_GENERATE_DATE :{BLACK}{DATE_LONG} STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Skaal waaskuwing -STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Te veel afskaaling van oorpsrong kaart is nie goedgekeur nie. Gaan aan met ontwikkeling? +STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Om te verstel oorsprong werfkaart te is nie aanbeveel. Voortgaan met die generasie? STR_HEIGHTMAP_NAME :{BLACK}Hoogtekaart name: STR_HEIGHTMAP_SIZE :{BLACK}Groote: {ORANGE}{NUM} x {NUM} -STR_GENERATION_WORLD :{WHITE}Wereld Ontwikkeling... +STR_GENERATION_WORLD :{WHITE}Genereer wêreld... STR_GENERATION_ABORT :{BLACK}Verlaat -STR_GENERATION_ABORT_CAPTION :{WHITE}Verlaat Wereld Ontwikkeling -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Wil jy rerig die ontwikkeling verlaat? +STR_GENERATION_ABORT_CAPTION :{WHITE}Verlaat Wêreld Generasie +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Wil jy rerig die generasie verlaat? STR_GENERATION_PROGRESS :{BLACK}{NUM} / {NUM} STR_CLEARING_TILES :{BLACK}Ru en rotserig area ontwikkeling -STR_DIFFICULTY_TO_CUSTOM :{WHITE}Die aksie het die moeilikheids vlak na gewoonte verander -STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Beweeg die hoogte van platte land een af -STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Beweeg die hoogte van platte land bo een -STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Verander die hoogte van platte land -STR_FLAT_WORLD_HEIGHT :{BLACK}Hoogte van platte land: +STR_DIFFICULTY_TO_CUSTOM :{WHITE}Hierdie aksie verander die moeite vlak to gebruiklike +STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Beweeg die hoogte van platte daal een af +STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Beweeg die hoogte van platte daal bo een +STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Verander die hoogte van platte daal +STR_FLAT_WORLD_HEIGHT :{BLACK}Hoogte van platte daal: STR_FLAT_WORLD_HEIGHT_NUM :{NUM} ########### String for new airports -STR_CITY_AIRPORT :{BLACK}Stad +STR_CITY_AIRPORT :{BLACK}Dorp STR_METRO_AIRPORT :{BLACK}Metropolitaans lughawe STR_INTERNATIONAL_AIRPORT :{BLACK}Internasionaale lughawe STR_COMMUTER_AIRPORT :{BLACK}Pendelaar @@ -2908,22 +3030,62 @@ STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Area: {NUM} x {NUM}{}Hoogte verskil: {NUM} m ############ Date formatting +STR_DATE_TINY :{STRING}-{STRING}-{NUM} +STR_DATE_SHORT :{STRING} {NUM} +STR_DATE_LONG :{STRING} {STRING} {NUM} ######## +STR_FEEDER_CARGO_VALUE :{BLACK}oordra Krediete: {LTBLUE}{CURRENCY} +STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD :{WHITE}...hierdie is 'n dorp besit pad +STR_DRIVE_THROUGH_ERROR_DIRECTION :{WHITE}...pad teenoor in die verkeerde rigting ##### Mass Order +STR_GROUP_NAME_FORMAT :Groep {COMMA} +STR_GROUP_TINY_NAME :{TINYFONT}{GROUP} +STR_GROUP_ALL_TRAINS :Alle triene +STR_GROUP_ALL_ROADS :Alle pad voertuie +STR_GROUP_ALL_SHIPS :Alle skepe +STR_GROUP_ALL_AIRCRAFTS :Alle vliegtuie +STR_GROUP_DEFAULT_TRAINS :Ongegroepeerde treine +STR_GROUP_DEFAULT_ROADS :Ongegroepeerde pad voertuie +STR_GROUP_DEFAULT_SHIPS :Ongegroepeerde skepe +STR_GROUP_DEFAULT_AIRCRAFTS :Ongegroepeerde vliegtuig +STR_GROUP_TINY_NUM :{TINYFONT}{COMMA} +STR_GROUP_ADD_SHARED_VEHICLE :Voeg gedeel voertuie +STR_GROUP_REMOVE_ALL_VEHICLES :Verwyder alle voertuie +STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Trein{P "" e} +STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Pad Voer{P tuig tuie} +STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Sk{P ip epe} +STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Vliegtuie +STR_GROUP_RENAME_CAPTION :{BLACK}Hernoem groep +STR_GROUP_REPLACE_CAPTION :{WHITE}Vervang Voertuie van "{GROUP}" +STR_GROUP_CAN_T_CREATE :{WHITE}Kan nie groep skep nie... +STR_GROUP_CAN_T_DELETE :{WHITE}Kan nie groep uitvee nie... +STR_GROUP_CAN_T_RENAME :{WHITE}Kan nie groep hernoem nie... +STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan nie alle voertuie van groep verwyder nie... +STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan nie voeg die voertuig tot hierdie groep nie... +STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan nie gedeel voertuie na groep byvoeg... +STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Groepe - Kliek op 'n groep om te lys alle voertuie van hierdie groep +STR_GROUP_CREATE_TIP :{BLACK}kliek om groep te skep +STR_GROUP_DELETE_TIP :{BLACK}Vee uit die gekose groep +STR_GROUP_RENAME_TIP :{BLACK}Hernoem die gekose groep +STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Kliek om te beskerm hierdie groep van wêreldwyd outovervang STR_COMPANY_NAME :{COMPANY} +STR_ENGINE_NAME :{ENGINE} +STR_GROUP_NAME :{GROUP} #### Improved sign GUI ######## +STR_FUND_NEW_INDUSTRY :{BLACK}Fonds STR_BUILD_NEW_INDUSTRY :{BLACK}Bou +STR_INDUSTRY_SELECTION_HINT :{BLACK}Kies die paslike nywerheid van hierdie lys diff -r 2c27f9be3fb9 -r f82a4facea8b src/misc_cmd.cpp --- a/src/misc_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/misc_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -390,7 +390,7 @@ if (flags & DC_EXEC) { if (p1 != (uint32)-1L) { - ((int*)&_opt_ptr->diff)[p1] = p2; + ((GDType*)&_opt_ptr->diff)[p1] = p2; _opt_ptr->diff_level = 3; // custom difficulty level } else { _opt_ptr->diff_level = p2; diff -r 2c27f9be3fb9 -r f82a4facea8b src/misc_gui.cpp --- a/src/misc_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/misc_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -9,6 +9,7 @@ #include "functions.h" #include "landscape.h" #include "newgrf.h" +#include "newgrf_text.h" #include "saveload.h" #include "strings.h" #include "table/sprites.h" @@ -505,6 +506,13 @@ CopyInDParam(0, _errmsg_decode_params, lengthof(_errmsg_decode_params)); DrawWindowWidgets(w); CopyInDParam(0, _errmsg_decode_params, lengthof(_errmsg_decode_params)); + + /* If the error message comes from a NewGRF, we must use the text ref. stack reserved for error messages. + * If the message doesn't come from a NewGRF, it won't use the TTDP-style text ref. stack, so we won't hurt anything + */ + SwitchToErrorRefStack(); + RewindTextRefStack(); + if (!IsWindowOfPrototype(w, _errmsg_face_widgets)) { DrawStringMultiCenter( 120, @@ -533,6 +541,9 @@ _errmsg_message_1, w->width - 2); } + + /* Switch back to the normal text ref. stack for NewGRF texts */ + SwitchToNormalRefStack(); break; case WE_MOUSELOOP: diff -r 2c27f9be3fb9 -r f82a4facea8b src/music_gui.cpp --- a/src/music_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/music_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -118,7 +118,8 @@ } } while (_playlists[msf.playlist][i++] != 0 && i < lengthof(_cur_playlist) - 1); - if (msf.shuffle) { + /* Do not shuffle when on the intro-start window, as the song to play has to be the original TTD Theme*/ + if (msf.shuffle && _game_mode != GM_MENU) { i = 500; do { uint32 r = InteractiveRandom(); diff -r 2c27f9be3fb9 -r f82a4facea8b src/network/core/packet.cpp --- a/src/network/core/packet.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/network/core/packet.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -133,7 +133,8 @@ void Packet::Send_string(const char* data) { assert(data != NULL); - assert(this->size < sizeof(this->buffer) - strlen(data) - 1); + /* The <= *is* valid due to the fact that we are comparing sizes and not the index. */ + assert(this->size + strlen(data) + 1 <= sizeof(this->buffer)); while ((this->buffer[this->size++] = *data++) != '\0') {} } diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf.cpp --- a/src/newgrf.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -1541,8 +1541,8 @@ switch (prop) { case 0x08: /* Bit number of cargo */ cs->bitnum = grf_load_byte(&buf); - cs->grfid = _cur_grffile->grfid; if (cs->IsValid()) { + cs->grfid = _cur_grffile->grfid; SETBIT(_cargo_mask, cid + i); } else { CLRBIT(_cargo_mask, cid + i); @@ -1755,7 +1755,6 @@ return false; } - tsp->grf_prop.override = ovrid; _industile_mngr.Add(indtid + i, ovrid); } break; @@ -1854,6 +1853,9 @@ indsp->grf_prop.local_id = indid + i; indsp->grf_prop.subst_id = subs_id; indsp->grf_prop.grffile = _cur_grffile; + /* If the grf industry needs to check its surounding upon creation, it should + * rely on callbacks, not on the original placement functions */ + indsp->check_proc = CHECK_NOTHING; } } break; @@ -1888,8 +1890,7 @@ copy_from = (IndustryTileTable*)_origin_industry_specs[type].table[laynbr]; for (size = 1;; size++) { - if (_origin_industry_specs[type].table[laynbr + (size - 1)]->ti.x == -0x80 && - _origin_industry_specs[type].table[laynbr + (size - 1)]->ti.y == 0) break; + if (copy_from[size - 1].ti.x == -0x80 && copy_from[size - 1].ti.y == 0) break; } break; } @@ -2007,7 +2008,7 @@ break; case 0x1A: // Special industry flags to define special behavior - indsp->behaviour = (IndustyBehaviour)grf_load_dword(&buf); + indsp->behaviour = (IndustryBehaviour)grf_load_dword(&buf); break; case 0x1B: // New industry text ID @@ -2865,6 +2866,12 @@ for (uint i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; StationSpec *statspec = _cur_grffile->stations[stid]; + + if (statspec == NULL) { + grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stid); + return; + } + byte *bp = &buf[4 + idcount]; for (uint c = 0; c < cidcount; c++) { @@ -2897,6 +2904,10 @@ for (uint i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; StationSpec *statspec = _cur_grffile->stations[stid]; + if (statspec == NULL) { + grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stid); + continue; + } statspec->spritegroup[CT_DEFAULT] = _cur_grffile->spritegroups[groupid]; statspec->grffile = _cur_grffile; @@ -4060,7 +4071,8 @@ break; case 0x0B: // Cargo - src1 = PerformGRM(_grm_cargos, NUM_CARGO, count, op, target, "cargos"); + /* There are two ranges: one for cargo IDs and one for cargo bitmasks */ + src1 = PerformGRM(_grm_cargos, NUM_CARGO * 2, count, op, target, "cargos"); if (_skip_sprites == -1) return; break; @@ -4179,8 +4191,19 @@ _traininfo_vehicle_pitch = res; break; + case 0x8F: // Rail track type cost factors + _railtype_cost_multiplier[0] = GB(res, 0, 8); + if (_patches.disable_elrails) { + _railtype_cost_multiplier[1] = GB(res, 0, 8); + _railtype_cost_multiplier[2] = GB(res, 8, 8); + } else { + _railtype_cost_multiplier[1] = GB(res, 8, 8); + _railtype_cost_multiplier[2] = GB(res, 16, 8); + } + _railtype_cost_multiplier[3] = GB(res, 16, 8); + break; + /* @todo implement */ - case 0x8F: // Rail track type cost factors case 0x93: // Tile refresh offset to left case 0x94: // Tile refresh offset to right case 0x95: // Tile refresh offset upwards @@ -4683,7 +4706,7 @@ | (1 << 0x19) // newships | (1 << 0x1A) // newplanes | ((_patches.signal_side ? 1 : 0) << 0x1B) // signalsontrafficside - | (1 << 0x1C); // electrifiedrailway + | ((_patches.disable_elrails ? 0 : 1) << 0x1C); // electrifiedrailway _ttdpatch_flags[2] = (1 << 0x01) // loadallgraphics - obsolote | (1 << 0x03) // semaphores @@ -4695,7 +4718,7 @@ | (0 << 0x10) // moreindustriesperclimate - obsolete | (0 << 0x11) // moretoylandfeatures | (1 << 0x12) // newstations - | (0 << 0x13) // tracktypecostdiff + | (1 << 0x13) // tracktypecostdiff | (1 << 0x14) // manualconvert | ((_patches.build_on_slopes ? 1 : 0) << 0x15) // buildoncoasts | (1 << 0x16) // canals @@ -4704,7 +4727,7 @@ | (1 << 0x19) // newhouses | (1 << 0x1A) // newbridges | (1 << 0x1B) // newtownnames - | (0 << 0x1C) // moreanimations + | (1 << 0x1C) // moreanimation | ((_patches.wagon_speed_limits ? 1 : 0) << 0x1D) // wagonspeedlimits | (1 << 0x1E) // newshistory | (0 << 0x1F); // custombridgeheads @@ -4955,6 +4978,9 @@ _traininfo_vehicle_pitch = 0; _traininfo_vehicle_width = 29; + /* Reset track cost multipliers. */ + memcpy(&_railtype_cost_multiplier, &_default_railtype_cost_multiplier, sizeof(_default_railtype_cost_multiplier)); + _loaded_newgrf_features.has_2CC = false; _loaded_newgrf_features.has_newhouses = false; _loaded_newgrf_features.has_newindustries = false; @@ -5258,7 +5284,7 @@ for (CargoID c = 0; c < NUM_CARGO; c++) { CargoSpec *cs = &_cargo[c]; /* Don't map if the cargo is unavailable or not from NewGRF */ - if (!cs->IsValid() || cs->grfid == 0) continue; + if (cs->grfid == 0) continue; cs->name = MapGRFStringID(cs->grfid, cs->name); cs->name_single = MapGRFStringID(cs->grfid, cs->name_single); diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_cargo.cpp --- a/src/newgrf_cargo.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_cargo.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -98,17 +98,19 @@ } -CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile) +CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile, bool usebit) { /* Pre-version 7 uses the 'climate dependent' ID, i.e. cargo is the cargo ID */ - if (grffile->grf_version < 7) return HASBIT(_cargo_mask, cargo) ? cargo : (CargoID) CT_INVALID; - - /* If the GRF contains a translation table (and the cargo is in bounds) - * then get the cargo ID for the label */ - if (cargo < grffile->cargo_max) return GetCargoIDByLabel(grffile->cargo_list[cargo]); - - /* Else the cargo value is a 'climate independent' 'bitnum' */ - return GetCargoIDByBitnum(cargo); + if (grffile->grf_version < 7) { + if (!usebit) return cargo; + /* Else the cargo value is a 'climate independent' 'bitnum' */ + if (HASBIT(_cargo_mask, cargo)) return GetCargoIDByBitnum(cargo); + } else { + /* If the GRF contains a translation table (and the cargo is in bounds) + * then get the cargo ID for the label */ + if (cargo < grffile->cargo_max) return GetCargoIDByLabel(grffile->cargo_list[cargo]); + } + return CT_INVALID; } uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile) diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_cargo.h --- a/src/newgrf_cargo.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_cargo.h Sat Oct 20 10:42:28 2007 +0000 @@ -29,7 +29,7 @@ SpriteID GetCustomCargoSprite(const CargoSpec *cs); uint16 GetCargoCallback(CallbackID callback, uint32 param1, uint32 param2, const CargoSpec *cs); -CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile); +CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile, bool usebit = false); uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile); #endif /* NEWGRF_CARGO_H */ diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_commons.cpp --- a/src/newgrf_commons.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_commons.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -195,10 +195,10 @@ if (ind_id == invalid_ID) { // not found? So this is the introduction of a new industry /* Second step is dealing with the override. */ - if (inds->grf_prop.override != invalid_ID && _industry_specs[inds->grf_prop.override].grf_prop.override == invalid_ID) { + if (inds->grf_prop.override != invalid_ID && _industry_specs[inds->grf_prop.override].grf_prop.grffile == NULL) { /* this is an override, which means it will take the place of the industry it is * designed to replace. Before we conclude that the override is allowed, - * we first need to verify that the slot is not holding another override + * we first need to verify that the slot is not holding another industry from a grf * If it's the case,it will be considered as a normal substitute */ ind_id = inds->grf_prop.override; } else { diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_gui.cpp --- a/src/newgrf_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -342,6 +342,7 @@ if (i >= w->vscroll.pos && i < w->vscroll.pos + w->vscroll.cap) { const char *text = (c->name != NULL && !StrEmpty(c->name)) ? c->name : c->filename; SpriteID pal; + byte txtoffset; /* Pick a colour */ switch (c->status) { @@ -365,7 +366,8 @@ DrawSprite(SPR_SQUARE, pal, 5, y + 2); if (c->error != NULL) DrawSprite(SPR_WARNING_SIGN, 0, 20, y + 2); - DoDrawString(text, c->error != NULL ? 35 : 25, y + 3, WP(w, newgrf_d).sel == c ? 0xC : 0x10); + txtoffset = c->error != NULL ? 35 : 25; + DoDrawStringTruncated(text, txtoffset, y + 3, WP(w, newgrf_d).sel == c ? 0xC : 0x10, w->width - txtoffset - 10); y += 14; } } diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_house.cpp --- a/src/newgrf_house.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_house.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -346,7 +346,7 @@ HASBIT(_transparent_opt, TO_HOUSES) ); } else { - AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, HASBIT(_transparent_opt, TO_HOUSES)); + AddChildSpriteScreen(image, pal, (byte)dtss->delta_x, (byte)dtss->delta_y, HASBIT(_transparent_opt, TO_HOUSES)); } } } diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_industries.cpp --- a/src/newgrf_industries.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_industries.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -83,7 +83,7 @@ * @return value encoded as per NFO specs */ uint32 GetIndustryIDAtOffset(TileIndex tile, const Industry *i) { - if (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) == i->index) { + if (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != i->index) { /* No industry and/or the tile does not have the same industry as the one we match it with */ return 0xFFFF; } @@ -458,6 +458,11 @@ * the building of the industry, as that's how it's done in TTDP. */ if (group == NULL || group->type != SGT_CALLBACK) return true; + /* Copy some parameters from the registers to the error message text ref. stack */ + SwitchToErrorRefStack(); + PrepareTextRefStackUsage(4); + SwitchToNormalRefStack(); + switch (group->g.callback.result) { case 0x400: return true; case 0x401: _error_message = STR_0239_SITE_UNSUITABLE; break; diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_industrytiles.cpp --- a/src/newgrf_industrytiles.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_industrytiles.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -196,7 +196,7 @@ !HASBIT(image, SPRITE_MODIFIER_OPAQUE) && HASBIT(_transparent_opt, TO_INDUSTRIES) ); } else { - AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, HASBIT(_transparent_opt, TO_INDUSTRIES)); + AddChildSpriteScreen(image, pal, (byte)dtss->delta_x, (byte)dtss->delta_y, HASBIT(_transparent_opt, TO_INDUSTRIES)); } } } @@ -265,6 +265,11 @@ return callback_res != 0; } + /* Copy some parameters from the registers to the error message text ref. stack */ + SwitchToErrorRefStack(); + PrepareTextRefStackUsage(4); + SwitchToNormalRefStack(); + switch (callback_res) { case 0x400: return true; case 0x401: _error_message = STR_0239_SITE_UNSUITABLE; return false; @@ -294,7 +299,7 @@ bool frame_set_by_callback = false; byte frame = GetIndustryAnimationState(tile); - uint16 num_frames = GB(itspec->animation_info, 0, 8) + 1; + uint16 num_frames = GB(itspec->animation_info, 0, 8); if (HASBIT(itspec->callback_flags, CBM_INDT_ANIM_NEXT_FRAME)) { uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_ANIM_NEXT_FRAME, HASBIT(itspec->animation_special_flags, 0) ? Random() : 0, 0, gfx, ind, tile); diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_text.cpp --- a/src/newgrf_text.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_text.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -538,30 +538,52 @@ this->stack[this->position + 1] = GB(word, 8, 8); } - void ResetStack() { this->used = true; this->position = 0; } + void ResetStack() { this->position = 0; this->used = true; } + void RewindStack() { this->position = 0; } }; +static TextRefStack _newgrf_normal_textrefstack; +static TextRefStack _newgrf_error_textrefstack; + /** The stack that is used for TTDP compatible string code parsing */ -static TextRefStack _newgrf_textrefstack; +static TextRefStack *_newgrf_textrefstack = &_newgrf_normal_textrefstack; -/** Prepare the TTDP compatible string code parsing */ -void PrepareTextRefStackUsage() +/** + * Prepare the TTDP compatible string code parsing + * @param numEntries number of entries to copy from the registers + */ +void PrepareTextRefStackUsage(byte numEntries) { extern TemporaryStorageArray _temp_store; - _newgrf_textrefstack.ResetStack(); + _newgrf_textrefstack->ResetStack(); - byte *p = _newgrf_textrefstack.stack; - for (uint i = 0; i < 6; i++) { + byte *p = _newgrf_textrefstack->stack; + for (uint i = 0; i < numEntries; i++) { for (uint j = 0; j < 32; j += 8) { - *p = GB(_temp_store.Get(0x100 + i), 32 - j, 8); + *p = GB(_temp_store.Get(0x100 + i), j, 8); p++; } } } /** Stop using the TTDP compatible string code parsing */ -void StopTextRefStackUsage() { _newgrf_textrefstack.used = false; } +void StopTextRefStackUsage() { _newgrf_textrefstack->used = false; } + +void SwitchToNormalRefStack() +{ + _newgrf_textrefstack = &_newgrf_normal_textrefstack; +} + +void SwitchToErrorRefStack() +{ + _newgrf_textrefstack = &_newgrf_error_textrefstack; +} + +void RewindTextRefStack() +{ + _newgrf_textrefstack->RewindStack(); +} /** * FormatString for NewGRF specific "magic" string control codes @@ -571,31 +593,31 @@ */ uint RemapNewGRFStringControlCode(uint scc, char **buff, const char **str, int64 *argv) { - if (_newgrf_textrefstack.used) { + if (_newgrf_textrefstack->used) { switch (scc) { default: NOT_REACHED(); - case SCC_NEWGRF_PRINT_SIGNED_BYTE: *argv = _newgrf_textrefstack.PopSignedByte(); break; - case SCC_NEWGRF_PRINT_SIGNED_WORD: *argv = _newgrf_textrefstack.PopSignedWord(); break; - case SCC_NEWGRF_PRINT_QWORD_CURRENCY: *argv = _newgrf_textrefstack.PopUnsignedQWord(); break; + case SCC_NEWGRF_PRINT_SIGNED_BYTE: *argv = _newgrf_textrefstack->PopSignedByte(); break; + case SCC_NEWGRF_PRINT_SIGNED_WORD: *argv = _newgrf_textrefstack->PopSignedWord(); break; + case SCC_NEWGRF_PRINT_QWORD_CURRENCY: *argv = _newgrf_textrefstack->PopUnsignedQWord(); break; case SCC_NEWGRF_PRINT_DWORD_CURRENCY: - case SCC_NEWGRF_PRINT_DWORD: *argv = _newgrf_textrefstack.PopSignedDWord(); break; + case SCC_NEWGRF_PRINT_DWORD: *argv = _newgrf_textrefstack->PopSignedDWord(); break; case SCC_NEWGRF_PRINT_WORD_SPEED: case SCC_NEWGRF_PRINT_WORD_LITRES: - case SCC_NEWGRF_PRINT_UNSIGNED_WORD: *argv = _newgrf_textrefstack.PopUnsignedWord(); break; + case SCC_NEWGRF_PRINT_UNSIGNED_WORD: *argv = _newgrf_textrefstack->PopUnsignedWord(); break; case SCC_NEWGRF_PRINT_DATE: - case SCC_NEWGRF_PRINT_MONTH_YEAR: *argv = _newgrf_textrefstack.PopSignedWord() + DAYS_TILL_ORIGINAL_BASE_YEAR; break; + case SCC_NEWGRF_PRINT_MONTH_YEAR: *argv = _newgrf_textrefstack->PopSignedWord() + DAYS_TILL_ORIGINAL_BASE_YEAR; break; - case SCC_NEWGRF_DISCARD_WORD: _newgrf_textrefstack.PopUnsignedWord(); break; + case SCC_NEWGRF_DISCARD_WORD: _newgrf_textrefstack->PopUnsignedWord(); break; - case SCC_NEWGRF_ROTATE_TOP_4_WORDS: _newgrf_textrefstack.RotateTop4Words(); break; - case SCC_NEWGRF_PUSH_WORD: _newgrf_textrefstack.PushWord(Utf8Consume(str)); break; + case SCC_NEWGRF_ROTATE_TOP_4_WORDS: _newgrf_textrefstack->RotateTop4Words(); break; + case SCC_NEWGRF_PUSH_WORD: _newgrf_textrefstack->PushWord(Utf8Consume(str)); break; case SCC_NEWGRF_UNPRINT: *buff -= Utf8Consume(str); break; case SCC_NEWGRF_PRINT_STRING_ID: - *argv = _newgrf_textrefstack.PopUnsignedWord(); + *argv = _newgrf_textrefstack->PopUnsignedWord(); if (*argv == STR_NULL) *argv = STR_EMPTY; break; } @@ -614,7 +636,7 @@ return SCC_CURRENCY; case SCC_NEWGRF_PRINT_STRING_ID: - return SCC_STRING; + return SCC_STRING1; case SCC_NEWGRF_PRINT_DATE: return SCC_DATE_LONG; diff -r 2c27f9be3fb9 -r f82a4facea8b src/newgrf_text.h --- a/src/newgrf_text.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/newgrf_text.h Sat Oct 20 10:42:28 2007 +0000 @@ -15,8 +15,11 @@ bool CheckGrfLangID(byte lang_id, byte grf_version); -void PrepareTextRefStackUsage(); +void PrepareTextRefStackUsage(byte numEntries); void StopTextRefStackUsage(); +void SwitchToNormalRefStack(); +void SwitchToErrorRefStack(); +void RewindTextRefStack(); uint RemapNewGRFStringControlCode(uint scc, char **buff, const char **str, int64 *argv); #endif /* NEWGRF_TEXT_H */ diff -r 2c27f9be3fb9 -r f82a4facea8b src/oldloader.cpp --- a/src/oldloader.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/oldloader.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -224,7 +224,7 @@ default: break; } } else { - uint32 res = 0; + uint64 res = 0; /* Reading from the file: bits 16 to 23 have the FILE type */ switch (GetOldChunkFileType(chunk->type)) { @@ -376,7 +376,8 @@ #define REMAP_TOWN_IDX(x) ((x) - (0x0459154 - 0x0458EF0)) / 94 #define REMAP_ORDER_IDX(x) ((x) - (0x045AB08 - 0x0458EF0)) / 2 -extern TileIndex _animated_tile_list[256]; +extern TileIndex *_animated_tile_list; +extern uint _animated_tile_count; extern char _name_array[512][32]; static byte _old_vehicle_multiplier; @@ -501,6 +502,29 @@ return true; } +static bool LoadOldAnimTileList(LoadgameState *ls, int num) +{ + /* This is sligthly hackish - we must load a chunk into an array whose + * address isn't static, but instead pointed to by _animated_tile_list. + * To achieve that, create an OldChunks list on the stack on the fly. + * The list cannot be static because the value of _animated_tile_list + * can change between calls. */ + + const OldChunks anim_chunk[] = { + OCL_VAR ( OC_TILE, 256, _animated_tile_list ), + OCL_END () + }; + + if (!LoadChunk(ls, NULL, anim_chunk)) return false; + + /* Update the animated tile counter by counting till the first zero in the array */ + for (_animated_tile_count = 0; _animated_tile_count < 256; _animated_tile_count++) { + if (_animated_tile_list[_animated_tile_count] == 0) break; + } + + return true; +} + static const OldChunks depot_chunk[] = { OCL_SVAR( OC_TILE, Depot, xy ), OCL_VAR ( OC_UINT32, 1, &_old_town_index ), @@ -706,6 +730,7 @@ if (i->IsValid()) { i->town = GetTown(REMAP_TOWN_IDX(_old_town_index)); + IncIndustryTypeCount(i->type); } return true; @@ -734,8 +759,8 @@ } static const OldChunks player_economy_chunk[] = { - OCL_SVAR( OC_INT32, PlayerEconomyEntry, income ), - OCL_SVAR( OC_INT32, PlayerEconomyEntry, expenses ), + OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, PlayerEconomyEntry, income ), + OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, PlayerEconomyEntry, expenses ), OCL_SVAR( OC_INT32, PlayerEconomyEntry, delivered_cargo ), OCL_SVAR( OC_INT32, PlayerEconomyEntry, performance_history ), OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, PlayerEconomyEntry, company_value ), @@ -778,7 +803,7 @@ OCL_SVAR( OC_UINT8, Player, player_money_fraction ), OCL_SVAR( OC_UINT8, Player, quarters_of_bankrupcy ), OCL_SVAR( OC_UINT8, Player, bankrupt_asked ), - OCL_SVAR( OC_UINT32, Player, bankrupt_value ), + OCL_SVAR( OC_FILE_U32 | OC_VAR_I64, Player, bankrupt_value ), OCL_SVAR( OC_UINT16, Player, bankrupt_timeout ), OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Player, cargo_types ), @@ -1012,8 +1037,8 @@ OCL_SVAR( OC_UINT16, Vehicle, reliability ), OCL_SVAR( OC_UINT16, Vehicle, reliability_spd_dec ), - OCL_SVAR( OC_INT32, Vehicle, profit_this_year ), - OCL_SVAR( OC_INT32, Vehicle, profit_last_year ), + OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, Vehicle, profit_this_year ), + OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, Vehicle, profit_last_year ), OCL_VAR ( OC_UINT16, 1, &_old_next_ptr ), @@ -1059,7 +1084,7 @@ default: v->spritenum >>= 1; break; } - if (_old_next_ptr != 0xFFFF) v->next = GetVehicle(_old_next_ptr); + if (_old_next_ptr != 0xFFFF) v->next = GetVehiclePoolSize() <= _old_next_ptr ? new (_old_next_ptr) InvalidVehicle() : GetVehicle(_old_next_ptr); v->string_id = RemapOldStringID(_old_string_id); @@ -1141,23 +1166,23 @@ } static const OldChunks game_difficulty_chunk[] = { - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, max_no_competitors ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, competitor_start_time ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, number_towns ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, number_industries ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, max_loan ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, initial_interest ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, vehicle_costs ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, competitor_speed ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, competitor_intelligence ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, vehicle_breakdowns ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, subsidy_multiplier ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, construction_cost ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, terrain_type ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, quantity_sea_lakes ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, economy ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, line_reverse_mode ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, GameDifficulty, disasters ), + OCL_SVAR( OC_UINT16, GameDifficulty, max_no_competitors ), + OCL_SVAR( OC_UINT16, GameDifficulty, competitor_start_time ), + OCL_SVAR( OC_UINT16, GameDifficulty, number_towns ), + OCL_SVAR( OC_UINT16, GameDifficulty, number_industries ), + OCL_SVAR( OC_UINT16, GameDifficulty, max_loan ), + OCL_SVAR( OC_UINT16, GameDifficulty, initial_interest ), + OCL_SVAR( OC_UINT16, GameDifficulty, vehicle_costs ), + OCL_SVAR( OC_UINT16, GameDifficulty, competitor_speed ), + OCL_SVAR( OC_UINT16, GameDifficulty, competitor_intelligence ), + OCL_SVAR( OC_UINT16, GameDifficulty, vehicle_breakdowns ), + OCL_SVAR( OC_UINT16, GameDifficulty, subsidy_multiplier ), + OCL_SVAR( OC_UINT16, GameDifficulty, construction_cost ), + OCL_SVAR( OC_UINT16, GameDifficulty, terrain_type ), + OCL_SVAR( OC_UINT16, GameDifficulty, quantity_sea_lakes ), + OCL_SVAR( OC_UINT16, GameDifficulty, economy ), + OCL_SVAR( OC_UINT16, GameDifficulty, line_reverse_mode ), + OCL_SVAR( OC_UINT16, GameDifficulty, disasters ), OCL_END() }; @@ -1275,7 +1300,7 @@ OCL_CHUNK(5000, LoadOldOrder ), OCL_ASSERT( 0x4328 ), - OCL_VAR ( OC_TILE, 256, &_animated_tile_list[0] ), + OCL_CHUNK( 1, LoadOldAnimTileList ), OCL_NULL( 4 ), ///< old end-of-order-list-pointer, no longer in use OCL_CHUNK( 255, LoadOldDepot ), @@ -1324,9 +1349,9 @@ OCL_VAR ( OC_FILE_I16 | OC_VAR_I32, 1, &_saved_scrollpos_y ), OCL_VAR ( OC_FILE_U16 | OC_VAR_U8, 1, &_saved_scrollpos_zoom ), - OCL_VAR ( OC_UINT32, 1, &_economy.max_loan ), - OCL_VAR ( OC_UINT32, 1, &_economy.max_loan_unround ), - OCL_VAR ( OC_FILE_U16 | OC_VAR_U32, 1, &_economy.fluct ), + OCL_VAR ( OC_FILE_U32 | OC_VAR_I64, 1, &_economy.max_loan ), + OCL_VAR ( OC_FILE_U32 | OC_VAR_I64, 1, &_economy.max_loan_unround ), + OCL_VAR ( OC_FILE_U16 | OC_VAR_U32, 1, &_economy.fluct ), OCL_VAR ( OC_UINT16, 1, &_disaster_delay ), @@ -1445,6 +1470,16 @@ } } + /* Make sure the available engines are really available, otherwise + * we will get a "new vehicle"-spree. */ + for (Engine *e = _engines; e != endof(_engines); e++) { + if (_date >= (e->intro_date + 365)) { + e->flags = (e->flags & ~ENGINE_EXCLUSIVE_PREVIEW) | ENGINE_AVAILABLE; + AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); + e->player_avail = (byte)-1; + } + } + /* Fix the game to be compatible with OpenTTD */ FixOldTowns(); FixOldStations(); diff -r 2c27f9be3fb9 -r f82a4facea8b src/openttd.cpp --- a/src/openttd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/openttd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -77,6 +77,7 @@ #include "water_map.h" #include "industry_map.h" #include "unmovable_map.h" +#include "tree_map.h" #include @@ -1456,9 +1457,9 @@ * an oil rig which got shut down, but not completly removed from * the map */ - TileIndex t1 = TILE_ADDXY(t, 1, 0); + TileIndex t1 = TILE_ADDXY(t, 0, 1); if (IsTileType(t1, MP_INDUSTRY) && - GetIndustryGfx(t1) == GFX_OILRIG_3) { + GetIndustryGfx(t1) == GFX_OILRIG_1) { /* The internal encoding of oil rigs was changed twice. * It was 3 (till 2.2) and later 5 (till 5.1). * Setting it unconditionally does not hurt. @@ -1634,7 +1635,7 @@ if (GB(_m[t].m5, 3, 2) == 0) { MakeClear(t, CLEAR_GRASS, 3); } else { - MakeCanal(t, GetTileOwner(t)); + MakeCanal(t, (GetTileOwner(t) == OWNER_WATER) ? OWNER_NONE : GetTileOwner(t)); } } SetBridgeMiddle(t, axis); @@ -2168,6 +2169,19 @@ FOR_ALL_INDUSTRIES(i) i->founder = OWNER_NONE; } + /* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported. + Replace the owner for those by OWNER_NONE. */ + if (CheckSavegameVersion(82)) { + for (TileIndex t = 0; t < map_size; t++) { + if (IsTileType(t, MP_WATER) && + GetWaterTileType(t) == WATER_TILE_CLEAR && + GetTileOwner(t) == OWNER_WATER && + TileHeight(t) != 0) { + SetTileOwner(t, OWNER_NONE); + } + } + } + /* Recalculate */ Group *g; FOR_ALL_GROUPS(g) { @@ -2205,6 +2219,19 @@ } } + /* Before version 81, the density of grass was always stored as zero, and + * grassy trees were always drawn fully grassy. Furthermore, trees on rough + * land used to have zero density, now they have full density. Therefore, + * make all grassy/rough land trees have a density of 3. */ + if (CheckSavegameVersion(81)) { + for (TileIndex t = 0; t < map_size; t++) { + if (GetTileType(t) == MP_TREES) { + TreeGround groundType = GetTreeGround(t); + if (groundType != TREE_GROUND_SNOW_DESERT) SetTreeGroundDensity(t, groundType, 3); + } + } + } + return true; } diff -r 2c27f9be3fb9 -r f82a4facea8b src/openttd.h --- a/src/openttd.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/openttd.h Sat Oct 20 10:42:28 2007 +0000 @@ -88,6 +88,7 @@ typedef int32 Year; typedef int32 Date; +typedef uint32 PlayerFace; ///< player face bits, info see in player_face.h enum SwitchModes { SM_NONE = 0, @@ -279,25 +280,27 @@ #define GAME_DIFFICULTY_NUM 18 +/** Specific type for Game Difficulty to ease changing the type */ +typedef uint16 GDType; struct GameDifficulty { - int max_no_competitors; - int competitor_start_time; - int number_towns; - int number_industries; - int max_loan; - int initial_interest; - int vehicle_costs; - int competitor_speed; - int competitor_intelligence; // no longer in use - int vehicle_breakdowns; - int subsidy_multiplier; - int construction_cost; - int terrain_type; - int quantity_sea_lakes; - int economy; - int line_reverse_mode; - int disasters; - int town_council_tolerance; // minimum required town ratings to be allowed to demolish stuff + GDType max_no_competitors; + GDType competitor_start_time; + GDType number_towns; + GDType number_industries; + GDType max_loan; + GDType initial_interest; + GDType vehicle_costs; + GDType competitor_speed; + GDType competitor_intelligence; // no longer in use + GDType vehicle_breakdowns; + GDType subsidy_multiplier; + GDType construction_cost; + GDType terrain_type; + GDType quantity_sea_lakes; + GDType economy; + GDType line_reverse_mode; + GDType disasters; + GDType town_council_tolerance; // minimum required town ratings to be allowed to demolish stuff }; enum { diff -r 2c27f9be3fb9 -r f82a4facea8b src/player.h --- a/src/player.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/player.h Sat Oct 20 10:42:28 2007 +0000 @@ -24,8 +24,6 @@ LOAN_INTERVAL = 10000, }; -typedef uint32 PlayerFace; - struct Player { uint32 name_2; uint16 name_1; diff -r 2c27f9be3fb9 -r f82a4facea8b src/player_face.h --- a/src/player_face.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/player_face.h Sat Oct 20 10:42:28 2007 +0000 @@ -59,7 +59,7 @@ /* PFV_HAS_MOUSTACHE */ { 3, 1, { 2, 0, 2, 0 }, { 0, 0, 0, 0 } }, ///< Females do not have a moustache /* PFV_HAS_TIE_EARRING */ { 3, 1, { 0, 2, 0, 2 }, { 0, 0, 0, 0 } }, ///< Draw the earring for females or not. For males the tie is always drawn. /* PFV_HAS_GLASSES */ { 4, 1, { 2, 2, 2, 2 }, { 0, 0, 0, 0 } }, ///< Whether to draw glasses or not - /* PFV_EYE_COLOUR */ { 5, 2, { 3, 3, 3, 3 }, { 0, 0, 0, 0 } }, ///< Palette modification + /* PFV_EYE_COLOUR */ { 5, 2, { 3, 3, 1, 1 }, { 0, 0, 0, 0 } }, ///< Palette modification /* PFV_CHEEKS */ { 0, 0, { 1, 1, 1, 1 }, { 0x325, 0x326, 0x390, 0x3B0 } }, ///< Cheeks are only indexed by their gender/ethnicity /* PFV_CHIN */ { 7, 2, { 4, 1, 2, 2 }, { 0x327, 0x327, 0x391, 0x3B1 } }, /* PFV_EYEBROWS */ { 9, 4, { 12, 16, 11, 16 }, { 0x32B, 0x337, 0x39A, 0x3B8 } }, @@ -105,6 +105,32 @@ } /** + * Increase/Decrease the player face variable by the given amount. + * If the new value greater than the max value for this variable it will be set to 0. + * Or is it negativ (< 0) it will be set to max value. + * + * @param pf the player face to write the bits to + * @param pfv the player face variable to write the data of + * @param ge the gender and ethnicity of the player face + * @param amount the amount which change the value + * + * @pre 0 <= val < _pf_info[pfv].valid_values[ge] + */ +static inline void IncreasePlayerFaceBits(PlayerFace &pf, PlayerFaceVariable pfv, GenderEthnicity ge, int8 amount) +{ + int8 val = GetPlayerFaceBits(pf, pfv, ge) + amount; // the new value for the pfv + + /* scales the new value to the correct scope */ + if (val >= _pf_info[pfv].valid_values[ge]) { + val = 0; + } else if (val < 0) { + val = _pf_info[pfv].valid_values[ge] - 1; + } + + SetPlayerFaceBits(pf, pfv, ge, val); // save the new value +} + +/** * Checks whether the player bits have a valid range * @param pf the face to extract the bits from * @param pfv the face variable to get the data of @@ -132,6 +158,58 @@ } /** + * Scales all player face bits to the correct scope + * + * @param pf the player face to write the bits to + */ +static inline void ScaleAllPlayerFaceBits(PlayerFace &pf) +{ + IncreasePlayerFaceBits(pf, PFV_ETHNICITY, GE_WM, 0); // scales the ethnicity + + GenderEthnicity ge = (GenderEthnicity)GB(pf, _pf_info[PFV_GEN_ETHN].offset, _pf_info[PFV_GEN_ETHN].length); // gender & ethnicity of the face + + /* Is a male face with moustache. Need to reduce CPU load in the loop. */ + bool is_moust_male = !HASBIT(ge, GENDER_FEMALE) && GetPlayerFaceBits(pf, PFV_HAS_MOUSTACHE, ge) != 0; + + for (PlayerFaceVariable pfv = PFV_EYE_COLOUR; pfv < PFV_END; pfv++) { // scales all other variables + + /* The moustache variable will be scaled only if it is a male face with has a moustache */ + if (pfv != PFV_MOUSTACHE || is_moust_male) { + IncreasePlayerFaceBits(pf, pfv, ge, 0); + } + } +} + +/** + * Make a random new face. + * If it is for the advanced player face window then the new face have the same gender + * and ethnicity as the old one, else the gender is equal and the ethnicity is random. + * + * @param pf the player face to write the bits to + * @param ge the gender and ethnicity of the old player face + * @param adv if it for the advanced player face window + * + * @pre scale 'ge' to a valid gender/ethnicity combination + */ +static inline void RandomPlayerFaceBits(PlayerFace &pf, GenderEthnicity ge, bool adv) +{ + pf = InteractiveRandom(); // random all player face bits + + /* scale ge: 0 == GE_WM, 1 == GE_WF, 2 == GE_BM, 3 == GE_BF (and maybe in future: ...) */ + ge = (GenderEthnicity)((uint)ge % GE_END); + + /* set the gender (and ethnicity) for the new player face */ + if (adv) { + SetPlayerFaceBits(pf, PFV_GEN_ETHN, ge, ge); + } else { + SetPlayerFaceBits(pf, PFV_GENDER, ge, HASBIT(ge, GENDER_FEMALE)); + } + + /* scales all player face bits to the correct scope */ + ScaleAllPlayerFaceBits(pf); +} + +/** * Gets the sprite to draw for the given player face variable * @param pf the face to extract the data from * @param pfv the face variable to get the sprite of @@ -149,5 +227,6 @@ void DrawPlayerFace(PlayerFace face, int color, int x, int y); PlayerFace ConvertFromOldPlayerFace(uint32 face); bool IsValidPlayerFace(PlayerFace pf); +void DrawFaceStringLabel(const Window *w, byte widget_index, StringID str, uint8 val, bool is_bool_widget); #endif /* PLAYER_FACE_H */ diff -r 2c27f9be3fb9 -r f82a4facea8b src/player_gui.cpp --- a/src/player_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/player_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -28,6 +28,7 @@ #include "player_face.h" static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied); +static void DoSelectPlayerFace(PlayerID player, bool show_big); static void DrawPlayerEconomyStats(const Player *p, byte mode) { @@ -493,11 +494,17 @@ bool has_tie_earring = !HASBIT(ge, GENDER_FEMALE) || GetPlayerFaceBits(pf, PFV_HAS_TIE_EARRING, ge) != 0; bool has_glasses = GetPlayerFaceBits(pf, PFV_HAS_GLASSES, ge) != 0; SpriteID pal; - switch (GetPlayerFaceBits(pf, PFV_EYE_COLOUR, ge)) { - default: NOT_REACHED(); - case 0: pal = PALETTE_TO_BROWN; break; - case 1: pal = PALETTE_TO_BLUE; break; - case 2: pal = PALETTE_TO_GREEN; break; + + /* Modify eye colour palette only if 2 or more valid values exist */ + if (_pf_info[PFV_EYE_COLOUR].valid_values[ge] < 2) { + pal = PAL_NONE; + } else { + switch (GetPlayerFaceBits(pf, PFV_EYE_COLOUR, ge)) { + default: NOT_REACHED(); + case 0: pal = PALETTE_TO_BROWN; break; + case 1: pal = PALETTE_TO_BLUE; break; + case 2: pal = PALETTE_TO_GREEN; break; + } } /* Draw the gradient (background) */ @@ -516,60 +523,426 @@ } } -static void SelectPlayerFaceWndProc(Window *w, WindowEvent *e) -{ - switch (e->event) { - case WE_PAINT: { - Player *p; - LowerWindowWidget(w, WP(w, facesel_d).gender + 5); - DrawWindowWidgets(w); - p = GetPlayer((PlayerID)w->window_number); - DrawPlayerFace(WP(w, facesel_d).face, p->player_color, 2, 16); - } break; +/** + * Names of the widgets. Keep them in the same order as in the widget array. + * Do not change the order of the widgets from PFW_WIDGET_HAS_MOUSTACHE_EARRING to PFW_WIDGET_GLASSES_R, + * this order is needed for the WE_CLICK event of DrawFaceStringLabel(). + */ +enum PlayerFaceWindowWidgets { + PFW_WIDGET_CLOSEBOX = 0, + PFW_WIDGET_CAPTION, + PFW_WIDGET_TOGGLE_LARGE_SMALL, + PFW_WIDGET_SELECT_FACE, + PFW_WIDGET_CANCEL, + PFW_WIDGET_ACCEPT, + PFW_WIDGET_MALE, + PFW_WIDGET_FEMALE, + PFW_WIDGET_RANDOM_NEW_FACE, + PFW_WIDGET_TOGGLE_LARGE_SMALL_BUTTON, + /* from here is the advanced player face selection window */ + PFW_WIDGET_LOAD, + PFW_WIDGET_FACECODE, + PFW_WIDGET_SAVE, + PFW_WIDGET_ETHNICITY_EUR, + PFW_WIDGET_ETHNICITY_AFR, + PFW_WIDGET_HAS_MOUSTACHE_EARRING, + PFW_WIDGET_HAS_GLASSES, + PFW_WIDGET_EYECOLOUR_L, + PFW_WIDGET_EYECOLOUR, + PFW_WIDGET_EYECOLOUR_R, + PFW_WIDGET_CHIN_L, + PFW_WIDGET_CHIN, + PFW_WIDGET_CHIN_R, + PFW_WIDGET_EYEBROWS_L, + PFW_WIDGET_EYEBROWS, + PFW_WIDGET_EYEBROWS_R, + PFW_WIDGET_LIPS_MOUSTACHE_L, + PFW_WIDGET_LIPS_MOUSTACHE, + PFW_WIDGET_LIPS_MOUSTACHE_R, + PFW_WIDGET_NOSE_L, + PFW_WIDGET_NOSE, + PFW_WIDGET_NOSE_R, + PFW_WIDGET_HAIR_L, + PFW_WIDGET_HAIR, + PFW_WIDGET_HAIR_R, + PFW_WIDGET_JACKET_L, + PFW_WIDGET_JACKET, + PFW_WIDGET_JACKET_R, + PFW_WIDGET_COLLAR_L, + PFW_WIDGET_COLLAR, + PFW_WIDGET_COLLAR_R, + PFW_WIDGET_TIE_EARRING_L, + PFW_WIDGET_TIE_EARRING, + PFW_WIDGET_TIE_EARRING_R, + PFW_WIDGET_GLASSES_L, + PFW_WIDGET_GLASSES, + PFW_WIDGET_GLASSES_R, +}; - case WE_CLICK: - switch (e->we.click.widget) { - case 3: DeleteWindow(w); break; - case 4: /* ok click */ - DoCommandP(0, 0, WP(w, facesel_d).face, NULL, CMD_SET_PLAYER_FACE); - DeleteWindow(w); - break; - case 5: /* male click */ - case 6: /* female click */ - RaiseWindowWidget(w, WP(w, facesel_d).gender + 5); - WP(w, facesel_d).gender = e->we.click.widget - 5; - LowerWindowWidget(w, WP(w, facesel_d).gender + 5); - SetWindowDirty(w); - break; - case 7: - WP(w, facesel_d).face = ConvertFromOldPlayerFace((WP(w, facesel_d).gender << 31) + GB(InteractiveRandom(), 0, 31)); - SetWindowDirty(w); - break; +/** Widget description for the normal/simple player face selection dialog */ +static const Widget _select_player_face_widgets[] = { +{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // PFW_WIDGET_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 14, 11, 174, 0, 13, STR_7043_FACE_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // PFW_WIDGET_CAPTION +{ WWT_IMGBTN, RESIZE_NONE, 14, 175, 189, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_FACE_ADVANCED_TIP}, // PFW_WIDGET_TOGGLE_LARGE_SMALL +{ WWT_PANEL, RESIZE_NONE, 14, 0, 189, 14, 150, 0x0, STR_NULL}, // PFW_WIDGET_SELECT_FACE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 94, 151, 162, STR_012E_CANCEL, STR_7047_CANCEL_NEW_FACE_SELECTION}, // PFW_WIDGET_CANCEL +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 189, 151, 162, STR_012F_OK, STR_7048_ACCEPT_NEW_FACE_SELECTION}, // PFW_WIDGET_ACCEPT +{ WWT_TEXTBTN, RESIZE_NONE, 14, 95, 187, 75, 86, STR_7044_MALE, STR_7049_SELECT_MALE_FACES}, // PFW_WIDGET_MALE +{ WWT_TEXTBTN, RESIZE_NONE, 14, 95, 187, 87, 98, STR_7045_FEMALE, STR_704A_SELECT_FEMALE_FACES}, // PFW_WIDGET_FEMALE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 2, 93, 137, 148, STR_7046_NEW_FACE, STR_704B_GENERATE_RANDOM_NEW_FACE}, // PFW_WIDGET_RANDOM_NEW_FACE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 187, 16, 27, STR_FACE_ADVANCED, STR_FACE_ADVANCED_TIP}, // PFW_WIDGET_TOGGLE_LARGE_SMALL_BUTTON +{ WIDGETS_END}, +}; + +/** Widget description for the advanced player face selection dialog */ +static const Widget _select_player_face_adv_widgets[] = { +{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // PFW_WIDGET_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 14, 11, 204, 0, 13, STR_7043_FACE_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // PFW_WIDGET_CAPTION +{ WWT_IMGBTN, RESIZE_NONE, 14, 205, 219, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_FACE_SIMPLE_TIP}, // PFW_WIDGET_TOGGLE_LARGE_SMALL +{ WWT_PANEL, RESIZE_NONE, 14, 0, 219, 14, 207, 0x0, STR_NULL}, // PFW_WIDGET_SELECT_FACE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 94, 208, 219, STR_012E_CANCEL, STR_7047_CANCEL_NEW_FACE_SELECTION}, // PFW_WIDGET_CANCEL +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 219, 208, 219, STR_012F_OK, STR_7048_ACCEPT_NEW_FACE_SELECTION}, // PFW_WIDGET_ACCEPT +{ WWT_TEXTBTN, RESIZE_NONE, 14, 96, 156, 32, 43, STR_7044_MALE, STR_7049_SELECT_MALE_FACES}, // PFW_WIDGET_MALE +{ WWT_TEXTBTN, RESIZE_NONE, 14, 157, 217, 32, 43, STR_7045_FEMALE, STR_704A_SELECT_FEMALE_FACES}, // PFW_WIDGET_FEMALE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 2, 93, 137, 148, STR_RANDOM, STR_704B_GENERATE_RANDOM_NEW_FACE}, // PFW_WIDGET_RANDOM_NEW_FACE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 217, 16, 27, STR_FACE_SIMPLE, STR_FACE_SIMPLE_TIP}, // PFW_WIDGET_TOGGLE_LARGE_SMALL_BUTTON +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 2, 93, 158, 169, STR_FACE_LOAD, STR_FACE_LOAD_TIP}, // PFW_WIDGET_LOAD +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 2, 93, 170, 181, STR_FACE_FACECODE, STR_FACE_FACECODE_TIP}, // PFW_WIDGET_FACECODE +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 2, 93, 182, 193, STR_FACE_SAVE, STR_FACE_SAVE_TIP}, // PFW_WIDGET_SAVE +{ WWT_TEXTBTN, RESIZE_NONE, 14, 96, 156, 46, 57, STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN}, // PFW_WIDGET_ETHNICITY_EUR +{ WWT_TEXTBTN, RESIZE_NONE, 14, 157, 217, 46, 57, STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN}, // PFW_WIDGET_ETHNICITY_AFR +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 175, 217, 60, 71, STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TIP}, // PFW_WIDGET_HAS_MOUSTACHE_EARRING +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 175, 217, 72, 83, STR_EMPTY, STR_FACE_GLASSES_TIP}, // PFW_WIDGET_HAS_GLASSES +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 110, 121, SPR_ARROW_LEFT, STR_FACE_EYECOLOUR_TIP}, // PFW_WIDGET_EYECOLOUR_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 110, 121, STR_EMPTY, STR_FACE_EYECOLOUR_TIP}, // PFW_WIDGET_EYECOLOUR +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 110, 121, SPR_ARROW_RIGHT, STR_FACE_EYECOLOUR_TIP}, // PFW_WIDGET_EYECOLOUR_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 158, 169, SPR_ARROW_LEFT, STR_FACE_CHIN_TIP}, // PFW_WIDGET_CHIN_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 158, 169, STR_EMPTY, STR_FACE_CHIN_TIP}, // PFW_WIDGET_CHIN +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 158, 169, SPR_ARROW_RIGHT, STR_FACE_CHIN_TIP}, // PFW_WIDGET_CHIN_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 98, 109, SPR_ARROW_LEFT, STR_FACE_EYEBROWS_TIP}, // PFW_WIDGET_EYEBROWS_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 98, 109, STR_EMPTY, STR_FACE_EYEBROWS_TIP}, // PFW_WIDGET_EYEBROWS +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 98, 109, SPR_ARROW_RIGHT, STR_FACE_EYEBROWS_TIP}, // PFW_WIDGET_EYEBROWS_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 146, 157, SPR_ARROW_LEFT, STR_FACE_LIPS_MOUSTACHE_TIP}, // PFW_WIDGET_LIPS_MOUSTACHE_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 146, 157, STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TIP}, // PFW_WIDGET_LIPS_MOUSTACHE +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 146, 157, SPR_ARROW_RIGHT, STR_FACE_LIPS_MOUSTACHE_TIP}, // PFW_WIDGET_LIPS_MOUSTACHE_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 134, 145, SPR_ARROW_LEFT, STR_FACE_NOSE_TIP}, // PFW_WIDGET_NOSE_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 134, 145, STR_EMPTY, STR_FACE_NOSE_TIP}, // PFW_WIDGET_NOSE +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 134, 145, SPR_ARROW_RIGHT, STR_FACE_NOSE_TIP}, // PFW_WIDGET_NOSE_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 86, 97, SPR_ARROW_LEFT, STR_FACE_HAIR_TIP}, // PFW_WIDGET_HAIR_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 86, 97, STR_EMPTY, STR_FACE_HAIR_TIP}, // PFW_WIDGET_HAIR +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 86, 97, SPR_ARROW_RIGHT, STR_FACE_HAIR_TIP}, // PFW_WIDGET_HAIR_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 170, 181, SPR_ARROW_LEFT, STR_FACE_JACKET_TIP}, // PFW_WIDGET_JACKET_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 170, 181, STR_EMPTY, STR_FACE_JACKET_TIP}, // PFW_WIDGET_JACKET +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 170, 181, SPR_ARROW_RIGHT, STR_FACE_JACKET_TIP}, // PFW_WIDGET_JACKET_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 182, 193, SPR_ARROW_LEFT, STR_FACE_COLLAR_TIP}, // PFW_WIDGET_COLLAR_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 182, 193, STR_EMPTY, STR_FACE_COLLAR_TIP}, // PFW_WIDGET_COLLAR +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 182, 193, SPR_ARROW_RIGHT, STR_FACE_COLLAR_TIP}, // PFW_WIDGET_COLLAR_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 194, 205, SPR_ARROW_LEFT, STR_FACE_TIE_EARRING_TIP}, // PFW_WIDGET_TIE_EARRING_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 194, 205, STR_EMPTY, STR_FACE_TIE_EARRING_TIP}, // PFW_WIDGET_TIE_EARRING +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 194, 205, SPR_ARROW_RIGHT, STR_FACE_TIE_EARRING_TIP}, // PFW_WIDGET_TIE_EARRING_R +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 175, 183, 122, 133, SPR_ARROW_LEFT, STR_FACE_GLASSES_TIP_2}, // PFW_WIDGET_GLASSES_L +{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 184, 208, 122, 133, STR_EMPTY, STR_FACE_GLASSES_TIP_2}, // PFW_WIDGET_GLASSES +{ WWT_PUSHIMGBTN, RESIZE_NONE, 14, 209, 217, 122, 133, SPR_ARROW_RIGHT, STR_FACE_GLASSES_TIP_2}, // PFW_WIDGET_GLASSES_R +{ WIDGETS_END}, +}; + +/** + * Draw dynamic a label to the left of the button and a value in the button + * + * @param w Window on which the widget is located + * @param widget_index index of this widget in the window + * @param str the label which will be draw + * @param val the value which will be draw + * @param is_bool_widget is it a bool button + */ +void DrawFaceStringLabel(const Window *w, byte widget_index, StringID str, uint8 val, bool is_bool_widget) +{ + /* Write the label in gold (0x2) to the left of the button. */ + DrawStringRightAligned(w->widget[widget_index].left - (is_bool_widget ? 5 : 14), w->widget[widget_index].top + 1, str, 0x2); + + if (!IsWindowWidgetDisabled(w, widget_index)) { + if (is_bool_widget) { + /* if it a bool button write yes or no */ + str = (val != 0) ? STR_FACE_YES : STR_FACE_NO; + } else { + /* else write the value + 1 */ + SetDParam(0, val + 1); + str = STR_JUST_INT; } - break; + + /* Draw the value/bool in white (0xC). If the button clicked adds 1px to x and y text coordinates (IsWindowWidgetLowered()). */ + DrawStringCentered(w->widget[widget_index].left + (w->widget[widget_index].right - w->widget[widget_index].left) / 2 + + IsWindowWidgetLowered(w, widget_index), w->widget[widget_index].top + 1 + IsWindowWidgetLowered(w, widget_index), str, 0xC); } } -static const Widget _select_player_face_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 14, 11, 189, 0, 13, STR_7043_FACE_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 14, 0, 189, 14, 136, 0x0, STR_NULL}, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 94, 137, 148, STR_012E_CANCEL, STR_7047_CANCEL_NEW_FACE_SELECTION}, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 189, 137, 148, STR_012F_OK, STR_7048_ACCEPT_NEW_FACE_SELECTION}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 95, 187, 25, 36, STR_7044_MALE, STR_7049_SELECT_MALE_FACES}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 95, 187, 37, 48, STR_7045_FEMALE, STR_704A_SELECT_FEMALE_FACES}, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 95, 187, 79, 90, STR_7046_NEW_FACE, STR_704B_GENERATE_RANDOM_NEW_FACE}, -{ WIDGETS_END}, -}; +/** + * Player face selection window event definition + * + * @param w window pointer + * @param e event been triggered + */ +static void SelectPlayerFaceWndProc(Window *w, WindowEvent *e) +{ + PlayerFace *pf = &WP(w, facesel_d).face; // pointer to the player face bits + GenderEthnicity ge = (GenderEthnicity)GB(*pf, _pf_info[PFV_GEN_ETHN].offset, _pf_info[PFV_GEN_ETHN].length); // get the gender and ethnicity + bool is_female = HASBIT(ge, GENDER_FEMALE); // get the gender: 0 == male and 1 == female + bool is_moust_male = !is_female && GetPlayerFaceBits(*pf, PFV_HAS_MOUSTACHE, ge) != 0; // is a male face with moustache + switch (e->event) { + case WE_PAINT: + /* lower the non-selected gender button */ + SetWindowWidgetLoweredState(w, PFW_WIDGET_MALE, !is_female); + SetWindowWidgetLoweredState(w, PFW_WIDGET_FEMALE, is_female); + + /* advanced player face selection window */ + if (WP(w, facesel_d).advanced) { + /* lower the non-selected ethnicity button */ + SetWindowWidgetLoweredState(w, PFW_WIDGET_ETHNICITY_EUR, !HASBIT(ge, ETHNICITY_BLACK)); + SetWindowWidgetLoweredState(w, PFW_WIDGET_ETHNICITY_AFR, HASBIT(ge, ETHNICITY_BLACK)); + + + /* Disable dynamically the widgets which PlayerFaceVariable has less than 2 options + * (or in other words you haven't any choice). + * If the widgets depend on a HAS-variable and this is false the widgets will be disabled, too. */ + + /* Eye colour buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_EYE_COLOUR].valid_values[ge] < 2, + PFW_WIDGET_EYECOLOUR, PFW_WIDGET_EYECOLOUR_L, PFW_WIDGET_EYECOLOUR_R, WIDGET_LIST_END); + + /* Chin buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_CHIN].valid_values[ge] < 2, + PFW_WIDGET_CHIN, PFW_WIDGET_CHIN_L, PFW_WIDGET_CHIN_R, WIDGET_LIST_END); + + /* Eyebrows buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_EYEBROWS].valid_values[ge] < 2, + PFW_WIDGET_EYEBROWS, PFW_WIDGET_EYEBROWS_L, PFW_WIDGET_EYEBROWS_R, WIDGET_LIST_END); + + /* Lips or (if it a male face with a moustache) moustache buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[is_moust_male ? PFV_MOUSTACHE : PFV_LIPS].valid_values[ge] < 2, + PFW_WIDGET_LIPS_MOUSTACHE, PFW_WIDGET_LIPS_MOUSTACHE_L, PFW_WIDGET_LIPS_MOUSTACHE_R, WIDGET_LIST_END); + + /* Nose buttons | male faces with moustache haven't any nose options */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_NOSE].valid_values[ge] < 2 || is_moust_male, + PFW_WIDGET_NOSE, PFW_WIDGET_NOSE_L, PFW_WIDGET_NOSE_R, WIDGET_LIST_END); + + /* Hair buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_HAIR].valid_values[ge] < 2, + PFW_WIDGET_HAIR, PFW_WIDGET_HAIR_L, PFW_WIDGET_HAIR_R, WIDGET_LIST_END); + + /* Jacket buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_JACKET].valid_values[ge] < 2, + PFW_WIDGET_JACKET, PFW_WIDGET_JACKET_L, PFW_WIDGET_JACKET_R, WIDGET_LIST_END); + + /* Collar buttons */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_COLLAR].valid_values[ge] < 2, + PFW_WIDGET_COLLAR, PFW_WIDGET_COLLAR_L, PFW_WIDGET_COLLAR_R, WIDGET_LIST_END); + + /* Tie/earring buttons | female faces without earring haven't any earring options */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_TIE_EARRING].valid_values[ge] < 2 || + (is_female && GetPlayerFaceBits(*pf, PFV_HAS_TIE_EARRING, ge) == 0), + PFW_WIDGET_TIE_EARRING, PFW_WIDGET_TIE_EARRING_L, PFW_WIDGET_TIE_EARRING_R, WIDGET_LIST_END); + + /* Glasses buttons | faces without glasses haven't any glasses options */ + SetWindowWidgetsDisabledState(w, _pf_info[PFV_GLASSES].valid_values[ge] < 2 || GetPlayerFaceBits(*pf, PFV_HAS_GLASSES, ge) == 0, + PFW_WIDGET_GLASSES, PFW_WIDGET_GLASSES_L, PFW_WIDGET_GLASSES_R, WIDGET_LIST_END); + } + + DrawWindowWidgets(w); + + /* Draw dynamic button value and labels for the advanced player face selection window */ + if (WP(w, facesel_d).advanced) { + if (is_female) { + /* Only for female faces */ + DrawFaceStringLabel(w, PFW_WIDGET_HAS_MOUSTACHE_EARRING, STR_FACE_EARRING, GetPlayerFaceBits(*pf, PFV_HAS_TIE_EARRING, ge), true ); + DrawFaceStringLabel(w, PFW_WIDGET_TIE_EARRING, STR_FACE_EARRING, GetPlayerFaceBits(*pf, PFV_TIE_EARRING, ge), false); + } else { + /* Only for male faces */ + DrawFaceStringLabel(w, PFW_WIDGET_HAS_MOUSTACHE_EARRING, STR_FACE_MOUSTACHE, GetPlayerFaceBits(*pf, PFV_HAS_MOUSTACHE, ge), true ); + DrawFaceStringLabel(w, PFW_WIDGET_TIE_EARRING, STR_FACE_TIE, GetPlayerFaceBits(*pf, PFV_TIE_EARRING, ge), false); + } + if (is_moust_male) { + /* Only for male faces with moustache */ + DrawFaceStringLabel(w, PFW_WIDGET_LIPS_MOUSTACHE, STR_FACE_MOUSTACHE, GetPlayerFaceBits(*pf, PFV_MOUSTACHE, ge), false); + } else { + /* Only for female faces or male faces without moustache */ + DrawFaceStringLabel(w, PFW_WIDGET_LIPS_MOUSTACHE, STR_FACE_LIPS, GetPlayerFaceBits(*pf, PFV_LIPS, ge), false); + } + /* For all faces */ + DrawFaceStringLabel(w, PFW_WIDGET_HAS_GLASSES, STR_FACE_GLASSES, GetPlayerFaceBits(*pf, PFV_HAS_GLASSES, ge), true ); + DrawFaceStringLabel(w, PFW_WIDGET_HAIR, STR_FACE_HAIR, GetPlayerFaceBits(*pf, PFV_HAIR, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_EYEBROWS, STR_FACE_EYEBROWS, GetPlayerFaceBits(*pf, PFV_EYEBROWS, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_EYECOLOUR, STR_FACE_EYECOLOUR, GetPlayerFaceBits(*pf, PFV_EYE_COLOUR, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_GLASSES, STR_FACE_GLASSES, GetPlayerFaceBits(*pf, PFV_GLASSES, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_NOSE, STR_FACE_NOSE, GetPlayerFaceBits(*pf, PFV_NOSE, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_CHIN, STR_FACE_CHIN, GetPlayerFaceBits(*pf, PFV_CHIN, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_JACKET, STR_FACE_JACKET, GetPlayerFaceBits(*pf, PFV_JACKET, ge), false); + DrawFaceStringLabel(w, PFW_WIDGET_COLLAR, STR_FACE_COLLAR, GetPlayerFaceBits(*pf, PFV_COLLAR, ge), false); + } + + /* Draw the player face picture */ + DrawPlayerFace(*pf, GetPlayer((PlayerID)w->window_number)->player_color, 2, 16); + break; + + case WE_CLICK: + switch (e->we.click.widget) { + /* Toggle size, advanced/simple face selection */ + case PFW_WIDGET_TOGGLE_LARGE_SMALL: + case PFW_WIDGET_TOGGLE_LARGE_SMALL_BUTTON: + DoCommandP(0, 0, *pf, NULL, CMD_SET_PLAYER_FACE); + DeleteWindow(w); + DoSelectPlayerFace((PlayerID)w->window_number, !WP(w, facesel_d).advanced); + break; + + /* Cancel button */ + case PFW_WIDGET_CANCEL: + DeleteWindow(w); + break; + + /* OK button */ + case PFW_WIDGET_ACCEPT: + DoCommandP(0, 0, *pf, NULL, CMD_SET_PLAYER_FACE); + DeleteWindow(w); + break; + + /* Load button */ + case PFW_WIDGET_LOAD: + *pf = _player_face; + ScaleAllPlayerFaceBits(*pf); + ShowErrorMessage(INVALID_STRING_ID, STR_FACE_LOAD_DONE, 0, 0); + SetWindowDirty(w); + break; + + /* 'Player face number' button, view and/or set player face number */ + case PFW_WIDGET_FACECODE: + SetDParam(0, *pf); + ShowQueryString(STR_JUST_INT, STR_FACE_FACECODE_CAPTION, 10 + 1, 0, w, CS_NUMERAL); + break; + + /* Save button */ + case PFW_WIDGET_SAVE: + _player_face = *pf; + ShowErrorMessage(INVALID_STRING_ID, STR_FACE_SAVE_DONE, 0, 0); + break; + + /* Toggle gender (male/female) button */ + case PFW_WIDGET_MALE: + case PFW_WIDGET_FEMALE: + SetPlayerFaceBits(*pf, PFV_GENDER, ge, e->we.click.widget - PFW_WIDGET_MALE); + ScaleAllPlayerFaceBits(*pf); + SetWindowDirty(w); + break; + + /* Randomize face button */ + case PFW_WIDGET_RANDOM_NEW_FACE: + RandomPlayerFaceBits(*pf, ge, WP(w, facesel_d).advanced); + SetWindowDirty(w); + break; + + /* Toggle ethnicity (european/african) button */ + case PFW_WIDGET_ETHNICITY_EUR: + case PFW_WIDGET_ETHNICITY_AFR: + SetPlayerFaceBits(*pf, PFV_ETHNICITY, ge, e->we.click.widget - PFW_WIDGET_ETHNICITY_EUR); + ScaleAllPlayerFaceBits(*pf); + SetWindowDirty(w); + break; + + default: + /* For all buttons from PFW_WIDGET_HAS_MOUSTACHE_EARRING to PFW_WIDGET_GLASSES_R is the same function. + * Therefor is this combined function. + * First it checks which PlayerFaceVariable will be change and then + * a: invert the value for boolean variables + * or b: it checks inside of IncreasePlayerFaceBits() if a left (_L) butten is pressed and then decrease else increase the variable */ + if (WP(w, facesel_d).advanced && e->we.click.widget >= PFW_WIDGET_HAS_MOUSTACHE_EARRING && e->we.click.widget <= PFW_WIDGET_GLASSES_R) { + PlayerFaceVariable pfv; // which PlayerFaceVariable shall be edited + + if (e->we.click.widget < PFW_WIDGET_EYECOLOUR_L) { // Bool buttons + switch (e->we.click.widget - PFW_WIDGET_HAS_MOUSTACHE_EARRING) { + default: NOT_REACHED(); + case 0: pfv = is_female ? PFV_HAS_TIE_EARRING : PFV_HAS_MOUSTACHE; break; // Has earring/moustache button + case 1: pfv = PFV_HAS_GLASSES; break; // Has glasses button + } + SetPlayerFaceBits(*pf, pfv, ge, !GetPlayerFaceBits(*pf, pfv, ge)); + ScaleAllPlayerFaceBits(*pf); + + } else { // Value buttons + switch ((e->we.click.widget - PFW_WIDGET_EYECOLOUR_L) / 3) { + default: NOT_REACHED(); + case 0: pfv = PFV_EYE_COLOUR; break; // Eye colour buttons + case 1: pfv = PFV_CHIN; break; // Chin buttons + case 2: pfv = PFV_EYEBROWS; break; // Eyebrows buttons + case 3: pfv = is_moust_male ? PFV_MOUSTACHE : PFV_LIPS; break; // Moustache or lips buttons + case 4: pfv = PFV_NOSE; break; // Nose buttons + case 5: pfv = PFV_HAIR; break; // Hair buttons + case 6: pfv = PFV_JACKET; break; // Jacket buttons + case 7: pfv = PFV_COLLAR; break; // Collar buttons + case 8: pfv = PFV_TIE_EARRING; break; // Tie/earring buttons + case 9: pfv = PFV_GLASSES; break; // Glasses buttons + } + /* 0 == left (_L), 1 == middle or 2 == right (_R) - button click */ + IncreasePlayerFaceBits(*pf, pfv, ge, (((e->we.click.widget - PFW_WIDGET_EYECOLOUR_L) % 3) != 0) ? 1 : -1); + } + + SetWindowDirty(w); + } + break; + } + break; + + case WE_ON_EDIT_TEXT: + /* Set a new player face number */ + if (!StrEmpty(e->we.edittext.str)) { + *pf = strtoul(e->we.edittext.str, NULL, 10); + ScaleAllPlayerFaceBits(*pf); + ShowErrorMessage(INVALID_STRING_ID, STR_FACE_FACECODE_SET, 0, 0); + SetWindowDirty(w); + } else { + ShowErrorMessage(INVALID_STRING_ID, STR_FACE_FACECODE_ERR, 0, 0); + } + break; + } +} + +/** normal/simple player face selection window description */ static const WindowDesc _select_player_face_desc = { - WDP_AUTO, WDP_AUTO, 190, 149, 190, 149, + WDP_AUTO, WDP_AUTO, 190, 163, 190, 163, WC_PLAYER_FACE, WC_NONE, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, _select_player_face_widgets, SelectPlayerFaceWndProc }; +/** advanced player face selection window description */ +static const WindowDesc _select_player_face_adv_desc = { + WDP_AUTO, WDP_AUTO, 220, 220, 220, 220, + WC_PLAYER_FACE, WC_NONE, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, + _select_player_face_adv_widgets, + SelectPlayerFaceWndProc +}; + +/** + * Open the simple/advanced player face selection window + * + * @param player the player which face shall be edited + * @param adv simple or advanced player face selection window + * + * @pre is player a valid player + */ +static void DoSelectPlayerFace(PlayerID player, bool adv) +{ + if (!IsValidPlayer(player)) return; + + Window *w = AllocateWindowDescFront(adv ? &_select_player_face_adv_desc : &_select_player_face_desc, player); // simple or advanced window + + if (w != NULL) { + w->caption_color = w->window_number; + WP(w, facesel_d).face = GetPlayer((PlayerID)w->window_number)->face; + WP(w, facesel_d).advanced = adv; + } +} + + /* Names of the widgets. Keep them in the same order as in the widget array */ enum PlayerCompanyWindowWidgets { PCW_WIDGET_CLOSEBOX = 0, @@ -682,6 +1055,12 @@ if (num >= 0) DrawString(120, 124, STR_707D_OWNED_BY + num, 0); } +/** + * Player company window event definition + * + * @param w window pointer + * @param e event been triggered + */ static void PlayerCompanyWndProc(Window *w, WindowEvent *e) { switch (e->event) { @@ -749,15 +1128,7 @@ case WE_CLICK: switch (e->we.click.widget) { - case PCW_WIDGET_NEW_FACE: { - Window *wf = AllocateWindowDescFront(&_select_player_face_desc, w->window_number); - if (wf != NULL) { - wf->caption_color = w->window_number; - WP(wf, facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face; - WP(wf, facesel_d).gender = 0; - } - break; - } + case PCW_WIDGET_NEW_FACE: DoSelectPlayerFace((PlayerID)w->window_number, false); break; case PCW_WIDGET_COLOR_SCHEME: { Window *wf = AllocateWindowDescFront(_loaded_newgrf_features.has_2CC ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number); diff -r 2c27f9be3fb9 -r f82a4facea8b src/players.cpp --- a/src/players.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/players.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -94,7 +94,7 @@ SetPlayerFaceBits(pf, PFV_GEN_ETHN, ge, ge); SetPlayerFaceBits(pf, PFV_HAS_GLASSES, ge, GB(face, 28, 3) <= 1); - SetPlayerFaceBits(pf, PFV_EYE_COLOUR, ge, clampu(GB(face, 20, 3), 5, 7) - 5); + SetPlayerFaceBits(pf, PFV_EYE_COLOUR, ge, HASBIT(ge, ETHNICITY_BLACK) ? 0 : clampu(GB(face, 20, 3), 5, 7) - 5); SetPlayerFaceBits(pf, PFV_CHIN, ge, ScalePlayerFaceValue(PFV_CHIN, ge, GB(face, 4, 2))); SetPlayerFaceBits(pf, PFV_EYEBROWS, ge, ScalePlayerFaceValue(PFV_EYEBROWS, ge, GB(face, 6, 4))); SetPlayerFaceBits(pf, PFV_HAIR, ge, ScalePlayerFaceValue(PFV_HAIR, ge, GB(face, 16, 4))); @@ -456,6 +456,12 @@ } } +/** + * Create a new player and sets all player variables default values + * + * @param is_ai is a ai player? + * @return the player struct + */ Player *DoStartupNewPlayer(bool is_ai) { Player *p; @@ -478,7 +484,7 @@ p->avail_railtypes = GetPlayerRailtypes(p->index); p->avail_roadtypes = GetPlayerRoadtypes(p->index); p->inaugurated_year = _cur_year; - p->face = ConvertFromOldPlayerFace(Random()); + RandomPlayerFaceBits(p->face, (GenderEthnicity)Random(), false); // create a random player face /* Engine renewal settings */ p->engine_renew_list = NULL; diff -r 2c27f9be3fb9 -r f82a4facea8b src/rail.cpp --- a/src/rail.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/rail.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -103,6 +103,16 @@ TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW, }; +extern const TrackBits _corner_to_trackbits[] = { + TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, +}; + +/* The default multiplier for the cost of building different types of railway + * track, which will be divided by 8. Can be changed by newgrf files. */ +const int _default_railtype_cost_multiplier[RAILTYPE_END] = { + 8, 12, 16, 24, +}; +int _railtype_cost_multiplier[RAILTYPE_END]; RailType GetTileRailType(TileIndex tile) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/rail.h --- a/src/rail.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/rail.h Sat Oct 20 10:42:28 2007 +0000 @@ -8,6 +8,7 @@ #include "gfx.h" #include "direction.h" #include "tile.h" +#include "variables.h" /** * Enumeration for all possible railtypes. @@ -120,6 +121,19 @@ return TrackToTrackBits(AxisToTrack(a)); } +/** + * Returns a single horizontal/vertical trackbit, that is in a specific tile corner. + * + * @param corner The corner of a tile. + * @return The TrackBits of the track in the corner. + */ +static inline TrackBits CornerToTrackBits(Corner corner) +{ + extern const TrackBits _corner_to_trackbits[]; + assert(IsValidCorner(corner)); + return _corner_to_trackbits[corner]; +} + /** * Enumeration for tracks and directions. @@ -778,6 +792,21 @@ return bits != TRACK_BIT_HORZ && bits != TRACK_BIT_VERT; } + +extern int _railtype_cost_multiplier[RAILTYPE_END]; +extern const int _default_railtype_cost_multiplier[RAILTYPE_END]; + +/** + * Returns the cost of building the specified railtype. + * @param railtype The railtype being built. + * @return The cost multiplier. + */ +static inline Money RailBuildCost(RailType railtype) +{ + assert(railtype < RAILTYPE_END); + return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3; +} + void *UpdateTrainPowerProc(Vehicle *v, void *data); void DrawTrainDepotSprite(int x, int y, int image, RailType railtype); void DrawDefaultWaypointSprite(int x, int y, RailType railtype); diff -r 2c27f9be3fb9 -r f82a4facea8b src/rail_cmd.cpp --- a/src/rail_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/rail_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -150,10 +150,8 @@ } -static const TrackBits _valid_tileh_slopes[][15] = { - -/* set of normal ones */ -{ +/** Valid TrackBits on a specific (non-steep)-slope without foundation */ +static const TrackBits _valid_tracks_without_foundation[15] = { TRACK_BIT_ALL, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, @@ -172,10 +170,10 @@ TRACK_BIT_X, TRACK_BIT_UPPER, TRACK_BIT_RIGHT, -}, +}; -/* allowed rail for an evenly raised platform */ -{ +/** Valid TrackBits on a specific (non-steep)-slope with leveled foundation */ +static const TrackBits _valid_tracks_on_leveled_foundation[15] = { TRACK_BIT_NONE, TRACK_BIT_LEFT, TRACK_BIT_LOWER, @@ -194,62 +192,82 @@ TRACK_BIT_Y | TRACK_BIT_UPPER | TRACK_BIT_RIGHT, TRACK_BIT_ALL, TRACK_BIT_ALL -} }; +/** + * Checks if a track combination is valid on a specific slope and returns the needed foundation. + * + * @param tileh Tile slope. + * @param bits Trackbits. + * @return Needed foundation or FOUNDATION_INVALID if track/slope combination is not allowed. + */ Foundation GetRailFoundation(Slope tileh, TrackBits bits) { - if (!IsSteepSlope(tileh)) { - if ((~_valid_tileh_slopes[0][tileh] & bits) == 0) return FOUNDATION_NONE; - if ((~_valid_tileh_slopes[1][tileh] & bits) == 0) return FOUNDATION_LEVELED; - } + if (bits == TRACK_BIT_NONE) return FOUNDATION_NONE; - switch (bits) { - default: NOT_REACHED(); - case TRACK_BIT_X: return FOUNDATION_INCLINED_X; - case TRACK_BIT_Y: return FOUNDATION_INCLINED_Y; - case TRACK_BIT_LEFT: return (tileh == SLOPE_STEEP_W ? FOUNDATION_STEEP_HIGHER : FOUNDATION_STEEP_LOWER); - case TRACK_BIT_LOWER: return (tileh == SLOPE_STEEP_S ? FOUNDATION_STEEP_HIGHER : FOUNDATION_STEEP_LOWER); - case TRACK_BIT_RIGHT: return (tileh == SLOPE_STEEP_E ? FOUNDATION_STEEP_HIGHER : FOUNDATION_STEEP_LOWER); - case TRACK_BIT_UPPER: return (tileh == SLOPE_STEEP_N ? FOUNDATION_STEEP_HIGHER : FOUNDATION_STEEP_LOWER); + if (IsSteepSlope(tileh)) { + /* Test for inclined foundations */ + if (bits == TRACK_BIT_X) return FOUNDATION_INCLINED_X; + if (bits == TRACK_BIT_Y) return FOUNDATION_INCLINED_Y; + + /* Get higher track */ + Corner highest_corner = GetHighestSlopeCorner(tileh); + TrackBits higher_track = CornerToTrackBits(highest_corner); + + /* Only higher track? */ + if (bits == higher_track) return FOUNDATION_STEEP_HIGHER; + + /* Overlap with higher track? */ + if (TracksOverlap(bits | higher_track)) return FOUNDATION_INVALID; + + /* either lower track or both higher and lower track */ + return ((bits & higher_track) != 0 ? FOUNDATION_INVALID : FOUNDATION_STEEP_LOWER); + } else { + if ((~_valid_tracks_without_foundation[tileh] & bits) == 0) return FOUNDATION_NONE; + + bool valid_on_leveled = ((~_valid_tracks_on_leveled_foundation[tileh] & bits) == 0); + + switch (bits) { + case TRACK_BIT_X: + if (HasSlopeHighestCorner(tileh)) return FOUNDATION_INCLINED_X; + return (valid_on_leveled ? FOUNDATION_LEVELED : FOUNDATION_INVALID); + + case TRACK_BIT_Y: + if (HasSlopeHighestCorner(tileh)) return FOUNDATION_INCLINED_Y; + return (valid_on_leveled ? FOUNDATION_LEVELED : FOUNDATION_INVALID); + + default: + return (valid_on_leveled ? FOUNDATION_LEVELED : FOUNDATION_INVALID); + } } } +/** + * Tests if a track can be build on a tile. + * + * @param tileh Tile slope. + * @param rail_bits Tracks to build. + * @param existing Tracks already built. + * @param tile Tile (used for water test) + * @return Error message or cost for foundation building. + */ static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile) { - if (IsSteepSlope(tileh)) { - if (_patches.build_on_slopes && existing == 0) { - /* There may only be one track on steep slopes. (Autoslope calls with multiple bits in rail_bits) */ - if (KILL_FIRST_BIT(rail_bits & TRACK_BIT_MASK) == 0) { - TrackBits valid = TRACK_BIT_CROSS | (HASBIT(1 << SLOPE_STEEP_W | 1 << SLOPE_STEEP_E, tileh) ? TRACK_BIT_VERT : TRACK_BIT_HORZ); - if (valid & rail_bits) return _price.terraform; - } - } - } else { - rail_bits |= existing; + /* don't allow building on the lower side of a coast */ + if (IsTileType(tile, MP_WATER)) { + if (!IsSteepSlope(tileh) && ((~_valid_tracks_on_leveled_foundation[tileh] & (rail_bits | existing)) != 0)) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER); + } - /* don't allow building on the lower side of a coast */ - if (IsTileType(tile, MP_WATER) && - ~_valid_tileh_slopes[1][tileh] & rail_bits) { - return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER); - } + Foundation f_new = GetRailFoundation(tileh, rail_bits | existing); - /* no special foundation */ - if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) { - return CommandCost(); - } else if (!_patches.build_on_slopes) { - return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); - } + /* check track/slope combination */ + if ((f_new == FOUNDATION_INVALID) || + ((f_new != FOUNDATION_NONE) && (!_patches.build_on_slopes)) + ) return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); - if ((~_valid_tileh_slopes[1][tileh] & rail_bits) == 0 || ( // whole tile is leveled up - (rail_bits == TRACK_BIT_X || rail_bits == TRACK_BIT_Y) && - (tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N) - )) { // partly up - return CommandCost((existing != 0) ? 0 : _price.terraform); - } - } - return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); + Foundation f_old = GetRailFoundation(tileh, existing); + return CommandCost(f_new != f_old ? _price.terraform : 0); } /* Validate functions for rail building */ @@ -376,7 +394,7 @@ YapfNotifyTrackLayoutChange(tile, track); } - return cost.AddCost(_price.build_rail); + return cost.AddCost(RailBuildCost(railtype)); } /** Remove a single piece of track @@ -1073,7 +1091,7 @@ VehicleFromPos(tile, &tile, UpdateTrainPowerProc); } - return CommandCost(_price.build_rail / 2); + return CommandCost(RailBuildCost(totype) / 2); } extern CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec); diff -r 2c27f9be3fb9 -r f82a4facea8b src/rail_gui.cpp --- a/src/rail_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/rail_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -235,25 +235,27 @@ /** Enum referring to the widgets of the build rail toolbar */ -enum { - RTW_CAPTION = 1, - RTW_BUILD_NS = 4, - RTW_BUILD_X = 5, - RTW_BUILD_EW = 6, - RTW_BUILD_Y = 7, - RTW_AUTORAIL = 8, - RTW_DEMOLISH = 9, - RTW_BUILD_DEPOT = 10, - RTW_BUILD_WAYPOINT = 11, - RTW_BUILD_STATION = 12, - RTW_BUILD_SIGNALS = 13, - RTW_BUILD_BRIDGE = 14, - RTW_BUILD_TUNNEL = 15, - RTW_REMOVE = 16, - RTW_CONVERT_RAIL = 17 +enum RailToolbarWidgets { + RTW_CLOSEBOX = 0, + RTW_CAPTION, + RTW_STICKY, + RTW_SPACER, + RTW_BUILD_NS, + RTW_BUILD_X, + RTW_BUILD_EW, + RTW_BUILD_Y, + RTW_AUTORAIL, + RTW_DEMOLISH, + RTW_BUILD_DEPOT, + RTW_BUILD_WAYPOINT, + RTW_BUILD_STATION, + RTW_BUILD_SIGNALS, + RTW_BUILD_BRIDGE, + RTW_BUILD_TUNNEL, + RTW_REMOVE, + RTW_CONVERT_RAIL, }; - static void BuildRailClick_N(Window *w) { HandlePlacePushButton(w, RTW_BUILD_NS, GetRailTypeInfo(_cur_railtype)->cursor.rail_ns, 1, PlaceRail_N); @@ -433,11 +435,12 @@ static void UpdateRemoveWidgetStatus(Window *w, int clicked_widget) { - /* If it is the removal button that has been clicked, do nothing, - * as it is up to the other buttons to drive removal status */ - if (clicked_widget == RTW_REMOVE) return; - switch (clicked_widget) { + case RTW_REMOVE: + /* If it is the removal button that has been clicked, do nothing, + * as it is up to the other buttons to drive removal status */ + return; + break; case RTW_BUILD_NS: case RTW_BUILD_X: case RTW_BUILD_EW: @@ -453,7 +456,7 @@ default: /* When any other buttons than rail/signal/waypoint/station, raise and - * disable the removal button*/ + * disable the removal button */ DisableWindowWidget(w, RTW_REMOVE); RaiseWindowWidget(w, RTW_REMOVE); break; @@ -468,28 +471,25 @@ case WE_PAINT: DrawWindowWidgets(w); break; case WE_CLICK: - if (e->we.click.widget >= 4) { + if (e->we.click.widget >= RTW_BUILD_NS) { _remove_button_clicked = false; - _build_railroad_button_proc[e->we.click.widget - 4](w); + _build_railroad_button_proc[e->we.click.widget - RTW_BUILD_NS](w); } UpdateRemoveWidgetStatus(w, e->we.click.widget); break; - case WE_KEYPRESS: { - uint i; - - for (i = 0; i != lengthof(_rail_keycodes); i++) { + case WE_KEYPRESS: + for (uint8 i = 0; i != lengthof(_rail_keycodes); i++) { if (e->we.keypress.keycode == _rail_keycodes[i]) { e->we.keypress.cont = false; _remove_button_clicked = false; _build_railroad_button_proc[i](w); - UpdateRemoveWidgetStatus(w, i + 4); + UpdateRemoveWidgetStatus(w, i + RTW_BUILD_NS); break; } } MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection break; - } case WE_PLACE_OBJ: _place_proc(e->we.place.tile); @@ -571,30 +571,30 @@ } } - +/** Widget definition for the rail toolbar */ static const Widget _build_rail_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 337, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_STICKYBOX, RESIZE_NONE, 7, 338, 349, 0, 13, 0x0, STR_STICKY_BUTTON}, - -{ WWT_PANEL, RESIZE_NONE, 7, 110, 113, 14, 35, 0x0, STR_NULL}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 337, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 338, 349, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY -{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_RAIL_NS, STR_1018_BUILD_RAILROAD_TRACK}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_RAIL_NE, STR_1018_BUILD_RAILROAD_TRACK}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_RAIL_EW, STR_1018_BUILD_RAILROAD_TRACK}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_RAIL_NW, STR_1018_BUILD_RAILROAD_TRACK}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_AUTORAIL, STR_BUILD_AUTORAIL_TIP}, +{ WWT_PANEL, RESIZE_NONE, 7, 110, 113, 14, 35, 0x0, STR_NULL}, // RTW_SPACER -{ WWT_IMGBTN, RESIZE_NONE, 7, 114, 135, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_IMG_DEPOT_RAIL, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 158, 179, 14, 35, SPR_IMG_WAYPOINT, STR_CONVERT_RAIL_TO_WAYPOINT_TIP}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_RAIL_NS, STR_1018_BUILD_RAILROAD_TRACK}, // RTW_BUILD_NS +{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_RAIL_NE, STR_1018_BUILD_RAILROAD_TRACK}, // RTW_BUILD_X +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_RAIL_EW, STR_1018_BUILD_RAILROAD_TRACK}, // RTW_BUILD_EW +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_RAIL_NW, STR_1018_BUILD_RAILROAD_TRACK}, // RTW_BUILD_Y +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_AUTORAIL, STR_BUILD_AUTORAIL_TIP}, // RTW_AUTORAIL -{ WWT_IMGBTN, RESIZE_NONE, 7, 180, 221, 14, 35, SPR_IMG_RAIL_STATION, STR_101A_BUILD_RAILROAD_STATION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 222, 243, 14, 35, SPR_IMG_RAIL_SIGNALS, STR_101B_BUILD_RAILROAD_SIGNALS}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 244, 285, 14, 35, SPR_IMG_BRIDGE, STR_101C_BUILD_RAILROAD_BRIDGE}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 286, 305, 14, 35, SPR_IMG_TUNNEL_RAIL, STR_101D_BUILD_RAILROAD_TUNNEL}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 306, 327, 14, 35, SPR_IMG_REMOVE, STR_101E_TOGGLE_BUILD_REMOVE_FOR}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 328, 349, 14, 35, SPR_IMG_CONVERT_RAIL, STR_CONVERT_RAIL_TIP}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 114, 135, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_IMG_DEPOT_RAIL, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING}, // RTW_BUILD_DEPOT +{ WWT_IMGBTN, RESIZE_NONE, 7, 158, 179, 14, 35, SPR_IMG_WAYPOINT, STR_CONVERT_RAIL_TO_WAYPOINT_TIP}, // RTW_BUILD_WAYPOINT + +{ WWT_IMGBTN, RESIZE_NONE, 7, 180, 221, 14, 35, SPR_IMG_RAIL_STATION, STR_101A_BUILD_RAILROAD_STATION}, // RTW_BUILD_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 222, 243, 14, 35, SPR_IMG_RAIL_SIGNALS, STR_101B_BUILD_RAILROAD_SIGNALS}, // RTW_BUILD_SIGNALS +{ WWT_IMGBTN, RESIZE_NONE, 7, 244, 285, 14, 35, SPR_IMG_BRIDGE, STR_101C_BUILD_RAILROAD_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 286, 305, 14, 35, SPR_IMG_TUNNEL_RAIL, STR_101D_BUILD_RAILROAD_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 306, 327, 14, 35, SPR_IMG_REMOVE, STR_101E_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE +{ WWT_IMGBTN, RESIZE_NONE, 7, 328, 349, 14, 35, SPR_IMG_CONVERT_RAIL, STR_CONVERT_RAIL_TIP}, // RTW_CONVERT_RAIL { WIDGETS_END}, }; @@ -644,13 +644,51 @@ } _remove_button_clicked = false; - if (w != NULL && button >= 0) { + if (w != NULL && button >= RTW_CLOSEBOX) { _build_railroad_button_proc[button](w); - UpdateRemoveWidgetStatus(w, button + 4); + UpdateRemoveWidgetStatus(w, button + RTW_BUILD_NS); } if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w); } +/** Enum referring to the widgets of the rail stations window */ +enum BuildRailStationWidgets { + BRSW_CLOSEBOX = 0, + BRSW_CAPTION, + BRSW_BACKGROUND, + + BRSW_PLATFORM_DIR_X, + BRSW_PLATFORM_DIR_Y, + + BRSW_PLATFORM_NUM_BEGIN = BRSW_PLATFORM_DIR_Y, + BRSW_PLATFORM_NUM_1, + BRSW_PLATFORM_NUM_2, + BRSW_PLATFORM_NUM_3, + BRSW_PLATFORM_NUM_4, + BRSW_PLATFORM_NUM_5, + BRSW_PLATFORM_NUM_6, + BRSW_PLATFORM_NUM_7, + + BRSW_PLATFORM_LEN_BEGIN = BRSW_PLATFORM_NUM_7, + BRSW_PLATFORM_LEN_1, + BRSW_PLATFORM_LEN_2, + BRSW_PLATFORM_LEN_3, + BRSW_PLATFORM_LEN_4, + BRSW_PLATFORM_LEN_5, + BRSW_PLATFORM_LEN_6, + BRSW_PLATFORM_LEN_7, + + BRSW_PLATFORM_DRAG_N_DROP, + + BRSW_HIGHLIGHT_OFF, + BRSW_HIGHLIGHT_ON, + + BRSW_NEWST_DROPDOWN, + BRSW_NEWST_DROPDOWN_TEXT, + BRSW_NEWST_LIST, + BRSW_NEWST_SCROLL +}; + /* TODO: For custom stations, respect their allowed platforms/lengths bitmasks! * --pasky */ @@ -680,21 +718,21 @@ if (statspec == NULL || _railstation.dragdrop) return; if (HASBIT(statspec->disallowed_platforms, _railstation.numtracks - 1)) { - RaiseWindowWidget(w, _railstation.numtracks + 4); + RaiseWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); _railstation.numtracks = 1; while (HASBIT(statspec->disallowed_platforms, _railstation.numtracks - 1)) { _railstation.numtracks++; } - LowerWindowWidget(w, _railstation.numtracks + 4); + LowerWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); } if (HASBIT(statspec->disallowed_lengths, _railstation.platlength - 1)) { - RaiseWindowWidget(w, _railstation.platlength + 11); + RaiseWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); _railstation.platlength = 1; while (HASBIT(statspec->disallowed_lengths, _railstation.platlength - 1)) { _railstation.platlength++; } - LowerWindowWidget(w, _railstation.platlength + 11); + LowerWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); } } @@ -702,22 +740,19 @@ { switch (e->event) { case WE_CREATE: - LowerWindowWidget(w, _railstation.orientation + 3); + LowerWindowWidget(w, _railstation.orientation + BRSW_PLATFORM_DIR_X); if (_railstation.dragdrop) { - LowerWindowWidget(w, 19); + LowerWindowWidget(w, BRSW_PLATFORM_DRAG_N_DROP); } else { - LowerWindowWidget(w, _railstation.numtracks + 4); - LowerWindowWidget(w, _railstation.platlength + 11); + LowerWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); + LowerWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); } - SetWindowWidgetLoweredState(w, 20, !_station_show_coverage); - SetWindowWidgetLoweredState(w, 21, _station_show_coverage); + SetWindowWidgetLoweredState(w, BRSW_HIGHLIGHT_OFF, !_station_show_coverage); + SetWindowWidgetLoweredState(w, BRSW_HIGHLIGHT_ON, _station_show_coverage); break; case WE_PAINT: { - int rad; - uint bits; bool newstations = _railstation.newstations; - int y_offset; DrawPixelInfo tmp_dpi, *old_dpi; const StationSpec *statspec = newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; @@ -733,26 +768,26 @@ SetTileSelectSize(x, y); } - rad = (_patches.modified_catchment) ? CA_TRAIN : 4; + int rad = (_patches.modified_catchment) ? CA_TRAIN : 4; if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad); - for (bits = 0; bits < 7; bits++) { + for (uint bits = 0; bits < 7; bits++) { bool disable = bits >= _patches.station_spread; if (statspec == NULL) { - SetWindowWidgetDisabledState(w, bits + 5, disable); - SetWindowWidgetDisabledState(w, bits + 12, disable); + SetWindowWidgetDisabledState(w, bits + BRSW_PLATFORM_NUM_1, disable); + SetWindowWidgetDisabledState(w, bits + BRSW_PLATFORM_LEN_1, disable); } else { - SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits) || disable); - SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits) || disable); + SetWindowWidgetDisabledState(w, bits + BRSW_PLATFORM_NUM_1, HASBIT(statspec->disallowed_platforms, bits) || disable); + SetWindowWidgetDisabledState(w, bits + BRSW_PLATFORM_LEN_1, HASBIT(statspec->disallowed_lengths, bits) || disable); } } SetDParam(0, GetStationClassName(_railstation.station_class)); DrawWindowWidgets(w); - y_offset = newstations ? 90 : 0; + int y_offset = newstations ? 90 : 0; /* Set up a clipping area for the '/' station preview */ if (FillDrawPixelInfo(&tmp_dpi, 7, 26 + y_offset, 66, 48)) { @@ -782,10 +817,9 @@ DrawStationCoverageAreaText(2, 166 + y_offset, SCT_ALL, rad); if (newstations) { - uint16 i; uint y = 35; - for (i = w->vscroll.pos; i < _railstation.station_count && i < (uint)(w->vscroll.pos + w->vscroll.cap); i++) { + for (uint16 i = w->vscroll.pos; i < _railstation.station_count && i < (uint)(w->vscroll.pos + w->vscroll.cap); i++) { const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, i); if (statspec != NULL && statspec->name != 0) { @@ -805,26 +839,26 @@ case WE_CLICK: { switch (e->we.click.widget) { - case 3: - case 4: - RaiseWindowWidget(w, _railstation.orientation + 3); - _railstation.orientation = e->we.click.widget - 3; - LowerWindowWidget(w, _railstation.orientation + 3); + case BRSW_PLATFORM_DIR_X: + case BRSW_PLATFORM_DIR_Y: + RaiseWindowWidget(w, _railstation.orientation + BRSW_PLATFORM_DIR_X); + _railstation.orientation = e->we.click.widget - BRSW_PLATFORM_DIR_X; + LowerWindowWidget(w, _railstation.orientation + BRSW_PLATFORM_DIR_X); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: { - RaiseWindowWidget(w, _railstation.numtracks + 4); - RaiseWindowWidget(w, 19); + case BRSW_PLATFORM_NUM_1: + case BRSW_PLATFORM_NUM_2: + case BRSW_PLATFORM_NUM_3: + case BRSW_PLATFORM_NUM_4: + case BRSW_PLATFORM_NUM_5: + case BRSW_PLATFORM_NUM_6: + case BRSW_PLATFORM_NUM_7: { + RaiseWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); + RaiseWindowWidget(w, BRSW_PLATFORM_DRAG_N_DROP); - _railstation.numtracks = (e->we.click.widget - 5) + 1; + _railstation.numtracks = e->we.click.widget - BRSW_PLATFORM_NUM_BEGIN; _railstation.dragdrop = false; const StationSpec *statspec = _railstation.newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; @@ -832,31 +866,31 @@ /* The previously selected number of platforms in invalid */ for (uint i = 0; i < 7; i++) { if (!HASBIT(statspec->disallowed_lengths, i)) { - RaiseWindowWidget(w, _railstation.platlength + 11); + RaiseWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); _railstation.platlength = i + 1; break; } } } - LowerWindowWidget(w, _railstation.platlength + 11); - LowerWindowWidget(w, _railstation.numtracks + 4); + LowerWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); + LowerWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; } - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: { - RaiseWindowWidget(w, _railstation.platlength + 11); - RaiseWindowWidget(w, 19); + case BRSW_PLATFORM_LEN_1: + case BRSW_PLATFORM_LEN_2: + case BRSW_PLATFORM_LEN_3: + case BRSW_PLATFORM_LEN_4: + case BRSW_PLATFORM_LEN_5: + case BRSW_PLATFORM_LEN_6: + case BRSW_PLATFORM_LEN_7: { + RaiseWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); + RaiseWindowWidget(w, BRSW_PLATFORM_DRAG_N_DROP); - _railstation.platlength = (e->we.click.widget - 12) + 1; + _railstation.platlength = e->we.click.widget - BRSW_PLATFORM_LEN_BEGIN; _railstation.dragdrop = false; const StationSpec *statspec = _railstation.newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; @@ -864,44 +898,44 @@ /* The previously selected number of tracks in invalid */ for (uint i = 0; i < 7; i++) { if (!HASBIT(statspec->disallowed_platforms, i)) { - RaiseWindowWidget(w, _railstation.numtracks + 4); + RaiseWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); _railstation.numtracks = i + 1; break; } } } - LowerWindowWidget(w, _railstation.platlength + 11); - LowerWindowWidget(w, _railstation.numtracks + 4); + LowerWindowWidget(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN); + LowerWindowWidget(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; } - case 19: + case BRSW_PLATFORM_DRAG_N_DROP: _railstation.dragdrop ^= true; - ToggleWidgetLoweredState(w, 19); - SetWindowWidgetLoweredState(w, _railstation.numtracks + 4, !_railstation.dragdrop); - SetWindowWidgetLoweredState(w, _railstation.platlength + 11, !_railstation.dragdrop); + ToggleWidgetLoweredState(w, BRSW_PLATFORM_DRAG_N_DROP); + SetWindowWidgetLoweredState(w, _railstation.numtracks + BRSW_PLATFORM_NUM_BEGIN, !_railstation.dragdrop); + SetWindowWidgetLoweredState(w, _railstation.platlength + BRSW_PLATFORM_LEN_BEGIN, !_railstation.dragdrop); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; - case 20: - case 21: - _station_show_coverage = (e->we.click.widget != 20); - SetWindowWidgetLoweredState(w, 20, !_station_show_coverage); - SetWindowWidgetLoweredState(w, 21, _station_show_coverage); + case BRSW_HIGHLIGHT_OFF: + case BRSW_HIGHLIGHT_ON: + _station_show_coverage = (e->we.click.widget != BRSW_HIGHLIGHT_OFF); + SetWindowWidgetLoweredState(w, BRSW_HIGHLIGHT_OFF, !_station_show_coverage); + SetWindowWidgetLoweredState(w, BRSW_HIGHLIGHT_ON, _station_show_coverage); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; - case 22: - case 23: + case BRSW_NEWST_DROPDOWN: + case BRSW_NEWST_DROPDOWN_TEXT: ShowDropDownMenu(w, BuildStationClassDropdown(), _railstation.station_class, 23, 0, 1 << STAT_CLASS_WAYP); break; - case 24: { + case BRSW_NEWST_LIST: { const StationSpec *statspec; int y = (e->we.click.pt.y - 32) / 14; @@ -956,67 +990,69 @@ } } +/** Widget definition of the standard build rail station window */ static const Widget _station_builder_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 199, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 7, 72, 26, 73, 0x0, STR_304E_SELECT_RAILROAD_STATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 75, 140, 26, 73, 0x0, STR_304E_SELECT_RAILROAD_STATION}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 199, 0x0, STR_NULL}, // BRSW_BACKGROUND +{ WWT_PANEL, RESIZE_NONE, 14, 7, 72, 26, 73, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_X +{ WWT_PANEL, RESIZE_NONE, 14, 75, 140, 26, 73, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_Y -{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 87, 98, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 87, 98, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 87, 98, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 87, 98, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 87, 98, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 87, 98, STR_0335_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 87, 98, STR_0336_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 87, 98, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_1 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 87, 98, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_2 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 87, 98, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_3 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 87, 98, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_4 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 87, 98, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_5 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 87, 98, STR_0335_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_6 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 87, 98, STR_0336_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_7 -{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 112, 123, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 112, 123, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 112, 123, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 112, 123, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 112, 123, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 112, 123, STR_0335_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 112, 123, STR_0336_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 112, 123, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_1 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 112, 123, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_2 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 112, 123, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_3 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 112, 123, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_4 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 112, 123, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_5 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 112, 123, STR_0335_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_6 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 112, 123, STR_0336_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_7 -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 111, 126, 137, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 152, 163, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 152, 163, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 111, 126, 137, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, // BRSW_PLATFORM_DRAG_N_DROP +{ WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 152, 163, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_HIGHLIGHT_OFF +{ WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 152, 163, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_HIGHLIGHT_ON { WIDGETS_END}, }; +/** Widget definition of the build NewGRF rail station window */ static const Widget _newstation_builder_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 289, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 7, 72, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, -{ WWT_PANEL, RESIZE_NONE, 14, 75, 140, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 289, 0x0, STR_NULL}, // BRSW_BACKGROUND +{ WWT_PANEL, RESIZE_NONE, 14, 7, 72, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_X +{ WWT_PANEL, RESIZE_NONE, 14, 75, 140, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_Y -{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 177, 188, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 177, 188, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 177, 188, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 177, 188, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 177, 188, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 177, 188, STR_0335_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 177, 188, STR_0336_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 177, 188, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_1 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 177, 188, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_2 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 177, 188, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_3 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 177, 188, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_4 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 177, 188, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_5 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 177, 188, STR_0335_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_6 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 177, 188, STR_0336_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_7 -{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 202, 213, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 202, 213, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 202, 213, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 202, 213, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 202, 213, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 202, 213, STR_0335_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 202, 213, STR_0336_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 22, 36, 202, 213, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_1 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 51, 202, 213, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_2 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 52, 66, 202, 213, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_3 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 67, 81, 202, 213, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_4 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 82, 96, 202, 213, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_5 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 97, 111, 202, 213, STR_0335_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_6 +{ WWT_TEXTBTN, RESIZE_NONE, 14, 112, 126, 202, 213, STR_0336_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_7 -{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 111, 216, 227, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 242, 253, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 242, 253, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, +{ WWT_TEXTBTN, RESIZE_NONE, 14, 37, 111, 216, 227, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, // BRSW_PLATFORM_DRAG_N_DROP +{ WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 242, 253, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_HIGHLIGHT_OFF +{ WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 242, 253, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_HIGHLIGHT_ON /* newstations gui additions */ -{ WWT_INSET, RESIZE_NONE, 14, 7, 140, 17, 28, STR_02BD, STR_SELECT_STATION_CLASS_TIP}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 129, 139, 18, 27, STR_0225, STR_SELECT_STATION_CLASS_TIP}, -{ WWT_MATRIX, RESIZE_NONE, 14, 7, 128, 32, 102, 0x501, STR_SELECT_STATION_TYPE_TIP}, -{ WWT_SCROLLBAR, RESIZE_NONE, 14, 129, 140, 32, 102, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, +{ WWT_INSET, RESIZE_NONE, 14, 7, 140, 17, 28, STR_02BD, STR_SELECT_STATION_CLASS_TIP}, // BRSW_NEWST_DROPDOWN +{ WWT_TEXTBTN, RESIZE_NONE, 14, 129, 139, 18, 27, STR_0225, STR_SELECT_STATION_CLASS_TIP}, // BRSW_NEWST_DROPDOWN_TEXT +{ WWT_MATRIX, RESIZE_NONE, 14, 7, 128, 32, 102, 0x501, STR_SELECT_STATION_TYPE_TIP}, // BRSW_NEWST_LIST +{ WWT_SCROLLBAR, RESIZE_NONE, 14, 129, 140, 32, 102, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BRSW_NEWST_SCROLL { WIDGETS_END}, }; @@ -1053,33 +1089,41 @@ } } +/** Enum referring to the widgets of the build rail depot window */ +enum BuildRailDepotWidgets { + BRDW_CLOSEBOX = 0, + BRDW_CAPTION, + BRDW_BACKGROUND, + BRDW_DEPOT_NE, + BRDW_DEPOT_SE, + BRDW_DEPOT_SW, + BRDW_DEPOT_NW, +}; + static void BuildTrainDepotWndProc(Window *w, WindowEvent *e) { switch (e->event) { - case WE_CREATE: LowerWindowWidget(w, _build_depot_direction + 3); break; + case WE_CREATE: LowerWindowWidget(w, _build_depot_direction + BRDW_DEPOT_NE); break; case WE_PAINT: { - RailType r; - DrawWindowWidgets(w); - r = _cur_railtype; - DrawTrainDepotSprite(70, 17, 0, r); - DrawTrainDepotSprite(70, 69, 1, r); - DrawTrainDepotSprite( 2, 69, 2, r); - DrawTrainDepotSprite( 2, 17, 3, r); + DrawTrainDepotSprite(70, 17, DIAGDIR_NE, _cur_railtype); + DrawTrainDepotSprite(70, 69, DIAGDIR_SE, _cur_railtype); + DrawTrainDepotSprite( 2, 69, DIAGDIR_SW, _cur_railtype); + DrawTrainDepotSprite( 2, 17, DIAGDIR_NW, _cur_railtype); break; } case WE_CLICK: switch (e->we.click.widget) { - case 3: - case 4: - case 5: - case 6: - RaiseWindowWidget(w, _build_depot_direction + 3); - _build_depot_direction = (DiagDirection)(e->we.click.widget - 3); - LowerWindowWidget(w, _build_depot_direction + 3); + case BRDW_DEPOT_NE: + case BRDW_DEPOT_SE: + case BRDW_DEPOT_SW: + case BRDW_DEPOT_NW: + RaiseWindowWidget(w, _build_depot_direction + BRDW_DEPOT_NE); + _build_depot_direction = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE); + LowerWindowWidget(w, _build_depot_direction + BRDW_DEPOT_NE); SndPlayFx(SND_15_BEEP); SetWindowDirty(w); break; @@ -1096,14 +1140,15 @@ } } +/** Widget definition of the build rail depot window */ static const Widget _build_depot_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1014_TRAIN_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1014_TRAIN_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, // BRDW_DEPOT_NE +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, // BRDW_DEPOT_SE +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, // BRDW_DEPOT_SW +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO}, // BRDW_DEPOT_NW { WIDGETS_END}, }; @@ -1120,6 +1165,18 @@ AllocateWindowDesc(&_build_depot_desc); } +/** Enum referring to the widgets of the build NewGRF rail waypoint window */ +enum BuildRailWaypointWidgets { + BRWW_CLOSEBOX = 0, + BRWW_CAPTION, + BRWW_BACKGROUND, + BRWW_WAYPOINT_1, + BRWW_WAYPOINT_2, + BRWW_WAYPOINT_3, + BRWW_WAYPOINT_4, + BRWW_WAYPOINT_5, + BRWW_SCROLL, +}; static void BuildWaypointWndProc(Window *w, WindowEvent *e) { @@ -1128,7 +1185,7 @@ uint i; for (i = 0; i < w->hscroll.cap; i++) { - SetWindowWidgetLoweredState(w, i + 3, (w->hscroll.pos + i) == _cur_waypoint_type); + SetWindowWidgetLoweredState(w, i + BRWW_WAYPOINT_1, (w->hscroll.pos + i) == _cur_waypoint_type); } DrawWindowWidgets(w); @@ -1150,20 +1207,24 @@ } case WE_CLICK: { switch (e->we.click.widget) { - case 3: case 4: case 5: case 6: case 7: { - byte type = e->we.click.widget - 3 + w->hscroll.pos; + case BRWW_WAYPOINT_1: + case BRWW_WAYPOINT_2: + case BRWW_WAYPOINT_3: + case BRWW_WAYPOINT_4: + case BRWW_WAYPOINT_5: { + byte type = e->we.click.widget - BRWW_WAYPOINT_1 + w->hscroll.pos; - /* Check station availability callback */ - const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, type); - if (statspec != NULL && - HASBIT(statspec->callbackmask, CBM_STATION_AVAIL) && - GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE) == 0) return; + /* Check station availability callback */ + const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, type); + if (statspec != NULL && + HASBIT(statspec->callbackmask, CBM_STATION_AVAIL) && + GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE) == 0) return; - _cur_waypoint_type = type; - SndPlayFx(SND_15_BEEP); - SetWindowDirty(w); - break; - } + _cur_waypoint_type = type; + SndPlayFx(SND_15_BEEP); + SetWindowDirty(w); + break; + } } break; } @@ -1178,18 +1239,19 @@ } } +/** Widget definition for the build NewGRF rail waypoint window */ static const Widget _build_waypoint_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 343, 0, 13, STR_WAYPOINT, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 343, 14, 91, 0x0, 0}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRWW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 343, 0, 13, STR_WAYPOINT, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRWW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 343, 14, 91, 0x0, STR_NULL}, // BRWW_BACKGROUND -{ WWT_PANEL, RESIZE_NONE, 7, 3, 68, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, -{ WWT_PANEL, RESIZE_NONE, 7, 71, 136, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, -{ WWT_PANEL, RESIZE_NONE, 7, 139, 204, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, -{ WWT_PANEL, RESIZE_NONE, 7, 207, 272, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, -{ WWT_PANEL, RESIZE_NONE, 7, 275, 340, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, +{ WWT_PANEL, RESIZE_NONE, 7, 3, 68, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, // BRWW_WAYPOINT_1 +{ WWT_PANEL, RESIZE_NONE, 7, 71, 136, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, // BRWW_WAYPOINT_2 +{ WWT_PANEL, RESIZE_NONE, 7, 139, 204, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, // BRWW_WAYPOINT_3 +{ WWT_PANEL, RESIZE_NONE, 7, 207, 272, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, // BRWW_WAYPOINT_4 +{ WWT_PANEL, RESIZE_NONE, 7, 275, 340, 17, 76, 0x0, STR_WAYPOINT_GRAPHICS_TIP}, // BRWW_WAYPOINT_5 -{ WWT_HSCROLLBAR, RESIZE_NONE, 7, 1, 343, 80, 91, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, +{ WWT_HSCROLLBAR, RESIZE_NONE, 7, 1, 343, 80, 91, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BRWW_SCROLL { WIDGETS_END}, }; diff -r 2c27f9be3fb9 -r f82a4facea8b src/road_cmd.cpp --- a/src/road_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/road_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -605,7 +605,7 @@ VehicleFromPos(tile, &tile, UpdateTrainPowerProc); } - return CommandCost(_price.build_rail / 2); + return CommandCost(RailBuildCost(totype) / 2); } @@ -820,7 +820,7 @@ if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) return CMD_ERROR; - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (flags & DC_EXEC) { DoClearSquare(tile); diff -r 2c27f9be3fb9 -r f82a4facea8b src/road_gui.cpp --- a/src/road_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/road_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -180,20 +180,22 @@ VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_DEMOLISH_AREA); } - -enum { - RTW_ROAD_X = 3, - RTW_ROAD_Y = 4, - RTW_DEMOLISH = 5, - RTW_DEPOT = 6, - RTW_BUS_STATION = 7, - RTW_TRUCK_STATION = 8, - RTW_BUILD_BRIDGE = 9, - RTW_BUILD_TUNNEL = 10, - RTW_REMOVE = 11 +/** Enum referring to the widgets of the build road toolbar */ +enum RoadToolbarWidgets { + RTW_CLOSEBOX = 0, + RTW_CAPTION, + RTW_STICKY, + RTW_ROAD_X, + RTW_ROAD_Y, + RTW_DEMOLISH, + RTW_DEPOT, + RTW_BUS_STATION, + RTW_TRUCK_STATION, + RTW_BUILD_BRIDGE, + RTW_BUILD_TUNNEL, + RTW_REMOVE, }; - typedef void OnButtonClick(Window *w); static void BuildRoadClick_NE(Window *w) @@ -249,7 +251,6 @@ SetSelectionRed(IsWindowWidgetLowered(w, RTW_REMOVE)); } - static OnButtonClick* const _build_road_button_proc[] = { BuildRoadClick_NE, BuildRoadClick_NW, @@ -262,38 +263,83 @@ BuildRoadClick_Remove }; +static const uint16 _road_keycodes[] = { + '1', + '2', + '3', + '4', + '5', + '6', + 'B', + 'T', + 'R', +}; + +/** + * Update the remove button lowered state of the road toolbar + * + * @param w The toolbar window + * @param clicked_widget The widget which the player clicked just now + */ +static void UpdateRemoveWidgetStatus(Window *w, int clicked_widget) +{ + switch (clicked_widget) { + case RTW_REMOVE: + /* If it is the removal button that has been clicked, do nothing, + * as it is up to the other buttons to drive removal status */ + return; + break; + case RTW_ROAD_X: + case RTW_ROAD_Y: + case RTW_BUS_STATION: + case RTW_TRUCK_STATION: + /* Removal button is enabled only if the road/station + * button is still lowered. Once raised, it has to be disabled */ + SetWindowWidgetDisabledState(w, RTW_REMOVE, !IsWindowWidgetLowered(w, clicked_widget)); + break; + + default: + /* When any other buttons than road/station, raise and + * disable the removal button */ + DisableWindowWidget(w, RTW_REMOVE); + RaiseWindowWidget(w, RTW_REMOVE); + break; + } +} + static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) { switch (e->event) { case WE_CREATE: DisableWindowWidget(w, RTW_REMOVE); break; case WE_PAINT: - if (IsWindowWidgetLowered(w, RTW_ROAD_X) || IsWindowWidgetLowered(w, RTW_ROAD_Y) || IsWindowWidgetLowered(w, RTW_BUS_STATION) || IsWindowWidgetLowered(w, RTW_TRUCK_STATION)) { - EnableWindowWidget(w, RTW_REMOVE); - } - SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_ROAD), 6, 7, 8, WIDGET_LIST_END); + SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_ROAD), + RTW_DEPOT, + RTW_BUS_STATION, + RTW_TRUCK_STATION, + WIDGET_LIST_END); DrawWindowWidgets(w); break; - case WE_CLICK: { - if (e->we.click.widget >= 3) _build_road_button_proc[e->we.click.widget - 3](w); - } break; + case WE_CLICK: + if (e->we.click.widget >= RTW_ROAD_X) { + _remove_button_clicked = false; + _build_road_button_proc[e->we.click.widget - RTW_ROAD_X](w); + } + UpdateRemoveWidgetStatus(w, e->we.click.widget); + break; case WE_KEYPRESS: - switch (e->we.keypress.keycode) { - case '1': BuildRoadClick_NE(w); break; - case '2': BuildRoadClick_NW(w); break; - case '3': BuildRoadClick_Demolish(w); break; - case '4': BuildRoadClick_Depot(w); break; - case '5': BuildRoadClick_BusStation(w); break; - case '6': BuildRoadClick_TruckStation(w); break; - case 'B': BuildRoadClick_Bridge(w); break; - case 'T': BuildRoadClick_Tunnel(w); break; - case 'R': BuildRoadClick_Remove(w); break; - default: return; + for (uint8 i = 0; i != lengthof(_road_keycodes); i++) { + if (e->we.keypress.keycode == _road_keycodes[i]) { + e->we.keypress.cont = false; + _remove_button_clicked = false; + _build_road_button_proc[i](w); + UpdateRemoveWidgetStatus(w, i + RTW_ROAD_X); + break; + } } MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection - e->we.keypress.cont = false; break; case WE_PLACE_OBJ: @@ -368,20 +414,21 @@ } } +/** Widget definition of the build road toolbar */ static const Widget _build_road_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY -{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X +{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, // RTW_DEPOT +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, // RTW_BUS_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, // RTW_TRUCK_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE { WIDGETS_END}, }; @@ -393,21 +440,21 @@ BuildRoadToolbWndProc }; +/** Widget definition of the build tram toolbar */ static const Widget _build_tramway_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY -{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_TRAMWAY_NW, STR_180B_BUILD_TRAMWAY_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_TRAMWAY_NE, STR_180B_BUILD_TRAMWAY_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_TRAM_VEHICLE_DEPOT}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_PASSENGER_TRAM_STATION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_CARGO_TRAM_STATION}, - -{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_TRAMWAY_BRIDGE}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_TRAMWAY_TUNNEL}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_TRAMWAY_NW, STR_180B_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_X +{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_TRAMWAY_NE, STR_180B_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_Y +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_TRAM_VEHICLE_DEPOT}, // RTW_DEPOT +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_PASSENGER_TRAM_STATION}, // RTW_BUS_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_CARGO_TRAM_STATION}, // RTW_TRUCK_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_TRAMWAY_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_TRAMWAY_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, // RTW_REMOVE { WIDGETS_END}, }; @@ -429,20 +476,21 @@ if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w); } +/** Widget definition of the build road toolbar in the scenario editor */ static const Widget _build_road_scen_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_STICKYBOX, RESIZE_NONE, 7, 140, 151, 0, 13, 0x0, STR_STICKY_BUTTON}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 140, 151, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY -{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, -{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, -{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 107, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 108, 129, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, -{ WWT_IMGBTN, RESIZE_NONE, 7, 130, 151, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, +{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X +{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_DEPOT +{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_BUS_STATION +{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_TRUCK_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 107, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 108, 129, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 130, 151, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE { WIDGETS_END}, }; @@ -460,10 +508,21 @@ AllocateWindowDescFront(&_build_road_scen_desc, 0); } +/** Enum referring to the widgets of the build road depot window */ +enum BuildRoadDepotWidgets { + BRDW_CLOSEBOX = 0, + BRDW_CAPTION, + BRDW_BACKGROUND, + BRDW_DEPOT_NE, + BRDW_DEPOT_SE, + BRDW_DEPOT_SW, + BRDW_DEPOT_NW, +}; + static void BuildRoadDepotWndProc(Window *w, WindowEvent *e) { switch (e->event) { - case WE_CREATE: LowerWindowWidget(w, _road_depot_orientation + 3); break; + case WE_CREATE: LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE); break; case WE_PAINT: DrawWindowWidgets(w); @@ -474,17 +533,20 @@ DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype); break; - case WE_CLICK: { + case WE_CLICK: switch (e->we.click.widget) { - case 3: case 4: case 5: case 6: - RaiseWindowWidget(w, _road_depot_orientation + 3); - _road_depot_orientation = (DiagDirection)(e->we.click.widget - 3); - LowerWindowWidget(w, _road_depot_orientation + 3); - SndPlayFx(SND_15_BEEP); - SetWindowDirty(w); - break; + case BRDW_DEPOT_NW: + case BRDW_DEPOT_NE: + case BRDW_DEPOT_SW: + case BRDW_DEPOT_SE: + RaiseWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE); + _road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE); + LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE); + SndPlayFx(SND_15_BEEP); + SetWindowDirty(w); + break; } - } break; + break; case WE_MOUSELOOP: if (WP(w, def_d).close) DeleteWindow(w); @@ -496,25 +558,27 @@ } } +/** Widget definition of the build road depot window */ static const Widget _build_road_depot_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NE +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SE +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW { WIDGETS_END}, }; +/** Widget definition of the build tram depot window */ static const Widget _build_tram_depot_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRDW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1806_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRDW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 139, 14, 121, 0x0, STR_NULL}, // BRDW_BACKGROUND +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NE +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SE +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SW +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NW { WIDGETS_END}, }; @@ -539,6 +603,22 @@ AllocateWindowDesc(_cur_roadtype == ROADTYPE_ROAD ? &_build_road_depot_desc : &_build_tram_depot_desc); } +/** Enum referring to the widgets of the build road station window */ +enum BuildRoadStationWidgets { + BRSW_CLOSEBOX = 0, + BRSW_CAPTION, + BRSW_BACKGROUND, + BRSW_STATION_NE, + BRSW_STATION_SE, + BRSW_STATION_SW, + BRSW_STATION_NW, + BRSW_STATION_X, + BRSW_STATION_Y, + BRSW_LT_OFF, + BRSW_LT_ON, + BRSW_INFO, +}; + static void RoadStationPickerWndProc(Window *w, WindowEvent *e) { switch (e->event) { @@ -547,10 +627,15 @@ if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) { _road_station_picker_orientation = DIAGDIR_END; } - SetWindowWidgetsDisabledState(w, _cur_roadtype == ROADTYPE_TRAM, 3, 4, 5, 6, WIDGET_LIST_END); + SetWindowWidgetsDisabledState(w, _cur_roadtype == ROADTYPE_TRAM, + BRSW_STATION_NE, + BRSW_STATION_SE, + BRSW_STATION_SW, + BRSW_STATION_NW, + WIDGET_LIST_END); - LowerWindowWidget(w, _road_station_picker_orientation + 3); - LowerWindowWidget(w, _station_show_coverage + 9); + LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE); + LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF); break; case WE_PAINT: { @@ -583,20 +668,27 @@ case WE_CLICK: { switch (e->we.click.widget) { - case 3: case 4: case 5: case 6: case 7: case 8: - RaiseWindowWidget(w, _road_station_picker_orientation + 3); - _road_station_picker_orientation = (DiagDirection)(e->we.click.widget - 3); - LowerWindowWidget(w, _road_station_picker_orientation + 3); - SndPlayFx(SND_15_BEEP); - SetWindowDirty(w); - break; - case 9: case 10: - RaiseWindowWidget(w, _station_show_coverage + 9); - _station_show_coverage = (e->we.click.widget != 9); - LowerWindowWidget(w, _station_show_coverage + 9); - SndPlayFx(SND_15_BEEP); - SetWindowDirty(w); - break; + case BRSW_STATION_NE: + case BRSW_STATION_SE: + case BRSW_STATION_SW: + case BRSW_STATION_NW: + case BRSW_STATION_X: + case BRSW_STATION_Y: + RaiseWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE); + _road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE); + LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE); + SndPlayFx(SND_15_BEEP); + SetWindowDirty(w); + break; + + case BRSW_LT_OFF: + case BRSW_LT_ON: + RaiseWindowWidget(w, _station_show_coverage + BRSW_LT_OFF); + _station_show_coverage = (e->we.click.widget != BRSW_LT_OFF); + LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF); + SndPlayFx(SND_15_BEEP); + SetWindowDirty(w); + break; } } break; @@ -615,19 +707,22 @@ } } +/** Widget definition of the build raod station window */ static const Widget _rv_station_picker_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, -{ WWT_PANEL, RESIZE_NONE, 7, 0, 206, 14, 176, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_NULL}, -{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_NULL}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, -{ WWT_TEXTBTN, RESIZE_NONE, 14, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, -{ WWT_LABEL, RESIZE_NONE, 7, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, +{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 206, 0, 13, STR_NULL, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION +{ WWT_PANEL, RESIZE_NONE, 7, 0, 206, 14, 176, 0x0, STR_NULL}, // BRSW_BACKGROUND + +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NE +{ WWT_PANEL, RESIZE_NONE, 14, 71, 136, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SE +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_SW +{ WWT_PANEL, RESIZE_NONE, 14, 3, 68, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_NW +{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 17, 66, 0x0, STR_NULL}, // BRSW_STATION_X +{ WWT_PANEL, RESIZE_NONE, 14, 139, 204, 69, 118, 0x0, STR_NULL}, // BRSW_STATION_Y + +{ WWT_TEXTBTN, RESIZE_NONE, 14, 10, 69, 133, 144, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_LT_OFF +{ WWT_TEXTBTN, RESIZE_NONE, 14, 70, 129, 133, 144, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_LT_ON +{ WWT_LABEL, RESIZE_NONE, 7, 0, 139, 120, 133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL}, // BRSW_INFO { WIDGETS_END}, }; @@ -645,8 +740,8 @@ if (w == NULL) return; w->window_class = (rs == RoadStop::BUS) ? WC_BUS_STATION : WC_TRUCK_STATION; - w->widget[1].data = _road_type_infos[_cur_roadtype].picker_title[rs]; - for (uint i = 3; i < 9; i++) w->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; + w->widget[BRSW_CAPTION].data = _road_type_infos[_cur_roadtype].picker_title[rs]; + for (uint i = BRSW_STATION_NE; i < BRSW_LT_OFF; i++) w->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; } void InitializeRoadGui() diff -r 2c27f9be3fb9 -r f82a4facea8b src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/roadveh_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -360,6 +360,8 @@ if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR; + if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE); + SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES); if (!CheckRoadVehInDepotStopped(v)) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/saveload.cpp --- a/src/saveload.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/saveload.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -29,7 +29,7 @@ #include "strings.h" #include -extern const uint16 SAVEGAME_VERSION = 79; +extern const uint16 SAVEGAME_VERSION = 81; uint16 _sl_version; ///< the major savegame version identifier byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! diff -r 2c27f9be3fb9 -r f82a4facea8b src/settings.cpp --- a/src/settings.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/settings.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -41,6 +41,7 @@ #include "genworld.h" #include "date.h" #include "rail.h" +#include "train.h" #include "helpers.hpp" #include "news.h" #ifdef WITH_FREETYPE @@ -1129,6 +1130,16 @@ return 0; } +static int32 UpdateConsists(int32 p1) +{ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + /* Update the consist of all trains so the maximum speed is set correctly. */ + if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) TrainConsistChanged(v); + } + return 0; +} + /* Check service intervals of vehicles, p1 is value of % or day based servicing */ static int32 CheckInterval(int32 p1) { @@ -1257,6 +1268,7 @@ SDTG_BOOL("large_aa", S, 0, _freetype.large_aa, false, STR_NULL, NULL), #endif SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size, 4, 1, 64, 0, STR_NULL, NULL), + SDTG_VAR("player_face", SLE_UINT32, S, 0, _player_face, 0,0,0xFFFFFFFF,0, STR_NULL, NULL), SDTG_END() }; @@ -1297,8 +1309,8 @@ * XXX - To save file-space and since values are never bigger than about 10? only * save the first 16 bits in the savegame. Question is why the values are still int32 * and why not byte for example? */ - SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 17, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 0, 3), - SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 18, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 4, SL_MAX_VERSION), + SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, SLE_UINT16, 0, 0, GameOptions, diff, 17, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 0, 3), + SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, SLE_UINT16, 0, 0, GameOptions, diff, 18, 0, 0, 0, 0, NULL, STR_NULL, NULL, NULL, 4, SL_MAX_VERSION), SDT_VAR(GameOptions, diff_level, SLE_UINT8, 0, 0, 0, 0, 3, 0, STR_NULL, NULL), SDT_OMANY(GameOptions, currency, SLE_UINT8, N, 0, 0, CUSTOM_CURRENCY_ID, "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|ROL|RUR|SIT|SEK|YTL|SKK|BRR|custom", STR_NULL, NULL, NULL), SDT_OMANY(GameOptions, units, SLE_UINT8, N, 0, 1, 2, "imperial|metric|si", STR_NULL, NULL, NULL), @@ -1396,7 +1408,7 @@ SDT_VAR(Patches, servint_ships, SLE_UINT16, 0,D0, 360, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_SHIPS, InValidateDetailsWindow), SDT_VAR(Patches, servint_aircraft, SLE_UINT16, 0,D0, 100, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT, InValidateDetailsWindow), SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false, STR_CONFIG_PATCHES_NOSERVICE, NULL), - SDT_BOOL(Patches, wagon_speed_limits, 0, 0, true, STR_CONFIG_PATCHES_WAGONSPEEDLIMITS, NULL), + SDT_BOOL(Patches, wagon_speed_limits, 0, 0, true, STR_CONFIG_PATCHES_WAGONSPEEDLIMITS, UpdateConsists), SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_DISABLE_ELRAILS, SettingsDisableElrail), SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0, 0, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL), SDT_CONDBOOL(Patches, timetabling, 67, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_TIMETABLE_ALLOW, NULL), diff -r 2c27f9be3fb9 -r f82a4facea8b src/settings_gui.cpp --- a/src/settings_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/settings_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -399,7 +399,7 @@ * Q: disasters * R: area restructuring (0 = permissive, 2 = hostile) */ -static const int16 _default_game_diff[3][GAME_DIFFICULTY_NUM] = { /* +static const GDType _default_game_diff[3][GAME_DIFFICULTY_NUM] = { /* A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R*/ {2, 2, 1, 4, 300, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0}, ///< easy {4, 1, 1, 3, 150, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1}, ///< medium @@ -414,7 +414,7 @@ gm_opt->diff_level = mode; if (mode != 3) { // not custom for (i = 0; i != GAME_DIFFICULTY_NUM; i++) - ((int*)&gm_opt->diff)[i] = _default_game_diff[mode][i]; + ((GDType*)&gm_opt->diff)[i] = _default_game_diff[mode][i]; } } @@ -428,7 +428,7 @@ SetDifficultyLevel(_opt_newgame.diff_level, &_opt_newgame); } else { for (uint i = 0; i < GAME_DIFFICULTY_NUM; i++) { - int *diff = ((int*)&_opt_newgame.diff) + i; + GDType *diff = ((GDType*)&_opt_newgame.diff) + i; *diff = clamp(*diff, _game_setting_info[i].min, _game_setting_info[i].max); *diff -= *diff % _game_setting_info[i].step; } @@ -489,7 +489,7 @@ DrawStringCentered(20, y, STR_681A, 0); - value = _game_setting_info[i].str + ((int*)&_opt_mod_temp.diff)[i]; + value = _game_setting_info[i].str + ((GDType*)&_opt_mod_temp.diff)[i]; if (i == 4) value *= 1000; // XXX - handle currency option SetDParam(0, value); DrawString(30, y, STR_6805_MAXIMUM_NO_COMPETITORS + i, 0); @@ -531,7 +531,7 @@ _difficulty_timeout = 5; - val = ((int*)&_opt_mod_temp.diff)[btn]; + val = ((GDType*)&_opt_mod_temp.diff)[btn]; info = &_game_setting_info[btn]; // get information about the difficulty setting if (x >= 10) { @@ -546,7 +546,7 @@ } // save value in temporary variable - ((int*)&_opt_mod_temp.diff)[btn] = val; + ((GDType*)&_opt_mod_temp.diff)[btn] = val; RaiseWindowWidget(w, _opt_mod_temp.diff_level + 3); SetDifficultyLevel(3, &_opt_mod_temp); // set difficulty level to custom LowerWindowWidget(w, _opt_mod_temp.diff_level + 3); @@ -563,11 +563,11 @@ ShowHighscoreTable(_opt_mod_temp.diff_level, -1); break; case 10: { /* Save button - save changes */ - int btn, val; + GDType btn, val; for (btn = 0; btn != GAME_DIFFICULTY_NUM; btn++) { - val = ((int*)&_opt_mod_temp.diff)[btn]; + val = ((GDType*)&_opt_mod_temp.diff)[btn]; // if setting has changed, change it - if (val != ((int*)&_opt_ptr->diff)[btn]) + if (val != ((GDType*)&_opt_ptr->diff)[btn]) DoCommandP(0, btn, val, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); } DoCommandP(0, UINT_MAX, _opt_mod_temp.diff_level, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); diff -r 2c27f9be3fb9 -r f82a4facea8b src/ship_cmd.cpp --- a/src/ship_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/ship_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -911,6 +911,8 @@ if (v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR; + if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE); + SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES); if (!v->IsStoppedInDepot()) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/slope.h --- a/src/slope.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/slope.h Sat Oct 20 10:42:28 2007 +0000 @@ -48,9 +48,21 @@ CORNER_S = 1, CORNER_E = 2, CORNER_N = 3, + CORNER_END }; /** + * Rangecheck for Corner enumeration. + * + * @param corner A #Corner. + * @return true iff corner is in a valid range. + */ +static inline bool IsValidCorner(Corner corner) +{ + return IS_INT_INSIDE(corner, 0, CORNER_END); +} + +/** * Checks if a slope is steep. * * @param s The given #Slope. @@ -79,6 +91,17 @@ } /** + * Tests if a slope has a highest corner (i.e. one corner raised or a steep slope). + * + * @param s The #Slope. + * @return true iff the slope has a highest corner. + */ +static inline bool HasSlopeHighestCorner(Slope s) +{ + return IsSteepSlope(s) || (s == SLOPE_W) || (s == SLOPE_S) || (s == SLOPE_E) || (s == SLOPE_N); +} + +/** * Returns the highest corner of a slope (one corner raised or a steep slope). * * @pre The slope must be a slope with one corner raised or a steep slope. @@ -132,7 +155,7 @@ */ static inline Slope SlopeWithOneCornerRaised(Corner corner) { - assert(IS_INT_INSIDE(corner, 0, 4)); + assert(IsValidCorner(corner)); return (Slope)(1 << corner); } @@ -158,6 +181,8 @@ FOUNDATION_INCLINED_Y, ///< The tile has an along Y-axis inclined foundation. FOUNDATION_STEEP_LOWER, ///< The tile has a steep slope. The lowerst corner is raised by a foundation to allow building railroad on the lower halftile. FOUNDATION_STEEP_HIGHER, ///< The tile has a steep slope. Three corners are raised by a foundation to allow building railroad on the higher halftile. + + FOUNDATION_INVALID = 0xFF ///< Used inside "rail_cmd.cpp" to indicate invalid slope/track combination. }; /** diff -r 2c27f9be3fb9 -r f82a4facea8b src/station_cmd.cpp --- a/src/station_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/station_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -1128,7 +1128,7 @@ /* Check ownership of station */ Station *st = GetStationByTile(tile2); - if (_current_player != OWNER_WATER && (!CheckOwnership(st->owner) || !EnsureNoVehicle(tile2))) { + if (_current_player != OWNER_WATER && (!CheckOwnership(st->owner) || !EnsureNoVehicleOnGround(tile2))) { continue; } @@ -1191,7 +1191,7 @@ do { // for nonuniform stations, only remove tiles that are actually train station tiles if (st->TileBelongsToRailStation(tile)) { - if (!EnsureNoVehicle(tile)) + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; cost.AddCost(_price.remove_rail_station); if (flags & DC_EXEC) { @@ -1245,7 +1245,7 @@ VehicleFromPos(tile, &tile, UpdateTrainPowerProc); } - return CommandCost(_price.build_rail / 2); + return CommandCost(RailBuildCost(totype) / 2); } /** @@ -1425,7 +1425,7 @@ assert(cur_stop != NULL); - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (flags & DC_EXEC) { if (*primary_stop == cur_stop) { @@ -1769,7 +1769,7 @@ { SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - if (!IsClearWaterTile(tile) || tile == 0) return_cmd_error(STR_304B_SITE_UNSUITABLE); + if (!IsWaterTile(tile) || tile == 0) return_cmd_error(STR_304B_SITE_UNSUITABLE); if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); /* allocate and initialize new station */ @@ -1832,7 +1832,7 @@ TileIndex tile = st->dock_tile; if (CheckShipsOnBuoy(st)) return_cmd_error(STR_BUOY_IS_IN_USE); - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (flags & DC_EXEC) { st->dock_tile = 0; @@ -1980,8 +1980,8 @@ TileIndex tile1 = st->dock_tile; TileIndex tile2 = tile1 + TileOffsByDiagDir(GetDockDirection(tile1)); - if (!EnsureNoVehicle(tile1)) return CMD_ERROR; - if (!EnsureNoVehicle(tile2)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile1)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile2)) return CMD_ERROR; if (flags & DC_EXEC) { DoClearSquare(tile1); @@ -2088,7 +2088,7 @@ DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y); } - if (IsBuoyTile(ti->tile) && (ti->z != 0 || !IsTileOwner(ti->tile, OWNER_WATER))) DrawCanalWater(ti->tile); + if (IsCanalBuoyTile(ti->tile)) DrawCanalWater(ti->tile); const DrawTileSeqStruct *dtss; foreach_draw_tile_seq(dtss, t->seq) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/station_map.h --- a/src/station_map.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/station_map.h Sat Oct 20 10:42:28 2007 +0000 @@ -154,6 +154,15 @@ return IsTileType(t, MP_STATION) && IsBuoy(t); } +static inline bool IsCanalBuoyTile(TileIndex t) +{ + return IsBuoyTile(t) && !IsTileOwner(t, OWNER_WATER); +} + +static inline bool IsSeaBuoyTile(TileIndex t) +{ + return IsBuoyTile(t) && IsTileOwner(t, OWNER_WATER); +} static inline bool IsHangarTile(TileIndex t) { diff -r 2c27f9be3fb9 -r f82a4facea8b src/strgen/strgen.cpp --- a/src/strgen/strgen.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/strgen/strgen.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -1014,7 +1014,6 @@ FILE *out; int i; int next = -1; - int lastgrp; out = fopen("tmp.xxx", "w"); if (out == NULL) fatal("can't open tmp.xxx"); @@ -1023,8 +1022,6 @@ fprintf(out, "#ifndef TABLE_STRINGS_H\n"); fprintf(out, "#define TABLE_STRINGS_H\n"); - lastgrp = 0; - for (i = 0; i != lengthof(_strings); i++) { if (_strings[i] != NULL) { if (next != i) fprintf(out, "\n"); @@ -1033,6 +1030,8 @@ } } + fprintf(out, "\nstatic const StringID STR_LAST_STRINGID = 0x%X;\n", next - 1); + fprintf(out, "\nenum {\n" "\tLANGUAGE_PACK_IDENT = 0x474E414C, // Big Endian value for 'LANG' (LE is 0x 4C 41 4E 47)\n" diff -r 2c27f9be3fb9 -r f82a4facea8b src/table/sprites.h --- a/src/table/sprites.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/table/sprites.h Sat Oct 20 10:42:28 2007 +0000 @@ -538,14 +538,14 @@ /* Shores */ SPR_NO_SHORE = 0, //used for tileh which have no shore - SPR_SHORE_TILEH_4 = 4062, - SPR_SHORE_TILEH_1 = 4063, - SPR_SHORE_TILEH_2 = 4064, - SPR_SHORE_TILEH_8 = 4065, - SPR_SHORE_TILEH_6 = 4066, - SPR_SHORE_TILEH_12 = 4067, - SPR_SHORE_TILEH_3 = 4068, - SPR_SHORE_TILEH_9 = 4069, + SPR_SHORE_TILEH_4 = 4062, // SLOPE_E + SPR_SHORE_TILEH_1 = 4063, // SLOPE_W + SPR_SHORE_TILEH_2 = 4064, // SLOPE_S + SPR_SHORE_TILEH_8 = 4065, // SLOPE_N + SPR_SHORE_TILEH_6 = 4066, // SLOPE_SE + SPR_SHORE_TILEH_12 = 4067, // SLOPE_NE + SPR_SHORE_TILEH_3 = 4068, // SLOPE_SW + SPR_SHORE_TILEH_9 = 4069, // SLOPE_NW /* Water-related sprites */ SPR_SHIP_DEPOT_SE_FRONT = 4070, diff -r 2c27f9be3fb9 -r f82a4facea8b src/texteff.cpp --- a/src/texteff.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/texteff.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -25,7 +25,6 @@ MAX_TEXTMESSAGE_LENGTH = 200, INIT_NUM_TEXT_MESSAGES = 20, MAX_CHAT_MESSAGES = 10, - MAX_ANIMATED_TILES = 256, }; struct TextEffect { @@ -50,7 +49,6 @@ /* used for text effects */ static TextEffect *_text_effect_list = NULL; static uint16 _num_text_effects = INIT_NUM_TEXT_MESSAGES; -TileIndex _animated_tile_list[MAX_ANIMATED_TILES]; /* used for chat window */ static ChatMessage _chatmsg_list[MAX_CHAT_MESSAGES]; @@ -422,62 +420,127 @@ } } +/** The table/list with animated tiles. */ +TileIndex *_animated_tile_list = NULL; +/** The number of animated tiles in the current state. */ +uint _animated_tile_count = 0; +/** The number of slots for animated tiles allocated currently. */ +static uint _animated_tile_allocated = 0; + +/** + * Removes the given tile from the animated tile table. + * @param tile the tile to remove + */ void DeleteAnimatedTile(TileIndex tile) { - TileIndex *ti; - - for (ti = _animated_tile_list; ti != endof(_animated_tile_list); ti++) { + for (TileIndex *ti = _animated_tile_list; ti < _animated_tile_list + _animated_tile_count; ti++) { if (tile == *ti) { - /* remove the hole */ - memmove(ti, ti + 1, (lastof(_animated_tile_list) - ti) * sizeof(*ti)); - /* and clear last item */ - *lastof(_animated_tile_list) = 0; + /* Remove the hole + * The order of the remaining elements must stay the same, otherwise the animation loop + * may miss a tile; that's why we must use memmove instead of just moving the last element. + */ + memmove(ti, ti + 1, (_animated_tile_list + _animated_tile_count - (ti + 1)) * sizeof(*ti)); + _animated_tile_count--; MarkTileDirtyByTile(tile); return; } } } -bool AddAnimatedTile(TileIndex tile) +/** + * Add the given tile to the animated tile table (if it does not exist + * on that table yet). Also increases the size of the table if necessary. + * @param tile the tile to make animated + */ +void AddAnimatedTile(TileIndex tile) { - TileIndex *ti; + MarkTileDirtyByTile(tile); - for (ti = _animated_tile_list; ti != endof(_animated_tile_list); ti++) { - if (tile == *ti || *ti == 0) { - *ti = tile; - MarkTileDirtyByTile(tile); - return true; - } + for (const TileIndex *ti = _animated_tile_list; ti < _animated_tile_list + _animated_tile_count; ti++) { + if (tile == *ti) return; } - return false; + /* Table not large enough, so make it larger */ + if (_animated_tile_count == _animated_tile_allocated) { + _animated_tile_allocated *= 2; + _animated_tile_list = ReallocT(_animated_tile_list, _animated_tile_allocated); + } + + _animated_tile_list[_animated_tile_count] = tile; + _animated_tile_count++; } +/** + * Animate all tiles in the animated tile list, i.e.\ call AnimateTile on them. + */ void AnimateAnimatedTiles() { - const TileIndex* ti; - - for (ti = _animated_tile_list; ti != endof(_animated_tile_list) && *ti != 0; ti++) { - AnimateTile(*ti); + const TileIndex *ti = _animated_tile_list; + while (ti < _animated_tile_list + _animated_tile_count) { + const TileIndex curr = *ti; + AnimateTile(curr); + /* During the AnimateTile call, DeleteAnimatedTile could have been called, + * deleting an element we've already processed and pushing the rest one + * slot to the left. We can detect this by checking whether the index + * in the current slot has changed - if it has, an element has been deleted, + * and we should process the current slot again instead of going forward. + * NOTE: this will still break if more than one animated tile is being + * deleted during the same AnimateTile call, but no code seems to + * be doing this anyway. + */ + if (*ti == curr) ++ti; } } +/** + * Initialize all animated tile variables to some known begin point + */ void InitializeAnimatedTiles() { - memset(_animated_tile_list, 0, sizeof(_animated_tile_list)); + _animated_tile_list = ReallocT(_animated_tile_list, 256); + _animated_tile_count = 0; + _animated_tile_allocated = 256; } -static void SaveLoad_ANIT() +/** + * Save the ANIT chunk. + */ +static void Save_ANIT() { - /* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */ - if (CheckSavegameVersion(6)) { - SlArray(_animated_tile_list, lengthof(_animated_tile_list), SLE_FILE_U16 | SLE_VAR_U32); - } else { - SlArray(_animated_tile_list, lengthof(_animated_tile_list), SLE_UINT32); - } + SlSetLength(_animated_tile_count * sizeof(*_animated_tile_list)); + SlArray(_animated_tile_list, _animated_tile_count, SLE_UINT32); } +/** + * Load the ANIT chunk; the chunk containing the animated tiles. + */ +static void Load_ANIT() +{ + /* Before version 80 we did NOT have a variable length animated tile table */ + if (CheckSavegameVersion(80)) { + /* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */ + SlArray(_animated_tile_list, 256, CheckSavegameVersion(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32); + for (_animated_tile_count = 0; _animated_tile_count < 256; _animated_tile_count++) { + if (_animated_tile_list[_animated_tile_count] == 0) break; + } + return; + } + + _animated_tile_count = SlGetFieldLength() / sizeof(*_animated_tile_list); + + /* Determine a nice rounded size for the amount of allocated tiles */ + _animated_tile_allocated = 256; + while (_animated_tile_allocated < _animated_tile_count) _animated_tile_allocated *= 2; + + _animated_tile_list = ReallocT(_animated_tile_list, _animated_tile_allocated); + SlArray(_animated_tile_list, _animated_tile_count, SLE_UINT32); +} + +/** + * "Definition" imported by the saveload code to be able to load and save + * the animated tile table. + */ extern const ChunkHandler _animated_tile_chunk_handlers[] = { - { 'ANIT', SaveLoad_ANIT, SaveLoad_ANIT, CH_RIFF | CH_LAST}, + { 'ANIT', Save_ANIT, Load_ANIT, CH_RIFF | CH_LAST}, }; diff -r 2c27f9be3fb9 -r f82a4facea8b src/town_cmd.cpp --- a/src/town_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/town_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -42,6 +42,7 @@ #include "newgrf_townname.h" #include "misc/autoptr.hpp" #include "autoslope.h" +#include "waypoint.h" /* Initialize the town-pool */ DEFINE_OLD_POOL_GENERIC(Town, Town) @@ -932,7 +933,7 @@ return false; } bridge_tile = TILE_MASK(bridge_tile + TileOffsByDiagDir(bridge_dir)); - } while (IsClearWaterTile(bridge_tile)); + } while (IsWaterTile(bridge_tile)); /* no water tiles in between? */ if (bridge_length == 1) return false; @@ -1071,7 +1072,7 @@ TileIndex house_tile = TileAddByDiagDir(tile, target_dir); // position of a possible house /* Don't walk into water. */ - if (IsClearWaterTile(house_tile)) return; + if (IsWaterTile(house_tile)) return; switch (_patches.town_layout) { default: NOT_REACHED(); @@ -1120,7 +1121,7 @@ } /* Return if a water tile */ - if (IsClearWaterTile(tile)) return; + if (IsWaterTile(tile)) return; /* Make the roads look nicer */ rcmd = CleanUpRoadBits(tile, rcmd); @@ -1706,7 +1707,10 @@ hs = GetHouseSpecs(house); if (_loaded_newgrf_features.has_newhouses) { - if (hs->override != 0) hs = GetHouseSpecs(hs->override); + if (hs->override != 0) { + house = hs->override; + hs = GetHouseSpecs(house); + } if ((hs->extra_flags & BUILDING_IS_HISTORICAL) && !_generating_world) continue; @@ -1899,6 +1903,7 @@ UpdateTownVirtCoord(t); _town_sort_dirty = true; UpdateAllStationVirtCoord(); + UpdateAllWaypointSigns(); MarkWholeScreenDirty(); } else { DeleteName(str); diff -r 2c27f9be3fb9 -r f82a4facea8b src/train_cmd.cpp --- a/src/train_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/train_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -534,7 +534,8 @@ Vehicle *w; FOR_ALL_VEHICLES(w) { if (w->type == VEH_TRAIN && w->tile == tile && - IsFreeWagon(w) && w->engine_type == engine) { + IsFreeWagon(w) && w->engine_type == engine && + !HASBITS(w->vehstatus, VS_CRASHED)) { /// do not connect new wagon with crashed/flooded consists u = GetLastVehicleInChain(w); break; } @@ -855,7 +856,7 @@ TileIndex tile = src->tile; FOR_ALL_VEHICLES(dst) { - if (dst->type == VEH_TRAIN && IsFreeWagon(dst) && dst->tile == tile) { + if (dst->type == VEH_TRAIN && IsFreeWagon(dst) && dst->tile == tile && !HASBITS(dst->vehstatus, VS_CRASHED)) { /* check so all vehicles in the line have the same engine. */ Vehicle *v = dst; @@ -926,6 +927,9 @@ if (src->type != VEH_TRAIN || !CheckOwnership(src->owner)) return CMD_ERROR; + /* Do not allow moving crashed vehicles inside the depot, it is likely to cause asserts later */ + if (HASBITS(src->vehstatus, VS_CRASHED)) return CMD_ERROR; + /* if nothing is selected as destination, try and find a matching vehicle to drag to. */ Vehicle *dst; if (d == INVALID_VEHICLE) { @@ -934,6 +938,9 @@ if (!IsValidVehicleID(d)) return CMD_ERROR; dst = GetVehicle(d); if (dst->type != VEH_TRAIN || !CheckOwnership(dst->owner)) return CMD_ERROR; + + /* Do not allow appending to crashed vehicles, too */ + if (HASBITS(dst->vehstatus, VS_CRASHED)) return CMD_ERROR; } /* if an articulated part is being handled, deal with its parent vehicle */ @@ -1217,6 +1224,8 @@ if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR; + if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE); + SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES); while (IsArticulatedPart(v)) v = v->Previous(); @@ -3346,8 +3355,8 @@ if (this->type == VEH_TRAIN && IsFrontEngine(this)) TrainLocoHandler(this, true); } else if (IsFreeWagon(this) && HASBITS(this->vehstatus, VS_CRASHED)) { - /* Delete flooded standalone wagon */ - if (++this->u.rail.crash_anim_pos >= 4400) delete this; + /* Delete flooded standalone wagon chain */ + if (++this->u.rail.crash_anim_pos >= 4400) DeleteVehicleChain(this); } } diff -r 2c27f9be3fb9 -r f82a4facea8b src/tree_cmd.cpp --- a/src/tree_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/tree_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -85,7 +85,7 @@ SetTreeGroundDensity(tile, TREE_GROUND_SNOW_DESERT, 3); SetTreeCounter(tile, (TreeGround)GB(r, 24, 3)); } else { - SetTreeGroundDensity(tile, (TreeGround)GB(r, 28, 1), 0); + SetTreeGroundDensity(tile, (TreeGround)GB(r, 28, 1), 3); SetTreeCounter(tile, (TreeGround)GB(r, 24, 4)); } } @@ -346,9 +346,10 @@ growth = _game_mode == GM_EDITOR ? 3 : 0; switch (GetClearGround(tile)) { - case CLEAR_ROUGH: MakeTree(tile, treetype, 0, growth, TREE_GROUND_ROUGH, 0); break; - case CLEAR_SNOW: MakeTree(tile, treetype, 0, growth, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break; - default: MakeTree(tile, treetype, 0, growth, TREE_GROUND_GRASS, 0); break; + case CLEAR_ROUGH: MakeTree(tile, treetype, 0, growth, TREE_GROUND_ROUGH, 3); break; + case CLEAR_SNOW: + case CLEAR_DESERT: MakeTree(tile, treetype, 0, growth, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break; + default: MakeTree(tile, treetype, 0, growth, TREE_GROUND_GRASS, GetClearDensity(tile)); break; } MarkTileDirtyByTile(tile); @@ -385,7 +386,7 @@ byte z; switch (GetTreeGround(ti->tile)) { - case TREE_GROUND_GRASS: DrawClearLandTile(ti, 3); break; + case TREE_GROUND_GRASS: DrawClearLandTile(ti, GetTreeDensity(ti->tile)); break; case TREE_GROUND_ROUGH: DrawHillyLandTile(ti); break; default: DrawGroundSprite(_tree_sprites_1[GetTreeDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); break; } @@ -510,10 +511,8 @@ if (IS_INT_INSIDE(tt, TREE_RAINFOREST, TREE_CACTUS)) { td->str = STR_280F_RAINFOREST; - } else if (tt == TREE_CACTUS) { - td->str = STR_2810_CACTUS_PLANTS; } else { - td->str = STR_280E_TREES; + td->str = tt == TREE_CACTUS ? STR_2810_CACTUS_PLANTS : STR_280E_TREES; } td->owner = GetTileOwner(tile); @@ -557,7 +556,7 @@ if (k < 0) { if (GetTreeGround(tile) != TREE_GROUND_SNOW_DESERT) return; - SetTreeGroundDensity(tile, TREE_GROUND_GRASS, 0); + SetTreeGroundDensity(tile, TREE_GROUND_GRASS, 3); } else { uint density = min((uint)k / TILE_HEIGHT, 3); @@ -586,6 +585,16 @@ TileLoopClearHelper(tile); + uint treeCounter = GetTreeCounter(tile); + + /* Handle growth of grass at every 8th processings, like it's done for grass */ + if ((treeCounter & 7) == 7 && GetTreeGround(tile) == TREE_GROUND_GRASS) { + uint density = GetTreeDensity(tile); + if (density < 3) { + SetTreeGroundDensity(tile, TREE_GROUND_GRASS, density + 1); + MarkTileDirtyByTile(tile); + } + } if (GetTreeCounter(tile) < 15) { AddTreeCounter(tile, 1); return; @@ -622,11 +631,12 @@ switch (GetClearGround(tile)) { case CLEAR_GRASS: if (GetClearDensity(tile) != 3) return; - MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 0); + MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 3); break; - case CLEAR_ROUGH: MakeTree(tile, treetype, 0, 0, TREE_GROUND_ROUGH, 0); break; - case CLEAR_SNOW: MakeTree(tile, treetype, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break; + case CLEAR_ROUGH: MakeTree(tile, treetype, 0, 0, TREE_GROUND_ROUGH, 3); break; + case CLEAR_DESERT: return; // Cacti don't spread + case CLEAR_SNOW: MakeTree(tile, treetype, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break; default: return; } break; @@ -646,9 +656,11 @@ } else { /* just one tree, change type into MP_CLEAR */ switch (GetTreeGround(tile)) { - case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, 3); break; + case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, GetTreeDensity(tile)); break; case TREE_GROUND_ROUGH: MakeClear(tile, CLEAR_ROUGH, 3); break; - default: MakeClear(tile, CLEAR_SNOW, GetTreeDensity(tile)); break; + default: // snow or desert + MakeClear(tile, _opt.landscape == LT_TROPIC ? CLEAR_DESERT : CLEAR_SNOW, GetTreeDensity(tile)); + break; } } break; @@ -675,7 +687,7 @@ !IsBridgeAbove(tile) && (ct = GetClearGround(tile), ct == CLEAR_GRASS || ct == CLEAR_ROUGH) && (tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TREE_INVALID) { - MakeTree(tile, tree, 0, 0, ct == CLEAR_ROUGH ? TREE_GROUND_ROUGH : TREE_GROUND_GRASS, 0); + MakeTree(tile, tree, 0, 0, ct == CLEAR_ROUGH ? TREE_GROUND_ROUGH : TREE_GROUND_GRASS, GetClearDensity(tile)); } /* byte underflow */ @@ -689,8 +701,8 @@ (ct = GetClearGround(tile), ct == CLEAR_GRASS || ct == CLEAR_ROUGH || ct == CLEAR_SNOW) && (tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TREE_INVALID) { switch (ct) { - case CLEAR_GRASS: MakeTree(tile, tree, 0, 0, TREE_GROUND_GRASS, 0); break; - case CLEAR_ROUGH: MakeTree(tile, tree, 0, 0, TREE_GROUND_ROUGH, 0); break; + case CLEAR_GRASS: MakeTree(tile, tree, 0, 0, TREE_GROUND_GRASS, GetClearDensity(tile)); break; + case CLEAR_ROUGH: MakeTree(tile, tree, 0, 0, TREE_GROUND_ROUGH, 3); break; default: MakeTree(tile, tree, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break; } } diff -r 2c27f9be3fb9 -r f82a4facea8b src/tunnelbridge_cmd.cpp --- a/src/tunnelbridge_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/tunnelbridge_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -243,7 +243,7 @@ /* retrieve landscape height and ensure it's on land */ tile_start = TileXY(x, y); tile_end = TileXY(sx, sy); - if (IsClearWaterTile(tile_start) || IsClearWaterTile(tile_end)) { + if (IsWaterTile(tile_start) || IsWaterTile(tile_end)) { return_cmd_error(STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH); } @@ -375,7 +375,7 @@ switch (GetTileType(tile)) { case MP_WATER: - if (!EnsureNoVehicle(tile)) return_cmd_error(STR_980E_SHIP_IN_THE_WAY); + if (!EnsureNoVehicleOnGround(tile)) return_cmd_error(STR_980E_SHIP_IN_THE_WAY); if (!IsWater(tile) && !IsCoast(tile)) goto not_valid_below; break; @@ -772,7 +772,7 @@ VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc); } - return CommandCost((length + 1) * (_price.build_rail >> 1)); + return CommandCost((length + 1) * (RailBuildCost(totype) / 2)); } else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) { TileIndex endtile = GetOtherBridgeEnd(tile); byte bridge_height = GetBridgeHeight(tile); @@ -804,48 +804,66 @@ } } - return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail >> 1)); + return CommandCost((DistanceManhattan(tile, endtile) + 1) * (RailBuildCost(totype) / 2)); } else { return CMD_ERROR; } } -static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo* ti, Axis axis, uint type, int x, int y, int z) +/** + * Draws the pillars under high bridges. + * + * @param psid Image and palette of a bridge pillar. + * @param ti #TileInfo of current bridge-middle-tile. + * @param axis Orientation of bridge. + * @param type Bridge type. + * @param x Sprite X position of front pillar. + * @param y Sprite Y position of front pillar. + * @param z_bridge Absolute height of bridge bottom. + */ +static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo* ti, Axis axis, uint type, int x, int y, int z_bridge) { SpriteID image = psid->sprite; if (image != 0) { bool drawfarpillar = !HASBIT(GetBridgeFlags(type), 0); - int back_height, front_height; - int i = z; - const byte *p; - - static const byte _tileh_bits[4][8] = { - { 2, 1, 8, 4, 16, 2, 0, 9 }, - { 1, 8, 4, 2, 2, 16, 9, 0 }, - { 4, 8, 1, 2, 16, 2, 0, 9 }, - { 2, 4, 8, 1, 2, 16, 9, 0 } - }; - p = _tileh_bits[(image & 1) * 2 + (axis == AXIS_X ? 0 : 1)]; - front_height = ti->z + (ti->tileh & p[0] ? TILE_HEIGHT : 0); - back_height = ti->z + (ti->tileh & p[1] ? TILE_HEIGHT : 0); + /* "side" specifies the side the pillars stand on. + * The length of the pillars is then set to the height of the bridge over the corners of this edge. + * + * axis==AXIS_X axis==AXIS_Y + * side==false SW NW + * side==true NE SE + * + * I have no clue, why this was done this way. + */ + bool side = HASBIT(image, 0); - if (IsSteepSlope(ti->tileh)) { - if (!(ti->tileh & p[2])) front_height += TILE_HEIGHT; - if (!(ti->tileh & p[3])) back_height += TILE_HEIGHT; - } + /* "dir" means the edge the pillars stand on */ + DiagDirection dir = AxisToDiagDir(axis); + if (side != (axis == AXIS_Y)) dir = ReverseDiagDir(dir); - for (; z >= front_height || z >= back_height; z -= TILE_HEIGHT) { - /* HACK set height of the BB of pillars to 1, because the origin of the - * sprites is at the top - */ - if (z >= front_height) { // front facing pillar - AddSortableSpriteToDraw(image, psid->pal, x, y, p[4], p[5], BB_HEIGHT_UNDER_BRIDGE - 5, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5); + /* Determine ground height under pillars */ + int front_height = ti->z; + int back_height = ti->z; + GetSlopeZOnEdge(ti->tileh, dir, &front_height, &back_height); + + /* x and y size of bounding-box of pillars */ + int w = (axis == AXIS_X ? 16 : 2); + int h = (axis == AXIS_X ? 2 : 16); + /* sprite position of back facing pillar */ + int x_back = x - (axis == AXIS_X ? 0 : 9); + int y_back = y - (axis == AXIS_X ? 9 : 0); + + for (int cur_z = z_bridge; cur_z >= front_height || cur_z >= back_height; cur_z -= TILE_HEIGHT) { + /* Draw front facing pillar */ + if (cur_z >= front_height) { + AddSortableSpriteToDraw(image, psid->pal, x, y, w, h, BB_HEIGHT_UNDER_BRIDGE - 5, cur_z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5); } - if (drawfarpillar && z >= back_height && z < i - TILE_HEIGHT) { // back facing pillar - AddSortableSpriteToDraw(image, psid->pal, x - p[6], y - p[7], p[4], p[5], BB_HEIGHT_UNDER_BRIDGE - 5, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5); + /* Draw back facing pillar, but not the highest part directly under the bridge-floor */ + if (drawfarpillar && cur_z >= back_height && cur_z < z_bridge - TILE_HEIGHT) { + AddSortableSpriteToDraw(image, psid->pal, x_back, y_back, w, h, BB_HEIGHT_UNDER_BRIDGE - 5, cur_z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5); } } } @@ -926,7 +944,7 @@ { 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // SW { 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // NW }; - static const int *BB_data = _tunnel_BB[GetTunnelDirection(ti->tile)]; + const int *BB_data = _tunnel_BB[GetTunnelDirection(ti->tile)]; bool catenary = false; diff -r 2c27f9be3fb9 -r f82a4facea8b src/variables.h --- a/src/variables.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/variables.h Sat Oct 20 10:42:28 2007 +0000 @@ -297,6 +297,8 @@ VARDEF bool _rightclick_emulate; +VARDEF PlayerFace _player_face; ///< for player face storage in openttd.cfg + /* IN/OUT parameters to commands */ VARDEF byte _yearly_expenses_type; VARDEF TileIndex _terraform_err_tile; diff -r 2c27f9be3fb9 -r f82a4facea8b src/vehicle.cpp --- a/src/vehicle.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/vehicle.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -117,25 +117,11 @@ } } -static void *EnsureNoVehicleProc(Vehicle *v, void *data) -{ - if (v->tile != *(const TileIndex*)data || v->type == VEH_DISASTER) - return NULL; - - _error_message = VehicleInTheWayErrMsg(v); - return v; -} - -bool EnsureNoVehicle(TileIndex tile) -{ - return VehicleFromPos(tile, &tile, EnsureNoVehicleProc) == NULL; -} - static void *EnsureNoVehicleProcZ(Vehicle *v, void *data) { const TileInfo *ti = (const TileInfo*)data; - if (v->tile != ti->tile || v->type == VEH_DISASTER) return NULL; + if (v->tile != ti->tile || v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return NULL; if (v->z_pos > ti->z) return NULL; _error_message = VehicleInTheWayErrMsg(v); @@ -564,13 +550,10 @@ /** * Deletes all vehicles in a chain. * @param v The first vehicle in the chain. - * - * @warning This function is not valid for any vehicle containing articulated - * parts. */ void DeleteVehicleChain(Vehicle *v) { - assert(v->type != VEH_TRAIN && v->type != VEH_ROAD); + assert(v->First() == v); do { Vehicle *u = v; diff -r 2c27f9be3fb9 -r f82a4facea8b src/vehicle_gui.cpp --- a/src/vehicle_gui.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/vehicle_gui.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -2086,9 +2086,16 @@ DoCommandP(v->tile, v->index, 0, NULL, _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]); break; - case VVW_WIDGET_CENTER_MAIN_VIEH: /* center main view */ - ScrollMainWindowTo(v->x_pos, v->y_pos); - break; + case VVW_WIDGET_CENTER_MAIN_VIEH: {/* center main view */ + const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0); + /* code to allow the main window to 'follow' the vehicle if the ctrl key is pressed */ + if (_ctrl_pressed && mainwindow->viewport->zoom == ZOOM_LVL_NORMAL) { + WP(mainwindow, vp_d).follow_vehicle = v->index; + } else { + ScrollMainWindowTo(v->x_pos, v->y_pos); + } + } break; + case VVW_WIDGET_GOTO_DEPOT: /* goto hangar */ DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL, _vehicle_command_translation_table[VCT_CMD_GOTO_DEPOT][v->type]); diff -r 2c27f9be3fb9 -r f82a4facea8b src/viewport.cpp --- a/src/viewport.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/viewport.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -36,9 +36,6 @@ static uint32 _active_viewports; ///< bitmasked variable where each bit signifies if a viewport is in use or not assert_compile(lengthof(_viewports) < sizeof(_active_viewports) * 8); -static bool _added_tile_sprite; -static bool _offset_ground_sprites; - /* The in-game coordiante system looks like this * * * * ^ Z * @@ -128,7 +125,9 @@ byte combine_sprites; - int offs_x, offs_y; // used when drawing ground sprites relative + ParentSpriteToDraw *foundation; ///< Foundation sprite. + ChildScreenSpriteToDraw **last_foundation_child; ///< Tail of ChildSprite list of active foundation. + Point foundation_offset; ///< Pixeloffset of ground sprites on the foundation. }; static ViewportDrawer *_cur_vd; @@ -469,6 +468,33 @@ } /** + * Adds a child sprite to the active foundation. + * + * The pixel offset of the sprite relative to the ParentSprite is the sum of the offset passed to OffsetGroundSprite() and extra_offs_?. + * + * @param image the image to draw. + * @param pal the provided palette. + * @param sub Only draw a part of the sprite. + * @param extra_offs_x Pixel X offset for the sprite position. + * @param extra_offs_y Pixel Y offset for the sprite position. + */ +static void AddChildSpriteToFoundation(SpriteID image, SpriteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y) +{ + ViewportDrawer *vd = _cur_vd; + assert(vd->foundation != NULL); + Point offs = vd->foundation_offset; + + /* Change the active ChildSprite list to the one of the foundation */ + ChildScreenSpriteToDraw **old_child = vd->last_child; + vd->last_child = vd->last_foundation_child; + + AddChildSpriteScreen(image, pal, offs.x + extra_offs_x, offs.y + extra_offs_y, false, sub); + + /* Switch back to last ChildSprite list */ + vd->last_child = old_child; +} + +/** * Draws a ground sprite for the current tile. * If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite. * @@ -478,21 +504,33 @@ */ void DrawGroundSprite(SpriteID image, SpriteID pal, const SubSprite *sub) { - if (_offset_ground_sprites) { - /* offset ground sprite because of foundation? */ - AddChildSpriteScreen(image, pal, _cur_vd->offs_x, _cur_vd->offs_y, false, sub); + ViewportDrawer *vd = _cur_vd; + if (vd->foundation != NULL) { + AddChildSpriteToFoundation(image, pal, sub, 0, 0); } else { - _added_tile_sprite = true; DrawGroundSpriteAt(image, pal, _cur_ti->x, _cur_ti->y, _cur_ti->z, sub); } } +/** + * Called when a foundation has been drawn for the current tile. + * Successive ground sprites for the current tile will be drawn as child sprites of the "foundation"-ParentSprite, not as TileSprites. + * + * @param x sprite x-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite. + * @param y sprite y-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite. + */ void OffsetGroundSprite(int x, int y) { - _cur_vd->offs_x = x; - _cur_vd->offs_y = y; - _offset_ground_sprites = true; + ViewportDrawer *vd = _cur_vd; + assert(vd->foundation == NULL); + + /* vd->last_child == NULL if foundation sprite was clipped by the viewport bounds */ + if (vd->last_child != NULL) vd->foundation = vd->parent_list[-1]; + + vd->foundation_offset.x = x; + vd->foundation_offset.y = y; + vd->last_foundation_child = vd->last_child; } /** @@ -683,7 +721,10 @@ vd->spritelist_mem += sizeof(ChildScreenSpriteToDraw); + /* Append the sprite to the active ChildSprite list. + * If the active ParentSprite is a foundation, update last_foundation_child as well. */ *vd->last_child = cs; + if (vd->last_foundation_child == vd->last_child) vd->last_foundation_child = &cs->next; vd->last_child = &cs->next; cs->image = image; @@ -723,12 +764,25 @@ } -static void DrawSelectionSprite(SpriteID image, SpriteID pal, const TileInfo *ti) +/** + * Draws sprites between ground sprite and everything above. + * + * The sprite is either drawn as TileSprite or as ChildSprite of the active foundation. + * + * @param image the image to draw. + * @param pal the provided palette. + * @param ti TileInfo Tile that is being drawn + * @param z_offset Z offset relative to the groundsprite. Only used for the sprite position, not for sprite sorting. + */ +static void DrawSelectionSprite(SpriteID image, SpriteID pal, const TileInfo *ti, int z_offset) { - if (_added_tile_sprite && !(_thd.drawstyle & HT_LINE)) { // draw on real ground - DrawGroundSpriteAt(image, pal, ti->x, ti->y, ti->z + 7); - } else { // draw on top of foundation - AddSortableSpriteToDraw(image, pal, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); + /* FIXME: This is not totally valid for some autorail highlights, that extent over the edges of the tile. */ + if (_cur_vd->foundation == NULL) { + /* draw on real ground */ + DrawGroundSpriteAt(image, pal, ti->x, ti->y, ti->z + z_offset); + } else { + /* draw on top of foundation */ + AddChildSpriteToFoundation(image, pal, NULL, 0, -z_offset); } } @@ -740,7 +794,7 @@ */ static void DrawTileSelectionRect(const TileInfo *ti, SpriteID pal) { - DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], pal, ti); + DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], pal, ti, 7); } static bool IsPartOfAutoLine(int px, int py) @@ -796,7 +850,7 @@ pal = PALETTE_SEL_TILE_RED; } - DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti); + DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti, 7); } /** @@ -821,12 +875,12 @@ DrawTileSelectionRect(ti, _thd.make_square_red ? PALETTE_SEL_TILE_RED : PAL_NONE); } else if (_thd.drawstyle & HT_POINT) { /* Figure out the Z coordinate for the single dot. */ - byte z = ti->z; + byte z = 0; if (ti->tileh & SLOPE_N) { z += TILE_HEIGHT; if (ti->tileh == SLOPE_STEEP_N) z += TILE_HEIGHT; } - DrawGroundSpriteAt(_cur_dpi->zoom <= ZOOM_LVL_DETAIL ? SPR_DOT : SPR_DOT_SMALL, PAL_NONE, ti->x, ti->y, z); + DrawSelectionSprite(_cur_dpi->zoom <= ZOOM_LVL_DETAIL ? SPR_DOT : SPR_DOT_SMALL, PAL_NONE, ti, z); } else if (_thd.drawstyle & HT_RAIL /*&& _thd.place_mode == VHM_RAIL*/) { /* autorail highlight piece under cursor */ uint type = _thd.drawstyle & 0xF; @@ -913,8 +967,8 @@ y_cur += 0x10; x_cur -= 0x10; - _added_tile_sprite = false; - _offset_ground_sprites = false; + vd->foundation = NULL; + vd->last_foundation_child = NULL; _tile_type_procs[tt]->draw_tile_proc(&ti); DrawTileSelection(&ti); diff -r 2c27f9be3fb9 -r f82a4facea8b src/water_cmd.cpp --- a/src/water_cmd.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/water_cmd.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -31,20 +31,21 @@ #include "newgrf_canal.h" #include "misc/autoptr.hpp" +/** Array for the shore sprites */ static const SpriteID _water_shore_sprites[] = { 0, - SPR_SHORE_TILEH_1, - SPR_SHORE_TILEH_2, - SPR_SHORE_TILEH_3, - SPR_SHORE_TILEH_4, + SPR_SHORE_TILEH_1, // SLOPE_W + SPR_SHORE_TILEH_2, // SLOPE_S + SPR_SHORE_TILEH_3, // SLOPE_SW + SPR_SHORE_TILEH_4, // SLOPE_E 0, - SPR_SHORE_TILEH_6, + SPR_SHORE_TILEH_6, // SLOPE_SE 0, - SPR_SHORE_TILEH_8, - SPR_SHORE_TILEH_9, + SPR_SHORE_TILEH_8, // SLOPE_N + SPR_SHORE_TILEH_9, // SLOPE_NW 0, 0, - SPR_SHORE_TILEH_12, + SPR_SHORE_TILEH_12, // SLOPE_NE 0, 0 }; @@ -71,7 +72,7 @@ tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); - if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2)) + if (!IsWaterTile(tile) || !IsWaterTile(tile2)) return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER); if (IsBridgeAbove(tile) || IsBridgeAbove(tile2)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); @@ -104,11 +105,11 @@ if (!IsShipDepot(tile)) return CMD_ERROR; if (!CheckTileOwnership(tile)) return CMD_ERROR; - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; tile2 = GetOtherShipDepotTile(tile); - if (!EnsureNoVehicle(tile2)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile2)) return CMD_ERROR; if (flags & DC_EXEC) { /* Kill the depot, which is registered at the northernmost tile. Use that one */ @@ -171,7 +172,7 @@ if (!CheckTileOwnership(tile) && GetTileOwner(tile) != OWNER_NONE) return CMD_ERROR; /* make sure no vehicle is on the tile. */ - if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(tile + delta) || !EnsureNoVehicle(tile - delta)) + if (!EnsureNoVehicleOnGround(tile) || !EnsureNoVehicleOnGround(tile + delta) || !EnsureNoVehicleOnGround(tile - delta)) return CMD_ERROR; if (flags & DC_EXEC) { @@ -302,7 +303,7 @@ } /* Make sure no vehicle is on the tile */ - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (GetTileOwner(tile) != OWNER_WATER && GetTileOwner(tile) != OWNER_NONE && !CheckTileOwnership(tile)) return CMD_ERROR; @@ -313,7 +314,7 @@ Slope slope = GetTileSlope(tile, NULL); /* Make sure no vehicle is on the tile */ - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (flags & DC_EXEC) DoClearSquare(tile); if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) { @@ -457,7 +458,7 @@ switch (GetWaterTileType(ti->tile)) { case WATER_TILE_CLEAR: DrawGroundSprite(SPR_FLAT_WATER_TILE, PAL_NONE); - if (ti->z != 0 || !IsTileOwner(ti->tile, OWNER_WATER)) DrawCanalWater(ti->tile); + if (IsCanal(ti->tile)) DrawCanalWater(ti->tile); DrawBridgeMiddle(ti); break; @@ -517,7 +518,7 @@ { switch (GetWaterTileType(tile)) { case WATER_TILE_CLEAR: - if (TilePixelHeight(tile) == 0 || IsTileOwner(tile, OWNER_WATER)) { + if (!IsCanal(tile)) { td->str = STR_3804_WATER; } else { td->str = STR_LANDINFO_CANAL; @@ -708,7 +709,12 @@ } } -/** called from tunnelbridge_cmd, and by TileLoop_Industry() */ +/** + * Let a water tile floods its diagonal adjoining tiles + * called from tunnelbridge_cmd, and by TileLoop_Industry() + * + * @param tile the water/shore tile that floods + */ void TileLoop_Water(TileIndex tile) { static const TileIndexDiffC _tile_loop_offs_array[][5] = { @@ -719,9 +725,12 @@ {{ 0, -1}, {0, 0}, {1, 0}, { 0, -1}, { 1, -1}} }; - /* Ensure sea-level canals and buoys on canal borders do not flood */ - if ((IsTileType(tile, MP_WATER) || IsBuoyTile(tile)) && !IsTileOwner(tile, OWNER_WATER)) return; + /* Ensure buoys on canal borders do not flood */ + if (IsCanalBuoyTile(tile)) return; + /* Ensure only sea and coast floods, not canals or rivers */ + if (IsTileType(tile, MP_WATER) && !(IsSea(tile) || IsCoast(tile))) return; + /* floods in all four diagonal directions with the exception of the edges */ if (IS_INT_INSIDE(TileX(tile), 1, MapSizeX() - 3 + 1) && IS_INT_INSIDE(TileY(tile), 1, MapSizeY() - 3 + 1)) { uint i; @@ -730,6 +739,7 @@ TileLoopWaterHelper(tile, _tile_loop_offs_array[i]); } } + /* _current_player can be changed by TileLoopWaterHelper.. reset it back here */ _current_player = OWNER_NONE; @@ -807,7 +817,7 @@ static CommandCost TerraformTile_Water(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) { /* Canals can't be terraformed */ - if (IsClearWaterTile(tile) && IsCanal(tile)) return_cmd_error(STR_MUST_DEMOLISH_CANAL_FIRST); + if (IsWaterTile(tile) && IsCanal(tile)) return_cmd_error(STR_MUST_DEMOLISH_CANAL_FIRST); return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); } diff -r 2c27f9be3fb9 -r f82a4facea8b src/water_map.h --- a/src/water_map.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/water_map.h Sat Oct 20 10:42:28 2007 +0000 @@ -27,6 +27,8 @@ static inline WaterTileType GetWaterTileType(TileIndex t) { + assert(IsTileType(t, MP_WATER)); + if (_m[t].m5 == 0) return WATER_TILE_CLEAR; if (_m[t].m5 == 1) return WATER_TILE_COAST; if (IS_INT_INSIDE(_m[t].m5, LOCK_MIDDLE, LOCK_END)) return WATER_TILE_LOCK; @@ -35,11 +37,19 @@ return WATER_TILE_DEPOT; } +/** IsWater return true if any type of clear water like ocean, river, canal */ static inline bool IsWater(TileIndex t) { return GetWaterTileType(t) == WATER_TILE_CLEAR; } +static inline bool IsSea(TileIndex t) +{ + if (GetWaterTileType(t) != WATER_TILE_CLEAR) return false; + if (!IsTileOwner(t, OWNER_WATER)) return false; // 'Human' built water = canal, not sea + return true; +} + static inline bool IsCoast(TileIndex t) { return GetWaterTileType(t) == WATER_TILE_COAST; @@ -50,9 +60,9 @@ return GetWaterTileType(t) == WATER_TILE_CLEAR && GetTileOwner(t) != OWNER_WATER; } -static inline bool IsClearWaterTile(TileIndex t) +static inline bool IsWaterTile(TileIndex t) { - return IsTileType(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == SLOPE_FLAT; + return IsTileType(t, MP_WATER) && IsWater(t); } static inline TileIndex GetOtherShipDepotTile(TileIndex t) @@ -109,6 +119,7 @@ static inline void MakeCanal(TileIndex t, Owner o) { + assert(o != OWNER_WATER); SetTileType(t, MP_WATER); SetTileOwner(t, o); _m[t].m2 = 0; diff -r 2c27f9be3fb9 -r f82a4facea8b src/waypoint.cpp --- a/src/waypoint.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/waypoint.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -175,7 +175,7 @@ } if (!CheckTileOwnership(tile)) return CMD_ERROR; - if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; tileh = GetTileSlope(tile, NULL); if (tileh != SLOPE_FLAT && @@ -197,7 +197,20 @@ wp->string = STR_NULL; wp->town_cn = 0; } else if (flags & DC_EXEC) { - /* move existing (recently deleted) waypoint to the new location */ + /* Move existing (recently deleted) waypoint to the new location */ + + /* First we update the destination for all vehicles that + * have the old waypoint in their orders. */ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->type == VEH_TRAIN && + v->First() == v && + v->current_order.type == OT_GOTO_WAYPOINT && + v->dest_tile == wp->xy) { + v->dest_tile = tile; + } + } + RedrawWaypointSign(wp); wp->xy = tile; } @@ -263,7 +276,7 @@ if (!IsTileType(tile, MP_RAILWAY) || !IsRailWaypoint(tile) || (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) || - !EnsureNoVehicle(tile)) { + !EnsureNoVehicleOnGround(tile)) { return CMD_ERROR; } diff -r 2c27f9be3fb9 -r f82a4facea8b src/window.cpp --- a/src/window.cpp Sat Oct 20 10:14:05 2007 +0000 +++ b/src/window.cpp Sat Oct 20 10:42:28 2007 +0000 @@ -843,23 +843,35 @@ } } +/** + * Set the x and y coordinates of a new window. + * + * @param *desc The pointer to the WindowDesc to be created + * @param window_number the window number of the new window + * @param data arbitrary data that is send with the WE_CREATE message + * + * @return see Window pointer of the newly created window + */ static Window *LocalAllocateWindowDesc(const WindowDesc *desc, int window_number, void *data) { Point pt; Window *w; /* By default position a child window at an offset of 10/10 of its parent. + * With the exception of WC_BUILD_TOOLBAR (build railway/roads/ship docks/airports) + * and WC_SCEN_LAND_GEN (landscaping). Whose child window has an offset of 0/36 of + * its parent. So it's exactly under the parent toolbar and no buttons will be covered. * However if it falls too extremely outside window positions, reposition * it to an automatic place */ if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ && (w = FindWindowById(desc->parent_cls, window_number)) != NULL && w->left < _screen.width - 20 && w->left > -60 && w->top < _screen.height - 20) { - pt.x = w->left + 10; + pt.x = w->left + ((desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) ? 0 : 10); if (pt.x > _screen.width + 10 - desc->default_width) { pt.x = (_screen.width + 10 - desc->default_width) - 20; } - pt.y = w->top + 10; + pt.y = w->top + ((desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) ? 36 : 10); } else { switch (desc->left) { case WDP_ALIGN_TBR: { /* Align the right side with the top toolbar */ @@ -1454,6 +1466,13 @@ w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); + if (WP(w, vp_d).follow_vehicle != INVALID_VEHICLE && w == FindWindowById(WC_MAIN_WINDOW, 0)) { + /* If the main window is following a vehicle, then first let go of it! */ + const Vehicle *veh = GetVehicle(WP(w, vp_d).follow_vehicle); + ScrollMainWindowTo(veh->x_pos, veh->y_pos, true); /* This also resets follow_vehicle */ + return true; + } + if (!(_right_button_down || scrollwheel_scrolling) || w == NULL) { _cursor.fix_at = false; _scrolling_viewport = false; diff -r 2c27f9be3fb9 -r f82a4facea8b src/window.h --- a/src/window.h Sat Oct 20 10:14:05 2007 +0000 +++ b/src/window.h Sat Oct 20 10:42:28 2007 +0000 @@ -390,9 +390,10 @@ }; assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(smallmap_d)); +/* player face selection window */ struct facesel_d { - uint32 face; - byte gender; + PlayerFace face; // player face bits + bool advanced; // advance player face selection window }; assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(facesel_d));